我有多个 Ubuntu Linux 主机需要连接到 Active Directory 进行用户管理(不幸的是,这里没有实际的 LDAP 服务器选项......)并且已配置 Winbind 来处理身份验证,并且我的%sudoers
组条目工作正常:
## Allow AD members of the service group restricted user access to that account
%sudoers ALL=(ALL:ALL) NOPASSWD:ALL
我已在 ssh 配置中允许密码验证,并已将以下条目添加到该帐户的 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 操作。对于服务用户,以下是该service
用户的 /etc/passwd 条目:
service:x:1001:16777230::/opt/service:/bin/bash
根据Sudoers 手册页这最后一项应该可以工作,但出于某种原因它没有工作。此外,它还%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
我在这里遗漏了什么?
答案1
我找到了解决方案。我们需要设置登录 shell 和service
用户主目录 sudoers 条目的路径,如下所示:
%domain.local\\service ALL=(service) NOPASSWD:/bin/bash, /opt/service/*
现在我们可以输入以下内容来成为用户service
:
$ sudo -i -u service
$ whoami
service
$ pwd
/opt/service