Почему файлы в моем домашнем каталоге создаются как доступные для записи, несмотря на более строгий umask?

10

Я понял, что разрешения для новых файлов и каталогов ведут себя немного странно. Прежде всего, umask, кажется, возвращает правильный ответ:

$ umask
0002

Это означает полный доступ для моего пользователя и моей группы, нет права на запись для остального мира, нет suid. Но если я создаю файл в моем $ HOME, это выглядит так:

$ ls -l testfile 
-rw-rw-rw- 1 robe robe 0 mar 16 12:58 testfile

то есть, предоставляя доступ для записи каждому. То же самое происходит с каталогами:

$ ls -ld testdir
drwxrwxrwx 2 robe robe 6 mar 16 13:00 testdir

Я думаю, что это то же самое, что иметь umask 0000, а не 0002. Я искал во всех / etc какой-то экземпляр umask, который изменяет значение по умолчанию 0002 или 0022, но не нашел ни одного. Это установка CentOS 5.5 по умолчанию. Любой намек на то, почему это происходит?

rsuarez
источник
3
На каком типе файловой системы находится ваш домашний каталог?
Mattdm
4
А как вы создаете testfileи testdir?
Mattdm
3
@mattdm, вы были правы настаивать: это XFS. Я забыл, что у нас есть отдельные тома для / home, / var и еще несколько. Хотя я часто использую XFS и не видел такого поведения. Как это может быть связано?
rsuarez
2
acl может переопределить umask локально. Возможно ли, что ваши каталоги монтируются с помощью acl?
Фахим Митха
3
Хм, видимо у xfs всегда включен acl. поэтому он может не отображаться в вашем / etc / fstab. Попробуйте запустить getfacl на ваших разделах / каталогах.
Фахим Митха

Ответы:

3

Я не знаю, правильно ли отвечать на мой вопрос. Редакторы, пожалуйста, сообщите об этом, если это не так. Заранее спасибо.

Я думаю, что разгадал эту загадку: проблема заключалась в отсутствии ACL по умолчанию на томах XFS. Вот запись ACL для / srv / backups, одного из затронутых каталогов:

# file: srv/backups
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Всякий раз, когда я делал «тест mkdir» или «тестовый файл касания», он выдавал разрешения 777. Поэтому я сделал это:

setfacl -m d:u::rwx /srv/backups

Оставив ACL так:

# file: srv/backups
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Раньше там (якобы) не было ACL, а сейчас есть. Я вижу знак "+", прикрепленный к разрешениям, когда я делаю "ls -l". И волшебным образом теперь «mkdir test» и «touch testfile» работают с ожидаемыми разрешениями:

# ls -l testfile 
-rw-r--r-- 1 root root 0 Dec 20 10:00 testfile
# ls -ld testdir
drwxr-xr-x+ 2 root root 6 Dec 20 10:00 testdir

Я не знаю, почему это происходит. Я предполагаю, что XFS не нравится отсутствие ACL по умолчанию, и ведет себя странно, когда это происходит. Кроме того, я видел это только в CentOS, а не в Debian / Ubuntu. Может быть, это связано с версией XFS в ядре, или что-то в этом роде. Без понятия.

Во всяком случае, это решает дело для меня. Большое спасибо за все предложения :-)

rsuarez
источник
Ответ на свой вопрос вполне приемлем .
Кит Томпсон,
0

Вызов creat может явно указывать разрешения, которые имеют приоритет над umask.

Вы не ответили, как вы создаете testfile,testdir.

Создайте файл, используя touch testfile, затем перечислите и опубликуйте разрешения

BSD
источник
Извините за задержку. Я сделал тест с использованием «touch testfile», а также «mkdir testdir», с похожими результатами. umask, кажется, установлен на «0000», потому что они созданы с разрешениями 777.
rsuarez
0

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

Эндрю
источник
1
Нет, нет ACL по умолчанию. Кажется, это как-то связано с XFS, потому что это происходит только в томах XFS. Но все равно спасибо.
rsuarez
-1

Просто найдите переменную USERGROUPS_ENAB в /etc/login.defs

Их комментарий для того, чтобы отключить его # USERGROUPS_ENAB да

Если вы также хотите изменить umask вашего текущего пользователя, вы должны сначала выполнить предыдущую процедуру, а затем сделать следующее.

пример для 027

echo "umask 027" >> ~ / .bashrc && pkill -KILL -u your_username_here

echo "umask 027" >> ~ / .bashrc эта команда установит значение umask по умолчанию для вашего профиля

это заставит вас выйти

после входа снова

просто запустите команду umask и посмотрите, работает ли она для вас

user336810
источник