编辑/ etc / sudoers以允许Winbind Group成员仅向一个本地用户sudo

我有多个需要连接到Active Directory进行用户管理的Ubuntu Linux主机(不幸的是,实际的LDAP服务器不是这里的选项……)并且已配置Winbind来处理身份validation,我的%sudoers组条目工作正常:

 ## Allow AD members of the service group restricted user access to that account %sudoers ALL=(ALL:ALL) NOPASSWD:ALL 

我在ssh配置中允许密码validation,并在帐户的sudoers文件中添加了以下条目:

 %service ALL=(service:service) NOPASSWD:ALL 

即使sudoers组和service组在AD服务器上的目录树中处于同一级别,这甚至都找不到该组。 我这样做的时候:

 %domain.local\\service ALL=(ALL:ALL) NOPASSWD:ALL 

service组的成员能够登录并拥有完整的sudo权限,包括root,这是不可接受的,并且已经被sudoers组和条目覆盖。 或者当我这样做时:

 %domain.local\\service ALL=(service:service) NOPASSWD:ALL 

…成员无法向任何用户sudo。 对于服务用户,这里是服务用户的/ etc / passwd条目:

 service:x:1001:16777230::/opt/service:/bin/bash 

根据Sudoers Man Page,这最后一个条目应该可行,但由于某种原因它不会。 此外, %service还应该涵盖本地和AD提供的成员资格,但似乎没有。 当我创建此用户时,因为目录服务器中已有一个名为service的组,这里是我创建service用户帐户的方式:

 useradd -d /opt/service -g service service 

以下是该组成员的sudo -l输出:

 [user.test@server ~]$ sudo -l Matching Defaults entries for user.test on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User user.test may run the following commands on this host: (service : service) NOPASSWD: /opt/service 

我在这里缺少什么?

我找到了解决方案。 我们需要为service用户的家设置登录shell和sudoers条目的路径,如下所示:

 %domain.local\\service ALL=(service) NOPASSWD:/bin/bash, /opt/service/* 

现在我们可以输入以下内容成为service用户:

 $ sudo -i -u service $ whoami service $ pwd /opt/service