Когда chmod перестал работать?

Ctrl+G прервет поиск; запуск нового начнется с последней записи истории снова

8
04.08.2016, 00:28
4 ответа

Только владелец файла или пользователь root, могут изменить полномочия файла. Текущие полномочия на файле или на его родительском каталоге являются несоответствующим ¹. Это указано в POSIX:

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

На большинстве нельдов, “соответствующие полномочия” означают работать как корень. Если эти условия не соблюдают, chmod обычно сбои с EPERM, хотя другие поведения, такие как прерывание программы из-за нарушения безопасности разрешены.

Кроме того, некоторые варианты Unix имеют системные особенные методы авторизации или запрещения chmod. Например, Linux имеет возможность (CAP_FOWNER) это позволяет процессам изменять полномочия файла и другие метаданные независимо от его владельца.

Существуют другие причины chmod мог бы перестать работать даже при том, что файл существует, доступен и имеет соответствующего владельца. Общие включают файловую систему только для чтения или файловую систему, которая не поддерживает полномочия, такие как FAT. Менее общие включают определенные для системы ограничения, такие как неизменный атрибут в ext2 файловой системе и преемниках Linux.

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

3
27.01.2020, 20:12

Детали, которые Вы хотите, находятся в странице руководства для chmod () системный вызов. Вместо man chmod использовать man 2 chmod. man chattr и man 2 setxattr заинтересует Вас также; атрибуты файла, что chattr/setxattr () приращение набора поведение традиционных полномочий Unix установлен chmod.

2
27.01.2020, 20:12
  • 1
    я попробую это, когда я стану безработным. –  Wug 22.10.2012, 15:58

Согласно стандарту UNIX, "Эффективный идентификатор пользователя процесса должен соответствовать владельцу файла или процесса, должен иметь соответствующие полномочия, чтобы сделать это".

Биту о соответствующих полномочиях нужно некоторое объяснение. В традиционных системах chmod позволяется на всех файлах, когда эффективный UID (на Linux файловая система, которую UID, но видят ниже) процесса 0 [т.е. корень].

Linux имеет систему, названную возможностями, и CAP_FOWNER бит управляет способностью использовать chmod на всех файлах. По умолчанию все возможности предоставляют когда execve() вызов создает корневой процесс (или путем выполнения setuid двоичного файла или когда реальный UID 0), или когда эффективный UID установлен на 0 (и удален, когда он установлен на ненулевое значение), и ряд возможностей включая CAP_FOWNER включены, когда файловая система UID установлен на 0 (и отключен, когда это установлено на ненулевое значение). Прочитайте страницу справочника для получения дополнительной информации.

Вы упомянули липкий бит, но опустили то, что пользователи также не могут установить setgid, обдумал файл, когда они не находятся в группе, которая присвоена файлу. setuid или setgid укусили, может также быть проигнорирован при дополнительных определенных реализацией обстоятельствах.

1
27.01.2020, 20:12

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

Почему не делают Вас, просто пытаются видеть?

$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw----  1 root  staff  0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted
0
27.01.2020, 20:12
  • 1
    , который я вводил по абсолютному адресу в нем, но это - связанная безопасность и я не хочу случайно пропускать пограничный случай. –  Wug 22.10.2012, 05:43
  • 2
    Если Вы волнуетесь по поводу пограничного случая, Вы можете (по крайней мере, для уменьшения рисков), делают chmod, и затем проверьте полномочия на нем. Если Вы чувствуете себя параноиками, сделайте fsync перед проверкой. –  Reinstate Monica - ζ-- 22.10.2012, 13:32

Теги

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