Это вероятно это sed -i
создаст совершенно новый файл, затем заменяют оригинал им. Это означает, что у Вас должен был бы быть доступ для записи к каталогу /etc
, не только файл.
Ни один из инструментов, которые создают новый файл, не будет работать без того питания, и это справедливо так: /etc
очень важный каталог, и Вы, вероятно, не должны играть там без разрешения :-)
Одно решение состоит в том, чтобы поместить Ваш файл где-нибудь, откуда можно изменить его, затем просто создать гибкую ссылку на него /etc
. что-то как:
ln -s /my_directory/my_file /etc/my_file
Вы должны будете базироваться полномочия создать ссылку, конечно. Гибкая ссылка будет препятствовать тому, чтобы связь исчезла, должен Вы делать new-file/rename операцию, так как гибкая ссылка является просто файлом, содержащим путь назначения (с которым, в отличие от inode, не изменится sed -i
).
И это ограничивает их питание изменением того файла и того файла только. Никакая возможность для дыр в системе безопасности путем открытия полномочий на /etc
.
Вместо того, чтобы использовать "sed-i", Вы могли попробовать
sed ... > /tmp/foo && cat /tmp/foo > /etc/file
Тем путем Вы делаете фактическое изменение файла в файл в/tmp, и затем пишущий, что результат в файл, что Вы имеете доступ для записи, но не заменяете доступ.