编辑/ 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