Làm thế nào để ngăn chặn người dùng mới làm bất cứ điều gì nguy hiểm?


31

Gần đây tôi đã cài đặt máy chủ Ubuntu trên máy chủ của mình để dùng thử linux với tư cách là người dùng mới. Tôi đã làm theo một hướng dẫn về cách thiết lập máy chủ web nói rằng tôi cần đến chmod 777máy chủ web để nó có thể được ghi vào.

Dù sao, tôi đã tạo một tài khoản mới cho một anh chàng để cho phép anh ta xem một số tệp trên máy chủ mà tôi đã đặt trong thư mục nhà của anh ta:

adduser francis

Sau khi tạo tài khoản, tôi đã kiểm tra xem anh ta có quyền truy cập nào

groups francis

Nó nói "francis: francis", vì vậy không phải là vấn đề tôi nghĩ, ubfox đã không đưa anh ta vào bất kỳ nhóm nào theo mặc định, điều đó có nghĩa, nó tạo ra anh ta không có quyền hạn bảo mật, vì vậy mọi thứ đều ổn và bảnh bao. Một tuần sau, trong nỗi kinh hoàng tuyệt đối và hoàn toàn, tôi phát hiện ra rằng mặc dù anh ta không thể làm những việc như SUDO hoặc lộn xộn trong các thư mục hệ thống, anh ta có quyền truy cập đầy đủ vào hầu hết mọi thứ khác trên máy chủ. Ví dụ: anh ta có quyền truy cập đọc / ghi đầy đủ vào các tệp máy chủ web của tôi tại / var / www (và do đó mật khẩu được lưu trong tệp cấu hình php, v.v.) mặc dù thư mục đó KHÔNG có trong thư mục chính của anh ta và tôi không bao giờ thêm anh ta vào bất kỳ nhóm nào có thể truy cập vào thư mục đó, tôi cũng không cấp cho anh ta bất kỳ quyền truy cập đặc biệt nào sau khi thực hiện trình thêm.

Dù sao, những gì đang xảy ra ở đây? Làm thế nào để tôi giết quyền truy cập của mình vào bất cứ điều gì quan trọng? Anh ta không thể truy cập những thứ như / media hoặc / var / www. Tôi nghĩ rằng người dùng mới theo mặc định đã ngăn không cho làm bất cứ điều gì nguy hiểm hoặc rình mò nơi họ không nên đến.

Vì vậy, tổng hợp lại, tôi chỉ cần cho phép anh ta truy cập vào các thư mục mà tôi chỉ định thủ công + cho các thư mục mà anh ta cần để hoạt động đúng (thư mục nhà của anh ta, vim, nano, v.v.)

Cảm ơn bạn


30
Bạn đang làm chmod 777 và hỏi tại sao mọi người có thể đọc viết ở đó? đọc trang người đàn ông cho chmod
Anwar

16
Vâng, 777 là vấn đề của bạn, vì nhiều lý do.
Android Dev

21
@Askerman - Không, khi bạn cung cấp cho 777, tất cả mọi người có thể truy cập tất cả mọi thứ , xin vui lòng cho này một đọc: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
Tất cả chúng ta đều mắc lỗi, đặc biệt là khi chúng ta học trong một môi trường hoàn toàn mới. Đây là một điều tốt để học hỏi, chắc chắn sẽ rất khôn ngoan khi làm sáng tỏ quan niệm của bạn về cách mọi thứ hoạt động trong Windows khi sử dụng HĐH dựa trên Linux. Sau khi hoàn nguyên các quyền của bạn, bạn sẽ nhận thấy rằng người dùng không thể thay đổi bất cứ điều gì họ không thể làm được. Nếu bạn sử dụng chmodở nơi khác, bạn có thể có vấn đề khác mặc dù.
Arronical

8
FYI- Tôi đang nâng cao câu hỏi này bởi vì đây thực sự là một câu hỏi hay cho những người mới tìm thấy. Và quan niệm sai lầm này có lẽ phổ biến hơn chúng ta nghĩ. Đây cũng là một ví dụ tốt về lý do tại sao bạn không nên sao chép các lệnh bạn tìm thấy trên internet (ngay cả ở đây) mà không biết chúng làm gì.
Aaron

Câu trả lời:


40

Đây là như thiết kế. Và tệ hơn nữa. chmod 777 có nghĩa là ... "Tôi muốn chủ sở hữu, bất kỳ ai trong nhóm của anh ấy và bất kỳ ai cũng có quyền đọc, viết và thực thi quyền"

Mà là khá khủng khiếp.

Và đối với một máy chủ web, 777 là không tối ưu. 755 (Chủ sở hữu có nhóm quyền đầy đủ và những người khác đã đọc + thực thi) là một mặc định phổ biến nhưng từ những gì bạn đã nói bạn muốn ít nhất là đọc-ghi hoặc thực thi đọc-ghi cho chủ sở hữu (người dùng máy chủ web) và có thể nhóm và không có quyền cho người dùng. Có một câu hỏi đầy đủ hơn về các mức cấp phép phù hợp trên serverfault nhưng hãy xem xét một số thứ như 640 hoặc 740.

điều đó nói rằng, bạn cũng có thể đưa người dùng vào thế giới nhỏ bé của riêng mình - thiết lập chroot để giữ người dùng trong không gian riêng của mình trong hệ thống. Có những hướng dẫn nổi xung quanh để làm điều này - ví dụ câu trả lời tuyệt vời của oli ở đây có thể là một lựa chọn tùy thuộc vào nhu cầu của bạn.


4
Điểm nhỏ: "chủ sở hữu, bất kỳ ai trong nhóm của anh ấy ..." - chủ sở hữu tệp không nhất thiết phải thuộc về nhóm tệp.
alex_d

2
Tốt đẹp. Tôi thích rằng bạn đã đề cập đến câu trả lời kinh điển trên servfault.
Anh Cả Geek

3
Biệt ngữ lịch sử cho tình huống này là " thế giới có thể đọc / ghi được".
Kaz

19

Về cơ bản, nó bị hỏng như thế này:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Vì vậy, quyền đọc chỉ là 4, đọc và viết sẽ là 6, đọc và thực thi sẽ là 5 và tất cả (đọc, viết, thực thi) là 7. Đây là cách bạn tính giá trị octet cho chủ sở hữu, nhóm chủ sở hữu hoặc tất cả mọi người

Khi áp dụng các quyền đó cho chmodmột vị trí tệp hoặc thư mục, các số được tính ở trên được áp dụng như thế này, với mỗi octet cho chủ sở hữu, nhóm và mọi người:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Vì vậy, nếu tôi muốn cho bản thân và nhóm của mình đọc, viết và thực thi quyền đối với thư mục mà tôi sở hữu, nhưng tôi không muốn mọi người thậm chí có thể đọc nó, tôi sẽ sử dụng:

$ chmod 770 myDirectory

Để biết thêm thông tin, hãy kiểm tra trang man cho chmod :

$ man chmod

Nếu bạn không thể nhớ các bit để cộng lại để tạo các quyền phù hợp theo đúng thứ tự, bạn cũng có thể sử dụng dễ đọc hơn chmod ugo+rwx <...>. Các ký tự đại diện cho u ser, g roup, o có; r ead, w nghi thức, e x ecute. Bạn có thể sử dụng '-' để xóa (ví dụ chmod go-wx <...>:). Chỉ cần lưu ý rằng điều này chỉ thêm hoặc loại bỏ chính xác những gì bạn gõ. chmod ugo+rwx <file>; chmod u+rwx <file> không xóa quyền truy cập cho nhóm / khác.
ReactiveRaven

@ReactiveRaven Đó là một điểm tuyệt vời. Nhưng OP rõ ràng đã nhầm lẫn về những gì chmod 777đã làm, vì vậy đó là nơi tôi hướng dẫn lời giải thích của mình.
Aaron

@Zanna Gọi tốt!
Aaron

6

Như những người khác đã đề cập, bạn không nên có quyền được đặt thành 777

Đây là một tài liệu tham khảo hữu ích mà tôi sử dụng.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
Tốt đẹp! Đây là một trợ giúp lớn cho những người (như tôi), những người học trực quan.
Aaron

3

Để chia sẻ tệp với người bạn đã đăng nhập, bạn không cần phải làm gì đặc biệt. Trên bản cài đặt Debian mặc định, người dùng có quyền truy cập vào các thư mục nhà của nhau.

Ví dụ,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Quyền trên thư mục nhà của tôi được đọc (r)truy cập (x) cho bất kỳ người dùng nào trên hệ thống của tôi. Chỉ có tôi cũng có quyền truy cập write (w) .

Ngoài ra, mặc định umasktrên Ubuntu là các tệp và thư mục mà người dùng tạo theo mặc định có thể đọc được . Bạn có thể thiết lập umaskđể 077nếu bạn không muốn điều đó.

Điều này có nghĩa là trong một thiết lập mặc định, nếu người dùng youmuốn chia sẻ tài liệu ~/README.txtvới tôi, thì không youcần phải làm gì. Tôi chỉ có thể xem nó:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Tôi không thể chỉnh sửa hoặc xóa tệp, nhưng tôi có thể sao chép nó vào vị trí mà tôi có quyền ghi. Sau đó, tôi sở hữu bản sao:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Có nhiều lý do tại sao hầu hết các hệ thống đều có thể đọc được trên thế giới theo mặc định, như tôi đã giải thích trong một câu trả lời khác trên AskUbfox . Tuy nhiên, trên một hệ thống được chia sẻ, có thể có ý nghĩa để làm cho các thư mục nhà không thể truy cập được đối với những người không phải là chủ sở hữu:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... vì nhiều người dùng dường như không biết về mặc định - QED ;-). Mặc dù sẽ khôn ngoan hơn khi khiến người dùng biết rằng quyền truy cập tệp không bảo vệ bí mật.


1

Trong Ubuntu, bất kỳ người dùng nào cũng có đặc quyền siêu người dùng được thêm vào nhóm 'sudo', vui lòng kiểm tra để đảm bảo rằng không có người dùng nào khác được thêm vào trong nhóm này.

Để bảo mật các tệp và thư mục của bạn khỏi những người dùng khác, bạn có thể đặt quyền theo đề xuất của ông Journeyman Geek trong câu trả lời ở trên.

Bạn cũng có thể sử dụng các quyền đặc biệt để bảo mật các tệp và thư mục của mình khỏi người khác.

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.