Root не может chmod?

12

В моем отделе у нас есть небольшой файловый сервер с CentOS и samba. У меня есть root-доступ, чтобы я мог выполнять некоторые базовые операции.

Сегодня я делал некоторые папки только для чтения, поэтому я сделал это chmod -R -w some-folder/, но для нескольких файлов я получил ответ:

chmod: ./somefile.pdf: новые разрешения: r-xrwxr-x, а не r-xr-xr-x

После добавления -vя не получаю много информации:

режим `./somefile.pdf 'сохраняется как 0575 (r-xrwxr-x)

Я попробовал следующее, чтобы убедиться:

# touch test-file
# chmod -v -R -w .
mode of `./somefile.pdf' retained as 0575 (r-xrwxr-x)
chmod: ./somefile.pdf: new permissions are r-xrwxr-x, not r-xr-xr-x
mode of `./test-file' changed to 0444 (r--r--r--)

Я не могу придумать каких-либо веских причин, почему root не сможет выполнить chmod?

Некоторые лакомые кусочки:

  • Файловая система не только для чтения (только некоторые файлы отказались от chmodded).
  • Я запускал команды chmod от имени пользователя root, но безрезультатно.
  • Раздел, в котором находятся файлы - это ext4.

ОБНОВЛЕНИЯ : Это вывод для lsattrфайла и содержит папку:

# lsattr somefile.pdf
-------------e- somefile.pdf
# lsattr ..
-------------e- ../myfolder

Там нет setuid настоящего ( ls -la):

dr-xr-xr-x  2 userxyz abc   4096 May 30 09:29 .
dr-xr-xr-x 17 userxyz abc   4096 Sep 19  2013 ..
-r-xrwxr-x  1 userxyz abc 275150 Aug  6  2013 somefile.pdf
Roflo
источник
Вы обрабатываете эти файлы удаленно?
Лучано Андресс Мартини
1
Каков вывод lsattrэтих файлов и каталога над ним?
Райдер

Ответы:

17

По словам источников, у вас наивный ожидаемый режим . После того, как я отказался от этого, я думаю, что причина - это -wвариант, а не то, что вы ожидаете. Вы должны дать g-wили ugo-w(в соответствии с вашими потребностями).

Без указания явной цели (a, o, g, u) могут быть получены некоторые неожиданные результаты в соответствии со значением umask. Я думаю, что такое дополнительное сообщение сделано из-за таких неожиданных изменений.

Изменить: источники в http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/chmod.c#n301

Взято из кеша Google, комментарий в этом коде, которого больше нет:

/ * Если это правда, диагностировать сюрпризы от наивных злоупотреблений, таких как "chmod -r file". POSIX позволяет проводить диагностику здесь, поскольку предполагается использовать переносимый код. "chmod - -r файл" * /

Джакомо Катенацци
источник
Да, так и было. Я изменил это на ugo-wи больше не жалуюсь. Я подожду некоторое время, прежде чем принять из вежливости к потенциальным ответчикам.
Roflo
1
И я приветствую правки или лучшие ответы, потому что я до сих пор не понимаю, почему chmod работает таким странным образом.
Джакомо Катенацци
5
man chmod: «Комбинация букв ugoa контролирует, какой доступ пользователей к файлу будет изменен [...] Если ни один из них не задан, то эффект такой, как если бы (а) были даны, но биты, которые установлены в на маску не влияют ". Таким образом, вы можете делать такие вещи, как файл chmod + w, и предоставлять доступ на запись только тем, кто получит его при создании нового файла. Негативное поведение кажется немного запутанным, поэтому предупреждение кажется хорошей идеей.
ilkkachu