foobar
作为组中的普通用户,users
我希望能够sudo
像任何其他非管理用户(例如raboof:users
)一样运行命令,前提是该用户foobar
知道运行用户的密码。例如,以下应该是可能的:
$ sudo -u raboof echo Hello World!
[sudo] Password for raboof:
$ sudo -g users echo Hello World!
$ sudo -u raboof -g users Hello World!
但否认在上述第二个和第三个变体的情况下sudo
运行。echo Hello World!
我配置的sudo
标准插件sudoers
如下:
User_Alias USER_ADMIN = #0, %#0, %wheel
Runas_Alias RUNAS_ADMIN = #0, %#0, %wheel
User_Alias USER_USER = ALL, !USER_ADMIN
Runas_Alias RUNAS_USER = ALL, !RUNAS_ADMIN
Defaults:USER_USER targetpw
USER_ADMIN ALL = (ALL:ALL) ALL
USER_USER ALL = (RUNAS_USER:RUNAS_USER) ALL
我必须如何配置sudo
插件sudoers
才能使其按照我想要的方式工作?
答案1
经过大量摸索上述Runas_Alias
定义的表达式后,我想出了以下配置,该配置实际上适用于sudo
作为非管理用户调用的所有三种组合(例如raboof:users
):
User_Alias USER_USER = ALL, !#0, !%#0, !%wheel
Runas_Alias RUNAS_USER_USER = ALL, !#0, !%#0, !%wheel
Runas_Alias RUNAS_USER_GROUP = ALL, !#0, !wheel
Defaults:USER_USER targetpw
USER_USER ALL = (RUNAS_USER_USER:RUNAS_USER_GROUP) ALL
foobar $ sudo -u raboof id
uid=1000(raboof) gid=100(users) groups=100(users)
foobar $ sudo -g users id
uid=1000(foobar) gid=100(users) groups=100(users)
foobar $ sudo -u raboof -g users id
uid=1000(raboof) gid=100(users) groups=100(users)
由于某些未知的原因,如下嵌套和否定先前定义的Runas_Alias
定义不起作用:
Runas_Alias RUNAS_ADMIN_USER = #0, %#0, %wheel
Runas_Alias RUNAS_ADMIN_GROUP = #0, wheel
Runas_Alias RUNAS_USER_USER = ALL, !RUNAS_ADMIN_USER
Runas_Alias RUNAS_USER_GROUP = ALL, !RUNAS_ADMIN_GROUP