我有一个Linux用户 (user2),设置了shell为/usr/sbin/nologin
(以阻止登录),当我尝试使用sudo su user2
切换到该用户时,会提示该帐户不可用。但是当我使用sudo -su user
时,却可以正常使用。
su
和-su
之间有什么不同?或者说-su
表示什么意思?我尝试使用-h
、--help
或手册进行查找,但没有找到有用的信息。
我有一个Linux用户 (user2),设置了shell为/usr/sbin/nologin
(以阻止登录),当我尝试使用sudo su user2
切换到该用户时,会提示该帐户不可用。但是当我使用sudo -su user
时,却可以正常使用。
su
和-su
之间有什么不同?或者说-su
表示什么意思?我尝试使用-h
、--help
或手册进行查找,但没有找到有用的信息。
sudo -su user
等同于 sudo -s -u user
。 -s
选项表示要运行在环境变量SHELL
中指定的shell(如果已设置),否则是用户的登录shell。 -u user
选项表示要以特定用户而非root用户身份运行命令。有关这些选项的详细信息,请参见man sudo
。
sudo su user
将使用sudo
作为root用户来运行命令su user
。然后,su
命令将调用指定用户名的登录shell。可以不使用sudo
来运行su user
命令,但通过以root身份运行它,它不需要目标用户的密码。有关详细信息,请参见man su
。
所以两个命令看起来相似(主要是偶然的),当目标用户具有与调用用户相同的登录shell时,它们会产生类似的效果。然而,在调用用户的环境中设置了SHELL
环境变量(通常是/bin/bash),并且目标用户具有与此不同的登录shell(例如/usr/sbin/nologin)的情况下,这两个命令执行的shell不同,这就是你所看到的区别。
-s
选项表示使用调用者的 shell。 - stark