Как сохранить право собственности на файл после редактирования?

11

Мой вопрос похож на этот другой , за исключением того, что спрашивают о вновь созданных файлах.

В моем окне Unix пользователи alice , bob и tomcat находятся в группе tomcat .

Файлы конфигурации сервера Tomcat принадлежат пользователю tomcat и входят в группу tomcat.

Я изменил разрешения этого файла на чтение и запись по группам, чтобы Алиса и Боб могли редактировать файлы.

Однако я заметил, что после редактирования файл становится владельцем последнего пользователя, который его редактировал.

В: Можно ли изменить разрешения, чтобы Алиса и Боб могли редактировать файлы, не меняя их владельца?

Как редактирование файла в любом случае меняет его владельца?

Леонель
источник
Ваша цель - убедиться, что tomcat продолжает владеть файлами, или обеспечить, чтобы: сервер tomcat продолжал работать; Алиса и Боб могут продолжать редактировать файлы, и эта безопасность поддерживается?
Ctrl-Alt-Delor
1
Я бы предположил, что служба tomcat работает от имени пользователя 'tomcat' в зависимости от того, как сформулирован ваш вопрос. Это, вероятно, нежелательно, так как эксплойт tomcat может привести к тому, что его собственная конфигурация будет переписана для предоставления битов вашего сервера, которые вы, возможно, не собираетесь использовать. Вы должны рассмотреть возможность использования другой группы, которая может написать конфигурацию, в то время как группа tomcat может читать, но не писать.
Эд Невилл
1
Рекомендуемое фоновое чтение
Жиль "ТАК - перестань быть злым"

Ответы:

17

Получающийся пользователь файла зависит от того, что делает редактор. Некоторые редакторы сохраняют файл, обрезая его и записывая поверх файла (без изменения inode). И некоторые редакторы переименовать файл в другое имя ( fileк file~обычно), и создать новый файл с именем оригинала. Изменение исходного файла сохраняет владельца таким же, а создание нового делает новый файл владельцем UID процесса создания.

Из редакторов, которые у меня есть на Debian, nanoи joe, как nviи vim(минимальная версия в vim-tiny), кажется, перезаписывают на месте. Хотя я полагаю, vimи Emacs, вероятно, настраивается в том, что они делают.


Стивен комментирует атомные обновления . Проблема с повторным созданием на месте заключается в том, что файл усекается до нулевой длины, а затем записывается. Другой процесс может открыть и прочитать его до того, как будут записаны все данные.

Атомное обновление будет сделано путем создания новой версии, скажем file.new, с последующим переименованием file.newв file. Оставив резервный файл, можно создать file.new, ссылку fileна , file~а затем переименовать file.newв file. Переименование является атомарным в том смысле, что любой процесс, который обращается к файлу по имени, получает либо старую, либо новую версию, а не что-либо промежуточное. Любые открытые дескрипторы файлов, конечно, будут указывать на файл, который оставался открытым, предоставляя согласованное представление о файле.


С точки зрения прав доступа к файлам для сохранения в одном и том же файле (inode) требуется доступ на запись к самому файлу (но не к каталогу), его переименование и создание нового требует доступа на запись в каталог (но не в исходный файл). ).

(Переименование и воссоздание также является способом фиксации прав доступа к файлам в случае, если кто-то создает или изменяет файл в общем каталоге, но забывает предоставить ему доступ для записи группы).

ilkkachu
источник
6
Создание и переименование также является единственным способом гарантировать, что файл обновляется атомарно с использованием семантики POSIX.
Стивен Китт
приятное объяснение.
Миан Асбат Ахмад
13

Как пояснил на ilkkachu , если редактор используются создает новый файл при экономии, то нет никакого способа управления владельцем файла. Что вас, вероятно, действительно волнует, так это обеспечение того, чтобы файлы оставались читаемыми Tomcat; Вы можете сделать это, убедившись, что их группа tomcat(и они доступны для чтения по их группе), и это можно применить к новым файлам, установив setgidбит в родительском каталоге :

chmod g+s .

Таким образом, если bobредактировать файл с помощью редактора, который воссоздает файл, отредактированный файл в конечном итоге будет принадлежать, bob:tomcatи Tomcat все равно сможет его прочитать ( umaskпо крайней мере, с типичным ). Пока родительский каталог доступен для записи tomcatгруппе, любой пользователь в этой группе сможет редактировать файлы в каталоге (если только путем их повторного создания).

Однако я бы порекомендовал посмотреть на изменение ваших процессов; вам, вероятно, не следует редактировать файлы непосредственно в том месте, откуда они прочитаны Tomcat. В идеале файлы должны храниться в какой-либо VCS и развертываться отдельным процессом (возможно, автоматическим). Таким образом вы избежите всех этих проблем с владением ...

Стивен Китт
источник
отличное решение !!
Миан Асбат Ахмад