Як зберегти право власності на файл після редагування?


11

Моє запитання схоже на це інше , за винятком того, що запитує про новостворені файли.

У моєму вікні Unix користувачі alice , bob та tomcat знаходяться в групі tomcat .

Файли конфігурації сервера Tomcat належать користувачеві tomcat та групі tomcat.

Я змінив дозволи цього файлу на читабельні та записані за групою, щоб Аліса та Боб могли редагувати файли.

Однак я помітив, що після редагування файл перебуває у власності останнього користувача, який його редагував.

Питання: Чи можна змінити дозволи, щоб Аліса та Боб могли редагувати файли, не змінюючи їх власності?

Як редагування файлу в будь-якому разі змінює право власності?


Ваша мета - забезпечити, щоб tomcat продовжував володіти файлами, або це гарантувати: сервер tomcat продовжує працювати; Alice та Bob можуть продовжувати редагувати файли, і ця безпека зберігається?
ctrl-alt-delor

1
Я б припустив, що служба tomcat працює під користувачем 'tomcat', виходячи з того, як формулюється ваше запитання. Це, мабуть, не бажано, оскільки експлуатація tomcat може призвести до того, що його конфігурація буде переписана для викриття бітів вашого сервера, які ви, можливо, не плануєте. Вам слід розглянути можливість використання іншої групи, яка може записати конфігурацію, тоді як група tomcat може читати, але не писати.
Ед Невіл

Відповіді:


17

Отриманий користувачем файл залежить від того, що робить редактор. Деякі редактори зберігають файл, обрізуючи його, і записуючи його через файл (не змінюючи вкладення). А деякі редактори перейменують файл на інше ім’я ( 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) потрібен запис для запису до самого файлу (але не до каталогу), перейменування його та створення нового вимагає доступу для запису до каталогу (але не до вихідного файлу ).

(Перейменування та відтворення також є випадковим способом фіксації дозволів на файл, якщо хтось створює або змінює файл у спільному каталозі, але забуває надати доступ до запису групи.)


6
Створення та перейменування - це також єдиний спосіб забезпечити атомне оновлення файлу за допомогою семантики POSIX.
Стівен Кітт

приємне пояснення.
Міан Асбат Ахмад

13

Як пояснив на ilkkachu , якщо редактор використовуються створює новий файл при економії, то немає ніякого способу управління власником файлу. Те, що вам, мабуть, дуже важливо, - це те, щоб Tomcat файли читали файли; ви можете зробити це, переконавшись, що їх група є tomcat(і вони читаються їх групою), і це можна застосувати до нових файлів, встановивши setgidбіт у батьківському каталозі :

chmod g+s .

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

Я б рекомендував, однак, розглянути свої зміни; ви, мабуть, не повинні редагувати файли безпосередньо в тому місці, звідки вони читають Tomcat. В ідеалі файли підтримуватимуться у VCS певного типу та розгортаються окремим процесом (можливо, автоматизованим). Таким чином ви уникаєте всіх цих проблем з власністю ...


приємне рішення !!
Міан Асбат Ахмад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.