Почему не может обычный пользователь 'chown' файл?

Приложение соединено двумя способами: колотить, и терминалу.

Соединение с терминалом - то, что стандартные потоки (stdin, stdout и stderr) приложения подключены к терминалу. Типичные приложения GUI не используют stdin или stdout, но они могли бы испустить сообщения об ошибках к stderr.

Соединение с оболочкой - это, если Вы запустили приложение с foo &, это остается известным оболочке, поскольку задание, как объяснено в Различии между nohup, отрицает и и. При закрытии терминала оболочка получает a SIGHUP, который это распространяет к его заданиям. Когда Вы вводите exit в оболочке это отрицает задания заранее (это настраивается в некоторой степени).

Можно разъединить соединение оболочки с disown встроенный. Вы не можете разъединить клеммное соединение, по крайней мере, не без закулисных методов (использующий отладчик), который мог разрушить программу.

78
22.03.2013, 23:13
3 ответа

Большинство систем Unix предотвращает пользователей от “отдачи” файлов, то есть, пользователи могут только работать chown если у них есть полномочия группы и целевой пользователь. Начиная с использования chown требует, чтобы владение файлом или быть базировались (пользователи никогда не могут адаптировать файлы других пользователей), только базируйтесь, может работать chown изменить владельца файла на другого пользователя.

Причина этого ограничения состоит в том, что отдача файла другому пользователю может позволить плохим вещам произойти в редких, но все еще важных ситуациях. Например:

  • Если системе включили выделенные дисковые пространства, Alice могла бы создать мировой перезаписываемый файл в соответствии с каталогом, доступным только ею (таким образом, никто больше не мог получить доступ к тому мировому перезаписываемому файлу), и затем работайте chown сделать тот файл принадлежавшим другому пользователю Bill. Файл затем рассчитал бы под выделенным дисковым пространством Bill даже при том, что только Alice может использовать файл.
  • Если Alice отдает файл счету, нет никакой трассировки, что счет не создал тот файл. Это может быть проблемой, если файл содержит недопустимые или иначе идущие на компромисс данные.
  • Некоторые программы требуют, чтобы их входной файл принадлежал конкретному пользователю для аутентификации запроса (например, файл содержит некоторые инструкции, что программа будет работать от имени того пользователя). Это обычно - не безопасный дизайн, потому что, даже если счет создал файл, содержащий синтаксически корректные инструкции, он, возможно, не намеревался выполнить их в определенное время. Тем не менее, разрешению Alice создать файл с произвольным содержанием и взяли, это как вход из счета может только сделать вещи хуже.
98
27.01.2020, 19:30
  • 1
    В предыдущем задании я создал программную систему, которая зависела от неспособности отдать файлы. Это использовало принадлежность файла, чтобы проверить, что запрос был отправлен конкретным пользователем. Это проверило, во время установки, была ли отдача файлов разрешена, и раз так это отказалось продолжаться. –  Keith Thompson 22.12.2011, 05:09
  • 2
    Другая более критическая проблема - то, что пользователь мог скопировать /bin/bash, setuid это, и затем chown это тому, кого бы ни они хотят. Теперь у них есть доступ оболочки как у того человека. –  Patrick 30.03.2013, 00:30
  • 3
    @Patrick обновлений chown всегда очищает setuid и setgid биты. –  Gilles 'SO- stop being evil' 30.03.2013, 01:06
  • 4
    @Gilles и на серьезном основании..., если Вы могли бы скопировать двоичный файл оболочки где-нибудь, можно получить доступ к нему, установить setuid/gid биты на нем, и показанный его для укоренения (или любой порядок этого, который получает Вас 6755/0:0 перманент/владение) можно получить корень в той системе. О, комментарий скучавшего Patrick, точно. –  hanetzer 16.12.2014, 10:30
  • 5
    Хорошо, но если я владею dir (drwxr-xr-x ring0 ring0 .) в котором корень имеет регулярный файл (-rw-r--r-- root root file), почему я не могу сделать chown ring0 file так как так или иначе позволяется сделать, как ring0, cp file x ; rm file ; mv x file (и некоторые дополнительные touch sometime file ...)? –  Ring Ø 05.12.2015, 09:37

Можно запустить команду, но она не будет работать, если Вы не будете корнем. Это легко: вообразите пользователя, который может изменить программное обеспечение на пользователя root. Это может добавить, что setuid укусил и, voilà, парень является корнем! Так, использование может добавить бит с chmod, но никакой шанс изменить владельца файлов.

0
27.01.2020, 19:30
  • 1
    Вы не можете добавить, что setuid обдумал файл, которым Вы не владеете, и реализации, которые позволяют отдавать файлы, очищаются, setuid укусил. –  Gilles 'SO- stop being evil' 22.12.2011, 02:55
  • 2
    я думаю точка ответа Dom, является этим: Вообразите, могли ли Вы. Затем была бы проблема. Ваша точка, что Вы не можете, корректна. Но OP спрашивает "почему?" Очистка setuid укусила, другое средство защиты, которое снова вызывает вопрос "почему?" Который я затем отослал бы к ответу Dom: ЕСЛИ пользователь мог показанный, и ЕСЛИ БЫ пользователь мог setuid, то та комбинация имела бы катастрофические последствия. Я думаю, что он делает тонкость, даже если он отсутствует немного. –  Mike S 23.10.2017, 20:37

На Linux Вам нужна возможность CAP_CHOWN к показанному. корню предоставляют такой. Обратитесь к: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html для объяснений. Если Вы намереваетесь дать возможность CAP_CHOWN, создайте свой код с libcap-ng или libcap, как продемонстрировано: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html, где у Вас есть к простой замене CAP_AUDIT_WRITE с CAP_CHOWN.

15
27.01.2020, 19:30
  • 1
    +1 для Вас не должен быть корнем. Поскольку Вы не должны больше быть корнем. –  ctrl-alt-delor 20.02.2015, 01:38
  • 2
    Иногда, Вам даже не нужен CAP_CHOWN: unix.stackexchange.com/questions/399975 / … От моего чтения источника ядра, для каждой реализации файловой системы определяют задачу с проверкой полномочий для показанного. И кажется, что с NFS, полномочия проверяются на стороне сервера. И если сервер... странно... затем это возможно. –  Mike S 25.10.2017, 17:19

Теги

Похожие вопросы