「x_users」というLinuxセキュリティグループのメンバーである権限のないユーザーセット(user01、user02、user03 ...)があるとします。
$ groups user01
user01 : user01 x_users
また、「x_admins」というLinuxセキュリティグループのメンバーである管理者ユーザーセット(admin01、admin02、admin03 ...)があるとします。
$ groups admin01
admin01 : admin01 x_admins
x_adminグループのすべてのメンバーがx_usersグループのメンバーであるすべてのユーザーと同様に、sudo(8)とsu(1)を使用して対話型ログインシェルを呼び出すことができることを願っています。たとえば、次のようになります。
[admin01 ~]$ sudo su - user01
[user01 ~]$ # do stuff as user01
[user01 ~]$ exit
[admin01 ~]$
x_adminsグループのメンバーは、x_usersグループのメンバーではないユーザーに対して対話型ログインシェルを呼び出すためにsudo(8)とsu(1)を使用しないでください。
[admin01 ~]$ sudo su - nonxuser
[sudo] password for admin01:
Sorry, user admin01 is not allowed to execute '/bin/su - nonxuser' as root on localhost
[admin01 ~]$
これを達成する1つの方法は、次のように "/etc/sudoers.d/x_admins"設定ファイルを作成することです。
# /etc/sudoers.d/x_admins
User_Alias ADMINS = %x_admins, %wheel
ADMINS ALL = (root) /bin/su - user01
ADMINS ALL = (root) /bin/su - user02
ADMINS ALL = (root) /bin/su - user03
# ...
もちろん、sudoers 構成ファイルに x_users グループの個々のメンバーを手動でリストするのは面倒でエラーが発生しやすいです。 sudoers設定ファイルでこれを行うよりきれいな方法はありますか?
答え1
必要なものをより厳密に達成する1つの方法は、adminsグループのユーザーが "sudo"を使用してusersグループのユーザーとして直接コマンドを実行できるようにすることです。これは、おおよそ/etc/sudoersに以下を追加することで実現できます。
%x_admins ALL = (%x_users) ALL
その後、管理者は次のコマンドを使用してユーザー "user0" のコマンドを実行できます。
sudo -u user0 command...
このユーザーにフルシェルアクセス権を取得するには、管理者は次のコマンドを使用できます。
sudo -i -u user0
これにより、管理者がrootとして何も実行する必要がなくなります。 「su」も同様です。