Як umask впливає на АПЛ?


12

Чи може хтось пояснити мені, як umaskвпливає маска за замовчуванням новостворених файлів, якщо активовано ACL? Чи є якась документація з цього приводу?

Приклад:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

Я хотів би очікувати mask:rwx. Насправді після встановлення, umaskнаприклад, 027я отримую очікувану поведінку.


З умаском 077 ви отримаєте mask::rw-. Але це насправді не ваше питання, правда?
slm

@slm Це частина мого запитання. Хочу знати, як маска нових файлів залежить від umask. Я був дуже здивований, що з 077 я отримую, mask::rw-а не mask::rwxяка була маска каталогу за замовчуванням.
jofel

Гаразд, зараз я оновлюю свою відповідь на прикладах, які повинні допомогти прояснити це. Дайте мені пару хвилин.
slm

Це питання тісно пов'язане.
jofel

Відповіді:


10

Я знайшов цей приклад під назвою: ACL та MASK в Linux . У цій статті продемонстровано наступні приклади, які, на мою думку, допомагають зрозуміти, як діють ACL та umaskвзаємодіють між собою.

Фон

Коли файл створюється в системі Linux 0666, застосовуються дозволи за замовчуванням , тоді як при створенні каталогу 0777застосовуються дозволи за замовчуванням .

приклад 1 - файл

Припустимо, ми встановимо наш umask на 077 і торкнемось файлу. Ми можемо використовувати, straceщоб побачити, що насправді відбувається, коли ми це робимо:

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

У цьому прикладі ми бачимо, що системний виклик open()робиться з дозволами 0666, однак, коли umask 077потім застосовано ядро, наступні дозволи видаляються ( ---rwxrwx), і нам залишається rw-------ака 0600.

приклад - 2 каталогу

Таку ж концепцію можна застосувати і до каталогів, за винятком того, що замість дозволів за замовчуванням 0666, вони є 0777.

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

Цього разу ми використовуємо mkdirкоманду. Потім mkdirкоманда викликала системний виклик mkdir(). У наведеному вище прикладі ми бачимо, що mkdirкоманда викликала mkdir()системний виклик з дозволами за замовчуванням 0777( rwxrwxrwx). На цей раз за допомогою umask з 022наступних дозволів видалено ( ----w--w-), тому нам залишається 0755 ( rwxr-xr-x), коли створені каталоги.

приклад 3 (Застосування ACL за замовчуванням)

Тепер давайте створимо каталог і продемонструємо, що відбувається, коли до нього застосовано ACL за замовчуванням разом з файлом всередині нього.

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

Тепер створимо файл aclfile:

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

Тепер отримайте дозволи для новоствореного файлу:

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

Зверніть увагу на маску, mask::rw-. Чому це не mask::rwxтак, як було створено каталог?

Перевірте luvlyфайл журналу, щоб побачити, які дозволи за замовчуванням використовувались для створення файлу:

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

Тут це стає дещо заплутаним. За допомогою маски, встановленої під rwxчас створення каталогу, ви б очікували такої ж поведінки для створення файлу, але це не працює таким чином. Це тому, що ядро ​​викликає open()функцію з дозволами за замовчуванням 0666.

Узагальнити

  • Файли не отримають дозволу на виконання (маскування чи ефективності). Не має значення, який метод ми використовуємо: ACL, umask або маска та ACL.
  • Довідники можуть отримати дозволи на виконання, але це залежить від того, як встановлено поле маскування.
  • Єдиний спосіб встановити дозволи на виконання файлу, який знаходиться під дозволом ACL - це встановити їх вручну за допомогою chmod.

Список літератури


@jofel - дайте мені знати, чи це має сенс.
slm

@ я дуже дякую за детальну відповідь. Це наближає мене до моєї реальної проблеми: Дозвіл на групу в системному виклику chmod впливає на маску файлу ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx). Можливо, я повинен почати нове запитання з цього приводу ...
jofel

@jofel - так, це звучить як інше питання.
slm

@sIm і він вже відповіли тут .
jofel

"Коли файл створений в системі Linux, застосовуються дозволи за замовчуванням 0666 ..." - це не зовсім правильно, оскільки це залежить від створення програми.
ilkkachu

2

з метою безпеки операційна система linux не дозволяє автоматично створювати файл з бітом виконання. Це означає, щоб кібератаки не могли записувати програми в такі файли та виконувати їх, якщо вони отримують доступ до вашого сервера. Це просто запобіжна безпека. Вам назавжди доведеться вручну встановити біт виконання файлів після створення їх за допомогою утиліти chmod

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.