首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让脚本以root用户身份运行命令

如何让脚本以root用户身份运行命令
EN

Stack Overflow用户
提问于 2015-03-24 10:42:46
回答 2查看 28.4K关注 0票数 2

我刚开始使用Ubuntu和bash脚本,但我只是制作了runUpdates.sh,并在我的.profile中添加了以下代码来运行它:

代码语言:javascript
运行
复制
if [ -f "$HOME/bin/runUpdates.sh" ]; then
    . "$HOME/bin/runUpdates.sh"
fi

我遇到的问题是,我希望脚本像root一样运行(因为我不想输入我的sudo密码)

我发现了一些我应该能够执行sudo chown root.root <my script>sudo chmod 4755 <my script>的地方,当我运行它时,它应该以根用户身份运行。但这不是..。

我觉得这个脚本很不错。我错过了什么?-rwxr-xr-x 1 root root 851 Mar 23 21:14 runUpdates.sh*

您能帮助我以root用户身份运行此脚本中的命令吗?我并不是真的想更改sudors文件,我真的只想在root下运行这个脚本中的命令(如果可能的话)。

代码语言:javascript
运行
复制
#!/bin/sh

echo "user is ${USER}"

#check for updates
update=`cat /var/lib/update-notifier/updates-available | head -c 2 | tail -c 1`;
if [ "$update" = "0" ]; then
        echo -e "No updates found.\n";
else
        read -p "Do you wish to install updates? [yN] " yn
        if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
                echo -e 'No\n';
        else
                echo "Please wait...";
                echo `sudo apt-get update`;
                echo `sudo apt-get upgrade`;
                echo `sudo apt-get dist-upgrade`;
                echo -e "Done!\n";
        fi
fi

#check for restart
restartFile=`/usr/lib/update-notifier/update-motd-reboot-required`;
if [ ! -z "$restartFile" ]; then
        echo "$restartFile";
        read -p "Do you wish to REBOOT? [yN] " yn
        if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
                echo -e 'No\n';
        else
                echo `sudo shutdown -r now`;
        fi
fi

我添加了要调试的用户,它总是输出我的用户而不是root用户,并提示输入sudo密码(因为我使用sudo调用命令),或者告诉我您是root用户吗?(如果我删除sudo)

另外,有没有一种方法可以实时输出更新命令stdout,而不是在它们完成时只输出一个块?

(我也试着用shebang作为#!/bin/bash)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 11:02:07

出于安全原因,setuid在shell脚本上不起作用。如果您希望以没有密码的超级用户身份运行脚本,您可以编辑/etc/sudoers,使其能够在没有密码的情况下以sudo运行。

要“实时更新”,您可以直接运行该命令,而不是使用echo。

票数 7
EN

Stack Overflow用户

发布于 2015-03-24 10:53:45

这样做是不安全的,你可能应该使用sudoers,但如果你真的需要/想要这样做,你可以这样做:

代码语言:javascript
运行
复制
echo <root password> | sudo -S echo -n 2>/dev/random 1>/dev/random
sudo <command> 

这之所以有效,是因为sudo在成功使用后不需要在简短的窗口中输入密码。

SUID根脚本在很多年前就被淘汰了。如果你真的想以根用户的身份运行脚本,你需要将它们包装在一个可执行文件中,你可以在我的博客上看到一个例子:http://scriptsandoneliners.blogspot.com/2015/01/sanitizing-dangerous-yet-useful-commands.html

示例是如何使用shell脚本更改可执行文件权限并在其他可执行文件周围放置筛选器,但包装shell脚本的概念也适用于SUID,可以将shell脚本生成的可执行文件设置为SUID。

https://help.ubuntu.com/community/Sudoers

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29224136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档