Почему непривилегированный пользователь не может изменить владельца файла?

15

От чоун (2):

Только привилегированный процесс (Linux: один с возможностью CAP_CHOWN) может изменить владельца файла. Владелец файла может изменить группу файла на любую группу, членом которой является этот владелец. Привилегированный процесс (Linux: с CAP_CHOWN) может произвольно изменить группу.

В чем причина этого ограничения? Почему непривилегированный пользователь не может изменить владельца файла, которым он владеет (т. Е. Нет / etc / shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted
Александр
источник

Ответы:

27

Позволяя пользователям «отдавать» файлы, вы сталкиваетесь с различными функциями ОС. Такие как:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...
Крис Нава
источник
8

Это просто личный выбор дизайнеров Линукс , чтобы не допустить его - все причины псевдо-безопасности, данные , являются привлекательностью, так как есть UNIX системы , которые позволяют это.

Я думаю, что эта функциональность сводилась к тому, следовало ли поведение вашего Unix 'System-V' (AT & T) или Unix Беркли (BSD) ...

Что касается других упомянутых проблем безопасности:

  • Выдача себя за другого пользователя (или даже root) через setuid.

    Не проблема: изменение владельца очищает любые биты setXid (U / G)

  • Недостаточно прав для отмены ошибочного чоуна

    На самом деле это не «риск для безопасности», НО, это может быть в системах, которые позволяют менять пользователя, вы можете изменить его обратно, если он находится в вашем собственном каталоге, в противном случае: «будьте осторожны»!

  • Создается впечатление, что кто-то другой создал данный файл.

    Он по-прежнему будет в каталоге, доступном для записи вами. Т.е. вы не можете переместить его в их домашний каталог, если он не открыт для записи вашей группе или всем (или вам, в частности, если ACL доступны).

  • Настройка заданий cron для запуска на учетных записях других пользователей.

    Опять же, не будет работать - так как crondirs принадлежат пользователю и не могут быть доступны для чтения другим пользователям, не говоря уже о записи.

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

    Нет: только если пользователь «владеет» каталогом, содержащим этот файл. Т.е. я могу передать root-файл с именем passwd, но я не смог переместить его в / etc /, если у меня нет разрешения на запись в / etc /.

  • квоты

    Потенциально верная точка - если вы используете квоты, но кажется, что было бы легко определить, суммируете ли вы дисковое пространство с помощью home-dir; Единственная проблема будет в каталогах, которые могут быть записаны несколькими пользователями. В этом случае, может быть, владелец этого «директора». Это может иметь место в тех системах, которые поддерживают «раздачу» файлов, что вы можете делать это только в каталогах, которые вам «принадлежат», но это было ДЛИННОЕ время, так как я фактически находился в системе, которая позволяет это, так Я не помню точных ограничений.

Кажется, я помню, что был какой-то «компромисс» за то, что он разрешал «отдавать файлы» ... например - в системах, которые позволяли это, что-то еще не разрешалось, что разрешает linux, но не могу вспомнить, что это было отключено. рука...

Я бы сказал, что вышеприведенный «ответ» должен быть помечен как ответ, поскольку это НЕ реальный ответ. Это скорее дизайнерское решение - я просто не знаю, каковы были компромиссы.

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

ИМО, это должно быть устанавливаемое системой «значение» в «/ proc», но, вообще говоря, я думаю, что большинству людей это безразлично.

Если бы в этом была сильная потребность, «chown» мог бы быть усилен и модифицирован для обеспечения безопасности, а затем настроить w / setuid «root», чтобы он мог реализовать такую ​​политику.

Астара
источник
Квоты всегда основаны на принадлежности файла , а не на местоположении . В противном случае кто-то может держать все в /tmp.
user1686
+1, ты, похоже, чертовски прав :). В системах OpenSolaris (которая на самом деле является потомком System V) вы можете установить это с помощью mountпараметра (поэтому этот параметр может быть ограничен одной точкой монтирования вместо того, чтобы быть общесистемным в соответствии с предложенным вами значением, устанавливаемым системой): rstchown(по умолчанию ) ограничить изменения владельца файла пользователем root, norstchownчтобы непривилегированные пользователи могли изменить владельца своих файлов (они не могут изменить его обратно).
WhiteWinterWolf
6

Что ж, если кто-то может изменить владельца, то любой может изменить разрешения, чтобы получить доступ к любому файлу в системе. Это плохо не только с точки зрения вредоносного ПО (sudo не требуется), но и с точки зрения системного администратора. Если кто-либо из пользователей может изменить любой из файлов, то права доступа к файлам бесполезны.

Hello71
источник
2
Правильно. Я изменил вопрос, чтобы было ясно, что я имел в виду файлы, которыми владеет пользователь, а не какой-либо файл.
Александру
1
@Alexandru: подумайте о том, что злонамеренный пользователь myTrojan.shстановится владельцем root и имеет флаг SUID.
Бенджамин Банье
@honk: теперь имеет смысл.
Александру
5

Потому что тогда пользователь может уклоняться от квот файловой системы. Если у меня есть квота в 100 МБ, а у вас есть квота в 100 МБ, я могу загрузить 100 МБ, chmod a + r, chown you, а затем загрузить еще 100 МБ.


источник