Як дозволи на використання файлів застосовуються до новостворених файлів?


12

У мене є каталог, у якому встановлено такі дозволи:

drwxr-s---. user group folder

На робочому столі я отримую доступ до цієї папки та клацну правою кнопкою миші, щоб створити новий виклик файлу foo.txt. Потім за допомогою терміналу я створив ще один файл за допомогою команди $ touch bar.txt.

Коли я перевіряю дозволи на ці файли, у мене є:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Я очікував -rw-r-----. user group. Як виник додатковий дозвіл на написання для групи та дозвіл на читання для інших?

Відповіді:


16

сукупність

Тут працюють 2 сили. Першим з них є setgid біт , який включений в папку, folder.

drwxr-s---. user group folder

Оце sв пакет символів на початку цього рядка. Вони згруповані таким чином:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

Це r-sозначає, що будь-які файли чи каталоги, створені всередині цієї папки, матимуть групу автоматично встановлену для групи group.

Ось що спричинило файли foo.txtта bar.txtстворити так:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

дозволи та умаск

Дозволи, які ви бачите, - інша справа. Вони регулюються налаштуваннями для вашого umask. Ви можете бачити, на що umaskналаштовано команду umask:

$ umask
0002

ПРИМІТКА. Ці біти також називаються бітами "режиму".

Це маска, тому вона відключить будь-який біт, пов’язаний з увімкненими дозволами. У цьому прикладі єдиний біт, який я хочу відключити - це дозволи на запис для інших.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

Представлення "біт" у цій команді є у десятковій формі. Отже, 2 дорівнює 010 у двійковій формі, що є бітом запису. 4 (100) означатиме, що ви хочете читати вимкнено. 7 (111) означає, що ви хочете прочитати / записати / виконати всі відключені. Створюючи це звідси:

$ umask 007

Відключить читання / запис / виконання бітів для інших користувачів.

То що ж робити з вашими файлами?

Добре umaskкерує дозволами, які будуть встановлені при створенні нового файлу. Отже, якщо у нас був такий umaskнабір:

$ umask 007

І почали торкатися нових файлів, ми побачили їх створені так:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Якщо ми змінили це на щось інше, скажіть це:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Це не вплине на файли, які ми вже створили. Дивіться тут:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

То що ж відбувається з файловим браузером?

Це umaskте, що я назвав "м'яким" налаштуванням. Це ні в якому разі не є абсолютним і може бути пройдено досить легко в Unix різними способами. У багатьох інструментах є комутатори, які дозволяють задавати дозволи як частину їх роботи.

Візьмемо mkdirдля прикладу:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

За допомогою -mперемикача ми можемо перекрити umask. У touchкоманди немає цього засобу, тому ви повинні бути творчими. Дивіться це питання U&L Q&A під назвою: Чи можна створювати файли з дозволами, встановленими в командному рядку? тільки для таких методів.

Інші способи? Просто переосмислити umask. Браузер файлів, швидше за все, або робить це, або просто повністю ігнорує umaskта закладає файл, використовуючи всі дозволи, які налаштовано робити.


Я думав, що umask повинен видалити привілеї, а не додати. Або я щось пропускаю?
Переповнення запитань

@QuestionOverflow - ви маскуєте контроль над тим, які дозволи дозволяються створювати файли та каталоги. Звідси і його назва. Це маскує біти від використання в процесі створення.
slm

Мій umask читає 0002. Якщо umask встановлює дозволи, замість видалення дозволів, тоді біт виконання буде встановлено як для користувача, так і для групи, коли я це робити touch, але це не так.
Переповнення питання

@QuestionOverflow - це обмеження touchкоманди. Дивіться посилання, яке я включив у свій А. Це посилання: unix.stackexchange.com/questions/47178/…
slm

Просто для уточнення кількох моментів на основі коментарів: 1) дозволи нового файлу завжди визначаються umask + програма, що використовується для створення файлу; 2) дозволи ніколи не успадковуються від батьківського каталогу.
Переповнення питання
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.