用戶可以使用“sudo sudo su -”成為root用戶

用戶可以使用“sudo sudo su -”成為root用戶

我已在 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.

相關內容