![sudo su “用户名” 与 su “用户名”](https://linux22.com/image/1428213/sudo%20su%20%E2%80%9C%E7%94%A8%E6%88%B7%E5%90%8D%E2%80%9D%20%E4%B8%8E%20su%20%E2%80%9C%E7%94%A8%E6%88%B7%E5%90%8D%E2%80%9D.png)
请解释一下:sudo su“用户名”对阵su“用户名”
哪个权限更高?如果我使用 root 身份登录sudo su“用户名”,我只能以 root 身份执行一条命令?所以,脚本的开头部分可以正常工作,但其余部分不能正常工作?那么在这种情况下su“用户名”建议,因为它具有更高的权限?请解释一下这两个命令之间的区别,谢谢。
答案1
区别如下:
su <someuser>
为用户 启动 shellsomeuser
。除非您是 root 用户,否则系统会要求您输入 的密码someuser
。su
(无用户名)为用户启动一个 shellroot
(询问 root 密码后)。sudo
要求您输入密码并(假设您具有 sudo 权限)以 root 权限执行命令(sudo reboot
要求您输入密码并重新启动计算机)。sudo su <somesuer>
以 root 权限执行su
。因此它不会要求someuser
输入密码。但它会要求输入你的密码来验证你的 sudo 权限。之后它将启动一个 shell对于用户 someuser。
就特权而言sudo su <someuser>
,对于由或 由打开的 shell 来说没有区别su <someuser>
。这不是一个安全问题,因为 shell 进程无法升级到父进程的权限。
你能如果你查看进程树,就会发现差异。sudo su <someuser>
显示(假设是 bash):
+───bash───su───bash
同时su <someuser>
显示:
+───bash───sudo───su───bash
您的下一个问题可能是如何在无人值守的脚本中传递密码,该脚本不需要用户输入。我认为有两种选择:
- 从 cron(或其任何变体)运行脚本并以 root 身份运行
- 从您自己的帐户运行脚本并使用 sudo 的 -S 选项,如下所示:
echo <yourpassword> | sudo -S su -l <someuser>
或者更好的是:echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
。确保脚本只有您自己可读,因为您的密码就在里面。更间接的是,您可以将密码存储在一个文件中,然后将其 cat 到 sudo。这样您的脚本就可以读取,但您的密码文件则不能读取。