Có thể ngăn bất kỳ người dùng nào không sử dụng các lệnh như ls, rm và các lệnh hệ thống khác có thể gây hại cho hệ thống. Nhưng người dùng sẽ có thể thực hiện các chương trình shell.
ls
lệnh nguy hiểm !
Có thể ngăn bất kỳ người dùng nào không sử dụng các lệnh như ls, rm và các lệnh hệ thống khác có thể gây hại cho hệ thống. Nhưng người dùng sẽ có thể thực hiện các chương trình shell.
ls
lệnh nguy hiểm !
Câu trả lời:
Câu hỏi của bạn nên là:
Tôi không tin tưởng người dùng của mình. Những người câm nhìn thấy một cái gì đó trên internet và thử nó mà không hiểu những gì nó làm. Những kẻ ranh ma thích rình mò và xem các tập tin của người khác và đánh cắp ý tưởng của họ. Và những kẻ lười biếng, đừng bắt tôi phải lười biếng.
Làm cách nào để bảo vệ hệ thống của tôi và người dùng của tôi khỏi người dùng của tôi?
Đầu tiên, unix có một hệ thống cấp phép hệ thống tập tin rất toàn diện. Đây có vẻ là một hướng dẫn tốt về quyền hệ thống tập tin unix . Điểm chính của điều này là các thư mục có thể được đặt sao cho người dùng có thể vào một thư mục và có thể chạy các chương trình ra khỏi thư mục đó nhưng không thể xem nội dung của thư mục đó. Nếu bạn làm điều này, ví dụ, trên / home, nếu người dùng chạy ls on / home, họ sẽ nhận được lỗi từ chối cấp phép.
Nếu bạn thực sự sợ người dùng của mình và muốn gắn bó họ trong một loại môi trường bị hạn chế của siêu thị , hãy sử dụng một cái gì đó như nhà tù của freebsd hoặc solaris - mỗi người dùng có môi trường được thiết kế riêng. Đối với các điểm được thêm vào, hãy sử dụng ZFS để bạn có thể chụp ảnh môi trường khi họ đăng nhập để nếu họ xóa các tệp của họ, bạn chỉ cần kéo chúng ra khỏi ảnh chụp nhanh.
Có ba điều cần phải có để thực hiện đầy đủ những gì bạn yêu cầu:
Thắt lưng, treo, và một cây súng ngắn cho biện pháp tốt. Khó đi nhầm đấy.
AppArmor rất thú vị vì MAC cho một tệp thực thi cụ thể được kế thừa bởi tất cả các con của nó. Đặt thông tin đăng nhập của người dùng thành /bin/bash-bob
, đặt hồ sơ AppArmor cho quyền nhị phân cụ thể đó và cách duy nhất họ thoát khỏi nhà tù cấp phép đó là thông qua khai thác kernel. Nếu một số tập lệnh cài đặt lười biếng để lại /var/opt/vendor/tmp
có thể ghi được trên toàn cầu vì một lý do ngu ngốc nào đó, người dùng sử dụng /bin/bash-bob
làm vỏ của họ sẽ không thể viết ở đó . Đặt cấu hình bash-bob để chỉ cho phép ghi vào thư mục chính của họ /tmp
và những lỗi cho phép như vậy không thể được tận dụng. Ngay cả khi họ bằng cách nào đó tìm thấy mật khẩu gốc, hồ sơ AppArmor /bin/bash-bob
vẫn sẽ được áp dụng ngay cả sau khi họ su
khởi động su
và bash
quá trình nó sinh ra là con cái /bin/bash-bob
.
Phần khó là xây dựng hồ sơ AppArmor đó.
Theo tôi, bạn chỉ cần bước 2 và 3, vì kết hợp cả hai đều ngăn khả năng làm bất cứ điều gì có hại ngoài hộp được xây dựng cẩn thận mà bạn thiết lập trong cả hai bước đó.
Chà, bạn có thể đặt shell của người dùng thành chương trình bạn đã viết chỉ cho phép họ chạy các tập lệnh shell nhất định.
Tất nhiên điều này sẽ chỉ an toàn như các kịch bản chương trình và shell; trong thực tế, loại vỏ bị hạn chế này thường không an toàn trước kẻ tấn công thông minh.
Đừng thử và giới hạn các lệnh, giới hạn quyền truy cập tệp. Bạn thực tế không thể giới hạn quyền truy cập của mọi người vào các tòa nhà, vì vậy tất cả những gì ai đó cần làm là cung cấp bản sao của riêng họ về bất kỳ lệnh "nguy hiểm" nào mà bạn không muốn họ thực thi và bạn bị nhồi nhét.
Nếu bạn muốn người dùng chỉ có thể thực thi các tập lệnh / nhị phân nhất định, bạn có thể sử dụng trình bao bị hạn chế . Điều này (như bài viết trên Wikipedia đề cập) không hoàn toàn an toàn, nhưng nếu bạn có thể đảm bảo rằng không có ứng dụng nào được phép chạy có thể thực thi một trình bao mới thì đó là một lựa chọn tốt.
Để thiết lập trình bao giới hạn người dùng, hãy đặt /bin/rbash
(hoặc tương tự, hầu hết các trình bao vào chế độ hạn chế khi tệp nhị phân được đặt tên r *** name *) làm trình bao người dùng. Sau đó, chỉnh sửa **. Bashrc (hoặc tương đương) và đặt $PATH
vào thư mục lưu trữ tất cả các tệp nhị phân / tập lệnh được phép.
Vâng, điều đó là có thể, nhưng trong thực tế, nó sẽ tốn rất nhiều công sức và kế hoạch. Bạn có thể tạo tập lệnh và để chúng chạy như một cách sử dụng đặc quyền, sau đó xóa tất cả các đặc quyền khỏi người dùng được đề cập. Hoặc, bạn có thể đặt vỏ của người dùng thành thứ gì đó của riêng bạn, cho phép họ chỉ làm những gì bạn cho phép rõ ràng.
Tuy nhiên, các quyền tiêu chuẩn trong linux khiến người dùng bình thường gần như không thể "làm hại hệ thống". Những loại tác hại bạn đang cố gắng ngăn chặn? Việc ngăn người dùng không thể cài đặt phần mềm hoặc chạy các chương trình bên ngoài thư mục chính của họ là chuyện nhỏ và bạn có thể sử dụng chroot để khóa hệ thống hơn nữa.
Bạn có thể muốn thử [lshell] [1] (vỏ giới hạn).
lshell là một trình bao được mã hóa bằng Python, cho phép bạn giới hạn môi trường của người dùng trong các nhóm lệnh giới hạn, chọn bật / tắt bất kỳ lệnh nào qua SSH (ví dụ: SCP, SFTP, rsync, v.v.), ghi nhật ký lệnh của người dùng, thực hiện hạn chế thời gian, và hơn thế nữa.
[1]: http://lshell.ghantoos.org/Overview lshell
Cách tôi thường thực hiện loại hạn chế này yêu cầu một số điều kiện được đáp ứng, nếu không, hạn chế có thể dễ dàng bị phá vỡ:
wheel
nhóm, người duy nhất được phép sử dụng su
(được thi hành thông qua PAM).Người dùng được bảo mật đúng cách rbash
với chỉ đọc PATH
đến riêng tư ~/bin
, ~/bin/
thư mục này chứa các liên kết đến các tiện ích đơn giản:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
người dùng sẽ được cung cấp một hạn chế, read-only môi trường (nghĩ về những thứ như thế LESSSECURE
, TMOUT
, HISTFILE
biến).
staff_u
và được cấp quyền thực thi các lệnh như người dùng khác theo yêu cầu thông qua sudo
.người dùng là /home
, /tmp
và có thể /var/tmp
được polyinstantiated qua /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Ngoài ra, /etc/security/namespace.init
làm cho tất cả các tập tin bộ xương chỉ đọc cho người dùng và sở hữu bởi root
.
Bằng cách này, bạn có thể chọn có $USER
thể thực hiện bất kỳ lệnh nào thay mặt mình (thông qua một liên kết trong ~/bin
thư mục riêng , được cung cấp qua /etc/skel
, như được giải thích ở trên), thay mặt cho người dùng khác (thông qua sudo
) hoặc không có gì cả.