Dis*_*sha 0 bash user-management
当从 1 个非 root 用户切换到另一个并运行如下命令时 -
beta> exit; sudo su - alpha
Run Code Online (Sandbox Code Playgroud)
或者
beta> exit && sudo su - alpha
Run Code Online (Sandbox Code Playgroud)
但它只注销而不切换用户。
如何做到这一点?
Eli*_*gan 10
exit
退出正在运行的 shell。但是这个 shell 将运行任何后续命令。所以下一个命令不会运行。
对于交互式使用,当您开始使用的 shell 是初始登录 shell 时,您可能只需注销并重新登录,分两步即可。
对于脚本,以及在初始登录 shell 之外的交互式使用,最好的做法取决于具体情况。希望实现注销和背部在从壳是的效果不初始登录shell(无论在脚本或以其他方式)是不寻常的。即使您设法做到了,它也可能不是解决您正在解决的任何潜在问题的最佳方法。
您可以使用以其他用户身份运行并模拟初始登录 shell 的新 shell替换当前 shell。当您当前的 shell 是初始登录 shell 时,这与注销和重新登录的效果大致相同。它也没有比仅注销和重新登录容易得多,我建议改为这样做。
但是,如果您想这样做,那么目标用户alpha
在您的示例中的位置:
exec su - alpha # enter alpha's password
Run Code Online (Sandbox Code Playgroud)
默认情况下,su
您只能尝试输入目标用户的密码一次。如果您输入错误,您会得到su: Authentication failure
并su
退出。但是你的 shell 不再等待su
命令的结果;事实上,它根本不再运行。所以就好像你已经使用了exit
. 但是,如果您正确输入密码,它就可以工作。
如果你想用sudo
做切换,那么你输入你的密码而不是目标用户的密码(而且你必须是一个sudoer):
exec sudo -iu alpha # enter your password
Run Code Online (Sandbox Code Playgroud)
如果您输入错误的密码,您的原始 shell 不再存在的相同问题仍然适用。但默认情况下sudo
,您会多次尝试输入密码。
如果你真的想同时使用sudo
and su
,虽然没有必要:
exec sudo su - alpha # enter your password
Run Code Online (Sandbox Code Playgroud)
把exec
首先使你的shell来代替自己与新运行命令,而不是等待该命令完成。