В операционных системах Linux и Unix все новые файлы создаются с набором разрешений по умолчанию. Утилита umask позволяет просматривать и устанавливать маску режима создания файла, который определяет разрешения бит для вновь создаваемых файлов или каталогов.
Она используется командами mkdir, touch, tee и другими, которые создают новые файлы и каталоги.
Разрешения Linux
Прежде чем идти дальше, давайте кратко объясним модель разрешений Linux.
В Linux каждый файл связан с владельцем и группой и ему назначены права доступа для трех разных классов пользователей:
- владелец файла.
- члены группы.
- все остальные.
Существует три типа разрешений, которые применяются к каждому классу:
- разрешение на чтение.
- разрешение на запись.
- разрешение на выполнение.
Эта концепция позволяет вам указать, каким пользователям разрешено читать файл, записывать в файл или выполнять файл.
Чтобы просмотреть права доступа к файлу, используйте команду ls:
ls -l dirname
drwxr-xr-x 12 andreyex users 4.0K Apr 8 20:51 dirname |[-][-][-] [------] [---] | | | | | | | | | | | +-----------> Group | | | | +-------------------> Owner | | | +----------------------------> Others Permissions | | +-------------------------------> Group Permissions | +----------------------------------> Owner Permissions +------------------------------------> File Type
Первый символ представляет тип файла, который может быть обычным file ( -), directory ( d), символической ссылкой ( l) или любым другим специальным типом файла.
Следующие девять символов представляют разрешения, три набора по три символа в каждом. Первый набор показывает права владельца, второй – права группы, а последний набор – права доступа для всех остальных.
Символ r с восьмеричным значением 4 стоит для чтения, w с восьмеричным значением 2 для записи, x с восьмеричным значением 1 для разрешения на выполнение и ( -) с восьмеричным значением 0 для без разрешений.
Есть также три типа разрешений специального файла: setuid, setgid и Sticky Bit.
В приведенном выше примере ( rwxr-xr-x) означает, что владелец имеет разрешения на чтение, запись и выполнение ( rwx), группа и другие пользователи имеют разрешения на чтение и выполнение.
Если мы представим права доступа к файлу с помощью числовой записи, мы подойдем к числу 755:
- Владелец: rwx=4+2+1 = 7
- Группа: r-x=4+0+1 = 5
- Другое: r-x=4+0+1 = 5
Когда они представлены в цифровом формате, разрешения могут иметь три или четыре восьмеричных цифры (0-7). Первая цифра представляет специальные разрешения, а если она опущена, это означает, что никаких специальных разрешений для файла не установлено. В нашем случае так 755 же, как 0755. Первая цифра может быть комбинацией 4 для setuid, 2 для setgidи 1 для Sticky Bit.
Права доступа к файлам можно изменить с помощью команды chmod, а владельца – с помощью команды chown.
Понимание масок
По умолчанию в системах Linux разрешения 666 на создание по умолчанию предназначены для файлов, которые дают права на чтение и запись для пользователя, группы и других, а также 777 для каталогов, что означает разрешение на чтение, запись и выполнение для пользователя, группы и других. Linux не позволяет создавать файл с разрешениями на выполнение.
Разрешения на создание по умолчанию можно изменить с помощью утилиты umask.
umask влияет только на текущую среду оболочки. В большинстве дистрибутивов Linux значение umask по умолчанию для всей системы устанавливается в файле pam_umask.so или /etc/profile.
Если вы хотите указать другое значение для каждого пользователя, отредактируйте файлы конфигурации оболочки пользователя, такие как ~/.bashrc или ~/.zshrc. Вы также можете изменить текущее значение umask, выполнив umask с последующим желаемым значением.
Чтобы просмотреть текущее значение маски, просто введите umask без аргументов:
umask
Вывод будет включать
022
Это значение umask содержит биты прав доступа, которые НЕ будут установлены во вновь создаваемых файлах и каталогах.
Как мы уже упоминали, разрешения на создание файлов по умолчанию 666 и для каталогов 777. Чтобы вычислить биты прав доступа для новых файлов, вычтите значение umask из значения по умолчанию.
Например, чтобы рассчитать, как uname 022 повлияет на вновь созданные файлы и каталоги, используйте:
- Файлы: 666 – 022 = 644. Владелец может читать и изменять файлы. Группа и другие могут только читать файлы.
- Каталоги: 777 – 022 = 755. Владелец может перейти в каталог и просмотреть список, изменить, создать или удалить файлы в каталоге.
Вы также можете отобразить значение маски в символической записи, используя опцию -S:
umask -S
u=rwx,g=rx,o=rx
В отличие от числовой записи, значение символической записи содержит биты прав доступа, которые будут установлены во вновь создаваемых файлах и каталогах.
Установка значения маски
Маска создания файла может быть установлена с использованием восьмеричной или символической записи. Чтобы сделать изменения постоянными, установите новое значение umask в глобальном файле конфигурации, таком как файл /etc/profile, который будет влиять на всех пользователей, или в файлах конфигурации оболочки пользователя, таких как ~/.profile, ~/.bashrc или ~/.zshrc которые будут влиять только на пользователя. Пользовательские файлы имеют приоритет над глобальными файлами.
Прежде чем вносить изменения в значение umask, убедитесь, что новое значение не представляет потенциальной угрозы безопасности. Значения менее строгие, чем 022 следует использовать с большой осторожностью. Например, umask 000 означает, что любой пользователь будет иметь права на чтение, запись и выполнение для всех вновь создаваемых файлов.
Допустим, мы хотим установить более строгие разрешения для вновь создаваемых файлов и каталогов, чтобы другие не могли обращаться cd к каталогам и читать файлы. Разрешения, которые мы хотим, 750 для каталогов и 640 для файлов.
Чтобы вычислить значение umask, просто вычтите требуемые разрешения из разрешения по умолчанию:
Umask значение: 777-750 = 027
Желаемое значение umask, представленное в числовой записи 027.
Чтобы навсегда установить новое значение для всей системы, откройте файл /etc/profile в текстовом редакторе:
sudo nano /etc/profile
и измените или добавьте следующую строку в начале файла /etc/profile:
umask 027
Чтобы изменения вступили в силу, выполните следующую sourceкоманду или выйдите из системы и войдите в систему:
source /etc/profile
Для проверки новых настроек мы создадим один новый файл и каталог, используя mkdir и touch:
mkdir newdirtouch newfile
Если вы проверите разрешения с помощью команды ls, вы заметите, что новый файл имеет 640 и новый каталог 750 разрешений, как мы хотели:
drwxr-x--- 2 andreyex users 4096 Jul 4 18:14 newdir -rw-r----- 1 andreyex users 0 Jul 4 18:14 newfile
Другой способ установить маску создания файла – использовать символическую запись. Например так umask u=rwx, g=rx, o= тоже же, как umask 027.
Заключение
В этой статье мы объяснили права доступа Linux и как использовать команду umask для установки битов разрешений для вновь создаваемых файлов или каталогов.
Для получения дополнительной информации введите man umask в своем терминале.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.