sudo 命令和 sudo bash -c 命令有什么区别?

sudo 命令和 sudo bash -c 命令有什么区别?

下面两个命令有什么区别吗?

sudo su - root

sudo bash -c 'su - root'

这个问题看上去有点傻,但我相信只允许第二个选项对安全性有一定好处。我只是不知道这样做有什么好处。所以你能给我一些建议吗?

答案1

sudo susu直接以超级用户权限启动,而 则sudo bash先启动 shell,然后用 执行命令bash -c

主要区别在于,.bashrc脚本将在执行命令之前运行su - root。结果取决于此。

用例:

  • bash使用您自己的密码以提升的权限启动:

    sudo bash
    
  • 以用户身份启动 shell root,使用 root 的密码:

    su - root
    
  • 以用户身份启动 shell root,使用你自己的密码:

    sudo su - root
    
  • 所有内容都已涵盖,无需:

    sudo bash -c 'su - root'
    

答案2

Sudo 不允许您本地执行命令重定向;例如,以下操作不起作用 — 写入尝试时权限仍然被拒绝:

sudo echo -e “\x23\x21/usr/bin/sudo /bin/bash\napt-get update\napt-get -y dist-upgrade” > /usr/bin/distupgrade && sudo chmod a+x /usr/bin/distupgrade

将所有内容包装起来可以sudo bash -c解决这个问题:

sudo bash -c “echo -e \”\x23\x21/usr/bin/sudo /bin/bash\napt-get update\napt-get -y dist-upgrade\” > /usr/bin/distupgrade && chmod a+x /usr/bin/distupgrade”

答案3

你应该使用

sudo -i

su 和 sudo 是两种非常不同的提升权限的方式,但最终都允许您以目标用户身份运行命令 - 在您的情况下是 root。

sudo 使用您的用户名和组来决定您是否可以执行命令,而 su 则要求您知道目标用户的密码 - 除了 root 之外,root 可以无需密码成为任何人。

运行时,sudo su - root您需要进行两次身份验证,实际上是为了以 root 身份创建一个 shell,您可以通过运行sudo -i

相关内容