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

如何结合setpriv与重定向写入权限受限的文件

问题描述

我需要在Bash脚本中使用echo写入my_file.txt,该文件的权限信息如下:

drwxr-xr-x 2 snap_daemon root 4096 Apr 11 15:56 my_file.txt

我尝试执行以下命令:

sudo setpriv \
  --clear-groups \
  --reuid snap_daemon \
  --regid snap_daemon -- \
  echo "thing" > my_file.txt

但收到权限拒绝错误:

-bash: my_file.txt: Permission denied

原因是setpriv仅作用于echo命令,而文件重定向操作由当前shell(以原用户身份)执行,因此没有写入权限。请问如何让setpriv作用于输出到my_file.txt的重定向操作?

解决方案

方法1:通过子Shell打包命令与重定向

将echo和重定向操作封装到一个Shell命令字符串中,让setpriv切换用户后执行整个子Shell,这样重定向会以snap_daemon身份完成:

sudo setpriv \
  --clear-groups \
  --reuid snap_daemon \
  --regid snap_daemon -- \
  sh -c 'echo "thing" > my_file.txt'

使用单引号可以避免原Shell提前解析重定向符号,确保操作在切换用户后的环境中执行。

方法2:利用tee命令写入文件

通过管道将echo的输出传给tee,tee会以snap_daemon身份运行,从而获得文件写入权限:

echo "thing" | sudo setpriv \
  --clear-groups \
  --reuid snap_daemon \
  --regid snap_daemon -- \
  tee my_file.txt > /dev/null

添加> /dev/null是为了阻止tee将内容输出到终端,仅完成文件写入操作。

方法3:直接切换用户执行命令(简化版)

如果不需要setpriv的特殊参数(如--clear-groups),也可以用sudo -u直接切换用户并执行封装的Shell命令:

sudo -u snap_daemon sh -c 'echo "thing" > my_file.txt'

但如果必须依赖setpriv的特定功能,优先选择前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:24