我以身份登录到我的服务器userA
,该用户有一个bash
外壳,一切正常。
然后,出于程序目的,我必须要做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
尤其检查$PATH
是userB
看到。因此,我尝试通过编辑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
?
从sudo
联机帮助页:
-i, --login
Run the shell specified by the target user's password data-
base entry as a login shell.
您的userB/bin/false
作为外壳程序,因此这是运行的命令。
% /bin/false ; echo $?
1
因此,要解决此问题,您需要将userB的shell更改为/bin/bash
(或/bin/sh
您喜欢的任何一种),或者不使用该-i
标志进行sudo。您是否需要登录外壳?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句