我们如何编写shell脚本来成为root?也就是说,我不想在提示时输入密码,它应该在脚本本身内。我试图做但未能做到这一点。是否可能,如果是,请解释。
答案1
您可以使用编写脚本预计工具。
在Redhat中,expect包是默认的。但在 Ubuntu 中你需要单独安装它。
您可以使用命令来检查:
$ rpm -qa | grep expect
对于红帽
$ dpkg -l expect
对于Ubuntu
以下脚本将完成您的工作:
#!/usr/bin/expect
spawn su -
expect "Password: "
send "password\r"
interact
答案2
将 root 密码的明文存储在文件中是本质上是危险的- 有很多途径可以恢复它。
这似乎是一个 XY 问题。
unixy 的权限委托方式是通过 setuid 位 - 但这只能应用于二进制可执行文件,而不能应用于 shell 脚本。正如 jordanm 所说,将 setuid 应用于 shell 本身是非常危险的 - 这就是 sudo 存在的原因 - 它有一个 setuid 位并根据 sudoers 文件验证用户请求,以对访问进行细粒度控制。但 sudo 也有一些问题。
答案3
最简单的方法是制作 shell 的 suid 副本:
cp /bin/bash $HOME/bin/becomeroot
sudo chown root $HOME/bin/becomeroot
sudo chmod 4750 $HOME/bin/becomeroot
hash -r
然后,运行becomeroot
将启动一个以 root 身份运行的 bash 子 shell。
然而,如果我没有给你这个建议,那就是我的失职:不要这样做。让恶意软件如此轻易地将其权限升级为 root 是不明智的。相反,每当您需要以 root 身份运行某些东西时,只需安装sudo
并学习使用它即可。
答案4
您可以设置 SUID 粘滞位:
chmod 2664 your-file
这将导致软件以文件所有者的身份运行。当然,您必须将所有权更改为 root:
sudo chown root your-file
(假设您在 sudoers 文件中找到,并且您已经安装了 sudo)