我已在 sudoers 檔案中授予以下權限。
Cmnd_Alias SUROOT=/bin/su "",\
/bin/su -,\
/bin/su - root,\
/bin/su root,\
/usr/bin/su "",\
/usr/bin/su -,\
/usr/bin/su - root,\
/usr/bin/su root
kj ALL = (ALL) ALL, !SUROOT
當我嘗試訪問sudo su -
其被阻止時
kj@u1804-1:~$ sudo su -
[sudo] password for kj:
Sorry, user kj is not allowed to execute '/bin/su -' as root on u1804-1.
但當我嘗試訪問它時,sudo sudo su -
它允許。
kj@u1804-1:~$ sudo sudo su -
[sudo] password for kj:
root@u1804-1:~#
我需要阻止對 root 使用者的訪問,如何阻止sudo sudo
命令
答案1
您無法透過封鎖單一命令來實現此目的。如果沒有的話也有幾十個數百,人們可以用來成為 root 的指令sudo
:
sudo -s
sudo -i
sudo bash
sudo env su
sudo /bin/sh
sudo env sudo
sudo busybox sh
sudo unshare
sudo chroot /
sudo systemd-run --shell
sudo nvim -c ":terminal"
sudo perl -e 'exec("bash")'
sudo git -c protocol.ext.allow=always ls-remote ext::"bash -c sh<&2>&2"
他們可以重命名被阻止的命令:
sudo cp -a /sbin/su /sbin/really-not-su && sudo really-not-su
他們可以簡單地更改您設定的規則:
sudo nano /etc/sudoers
希望這一點已經被闡明——如果你給人們 root 訪問權限,您正在授予他們 root 存取權。唯一的選擇是有一個列表允許命令並阻止其他一切 - 即便如此,其中一半的命令將有辦法獲得完全的 root 存取權。
(AppArmor 或 SELinux 可能會有所幫助。)
答案2
sudo
我建議也許採取相反的方法:而不是給予某些人無限的 root 權限,而是允許他們在不指定密碼的情況下執行某些命令。這將允許他們執行他們需要執行的操作,但僅此而已。
該sudoers
檔案甚至可以定義命令上允許的參數,還可以使用通配符來允許在命令中包含字串。
Unix Stackexchange 貼文的答案中最好地描述了這個方法
如何在沒有密碼的情況下遠端執行ssh命令和sudo命令。
你可以告訴 sudo 跳過某些指令的密碼。
例如在
/etc/sudoers
archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
這讓我可以使用
sudo -u www-data /bin/rm -rf /var/www/log/upload.*
作為沒有密碼的 archemar。
注意
sudo -u www-data rm -rf /var/www/log/upload.*
不會工作(會詢問密碼),因為
rm
與/bin/rm
.請務必
/etc/sudoers
使用visudo
指令進行編輯。一旦您達到高級水平,您可能希望擁有自己
sudo
的/etc/sudoers.d
.