Theo hướng dẫn sử dụng sudoers :
It is generally not effective to "subtract" commands from ALL using the
’!’ operator. A user can trivially circumvent this by copying the
desired command to a different name and then executing that. For
example:
bill ALL = ALL, !SU, !SHELLS
Doesn’t really prevent bill from running the commands listed in SU or
SHELLS since he can simply copy those commands to a different name, or
use a shell escape from an editor or other program. Therefore, these
kind of restrictions should be considered advisory at best (and
reinforced by policy).
Đây là lý do tại sao chính sách sudoers của bạn không hoạt động.
Nếu bạn muốn ngăn người dùng lấy quyền root và thay đổi mật khẩu, hãy thử quy trình này:
Giả sử sudoers của bạn có chứa chỉ thị này:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Giả sử tên người dùng của bạn là foo
, các nhóm của anh ấy foo
và sudo
. groups
đầu ra lệnh là:
foo sudo
Xóa người dùng foo
khỏi sudo
nhóm: gpasswd -d foo sudo
sau này, người dùng foo
không thể chạy bất kỳ lệnh nào với sudo.
Chỉnh sửa tập tin sudoers. Sử dụng lệnh này:
sudo visudo -f /etc/sudoers.d/foo
Xác định sự foo
cho phép của người dùng , ví dụ:
foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
Điều này có nghĩa là người dùng foo
có thể chạy bất kỳ lệnh nào trong thư mục /usr/bin/
ngoại trừ passwd
và su
lệnh. Lưu ý: Nếu người dùng foo
muốn thay đổi mật khẩu của mình, có thể chạy passwd
lệnh mà không cần sudo
.
Một ví dụ khác về sự foo
cho phép của người dùng :
foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
Điều này có nghĩa là người dùng foo
có thể chạy bất kỳ lệnh nào trong thư mục /usr/bin/
và được phép thay đổi mật khẩu của bất kỳ ai ngoại trừ root trên TẤT CẢ các máy.
Bạn có thể xác định các nhóm lệnh bằng cách xác định Cmnd_Aliases
và tạo "cấp độ quyền". Bạn có thể tìm thấy các ví dụ hữu ích trong phần VÍ DỤ của hướng dẫn sử dụng sudoers và đây là một liên kết hữu ích về cách sử dụng sudoers.