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

17

Я хотел бы разрешить пользователям chmod файл, который принадлежит пользователю root или другому пользователю, который не является самим собой. Я chmod'ed файл 777, и я получаю "операция не разрешена". Я добавил пользователя в группу из файла и получил то же самое. Почему пользователь не может изменить файл, к которому у него есть права на запись?

ashleysmithgpu
источник
1
По этой логике, почему бы просто не запустить все как root? Если любой пользователь может изменить любой режим, вы в основном уничтожаете всю модель разрешений Unix ...
Крис Даун,
1
Что ты хочешь делать? может быть, вам стоит заглянуть в sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h
Файл имеет права доступа 777, пользователь может перейти к «mv file file.old; cat file.old> file», и теперь он будет владельцем файла и сможет chmod его. Почему они не могут "chmod 777 file"?
ashleysmithgpu
5
Нет, они могут сделать это, только если у них есть разрешение на запись в каталог. Если пользователь имел право изменить права доступа к файлам, которые ему не принадлежат, установив режим 04777 и скопировав в него / usr / bin / env, он может запустить любую команду от имени этого пользователя.
Стефан Шазелас
@StephaneChazelas Это странный аргумент, потому что ядро ​​может легко решить (и делает!) Разрешить несобственникам такие изменения, не будучи связанным этим решением, чтобы позволить им все виды изменений. Ведь SUID даже сбрасывается, когда не владелец пишет файл.
Хауке Лагинг

Ответы:

8

Почему пользователь не может изменить файл, к которому у него есть права на запись?

Для нормальных прав доступа это дизайнерское решение. Вам нужно richacls : WRITE_ACLи , возможно WRITE_OWNER.

Хауке Лагинг
источник
1
И вы должны предупредить, что richacls обычно недоступен.
sendmoreinfo
@sendmoreinfo В статье в Википедии говорится об этом, и, очевидно, ее нужно прочитать, поскольку мой ответ не объясняет, что такое рихаклы и как они используются. Смешно считать правильный ответ «бесполезным» из-за этого. Тем более, что нет эквивалентной альтернативы. В следующий раз внесите изменения, если считаете, что такая информация необходима.
Хауке Лагинг
Я вижу, это дизайнерское решение, спасибо
ashleysmithgpu
2
Вы, очевидно, использовали эту функцию, поэтому объясните это своими словами.
sendmoreinfo
10

Разрешения Unix разработаны так, чтобы быть простыми. Вам нужно разрешение на чтение для чтения из файла, разрешение на запись для записи в файл и разрешение на выполнение для выполнения файла. Вам нужно иметь файл, чтобы изменить его метаданные¹.

Разрешение пользователю, который может читать файл, чтобы предоставить другим право на чтение, или разрешение пользователю, который может записать файл, чтобы предоставить другим разрешение на запись, не сильно изменит модель безопасности. Это связано с тем, что разрешения Unix являются дискреционными: пользователь, который может прочитать файл, может предоставить его содержимое другим пользователям, даже если эти другие пользователи не смогут прочитать файл (и аналогично для записи пользователь может действовать как прокси-сервер и пиши от имени других).

С другой стороны, разрешение пользователю предоставить разрешение, которого у него нет, полностью нарушит систему разрешений: пользователь может предоставить все разрешения самому себе.

Довольно редко нужно менять права доступа к файлу, который вам не принадлежит. Обычно вы должны организовать, чтобы файл имел необходимые разрешения, как только он будет создан. Если вам это действительно нужно, вы можете предоставить пользователю sudo chmodправа на определенный режим и определенный файл (например joe: ALL = (ALL) chmod g+r /path/to/file).

¹ За исключением времени доступа и модификации, которые являются специфическими, потому что чтение или запись в файл также устанавливает их.

Жиль "ТАК - прекрати быть злым"
источник
В моем случае есть как веб-процесс (с помощью www-данных), так и процесс cli (сам по себе), который хочет установить разрешения для файла. Я добавил себя в группу www-data, но этого недостаточно.
Donquixote
Даже смена владельца / группы на себя: www-данные не помогают. (Я не разработал механизм, который пытается установить разрешения, я не контролирую его)
donquixote