При каких обстоятельствах не получится chmod
?
Я посмотрел на справочную страницу, но она только определяет использование и не дает подробностей о том, в каких обстоятельствах он не будет работать.
Я предполагаю, chmod
будет работать, если:
- ты корень
- у вас есть целевой файл (и вы устанавливаете бит в обычном режиме, т.е. не в битах, другие)
Могут ли пользователи использовать chmod
для изменения прав доступа к файлу, к которому у них есть групповой доступ? Это связано с доступом на чтение / запись?
Ответы:
Только владелец файла или пользователь root может изменять права доступа к файлу. Текущие разрешения для файла или его родительского каталога не имеют значения¹. Это указано в POSIX :
В большинстве устройств «соответствующие привилегии» означают запуск от имени пользователя root. Если эти условия не выполняются,
chmod
обычно происходит сбойEPERM
, хотя разрешены другие действия, такие как прерывание программы из-за нарушения безопасности.Кроме того, некоторые варианты Unix имеют специфичные для системы способы авторизации или запрета
chmod
. Например, в Linux есть функция (CAP_FOWNER
), которая позволяет процессам изменять права доступа к файлу и другие метаданные независимо от его владельца.Существуют и другие причины, по которым
chmod
может произойти сбой, даже если файл существует, доступен и имеет соответствующего владельца. Общие включают файловую систему только для чтения или файловую систему, которая не поддерживает разрешения, такие как FAT. Менее распространенные из них включают специфичные для системы ограничения, такие как неизменяемый атрибут в файловой системе ext2 Linux и его преемники.¹ За исключением тех случаев, когда запущенный процесс
chmod
должен иметь возможность доступа к файлу, поэтому он должен иметь разрешение на выполнение для каталога, содержащего файл, и любого другого каталога, который он проходит для этого.источник
Сведения, которые вы хотите, находятся на странице руководства для системного вызова chmod (). Вместо
man chmod
использованияman 2 chmod
.man chattr
иman 2 setxattr
будет вас интересовать; атрибуты файла, которые устанавливает chattr / setxattr (), увеличивают поведение традиционных прав доступа Unix, установленных chmod.источник
Согласно стандарту UNIX, «эффективный идентификатор пользователя процесса должен соответствовать владельцу файла, или процесс должен иметь соответствующие привилегии для того, чтобы сделать это».
Немного о соответствующих привилегиях требует пояснения. В традиционных системах chmod разрешен для всех файлов, когда эффективный UID (в Linux UID файловой системы, но см. Ниже) процесса равен 0 [то есть root].
В Linux есть система, называемая возможностями , и
CAP_FOWNER
бит контролирует возможность использованияchmod
всех файлов. По умолчанию все возможности предоставляются, когдаexecve()
вызов создает корневой процесс (либо путем выполнения двоичного файла setuid, либо когда реальный UID равен 0), либо когда эффективный UID установлен в 0 (и удаляется, когда для него установлено ненулевое значение). и набор возможностей, в том числеCAP_FOWNER
включается, когда UID файловой системы установлен в 0 (и отключен, когда для него установлено ненулевое значение). Прочитайте man-страницу для более подробной информации.Вы упомянули залипший бит, но пропустили тот факт, что пользователи также не могут устанавливать бит setgid для файла, когда они не входят в группу, которая назначена этому файлу. Бит setuid или setgid также может игнорироваться в дополнительных обстоятельствах, определенных реализацией.
источник
Почему бы тебе просто не попробовать и посмотреть?
источник
chmod
, а затем проверить разрешения для него. Если вы чувствуете себя параноиком, сделайте этоfsync
перед проверкой.