sed 是否以不同用户身份运行?

sed 是否以不同用户身份运行?

我有一个sed脚本可以更改/etc/shadow.实际的改变并不重要,我只是举个例子:

root@device:~ sed -i 's/root:\(.*\):0:0/root:\1:10:0/' /etc/shadow
sed: can't create temp file '/etc/passwdH5HWP7': Permission denied

正如输出所示,似乎存在一些权限错误,但我正在运行命令root

使用sed的是BusyBox v1.22.1嵌入式发行版。

如果我尝试主文件夹中的示例,则不会出现错误。另外,我可以/etc/shadow通过文本编辑器正常编辑。

是否sed以非 root 用户身份创建文件?

答案1

原因可能是/(包含/etc) 是只读文件系统,但具有/etc/shadow/etc/passwd和其他位于读写文件系统上的动态文件的符号链接。

这将允许您直接编辑shadowpasswd文件。失败sed -i是因为它的实现实际上并未就地更新。相反,它创建一个临时文件并将更改写入其中,然后用临时副本替换原始文件。您看到的错误消息表明sed无法写入(临时)文件/etc/passwdH5HWP7

解决方案?要么不要-i自己使用和控制临时文件的位置,要么-i为标志提供文件名。在这两种情况下,您都需要在具有读写访问权限的位置提供文件名。

相关内容