У меня странная ситуация с разрешениями, которую я не могу объяснить. Позвольте мне объяснить моих пользователей и группу, а затем показать вам права доступа к папке.
drwxrwsr-x. 2 jenkinsuser applog 4096 Jul 15 09:56 .
drwxrwxr-x. 13 jenkinsuser jenkinsuser 4096 Jul 15 09:40 ..
-rw-r--r--. 1 apache applog 750409 Jul 15 09:56 application.log
У меня 2 пользователя apache и jenkinsuser. Оба являются частью группы с именем applog. У меня есть папка журнала с разрешениями, указанными выше. Для папки установлен SGID, поэтому для любых новых файлов будет установлена группа applog. Как вы можете видеть, в файле application.log для файла установлено значение rw-r - r--, что я понимаю, поскольку пользователь apache является единственным пользователем, который может писать в файл.
Как jenkinsuser я могу открыть файл с помощью vi / vim, поскольку у applog есть доступ только для чтения. Когда я сохраняю его (например: w в vi), он говорит 'readonly' option is set (add ! to override)
. Когда я принудительно сохраняю (например: w! В vi), он сохраняется с новыми разрешениями, показанными ниже.
drwxrwsr-x. 2 jenkinsuser applog 4096 Jul 15 11:24 .
drwxrwxr-x. 13 jenkinsuser jenkinsuser 4096 Jul 15 09:40 ..
-rw-r--r--. 1 jenkinsuser applog 750448 Jul 15 11:24 application.log
Итак, мой вопрос: почему jenkinsuser может принудительно сохранить файл, если у него НЕТ доступа на запись к нему? Что мне не хватает?
vi удалил старый файл и записал новый с тем же именем. У вас есть разрешение на удаление старого файла, поскольку у вас есть права на запись в каталог, который его содержит. Чтобы удалить файл, вы изменяете (записываете) индексный дескриптор каталога, удаляя ссылку на существующий файл. Когда счетчик ссылок файла становится равным нулю, файловая система освобождает индексный дескриптор файла и пространство. Затем вы снова записываете индексный дескриптор каталога, добавляя к нему новый файл.
Чтобы этого не произошло, вам необходимо удалить разрешение на запись в каталог.
Обратите внимание, что у вас также могут быть некоторые ACL для файла и каталога, которые переопределяют разрешения, которые вы видите в ls -l
. Увидеть .
справа от разрешений в каждой строке списка? Это показывает, что некоторые ACL активны. Чтобы увидеть их, бегите getfacl /dir/name
.