Как права доступа к файлам применяются к вновь создаваемым файлам?

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

setguid

Здесь работают 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 под названием: Можно ли создавать файлы с разрешениями, установленными в командной строке? только для таких методов.

Другие способы? Просто переопределите umask. Скорее всего, файловый браузер либо делает это, либо просто полностью игнорирует umaskи устанавливает файл, используя те разрешения, для которых он настроен.

SLM
источник
Я думал, что umask должен удалить привилегии, а не добавить. Или я что-то упустил?
Переполнение вопроса
@QuestionOverflow - вы маскируете элементы управления, какие разрешения разрешены при создании файлов и каталогов. Отсюда и его имя. Он маскирует биты от использования в процессе создания.
SLM
Мой Умаск читает 0002. Если umask устанавливает разрешения вместо удаления прав, тогда бит выполнения будет установлен для пользователя и группы, когда это произойдет touch, но это не так.
Переполнение вопроса
@QuestionOverflow - это ограничение touchкоманды. Смотрите ссылку я включенную в моем А. Эта ссылка: unix.stackexchange.com/questions/47178/...
ОДС
Просто поясним несколько моментов, основываясь на комментариях: 1) права доступа к новому файлу всегда определяются umask + программой, использованной для создания файла, 2) права доступа никогда не наследуются от родительского каталога.
Вопрос переполнен