sudo su “用户名” 与 su “用户名”

sudo su “用户名” 与 su “用户名”

请解释一下:sudo su“用户名”对阵su“用户名”

哪个权限更高?如果我使用 root 身份登录sudo su“用户名”,我只能以 root 身份执行一条命令?所以,脚本的开头部分可以正常工作,但其余部分不能正常工作?那么在这种情况下su“用户名”建议,因为它具有更高的权限?请解释一下这两个命令之间的区别,谢谢。

答案1

区别如下:

  • su <someuser>为用户 启动 shell someuser。除非您是 root 用户,否则系统会要求您输入 的密码someuser
  • su(无用户名)为用户启动一个 shell root(询问 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。这样您的脚本就可以读取,但您的密码文件则不能读取。

相关内容