我有一个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用户身份创建文件?
的原因可能是/
(含/etc
)是一个只读文件系统,但有一个符号链接/etc/shadow
,/etc/passwd
和其他动态文件上读写文件系统的土地。
这样您就可以直接编辑shadow
和passwd
文件。之所以sed -i
失败,是因为其实现实际上并未在适当位置进行更新。而是,它创建一个临时文件并写入更改,然后用该临时副本替换原始文件。您看到的错误消息说sed
无法写入(临时)文件/etc/passwdH5HWP7
。
解决方案?不要自己使用-i
和控制临时文件的位置,或者不要为-i
标志提供文件名。在这两种情况下,都需要在具有读写访问权限的位置中提供文件名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句