Мой вопрос похож на этот другой , за исключением того, что спрашивают о вновь созданных файлах.
В моем окне Unix пользователи alice , bob и tomcat находятся в группе tomcat .
Файлы конфигурации сервера Tomcat принадлежат пользователю tomcat и входят в группу tomcat.
Я изменил разрешения этого файла на чтение и запись по группам, чтобы Алиса и Боб могли редактировать файлы.
Однако я заметил, что после редактирования файл становится владельцем последнего пользователя, который его редактировал.
В: Можно ли изменить разрешения, чтобы Алиса и Боб могли редактировать файлы, не меняя их владельца?
Как редактирование файла в любом случае меняет его владельца?
files
permissions
ownership
Леонель
источник
источник
Ответы:
Получающийся пользователь файла зависит от того, что делает редактор. Некоторые редакторы сохраняют файл, обрезая его и записывая поверх файла (без изменения 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 , если редактор используются создает новый файл при экономии, то нет никакого способа управления владельцем файла. Что вас, вероятно, действительно волнует, так это обеспечение того, чтобы файлы оставались читаемыми Tomcat; Вы можете сделать это, убедившись, что их группа
tomcat
(и они доступны для чтения по их группе), и это можно применить к новым файлам, установивsetgid
бит в родительском каталоге :Таким образом, если
bob
редактировать файл с помощью редактора, который воссоздает файл, отредактированный файл в конечном итоге будет принадлежать,bob:tomcat
и Tomcat все равно сможет его прочитать (umask
по крайней мере, с типичным ). Пока родительский каталог доступен для записиtomcat
группе, любой пользователь в этой группе сможет редактировать файлы в каталоге (если только путем их повторного создания).Однако я бы порекомендовал посмотреть на изменение ваших процессов; вам, вероятно, не следует редактировать файлы непосредственно в том месте, откуда они прочитаны Tomcat. В идеале файлы должны храниться в какой-либо VCS и развертываться отдельным процессом (возможно, автоматическим). Таким образом вы избежите всех этих проблем с владением ...
источник