概要
sudoコマンドにより、コマンドの実行単位でroot権限を与えることができます。
しかし、誰でもsudoでコマンドを実行できてしまうとセキュリティ上のリスクなどがあります。
本記事では/etc/sudoers.d/
を編集することで特定コマンドのみsudoが利用できるようにする方法を記載します。
手順
確認用のユーザを二人作成します。inu
はどのコマンドに対してもsudo
できるようにしますが、neko
には一部のコマンドのみsudo
できるようにします。
$ sudo useradd neko
$ sudo useradd inu
$ cat /etc/passwd
neko:x:1005:1006::/home/neko:/bin/bash
inu:x:1006:1007::/home/inu:/bin/bash
passwordを設定します。
sudo passwd inu
sudo passwd neko
inu
ユーザに切り替えます。
sudo su - inu
/etc/shadow
というroot以外は見れないファイルを表示しようとするとエラーになります。
cat /etc/shadow
cat: /etc/shadow: Permission denied
sudoで実行しようとすると、inu
ユーザはそのままではsudo
が使用できないためエラーとなります。
$ sudo cat /etc/shadow
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for inu:
inu is not in the sudoers file. This incident will be reported.
そこでinu
をwheel
グループに追加します。wheel
グループは管理者用のグループで
所属していれば、sudoが使えます。
$ sudo usermod -aG wheel inu
$ id inu
uid=1006(inu) gid=1007(inu) groups=1007(inu),10(wheel)
再度実行すると表示できます。inu
はsudo
できるようになりました。
$ sudo cat /etc/shadow
[sudo] password for inu:
neko:$6$JgG4FEzR$qS5shTmSRELEOouzpKxU8OnekhYQt0x9Lk57m5GK8o7fYpIT/Hq652cjK6Lh5IN4dKWWOqK4Gp6WGxBX59ghc/:19806:0:99999:7:::
inu:$6$6G50Hray$nTLrHZ2XCqI7NDcPHyKPkG33Bf3P3SuZes4GvUj0sYXjIEkei4Lvjpj8UavlQvd5YzSdfKuty.BcB0L4O6wGi0:19806:0:99999:7:::
では次にneko
に特定のコマンドのみsudo実行ようにします。
/etc/sudoers.d
以下にファイルを作成します。visudo
はsudoers
を編集するためのコマンドです。
$ sudo visudo -f /etc/sudoers.d/allow_command
viが開いたら、以下のように記載します。
ここではcat /etc/shadow
のみ実行できるようにします。
Cmnd_Alias ALLOW_SUDO = /bin/cat /etc/shadow
neko ALL=ALLOW_SUDO
neko
に切り替えてから、sudo cat /etc/shadow
を実行すると
エラーなく実行できます。
$ sudo su - neko
$ sudo cat /etc/shadow
neko:$6$JgG4FEzR$qS5shTmSRELEOouzpKxU8OnekhYQt0x9Lk57m5GK8o7fYpIT/Hq652cjK6Lh5IN4dKWWOqK4Gp6WGxBX59ghc/:19806:0:99999:7:::
inu:$6$6G50Hray$nTLrHZ2XCqI7NDcPHyKPkG33Bf3P3SuZes4GvUj0sYXjIEkei4Lvjpj8UavlQvd5YzSdfKuty.BcB0L4O6wGi0:19806:0:99999:7:::
ですが、allow_command
以外のコマンドでsudo
しようとするとエラーになります。
neko
のsudo
できるコマンドに制限が出来ました。
$ sudo useradd taro
Sorry, user neko is not allowed to execute '/sbin/useradd taro' as root
参考資料