我有一个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
和其他位于读写文件系统上的动态文件的符号链接。
这将允许您直接编辑shadow
和passwd
文件。失败sed -i
是因为它的实现实际上并未就地更新。相反,它创建一个临时文件并将更改写入其中,然后用临时副本替换原始文件。您看到的错误消息表明sed
无法写入(临时)文件/etc/passwdH5HWP7
。
解决方案?要么不要-i
自己使用和控制临时文件的位置,要么-i
为标志提供文件名。在这两种情况下,您都需要在具有读写访问权限的位置提供文件名。