Tại sao không nên / var / www có chmod 777


67

Khi phát triển một trang trên localhost, đôi khi tôi gặp phải lỗi "Quyền bị từ chối" mà tôi có thể giải quyết bằng cách chạy chmod -R 777 /var/www. Tuy nhiên, mọi người đang nói với tôi rằng đây là một ý tưởng tồi vì lý do bảo mật.

Tại sao không nên /var/wwwcó một chiếc máy bay 777?


Tôi muốn giới thiệu chủ đề này qua @ serverfault.com. Nó thực hiện một công việc tuyệt vời là đưa ra một thiết lập ví dụ cho apache2 và quyền. serverfault.com/q/6895/57036 PS Tôi không thể nhận xét, vì vậy tôi phải thêm nó làm câu trả lời.
MystaMax

Câu trả lời:


80

777 là một sự cho phép xấu nói chung và tôi sẽ cho bạn thấy lý do tại sao.

Mặc dù nó trông như thế nào trong Sòng bạc hoặc Las Vegas, 777 không có nghĩa là giải độc đắc cho bạn. Thay vào đó, jackpot cho bất cứ ai muốn sửa đổi các tập tin của bạn. 777 (và anh em họ xấu xí 666) cho phép các quyền Đọc và Viết (và trong trường hợp 777, Thực thi) cho người khác . Bạn có thể tìm hiểu thêm về cách hoạt động của quyền truy cập tệp , nhưng tóm lại, có ba nhóm quyền: chủ sở hữu, nhóm và nhóm khác . Bằng cách đặt quyền thành 6 hoặc 7 ( rw-hoặc rwx) cho người khác, bạn cung cấp cho bất kỳ người dùng nào khả năng chỉnh sửa và thao tác với các tệp và thư mục đó. Thông thường, như bạn có thể tưởng tượng, điều này là xấu cho bảo mật.

Đây là ví dụ của tôi:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Cho đến nay tôi đã tạo một thư mục và tạo một tệp có quyền "xấu" (777 và 666). Bây giờ tôi sẽ chuyển sang một người dùng khác và cố gắng thao tác các tệp đó.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Là người dùng "độc hại" này, tôi có thể đặt các tệp vào thư mục và đưa văn bản vào các tệp đã tồn tại. Trong khi bên dưới, trong một thư mục có 755 và các tệp có 644, tôi có thể thấy các tệp và thư mục bên trong nhưng tôi không thể chỉnh sửa các tệp cũng như không tạo các tệp mới:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Đối với quyền của Apache, bạn sẽ muốn bám vào 0755 và 0644 (AKA umask 022) cho các thư mục và tệp tương ứng. Điều này cho phép bạn, với tư cách là chủ sở hữu của các tệp, chỉnh sửa và thao tác chúng trong khi cung cấp cho Apache mức truy cập tối thiểu cần thiết để vận hành.


13
Tôi xin lỗi cho ngôn ngữ nhưng đây là một câu trả lời kick-ass. Cảm ơn bạn Marco.
Luis Alvarado

Điều gì xảy ra nếu bạn chỉ tạo người dùng cho những người được phép quản lý thư mục / var / www một cách tự do? Tôi sử dụng các Máy ảo chuyên dụng cho mỗi máy chủ web mà tôi chạy và tôi tự hỏi liệu nó có còn đúng không khi bạn nên cẩn thận.
UrkoM

1
@UrkoM Bạn không bao giờ có thể quá cẩn thận. Nếu bạn muốn mọi người truy cập vào cùng một tệp, bạn có thể tăng các quyền của nhóm lên 6/7 (0664/0775) và thêm từng người dùng vào nhóm đó. Mặc dù thiết lập này (và một trong những điều tôi đã mô tả trong câu trả lời của mình) không đáp ứng mọi tiêu chí, tôi sẽ nói rằng 90% thời gian tốt 0755/0644 là các quyền bạn sẽ muốn sử dụng. Nếu bạn chỉ có hệ thống "một người dùng" thì nguy cơ có người khác có quyền ghi không phải rủi ro nhiều.
Marco Ceppi

4
@UrkoM Một điều khác cần xem xét là có rất nhiều "người dùng" không đại diện cho người thật nhưng tồn tại để một số dịch vụ có thể chạy với khả năng giảm (chủ yếu vì lý do bảo mật, nhưng cũng để giảm tác hại có thể xảy ra từ một lỗi ổn định). Xem nội dung của /etc/passwdvà bạn sẽ thấy người dùng thích mail, newsnobody. Ngay cả khi tất cả người dùng thực sự trong hệ thống của bạn có thể sửa đổi nội dung của nó /var/www, điều đó không có nghĩa là bạn muốn tất cả các quy trình chạy như những người dùng "nhân tạo" này có thể làm như vậy.
Eliah Kagan

1) Là câu trả lời đơn giản nhất có thể. Không giải thích cách Apache hoặc Nginx có thể thao tác các thư mục hoặc tệp. Apache hoặc Nginx là máy chủ, do đó các ứng dụng, họ không phải là "độc hại" của bạn sử dụng, họ không thể gõ ls -lah, touch badhoặc bất kỳ lệnh khác. Làm thế nào họ có thể thao tác các thư mục và tập tin? 2) Kế thừa. Bạn đã không bao gồm bất kỳ sự kế thừa giữa các thư mục và tập tin trong đó. Có ít nhất 2-3 bước trước một tập tin: /var, /var/www, /var/www/project. Những quyền người dùng / nhóm nên /varcó? Những quyền người dùng / nhóm nên /var/wwwcó? Và như vậy. Họ hợp tác như thế nào?
Màu xanh lá cây

15

Về cơ bản, việc có quyền 777 sẽ không khiến bạn bị hack một mình, nhưng nếu ai đó nhận được sự ủng hộ ở bất cứ đâu, nó có thể được sử dụng để leo thang quyền và giành quyền kiểm soát hoàn toàn máy tính của bạn. Phần tồi tệ nhất là các quyền của bạn đang sử dụng "7" - có nghĩa là đọc, viết và thực thi các quyền.

Giả sử một hacker muốn chiếm lấy máy tính của bạn. Anh ta có thể kết nối với máy tính của bạn bằng trình duyệt web, kết nối với http://yourcomputer.example.com:80/. Nếu bạn có bất kỳ trang nào có sẵn để cho phép anh ta tải lên hình ảnh, anh ta có thể đổi tên một tệp thực thi để kết thúc bằng ".jpg" và tải nó lên máy chủ của bạn. Bây giờ anh ta duyệt tập tin đó trong trình duyệt web của mình và chạy nó, bởi vì linux không quan tâm đến phần mở rộng, nó chỉ thấy rằng đó là một tập tin thực thi. Điều đó có thể không nhận được anh ta nhiều, nhưng vì nó chạy tất cả, anh ta biết nó chạy như người dùng apache. Sau đó, anh ta tải lên một phiên bản sửa đổi sẽ chỉnh sửa các tệp cấu hình của apache, cấp cho anh ta nhiều quyền truy cập hơn - giả sử để apache sẽ xuất nội dung của / etc / passwd. Sau đó anh ta có thể sử dụng thông tin đó để xem những gì người dùng tồn tại trên hệ thống. Sau đó, anh ta có thể kết nối bằng ssh và thử các mật khẩu phổ biến để đăng nhập với tư cách là những người dùng đó - nếu điều đó không hiệu quả, anh ta sẽ đẩy mạnh sử dụng một cuộc tấn công vũ phu đầy đủ. Nếu anh ta vào như một người dùng có quyền truy cập sudo,

Bây giờ, bạn có thể nói rằng điều đó không có khả năng, hoặc đó không phải là cách một hacker thực sự hoạt động. Điều đó là đúng, nhưng vấn đề là bằng cách đặt các tệp thành chmod 777, bạn đã mở một lỗ hổng bảo mật mà tin tặc có thể sử dụng tuy nhiên anh ta thấy phù hợp.

Thay vào đó, nếu bạn tuân theo Nguyên tắc đặc quyền tối thiểu , thì lỗ hổng đó sẽ không xảy ra và hệ thống của bạn khó bị hack hơn nhiều. Mặc dù khó khăn hơn để làm mọi thứ đúng cách, bạn vẫn nên cố gắng hết sức để làm điều đó.


+1 cho "toehold" và "leo thang". Mô tả khái niệm tốt.
Kari Kääriäinen

3
Bạn có thể giải thích làm thế nào một tập tin được ngụy trang thành jpg có thể được thực thi trên máy chủ không?
Anurag Peshne 14/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.