以另一个无密码用户身份运行命令 - sudo 失败?

以另一个无密码用户身份运行命令 - sudo 失败?

我以 身份登录到我的服务器userA,该用户有一个bashshell,一切正常。

然后,为了程序的目的,我必须这样做sudo adduser --system --home=/home/userB --group userB;从/etc/passwd和的内容来看,该用户显然没有密码/etc/shadow

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false
$ sudo grep userB /etc/shadow
userB:*:16XXX:0:YYYYY:7:::

此外,主目录中没有/home/userB/.profile,也没有任何文件。/home/userB/.bash*userB

现在,当我以 身份登录时userA,我想以 身份运行命令userB,特别是检查$PATHuserB看到的。所以我尝试编辑 via EDITOR=/usr/bin/nano sudo visudo,并添加任一行userA

...
# User privilege specification
root    ALL=(ALL:ALL) ALL
#userA      ALL=(userB) NOPASSWD: /bin/bash
userA       ALL = (userB) NOPASSWD: ALL
...

...然后保存文件,从远程 shell 注销,重新以userA.然后我尝试运行:

$ sudo -iu userB; echo $?
1
$ sudo -S -u userB -i /bin/bash -l -c 'echo $HOME'; echo $?
1
$ sudo -i -u userB echo \$HOME; echo $?
1

...很明显,没有任何效果 - 并且也没有错误。然后我以为我会执行strace以下命令之一,实际上我收到了错误:

$ strace sudo -iu userB
...
write(2, "sudo: effective uid is not 0, is"..., 140sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
) = 140
exit_group(1)                           = ?
+++ exited with 1 +++

但是,nosuid我猜这个根分区上不是问题:

$ mount | grep '/ '
/dev/sdaX on / type ext4 (rw,errors=remount-ro)

所以现在我真的不知道该怎么办。在这种情况下是否可以userA运行命令(例如打印$HOME环境变量)userB- 如果可以,我怎样才能让它工作?

答案1

sudo 中的选项-i尝试创建一个登录 shell,该登录 shell 又启动用户选择的 shell。您已将其设置/bin/false/etc/passwd

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false

尝试运行:

sudo -u userB ls

如果这有效,那么一切都按照您的配置工作。如果您想要一个交互式 shell,请使用-s它,它不会调用用户的登录 shell。

如果您想要完整的登录 shell,则必须使用以下命令更改用户的 shell

sudo chsh -s /bin/bash userB

答案2

sudo联机帮助页:

-i, --login
             Run the shell specified by the target user's password data-
             base entry as a login shell. 

您的 userB 有/bin/falseshell,因此这就是运行的命令。

% /bin/false ; echo $? 
1

因此,要解决此问题,您需要将 userB 的 shell 更改为/bin/bash(或/bin/sh您喜欢的任何内容)或者不要使用-isudo 标志。您需要登录 shell 吗?

相关内容