Можно ли заменить строку в исполняемом файле, принадлежащую другому пользователю, не затрагивая права доступа к файлу?
У меня есть простой исполняемый файл, который принадлежит другому пользователю. В какой-то момент у вас есть системная ("ls /path/file") команда, и /path/file
имеет того же владельца, что и исполняемый файл, и может быть прочитан только им. Я пытался изменить ls
команда с sed
так что я могу видеть содержимое файла, но это влияет на владение. Есть ли способ изменить строку в исполняемом файле и сохранить право собственности?
1 ответ
Причина, по которой вы видите смену владельца, скорее всего, ваш редактор не изменяет файл. Вместо этого он создает новый файл (обязательно принадлежащий вам), который заменяет существующий.
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
Чтобы сохранить право собственности, просто используйте редактор, который перезапишет вместо замены. nano
а также vim
интерактивные редакторы, которые делают это, в то время как ed
это сценарий.
Обратите внимание, что если в файле установлен бит suid u + s, файл не может быть изменен кем-либо еще при сохранении этого разрешения.