题
有一个外壳脚本(/ bin / sh的,而不是bash)的需要根权限执行。
如果它是由跑普通用户应该要求用户的密码来获得root权限,然后重新运行本身。
现在它使用以下代码:
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
这工作得很好,但也有一些像Ubuntu操作系统,在所有没有根密码。在另一方面,许多系统使用须藤根权限。
的问题是:如何在脚本检测是否使用su
或sudo
而不要求用户输入过多的密码(例如,输入密码sudo
,如果失败 - 运行su
)
解决方案
有没有这样做的防弹方式,因为任何分布在它想要的任何方式打下文件。 Debian和Ubuntu经常把系统文件比红帽的其他目录,例如。这是很容易定制脚本它安装在操作系统。
其他提示
它不应该。如果脚本需要root权限,它应该以root身份运行。这是用户的业务他如何去实现这一目标 - 利用苏,须藤或其他一些机制
如果您关心安全问题,不想做的一切,从根,你可以将这些零件root权限。
您可以设置帐户不是需要一个密码在/ etc / sudoers文件sudo的:
yourusername ALL=(ALL) NOPASSWD: ALL
如果你不想这样做,你可以迫使他们运行脚本以root身份。加入这样的事情你的shell脚本的顶部:
if [ "$UID" -ne 0 ]; then
echo "You must be root to run this script"
exit 1
fi
此方式,用户可以得到是根然而他们选择(su或须藤)。
从这个文件创建一个更sh文件调用您的原始.sh
文件一样 -
su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
检查是否已安装sudo
SU='su'
which sudo > /dev/null && SU='sudo'
虽然这并不能完全回答你的问题,但值得注意的是,您可以检查是否是使用以下安装sudo包:
Debian的基础的系统:
dpkg -s sudo
RPM为基础的系统:
rpm -q sudo
不隶属于 StackOverflow