概要
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
参考資料