Можно ли заменить строку в исполняемом файле, принадлежащую другому пользователю, не затрагивая права доступа к файлу?

У меня есть простой исполняемый файл, который принадлежит другому пользователю. В какой-то момент у вас есть системная ("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, файл не может быть изменен кем-либо еще при сохранении этого разрешения.

Другие вопросы по тегам