You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:普通用户以root权限执行只读Bash脚本失败

解决普通用户以root权限执行只读Bash脚本的问题

我明白你遇到的困扰了——想让所有普通用户都能运行一个需要root权限的脚本,同时脚本本身保持只读状态,之前执行时碰到了swapoff: Not superuser.的权限错误。下面是经过验证的可行方案:

第一步:设置脚本的只读权限与所有者

首先把脚本放到系统级目录(比如/usr/local/bin/,避免用户个人目录的权限混乱),然后配置正确的权限:

  • 将脚本的所有者和所属组设为root,确保只有root能修改脚本:
    chown root:root /usr/local/bin/your_script.sh
    
  • 设置脚本为只读且可执行(所有人能读、能执行,但只有root能修改):
    chmod 555 /usr/local/bin/your_script.sh
    

第二步:通过sudoers授权普通用户执行

普通用户需要借助sudo获取root权限来运行脚本,我们可以通过sudoers文件做精确授权,避免给用户过度权限:

  1. 用visudo命令编辑sudoers文件(这个命令会自动检查语法,防止配置出错导致sudo失效):
    sudo visudo
    
  2. 在文件末尾添加一行配置(替换成你的脚本绝对路径):
    ALL ALL=(root) NOPASSWD: /usr/local/bin/your_script.sh
    
    这行配置的含义:
    • 第一个ALL:允许所有普通用户使用
    • 第二个ALL:在所有主机环境生效(单主机场景完全适用)
    • (root):允许以root身份执行该脚本
    • NOPASSWD::执行脚本时无需输入用户密码(如果需要验证密码,可去掉这个字段)
    • 最后是脚本的绝对路径(必须用绝对路径,否则sudo无法准确定位)

第三步:普通用户测试执行

现在普通用户只需运行以下命令,就能以root权限执行脚本了:

sudo /usr/local/bin/your_script.sh

为什么之前的方案可能没生效?

  • 脚本用了相对路径,sudo无法准确定位到脚本位置
  • 脚本权限设置错误,比如普通用户没有执行权限
  • sudoers配置有误:路径写错、遗漏NOPASSWD:字段(如果需要无密码执行),或者语法错误导致配置未生效
  • 脚本所有者不是root,存在普通用户篡改脚本获取root权限的风险(这也是我们设置chown root:root和chmod 555的核心原因)

内容的提问来源于stack exchange,提问作者rori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:30:45