![sudo 命令和 sudo bash -c 命令有什么区别?](https://linux22.com/image/707669/sudo%20%E5%91%BD%E4%BB%A4%E5%92%8C%20sudo%20bash%20-c%20%E5%91%BD%E4%BB%A4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
下面两个命令有什么区别吗?
sudo su - root
和
sudo bash -c 'su - root'
这个问题看上去有点傻,但我相信只允许第二个选项对安全性有一定好处。我只是不知道这样做有什么好处。所以你能给我一些建议吗?
答案1
sudo su
su
直接以超级用户权限启动,而 则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