我要读取一个需要 root 权限的文件,并且必须将其保存在另一个用户或组的某个位置,例如读取需要 root 的 dmesg 并将其保存在用户/组权限为 770 的其他位置:test/test。这里的问题是我无法将其保存为 root,这是 SElinux 策略,它给了我错误。所以我需要在保存文件时更改进程权限。
有什么建议吗?
答案1
您的脚本正在以 root 身份运行。因此,没有什么可以阻止您sudo
以任何用户身份运行。如果您无法以 root 身份写入文件,但可以以其他用户身份写入文件,那么这是一个选择:
target=/path/to/target/file
dmesg | sudo -u test tee "$target" >/dev/null
chmod 770 "$target"
如果您更喜欢使用su
而不是sudo
可以使用此变体
target=/path/to/target/file
dmesg | su test -c "tee '$target' >/dev/null'
chmod 770 "$target"
答案2
使用zsh
,您可以执行以下操作(如root
):
zmodload zsh/system
umask 0
() {local EGID=123 EUID=456; sysopen -wu3 -m770 -o excl file}
以0770权限创建并打开file
as euid 456和egid 123。
$ ls -nd file
-rwxrwx--- 1 456 123 0 Sep 5 17:05 file
然后运行:dmesg >&3
将其填满。
(注意顺序很重要,一旦你的euid不再为0,你就不能改变egid)。