グループAのメンバーにグループBユーザーアカウントへの「sudo su」アクセスを許可する

グループAのメンバーにグループBユーザーアカウントへの「sudo su」アクセスを許可する

「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」も同様です。

関連情報