目录
runuser 最核心的用途是 root 用户降权为普通用户执行命令(避免直接用 root 执行非必要操作,符合最小权限原则)。
1. 基本语法和常用选项
1.1 基本语法格式
runuser [选项] -u <用户名> -c '命令'
或
runuser -l <用户名> -c '命令'
或
runuser <用户名> -c '命令'
1.2 常用选项说明
| 选项 | 含义解释 |
|---|---|
-l <用户名> 或 -u <用户名> | 指定要切换的目标用户。-l 会模拟登录 shell,读取该用户的 profile 等环境变量。 |
-c '<命令>' | 指定要以目标用户身份运行的命令或脚本字符串。 |
-g <组名> | 指定主要组。 |
-G <组名1,组名2,...> | 指定附加组。 |
-m 或 --preserve-environment | 不重置环境变量,保持当前环境(在某些版本中可能有效)。 |
--session-command=COMMAND | 类似 -c,但不创建新的会话。 |
注意:runuser 命令通常只能在 root 用户下运行。
2. 常见案例
2.1 执行单条简单命令
# root 用户下,切换到普通用户test,执行 ls 查看其家目录
runuser -l test ls /home/test
# 或
runuser test -c "ls /home/test"
2.2 以登录方式执行命令(模拟真实登录)
# 切换到 test1 并模拟登录,执行 echo $PATH(查看 test1 的环境变量 PATH)
runuser -l test1 -c "echo $PATH"
# 对比:无 -l 时,PATH 仍是 root 的 PATH
runuser test1 -c "echo $PATH"
runuser -u bitdefender -g bitdefender -- telnet 192.168.1.100 80
说明:
-l test1:等效于su - test1,加载test1的登录配置文件(如/home/test1/.bash_profile);- 若命令依赖用户自定义的环境变量(如开发环境的工具路径),必须加
-l。
2.3 执行多个命令(批量操作)
# 切换到 user1,创建目录 → 复制文件 → 查看结果(用分号分隔命令)
runuser user1 -c "mkdir /home/user1/test; cp /home/user1/doc.txt /home/user1/test; ls /home/user1/test"
说明:
- 多个命令用
;分隔,按顺序执行(前一个命令失败不影响后一个); - 若需 “前一个成功才执行后一个”,用
&&分隔(如cmd1 && cmd2)。
2.4 访问受限文件系统或目录
当root用户因权限策略(如安全限制或NFS挂载点)无法直接访问某些文件时,可使用runuser以服务用户身份操作。
查看NFS共享目录的内容:
runuser -l apache -c 'ls -l /nfs/wwwroot/http/'
2.5 检查特定用户的系统资源限制
runuser -l nginx -c 'ulimit -SHa'
2.6 运行特定用户的自定义脚本或程序
可用于自动化任务,例如调度cron作业以非root用户身份执行脚本,确保安全隔离。
runuser -l backupuser -c 'sh /mnt/scripts/backup_mysql.sh'
此处,命令以backupuser身份运行备份脚本,减少root权限的暴露风险。
3. 与 Su 和 Sudo 的对比
| 特性 |
|
|
|
|---|---|---|---|
| 需要密码 | 否 (仅 root 可用) | 是 (除非由 root 执行) | 是 (验证自身密码) |
| 依赖 PAM | 是 (仅会话钩子) | 是 (认证和会话钩子) | 是 (认证和会话钩子) |
| 环境处理 | 灵活 ( | 通常模拟登录 ( | 可配置,通常保留部分环境 |
| 适用场景 | root 用户的脚本自动化 | 用户间交互式切换 | 非 root 用户权限提升 |
| 日志记录 | 取决于 PAM 配置 | 是 (如 | 是 (详细的命令审计) |
2018

被折叠的 条评论
为什么被折叠?



