关于 sudo su 的简单问题 -

关于 sudo su 的简单问题 -

下列说法有何错误?

[cloudera@localhost zookeeper]$ sudo su - zookeeper
[cloudera@localhost zookeeper]$ whoami
cloudera

回应其中一条评论:

[cloudera@localhost zookeeper]$ cat /etc/passwd | grep zook
zookeeper:x:492:488:ZooKeeper:/var/run/zookeeper:/bin/false
[cloudera@localhost zookeeper]$ cat /etc/passwd | grep cloudera
cloudera-scm:x:497:498:Cloudera Manager:/var/run/cloudera-scm-server:/sbin/nologin
cloudera:x:500:500::/home/cloudera:/bin/bash

答案1

您正在尝试su访问一个用户的 shell 是/bin/false./bin/false总是以代码 1 退出,所以你永远不是那个用户:

$ sudo su - dnsmasq
$ echo $?
1

如果要使用此类已禁用的用户启动 shell,请使用sudo

$ sudo -u dnsmasq /bin/bash
$ whoami
dnsmasq

注意dnsmasq通常有/sbin/nologin(的更礼貌版本false)作为 shell,因此适用相同的原则。

答案2

嗯,sudo su - [user]似乎在这里有效,

$ sudo su - jerk
jerk ~ $ whoami
jerk

尽管 su 手册页说这-应该是最后一个选项

       When - is used, it must be specified as the last su option. The other forms (-l
       and --login) do not have this restriction.

如果我尝试这样做,我会收到这些错误,但是仍然可以以 [用户] 身份登录:

$ sudo su  [user] -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

sudo 能正常工作吗?也许它不起作用……?

相关内容