Спецификация POSIX для chown
утилиты упоминает в разделе объяснения о chown user:group
синтаксисе (ранее chown user.group
) (выделено мое):
Метод BSD 4.3 для указания как владельца, так и группы был включен в этот том POSIX.1-2008, потому что:
- Есть случаи, когда желаемое конечное условие не может быть достигнуто с помощью утилит chgrp и chown (которые только изменили идентификатор пользователя). (Если текущий владелец не является членом желаемой группы, а нужный владелец не является членом текущей группы, функция chown () может завершиться ошибкой, если только владелец и группа не будут изменены одновременно.)
Я думал, что user:group
синтаксис был удобной вещью. Теперь вышесказанное подразумевает, что есть вещи, которые вы можете сделать с chown user:group
которыми вы не можетеchgrp group; chown user
Теперь этот текст не имеет смысла для меня. В 4.3BSD только root мог изменить владельца файла, поэтому в любом случае нет никаких ограничений в том, что он может делать.
SysV и несколько других систем позволяют (или используют для разрешения) владельцу файла изменять пользователя и группу файла на что угодно, но даже в этих системах этот текст выше не имеет смысла для меня. Хорошо, если кто-то это делает chown someone-else the-file
, он не может сделать это chgrp something-else the-file
позже, потому что он больше не является владельцем файла, но ничто не мешает ему / ей делать chgrp
первое (оставаясь владельцем файла) и chown
после, и это не то, что Текст выше точно говорит.
Я не понимаю, какое отношение к этой проблеме имеет желаемый владелец и не являющийся членом текущей группы .
Итак, при каких условиях может произойти сбой функции chown (), если одновременно не будут изменены и владелец, и группа , и в какой системе?
chown me:my-group file
если файл находится в месте, где у меня есть права на чтение / запись (без привязки). Я не мог chgrp сначала, как не владелец. Сначала я не смог создать chown, так как это привело бы к созданию файла, который я не смог создать: мне принадлежит файл с группой, членом которой я не являюсь.Ответы:
Подсистема Microsoft Interix Unix (ныне в отставке) для его ядра NT наносила немного по- другому с правами доступа пользователей и групп , чем некоторые другие делают:
Вот некоторые более конкретные выдержки из руководства:
Насколько я понимаю, это означает, что если ваша учетная запись пользователя принадлежит группе Windows с достаточными правами для изменения прав доступа к файлу, принадлежащему этой группе, то
chgrp
этот файл может эффективно оказаться вне контроля вашей учетной записи пользователя. Это составляет меньший контроль, чем вы могли бы иметь и сchown
явнымиuser:group
параметрами. В этом контексте без возможности заявить,user:
и:group
вы никогда не могли бы достичь тех же результатов, что и иначе.Здесь приведена ссылка на подробный обзор взаимодействия Interix с ACL Windows с акцентом на то, как эти знания могут применяться к файловым системам Samba в других вариантах Unix.
Вот ссылка на ныне устаревший документ Solaris, описывающий настраиваемый файл,
rstchown
который ...Видимо, если для параметра установлено значение
0
...Такая опция не делает недействительной POSIX-совместимость Solaris . Только то, что это опция вообще, квалифицирует ее как соответствующую :
chown()
Функция системы - которая является документированной системой вызова производится как вchown
иchgrp
оболочке утилита - это указана на провал по многим причинам. Из их:Однако поведение предоставления прав изменения прав пользователям без полномочий root никогда не было уникальным для Solaris. В этом сообщении на форуме есть очень хорошее, хотя и несколько устаревшее, разрешение на доступ к файлам Unix, в котором автор заявляет:
Еще одна хорошая и более свежая публикация в списке рассылки цитирует это и продолжает:
И как вы указали в 2003 году :
... который зависит от
setprivgroup
параметра конфигурации .В любом случае, когда пользователь без полномочий root может манипулировать правами доступа к файлам, вполне возможно, как указано в обосновании, приведенном в вашем вопросе, что пользователь может
chown
иметь файл, которым владеет этот пользователь, так что он принадлежит другому пользователю. Если принадлежность группы файла и группыchown
пользователей не совпадают, пользователь больше не сможет изменять этот файл.В этом случае ,
chown
тоchgrp
потерпит неудачу , как пользователь больше не будет иметь права изменять разрешения этого файла, аchown user:group
- до тех пор , как группа является одним пользователем собственного - преуспеет.Есть , вероятно , многие другие нишевые ситуации , которые могут привести аналогичным образом , который может включать в себя каталог Sticky и / или setgid бит, файловую систему и / или реализация конкретных списки контроля доступа. Эта тема интересна, например. Бесчисленные перестановки находятся далеко за пределами моего собственного слабого понимания - вот почему этот ответ вики. Если вы читаете это, вы верите, что это стоит улучшить, и вы верите, что умеете - пожалуйста, сделайте .
Здесь также имеется обширная документация по различным возможным последствиям прав доступа к файлам, обхода дерева и символических ссылок, которые могут привести к аналогичному сбою в отношении
-R
экстремальныхchown
приложений:Из заголовков раздела POSIX XRAT Третий и Четвертый Домены :
И на самой
chgrp
странице POSIX есть то, что указывает на возможное незавершенное-R
действие или, по крайней мере, на то, что раньше было:источник
chgrp
chown
Предположение 1: правила определения
chown
успешности проверяют части целевого пользователя и группы независимо, т.е. они имеют формуuser_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters)
.Предположение 2:
chown(file, -1, -1)
успешно.Предположение 3: правила определения
chown
успешности не зависят от того, к какой группе принадлежит файл в данный момент.Следствие: если
chown(file, uid, gid)
бы получилось, то так и было быchown(file, -1, gid) && chown(file, uid, -1)
.Я не знаю ни одного варианта Unix, который нарушил бы любое из этих предположений, они кажутся довольно безопасными.
Это предложение похоже на то, что кто-то в комитете сказал, когда он устал после долгих часов обсуждения того, сколько вариантов может уместиться на
ps
заголовке звонка - или что секретарь переписал - и что никто не поймал во время проверки. В конце концов, есть и другие веские причины, позволяющие автоматически изменять пользователя и группу, в том числе причина производительности, также указанная в обосновании POSIX, а также атомарность (ах, если бы был только один вызов для изменения владельца и прав доступа). ).Случай, когда предположение 3 может быть неверным, относится к системе, где процесс может получить возможность изменять владельцев файлов, но только если у них есть разрешение на запись в файл. Хотя это несколько реалистично, я не знаю ни одной системы, где бы это было. Затем
chgrp
для группы из процесса, который не работает ни от имени пользователя root, ни от пользователя, владеющего файлом, он может отключить файл на более поздний срокchown
.Для рекурсивного вызова существуют крайние случаи, когда весь проход, за
chgrp
которым следует целый проход,chown
может потерпеть неудачу, когда один проход будет успешным. Это не очень убедительный аргумент, поскольку он включает в себя каталоги, которые владелец не имеет разрешения для обхода, и приложение, которое хотело бы защитить от всех таких случаев, должно было бы в любом случае возиться с разрешениями. Тем не менее, это технически соответствует условию этого обоснования. Предположим, что у запущенного процесса есть эффективный пользовательalice
, эффективная группаstaff
и возможность произвольно менять владельцев файлов (не только для того, чтобы их раздавать; в некоторых вариантах Unix есть такая возможность, хотя она редко предоставляется некорневым процессам).источник
chgrp
илиchown
могут быть побочные эффекты, которые влияют на способность делать другие. Например,chown
удаляет способностьchgrp
, это факт.chgrp
очищает бит setuid / setgid, он может очистить некоторую форму ACL или другую форму контекста безопасности ...chown
последующееchgrp
может потерпеть неудачу, но вопрос о том, чтоchgrp
последуетchown
. Хммм, контекст безопасности ... может быть, в системе с обязательным контролем доступаchgrp
может испортить файл и сделать его более невыполнимым? Это кажется надуманным.dir
, поэтому для того, чтобы это работало,chown
сначала нужно обработать глубину файлов, и я не знаю какой-либо реализации, которая это делает. Так что это почти допустимый случай, когда chgrp + chown потерпит неудачу, когда chmod u: g не смог, но это на самом деле не соответствует тексту обоснования.chown
теорий, кажется, конфликтуют.