
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:~#
ルートユーザーへのアクセスをブロックする必要があります。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
言いたいことは伝わったと思います。ルート権限を与える場合、彼らにルートアクセス権を与えることになります。唯一の選択肢は、許可されたコマンドを制限し、その他すべてをブロックします。それでも、コマンドの半分は完全なルート アクセスを取得する方法を持っています。
(AppArmor または SELinux がここで役立つ場合があります。)
答え2
私はおそらく反対のアプローチを提案します。つまり、一部の人に無制限のルート権限を与えるのではなく、sudo
パスワードを指定せずに一部のコマンドを実行できるようにします。これにより、必要な操作は実行できますが、それ以上は実行できなくなります。
ファイル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
。