是否可以在不影响文件权限的情况下替换属于另一个用户的可执行文件中的字符串?

Is it possible to replace a string in an executable which belongs to another user without affecting the file permissions?

我有一个属于另一个用户的简单可执行文件。在某些时候,您有一个 system("ls /path/file") 命令,并且 /path/file 与可执行文件具有相同的所有者,并且只能由它读取。我尝试用 sed 更改 ls 命令,以便我可以看到文件的内容,但这会影响所有权。有什么方法可以更改可执行文件中的字符串并保留所有权?

您看到所有权更改的原因很可能是您的编辑没有修改文件。相反,它会创建一个新文件(必须由您拥有)来替换现有文件。

GNU sed -i 使用此模型,因此编辑文件会导致所有权更改:

$ ls -l foo
-rwxrwxrwx 1 bob    ourgroup   26 Nov  5 18:10 foo

$ sed -i 's/foo/bar/g' foo
(no output)

$ ls -l foo
-rwxrwxrwx 1 alice  ourgroup   26 Nov  5 18:10 foo

要保留所有权,只需使用将覆盖而不是替换的编辑器即可。 nanovim 是执行此操作的交互式编辑器,而 ed 是可编写脚本的编辑器。

请注意,如果文件设置了 suid u+s 位,则在保留此权限的同时,其他任何人都无法修改该文件。