Что такое код umask


Содержание

Что такое код umask

Umask — (abbreviated from user mask ) is a command and a function in POSIX environments which set the default permission modes for newly created files and directories of the current process. Modern Unix systems allow umasks to be specified in 2 ways * A… … Wikipedia

umask — (от англ. user file creation mode mask маска режима создания пользовательских файлов) функция среды POSIX, изменяющая права доступа, которые присваиваются новым файлам и директориям по умолчанию. Права доступа файлов, созданных… … Википедия

Umask — (user file creation mode mask, masque de création de fichier par l utilisateur) est un attribut des processus Unix, ainsi que la commande POSIX qui permet de modifier cet attribut. Le umask définit les permissions par défaut d un répertoire ou d… … Wikipédia en Français

Umask — Saltar a navegación, búsqueda umask (abreviatura de user mask, máscara de usuario) es una orden y una función en entornos POSIX que establece los permisos por defecto para los nuevos archivos y directorios creados por el proceso actual. Los… … Wikipedia Español

umask — (abreviatura de user mask, máscara de usuario) es una orden y una función en entornos POSIX que establece los permisos por defecto para los nuevos archivos y directorios creados por el proceso actual. Los sistemas Unix modernos permiten que las… … Wikipedia Español

umask — (user file creation mode mask, masque de création de fichier par l utilisateur) est un attribut des processus Unix, ainsi que la commande POSIX qui permet de modifier cet attribut. Le umask définit les permissions par défaut d un répertoire ou d… … Wikipédia en Français

Umask (Unix) — umask umask (user file creation mode mask, masque de création de fichier par l utilisateur) est un attribut des processus Unix, ainsi que la commande POSIX qui permet de modifier cet attribut. Le umask définit les permissions par défaut d un… … Wikipédia en Français

Fmask — The following is copy pasted from man mount . umask=value Set the umask (the bitmask of the permissions that are not present). The default is the umask of the current process. The value is given in octal. dmask=value Set the umask applied to… … Wikipedia

Fstab — The fstab (for file systems table ) file is commonly found on Unix systems as part of the system configuration. The fstab file typically lists all available disks and disk partitions, and indicates how they are to be initialized or otherwise… … Wikipedia

fstab — The fstab (/etc/fstab) (or file systems table) file is a system configuration file commonly found on Unix systems. The fstab file typically lists all available disks and disk partitions, and indicates how they are to be initialized or otherwise… … Wikipedia

Команда umask

При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask — это пользовательская маска ( user mask ), которая используется для назначения прав доступа новым файлам и директориям.

Узнать текущее значение umask можно с помощью одноименной команды:

Значение umask для всех пользователей по умолчанию устанавливается в файлах /etc/.bashrc или /etc/.profile . Если в этих файлах добавить или изменить строку с umask :

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

Что такое umask 0002 и 0022?

Режим полного доступа для для директории равен 0777 ( rwxrwxrwx ), а для файла — 0666 ( rw-rw-rw- ).

  • По умолчанию для обычного пользователя используется маска 0002 . Права для новой директории — 0775 , для нового файла — 0664 .
  • По умолчанию для суперпользователя ( root ) используется маска 0022 . Права для новой директории — 0755 , для нового файла — 0644 .

Как определить права директории для маски 0002 (обычный пользователь):

  • Полный доступ: 0777
  • Вычитаем маску: 0002
  • Итоговые права: 0755

Как определить права файла для маски 0002 (обычный пользователь):

  • Полный доступ: 0666
  • Вычитаем маску: 0002
  • Итоговые права: 0664

Как определить права директории для маски 0022 (пользователь root ):

  • Полный доступ: 0777
  • Вычитаем маску: 0022
  • Итоговые права: 0755

Как определить права файла для маски 0022 (пользователь root ):

  • Полный доступ: 0666
  • Вычитаем маску: 0022
  • Итоговые права: 0644

Что такое «umask» и как оно работает?

Я считаю, что umask — это то, что контролирует права доступа к файлам, но не до конца понимаю.

После запуска umask 0644 в терминале я не могу прочитать файлы, созданные в текстовом редакторе командной строки nano , Я заметил, что права доступа к этому файлу установлены на 0022 вместо по умолчанию 0755 ,

Как работает Umask? Я думал, что могу просто удалить каждую цифру в маске из 0777 , 7 — 6 = 1 а также 7 — 4 = 3 поэтому я ожидаю, что разрешения будут 0133 , но, видимо, это не тот случай.

  1. Что такое Умаск? Объясните мне, как будто я был «Linux Noob»
  2. Как рассчитать с Umask?
  3. Какие варианты использования для Umask?

5 ответов

Umask действует как набор разрешений, которые приложения не могут устанавливать для файлов. Это маска создания режима файла для процессов и не может быть установлена ​​для самих каталогов. Большинство приложений не создают файлы с установленными разрешениями на выполнение, поэтому по умолчанию они имеют значение 666 , который затем модифицируется Umask.

Поскольку вы установили umask для удаления битов чтения / записи для владельца и битов чтения для других, по умолчанию, например, 777 в приложениях приведет к разрешению файла 133 , Это будет означать, что вы (и другие) можете выполнить файл, а другие смогут записать в него.

Если вы хотите, чтобы файлы не были доступны для чтения / записи / выполнения кем-либо, кроме владельца, вы должны использовать umask вроде 077 отключить эти разрешения для группы и других.

Напротив, маска 000 сделает вновь созданные каталоги доступными для чтения, записи и просмотра для всех (разрешения будут 777 ). Такой umask крайне небезопасен, и вы никогда не должны устанавливать umask в 000 ,

Маска по умолчанию в Ubuntu была 022 Это означает, что вновь созданные файлы доступны для чтения всем, но только для записи владельцу:

Начиная с Ubuntu Oneiric (11.10), стандартное значение umask было уменьшено до 002 , который расширяет доступ на запись к группе владельца:

Просмотр и изменение umask

Чтобы просмотреть текущие настройки umask, откройте терминал и выполните команду:

Чтобы изменить настройку umask текущей оболочки на что-то другое, скажем, 077, выполните:

Чтобы проверить, работает ли этот параметр или нет, вы можете создать новый файл (права доступа к существующему файлу не будут затронуты) и показать информацию о файле, запустите:

Параметр umask наследуется процессами, запущенными из одной оболочки. Например, запустите текстовый редактор GEdit, выполнив gedit в терминале и сохраните файл с помощью gedit. Вы заметите, что на вновь созданный файл влияет та же настройка umask, что и в терминале.

Вариант использования: многопользовательская система

Если вы работаете в системе, которая используется несколькими пользователями, желательно, чтобы другие не могли читать файлы в вашем домашнем каталоге. Для этого умаск очень полезен. редактировать

/.profile и добавьте новую строку с:

Вы должны повторно войти в систему для этого изменения umask в


/.profile вступить в силу. Затем вам нужно изменить существующие права доступа к файлам в вашем домашнем каталоге, удалив бит чтения, записи и выполнения для всего мира. Откройте терминал и выполните:

Если вы хотите, чтобы этот параметр umask применялся ко всем пользователям в системе, вы можете отредактировать файл профиля всей системы по адресу /etc/profile ,

В дополнение к хорошему обсуждению в принятом ответе, стоит добавить еще несколько моментов о umask , со ссылкой на то, как он управляется в 12.04 и далее.

Умаск и Пам_Умаск

Маска по умолчанию теперь в /etc/login.defs и не в /etc/profile , как официальное примечание в /etc/profile гласит:

Pam_umask ниже кратко поясняется, и следует сказать, что файл по умолчанию для пользователя, в котором пользователь может разместить свою пользовательскую настройку umask, по-прежнему

Pam_umask является одним из многих важных модулей PAM, которые имеют решающее значение в работе Ubuntu (запустить apropos ‘^pam_’ найти справочные страницы для остальных). В справочной странице для pam_umask отмечается, что

pam_umask — это модуль PAM для установки маски создания режима файла в текущей среде. Маска влияет на разрешения по умолчанию, назначаемые вновь создаваемым файлам.

Примечание по умолчанию Umask

Новые папки в $HOME может быть создан mkdir с разрешениями по умолчанию 775 и файлами, созданными с touch с разрешениями 664 по умолчанию, даже когда значение umask по умолчанию равно 022. Сначала это кажется противоречивым и заслуживает пояснения.

Хотя umask по умолчанию — 022 в Ubuntu, это еще не все, так как в /etc/login.defs это позволяет umask быть 002 для пользователей без полномочий root, если выполняется условие (см. выдержку ниже). При нормальной установке, /etc/login.defs содержит настройку USERGROUPS_ENAB yes , Это то, что

Включает настройку битов группы umask, совпадающих с битами владельца (примеры: 022 -> 002, 077 -> 007) для пользователей без полномочий root, если uid совпадает с gid, а имя пользователя совпадает с основным имя группы.

Следовательно, почему вы видите следующее с stat когда новая папка создана с mkdir в однопользовательской системе, такой как моя (uid и gid одинаковы):

Для получения дополнительной информации см. man pam_umask и страницы Ubuntu онлайн.

Это довольно старый, но стоит упомянуть. Чтобы рассчитать на Umask, в отличие от разрешений файловой системы. Восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ. Восьмеричные обозначения следующие:

Тогда вы можете рассчитать, чтобы установить правильные разрешения umask такие:

Расчет окончательного разрешения для файлов

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

  • Файловые права доступа: 666
  • значение umask: 022
  • вычесть, чтобы получить разрешения нового файла (666-022) : 644 (rw-r–r–)

Расчет окончательного разрешения для каталогов

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

  • Базовые разрешения каталога: 777
  • значение umask: 022
  • Вычтите, чтобы получить разрешения нового каталога (777-022) : 755 (rwxr-xr-x)

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

Во-первых, «Маска» не означает «вычитать», в арифметическом смысле — здесь нет заимствований или переносов, во-вторых, umask это маска; это не число, которое нужно вычесть.

В-третьих, маска отключает разрешение битов. Если они уже выключены, umask не вносит изменений в разрешение,

Например, предположим, что вы должны снять маску 077 из системы по умолчанию для файлов, который 666 и каталоги, которые 777 ,

Команда, которую вы будете использовать,

(разобрать значение в двоичном виде, 000 111 111 )

То, что сделает эта маска, это отключит любой из первых шести младших битов (младших разрядов), если они 1 и не изменится, если какой-либо из них уже выключен.

Вот как рассчитывается окончательное разрешение:

Наблюдайте, как оба 110 значения изменились на 000 ,

Основная концепция:

Если вы похожи на большинство людей и не понимаете, что, черт возьми, восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ, вот мое простое объяснение:

Прежде всего, подумайте, что такое «маска». Маска что-то блокирует. Подумайте о липкой ленте. В этом случае umask походит на ленту маскировки, чтобы заблокировать / отключить разрешения при создании нового файла или каталога.

Разрешения по умолчанию при создании нового каталога octal 777 (111 111 111) и новый файл octal 666 (110 110 110) , Мы устанавливаем umask для блокировки / отключения определенных разрешений.

  • Немного маски 1 означает заблокировать / отключить это разрешение (поместите маску поверх этого бита).
  • Немного маски 0 позволит разрешение пройти (без маскировочной ленты над этим битом).

Так что octal 022 (000 010 010) маска означает отключить group write а также others write и разрешить все остальные разрешения для прохождения.

Расчет:

Вот пример расчета для нового файла (разрешение 666 по умолчанию) с umask 022:

Так вот, как вы получите результат 644 при создании нового файла.

Более простой способ:

Но если вычисления с обратной маской просто сбивают вас с толку, есть более простой способ использования символьных обозначений umask. Когда вы используете этот метод, вы просто указываете сквозные биты вместо битов маски.

  • umask u=rwx,g=rx,o=rx значит позволяют пройти через user rwx , group rx , other rx , Что подразумевает отключение group w , others w , Если вы запустите эту команду, проверьте umask , ты получишь 022 ,
  • umask u=rwx,g=,o= значит позволяют пройти через user rwx , Что подразумевает отключение всего доступа для group а также others , Если вы запустите эту команду, проверьте umask , ты получишь 077 ,

Бонусный расчет:

Если вы действительно хотите понять, что значит «восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ», вот несколько логических таблиц, которые могут помочь продемонстрировать. Помните, немного маски 1 значит отключить, 0 значит пройти.

Если вы делаете таблицу с NOT(mask) теперь это просто AND логическая таблица!

Итак, формула для этого: result = perm AND (NOT mask)

umask

(PHP 4, PHP 5, PHP 7)

umask — Изменяет текущую umask


Описание

umask() устанавливает PHP umask в значение mask & 0777 и возвращает старую umask. Если PHP используется в качестве серверного модуля, umask будет восстанавливаться после окончания каждого запроса.

Список параметров

Возвращаемые значения

Вызов umask() без аргументов вернёт текущую umask, иначе будет возвращена старая umask.

Примеры

Пример #1 Пример использования umask()

= umask ( 0 );
chmod ( «/path/some_dir/some_file.txt» , 0755 );
umask ( $old );

// Проверка
if ( $old != umask ()) <
die( ‘При восстановлении umask произошла ошибка’ );
>
?>

Примечания

Избегайте использования этой функции в многопоточных веб-серверах. Лучше изменить права файла с помощью функции chmod() после его создания. Использование umask() может привести к неожиданному поведению одновременно работающих скриптов и самого веб-сервера, т.к. они все будут использовать одну и ту же umask.

User Contributed Notes 14 notes

I think that the best way to understand umask is to say that umask is used to revoke permissions, not to set permissions.

umask sets which permissions must be removed from the system default when you create a file or a directory.

For example, a mask 0022 means that you don’t want group and others modify the file.

default 0666 rw-.rw-.rw-
umask 0022 —.-w-.-w-
Final 0644 rw-.r—.r—

That means that any file from now on will have 0644 permissions.

It is important to understand that umask revokes, deletes permissions from system default, so it can´t grant permissions the system default hasn’t. In the example above, with the 666 system default, there is no way you can use umask to create a file with execute permission. If you want to grant more permissions, use chmod.

Be aware that system default permissions are not related to PHP (they depends upon server configuration). PHP has a default umask that is applied after system default base permissions. And there are different system default base permissions for files and directories.

Usually, system default permissions for files are 666 and for directories 0777. And usually, default PHP umask is 0022

«It is better to change the file permissions with chmod() after creating the file.»

The usual lacking of security knowledge within the PHP team rears its head once again. You *always* want to have the file created with the proper permission. Let me illustrate why:

(a) you create new file with read permissions
(b) an attacking script opens the file
(c) you chmod the file to remove read permissions
(d) you write sensitive data to the file

Now, you might think that the changes of an attacking script getting to open the file before you chmod them are low. And you’re right. But low changes are never low enough — you want zero chance.

When creating a file that needs increased permissions, you always need to create the file with the proper permissions, and also create it with O_EXCL set. If you don’t do an exclusive create, you end up with this scenario:

(a) attacker creates the file, makes it writable to everyone
(b) you open the file with restricted permissions, but since it already exists, the file is merely opened and the permissions left alone
(c) you write sensitive data into the insecure file

Detecting the latter scenario is possible, but it requires a bit of work. You have to check that the file’s owner and group match the script’s (that is, posix_geteuid(), not myuid()) and check the permissions — if any of those are incorrect, then the file is insecure — you can attempt to unlink() it and try again while logging a warning, of course.

The only time when it is reasonable or safe to chmod() a file after creating it is when you want to grant extra permissions instead of removing them. For example, it is completely safe to set the umask to 0077 and then chmoding the files you create afterward.

Doing truly secure programming in PHP is difficult as is, and advice like this in the documentation just makes things worse. Remember, kids, anything that applies to security in the C or UNIX worlds is 100% applicable to PHP. The best thing you can possibly do for yourself as a PHP programmer is to learn and understand secure C and UNIX programming techniques.

In case you don’t understand why you need to «Avoid using this function in multithreaded webservers»:

It’s because this function changes the umask at the process level, rather than only for PHP or for the current script. If there are multiple simultaneous threads running in the process in which your PHP script is running, the change will apply to all of those threads at the same time hence why this is not safe for multithreaded use.

Илон Маск рекомендует:  Что такое код imageloadfont

I understand that if you are using the PHP module and Apache’s prefork MPM, which is not multi-threaded, then you at least won’t get race-condition problems such as this. However, it is still worth noting that the umask setting, if not re-set, will persist for the life of that process even if the process is re-used to serve future PHP or non-PHP requests.

Форум русскоязычного сообщества Ubuntu

Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: При установке umask 022 маска устанавливается 002 (Прочитано 1663 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страница сгенерирована за 0.062 секунд. Запросов: 22.

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Umask — umask

Umask

Первый выпуск 1978 ; 41 лет назад ( 1978 )
Операционная система Unix и Unix-подобных
Тип команда

В вычислительной технике, Umask это команда , которая определяет параметры в маске , который контролирует , как права доступа к файлам устанавливаются для вновь создаваемых файлов. В одном случае это также влияет как права доступа к файлам изменяются в явном виде. Umask может также относиться к функции , которая устанавливает маску, или он может относиться к самой маске, который формально известная как маска создания файла . Маска представляет собой группировку битов , каждый из которых ограничивает как его соответствующее разрешение устанавливается для вновь создаваемых файлов. Биты в маске могут быть изменены путем вызова UMASK команды.

В UNIX, каждый файл имеет набор атрибутов , которые контролируют , кто умеет читать, писать или выполнять его. Когда программа создает файл, UNIX требует, чтобы права доступа к файлам можно установить на начальной настройки. Маска ограничивает настройки разрешений. Если маска имеет битый установлен в «1», то это означает , что соответствующий начальное разрешение файла будет отключено . Бит , установленный в «0» в маске означает , что соответствующее разрешение будет определяться программой и системой . Другими словами, маска действует как последней ступени фильтра , который отсекает разрешения , как создается файл; каждый бит , который устанавливается в «1» отсекает его соответствующее разрешение. Права доступа могут быть изменены позже пользователями и программами с помощью CHMOD .

Каждая программа (технически называется процессом ) имеет свою собственную маску и могут изменить свои настройки с помощью вызова функции. Когда процесс является оболочкой , маска устанавливается с помощью UMASK команды. Когда оболочка или процесс запускает новый процесс, дочерний процесс наследует маску из родительского процесса. Как правило, маска затрагивает только права доступа к файлам во время создания новых файлов и не имеет никакого эффекта , когда права доступа к файлам изменяются в существующих файлах, однако, команда CHMOD проверит маску , если указаны параметры CHMOD с помощью символического режима и ссылка на класс пользователей не указан.

Маска хранятся в виде группы бит. Он может быть представлен в виде двоичной , восьмеричной или символическое обозначение. Umask команда позволяет маске быть установлена как восьмеричный (например , 0754) или символической (например , U =, г = ш, о = WX) обозначение.

Umask команда используется с Unix-подобными операционными системами, а функция Umask определена в POSIX.1 спецификации.

содержание

история

Маска, то Umask команды и функции Umask не были частью первоначальной реализации UNIX. Операционная система развивалась в относительно небольшом компьютерный центр окружающей среды, где безопасность не является проблемой. Это в конечном итоге выросло обслуживать сотни пользователей из различных организаций. Во — первых, разработчики сделали режимы создания для ключевых файлов более ограничительными, особенно для случаев реальных нарушений безопасности, но это не является общим решением. Маска и Umask команды были введены около 1978, между шестым изданием и восьмого выпуска операционной системы, поэтому он может позволить сайты, группы и отдельные лица выбрать свои собственные настройки по умолчанию. Маска с тех пор было реализовано в большинстве, если не все, из современных реализаций Unix-подобных операционных систем.

командная оболочка

В оболочке, маска устанавливается с помощью UMASK команды. Синтаксис команды:

(Элементы в скобках не являются обязательными.)

Отображение текущей маски

Если Umask команда вызывается без аргументов, он будет отображать текущую маску. Выход будет находиться в любом из восьмеричной или символической записи, в зависимости от операционной системы. В большинстве оболочек , но не CSH , в -S аргумента (т.е. Umask -S ) заставят биты полномочий для отображения , используя символические обозначения. Например:

Установка маски с использованием восьмеричного обозначения


Если Umask команда вызывается с аргументом в восьмеричной, он будет непосредственно устанавливать биты маски для этого аргумента:

Если меньше , чем 4 цифры введены, ведущие нули считаются. Ошибка приведет , если аргумент не является допустимым восьмеричное число , или если она имеет более чем 4 -х цифр. Три крайние правые восьмеричные цифр адрес «владелец», «группа» и «другие» классы пользователей соответственно. Если четвертая цифра присутствует, крайний левый (высокий порядок) цифра адрес три дополнительных атрибутов, то УИП бит , то setgid бит и липкий бит .

Восьмеричные коды

Восьмеричная цифра в
UMASK команде
Права доступа маска будет
запрещать от того установлен во время создания файла
любое разрешение может быть установлено (чтение, запись, выполнение)
1 установка исполнения разрешения запрещено (читать и писать)
2 настройка разрешения записи запрещено (чтение и выполнение)
3 настройка записи и разрешение на выполнение запрещено (только для чтения)
4 установка разрешения на чтение запрещено (запись и исполнение)
5 установка на чтение и выполнение запрещено (только запись)
6 установка для чтения и записи разрешения запрещено (выполнение только)
7 все разрешения запрещено быть установлен (без разрешения)

Установка маски с использованием символического обозначения

Когда Umask вызывается с помощью символического обозначения, он будет изменять или устанавливать флаги , как указано в maskExpression с синтаксисом

[ Пользовательский класс буква ] оператор разрешения-символы

Обратите внимание , что этот синтаксис не работает при использовании CSH в связи с различным поведением своей встроенным UMASK команды.

Несколько maskExpressions отделены друг от друга запятыми.

Пространство завершает maskExpression (ы).

  • Эти разрешения применяются к различным классам пользователей:
Письмо Учебный класс Описание
U пользователь владелец
г группа пользователи, которые являются членами группы файла
о другие пользователи, которые не являются владельцем файла или членов группы
a все все три из указанных выше, так же , как Ugo . (По умолчанию , если нет пользователей-класса-буквы не указаны в maskExpression .)
  • Оператор определяет, как должны быть отрегулированы режимы разрешения маски.
оператор Эффект на маске
+ Разрешения, указанные включены, разрешение, которые не указаны неизменны.
- Разрешения, указанные запрещено быть включен, права, которые не указаны неизменны.
знак равно Разрешения, указанные включены, разрешения, которые не указаны запрещено быть включен.
  • В разрешительный символы указывают , какой файл разрешения настройки должны быть разрешены или запрещены маской.
Условное обозначение название Описание
р читать г EAD файл или список содержимого каталогов
вес записывать ж Обряд к файлу или каталогу
Икс выполнять е х ecute файла или рекурсия дерева каталогов
Икс специальный выполнить См Символические режимы .
s УИП / GID См права доступа к файлам .
T липкий См права доступа к файлам.

Запрещать ж обрядовое разрешения быть установлены для ˙U сер. Остальные флаги в маске не меняются.

Пример нескольких изменений:

Это было бы установить маску так, чтобы она:

  1. запретить ж обрядовое разрешения быть установлены для ˙U сер, оставляя остальные флаги без изменений;
  2. позволяют г разрешения EAD быть включено для г Роапа, запрещая ш обрядовых и е х разрешений ecute для г Роапа;
  3. позволяют г разрешение Свинец должен быть включен для O Thers, оставляя остальную часть о þér флагов без изменений.

Примеры командной строки

Вот еще примеры использования UMASK команды , чтобы изменить маску.

UMASK Выдается команда Как маска будет влиять на права доступа впоследствии созданных файлов / каталогов
UMASK A + R позволяет считывать разрешения быть включено для всех классов пользователей; остальные биты маски остаются неизменными
Umask топор запрещает обеспечивает возможность разрешения на выполнение всех классов пользователей; остальные биты маски остаются неизменными
Umask а + RW позволяет чтение или запись должна быть включена для всех классов пользователей; остальные биты маски остаются неизменными
Umask + RWX позволяет читать, писать или разрешение на выполнение быть включена для всех классов пользователей; (Примечание: На некоторых платформах UNIX, это восстановит маску по умолчанию.)
Umask и = RW, идти = разрешить чтение и запись должна быть включена для владельца, запрещая выполнить разрешение быть включен для владельца; запретить включения каких-либо разрешений для группы и всех остальных
Umask и + ж, иди-ш разрешить разрешение на запись должна быть включена для владельца; запретить разрешение на запись от быть включена для группы и других;
Umask -S отображение текущих в битах полномочий условного обозначения
Umask 777 запретить чтение, запись и выполнение для всех (вероятно, не полезно, потому что даже владелец не может читать файлы, созданные с помощью этой маски!)
Umask 000 позволяет читать, писать, и разрешения на выполнение всех (потенциальный риск безопасности)
Umask 077 позволяют читать, писать и выполнять разрешение владельца файла, но запретить чтение, запись и выполнение для всех остальных
Umask 113 разрешить чтение или запись должна быть включена для владельца и группы, но не разрешение на выполнение; разрешить доступ на чтение должен быть включен для других, но не писать или разрешение на выполнение
Umask 0755 эквивалентна у-RWX (4 + 2 + 1), идут = ш (4 + 1 & 4 + 1) . (The указывает , что специальные режимы могут быть разрешены , если это разрешено ОС.)

Пример, показывающий эффект UMASK:

Маска эффект

Маска применяется всякий раз , когда создается файл. Если маска имеет битый установлен в «1» , что означает , что соответствующее разрешение файла всегда будет отключено , когда файлы впоследствии созданы. Немного установлен в «0» в маске означает , что соответствующее разрешение будет определяться запрашивающего процесса и ОС , когда впоследствии создания файлов. Другими словами, маска действует как последней ступени фильтра , который отсекает разрешения , как создается файл; каждый бит , который устанавливается в «1» отсекает , что соответствующее разрешение файла.

таблица истинности

Вот таблица истинности для логической маскирования. Каждые бит в режиме доступа к файлу запрашивающего процесса работают на маске , используя эту логику , чтобы получить режим разрешения , который применяется к файлу , как он будет создан. ( Р немного в запрашиваемом режиме доступа к файлу процесс , который создает файл, д немного в маске; г является результирующим бит в режиме разрешения созданного файла)

п Q р
T T F
T F T
F T F
F F F

Как маска применяется

Это показывает, как восьмеричные в команде UMASK появляется в маске и в конечном итоге влияет на запрос программы, для создания файла с полным, например, (г, ш, х) разрешений.
Восьмеричная цифра в
UMASK команде
Binary в
маске
Отрицание
маски
Логическое И
с «RWX» запрос
000 111 RWX
1 001 110 rw-
2 010 101 гх
3 011 100 р—
4 100 011 -wx
5 101 010 -w-
6 110 001 —Икс
7 111 000

Программным, маска наносится ОС с помощью первого отрицания (в дополнение) маску, а затем выполняет логическое И с режимом запрашиваемого файла. В [вероятно] первой инструкции UNIX для описания его функции, руководство говорит,

«Фактический режим . вновь созданный файл является логическим и данного режима и дополнения аргумента. Только младшие 9 бит маски (биты защиты) участвуют. Другими словами, Маска показывает [указывает] биты должны быть выключены, когда создаются файлы «.

В булевой логике применение маски может быть представлено в виде

Это говорит о том, что режим разрешения файла (C) является результатом логического и операций между отрицанием маски (Q), и процесс просил настройки режима разрешения (P).

Исключения

Примечание: Многие операционные системы не позволяют файл должен быть создан с разрешения на выполнение. В этих условиях, вновь создаваемые файлы будут всегда иметь разрешения отключена для всех пользователей.

Маска , как правило , применяются только к функциям , которые создают новый файл, однако, есть исключения. Например, при использовании UNIX и GNU версии CHMOD установить права доступа к файлу, и используется условное обозначение, и не указан ни один пользователь, то маска наносится на запрашиваемых разрешений , прежде чем они будут применены к файлу. Например:

Процессы

Каждый процесс имеет свою собственную маску, которая применяется всякий раз , когда процесс создает новый файл. Когда оболочка, или любой другой процесс, порождает новый процесс, дочерний процесс наследует маску из родительского процесса. Когда процесс является оболочкой , маска изменяется с помощью UMASK команды. Как и в других процессах, любой процесс запускается из оболочки наследует маску , которая оболочка.

опция Mount

В ядре Linux , то жир , HFS , HPFS , NTFS , и UDF файловой системы драйвера поддерживают Umask опции монтирования , которая контролирует , как информацию о диске отображается с разрешениями. Это не то же самое , как в процессе каждого Umask , описанном выше, хотя разрешения рассчитываются аналогичным образом. Некоторые из этих драйверов файловой системы также поддерживают отдельные umasks для файлов и каталогов, используя опции монтирования , такие как fmask .

Вопрос по linux, python &#8211 Как использовать os.umask () в Python

Я пытаюсь установить umask с помощью модуля os. Обратите внимание, что мой обычный набор umask в моем

/ .profile — это umask 0027.

В оболочке Bash,

позволит создать файл с разрешениями

Однако когда мы импортируем модуль os и делаем это:

Я получаю разрешения

Во-первых, как мне заставить os.umask (маску) вести себя как umask в оболочке?

Во-вторых, какова логика между этими двумя?

Примечание: я попытался преобразовать 0022 в десятичную на случай, если ожидается десятичная дробь, выполнив:

но это дало разрешения

Также обратите внимание, я пытался


Который тоже не работал.

Код у вас отлично работает в моей системе:

создание файлов следующим образом:

Также стоит отметить восстановление старого umask значение, которое сводит к минимуму влияние его изменения на локальную работу.

Как видно из приведенных выше результатов, вы также должны знать, что umask значение «вычтено» из режима, который вы используете для создания файла, и мы не знаем, что это за режим в вашем конкретном случае.

Это очевидно даже в вашем bash образец с umask ценность 022 при создании файла режима 777 приведет к r-xr-xr-x не rw-r—r— как у вас есть.

На основе ваших комментариев ниже, где вы указываете, что вы используете open скорее, чем os.open беглый взгляд источника Python, кажется, указывает, что это переводит в C fopen вызов, который использует 0666 в качестве начального режима. Это поддерживается слегка измененным кодом:

Поэтому я не совсем уверен, почему вы получаете 0000 разрешения в вашем случае.

Стоит посмотреть, каковы результаты, когда вы запустите вышеуказанную программу в своей среде. Если это так же, как у меня, тогда проблема может лежать где-то еще.

Umask устанавливает значение по умолчаниюdenialsне по умолчаниюpermissions. So

должен действительно производить файлы следующим образом:

Umask 022 удаляет права на запись для группы и других пользователей, и это именно то поведение, которое мы видим там. Я считаю, что это помогает вернуться к двоичному числу, которое представляют восьмеричные числа:

Программа ведет себя так, как вы просили, а не обязательно так, как вы думали. Общая ситуация, что с компьютерами :-)

Основы привилегий Linux и использование Umask на VPS

Вступление

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

Команда umask определяет привилегии, присвоенные по умолчанию файлам, созданным каждым пользователем. Она может быть изменена, чтобы обеспечить строгие ограничения доступа или, наоборот, смягчить привилегии для сценариев совместного использования файлов, в зависимости от потребностей системы и пользователя.

Данное руководство объясняет основы привилегий Linux, а также демонстрирует преимущества правильного конфигурирования umask. Также оно кратко рассматривает команду chmod как сопутствующий инструмент.

Категории привилегий

Новичкам привилегии Linux могут показаться непонятной и сложной темой. Но, ознакомившись со способами представления привилегий, можно с легкостью научиться читать и изменять привилегии файлов или каталогов.

Привилегии владельца

Первое, что нужно запомнить, чтобы понять права Linux, — данная ОС в основе является многопользовательской.

Каждый файл принадлежит ровно одному пользователю. Даже если VPS используется всего одним человеком, есть еще целый ряд различных «пользователей», созданных для запуска конкретных программ. Других пользователей системы можно просмотреть, набрав:

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
. . .

Файл /etc/passwd содержит строки для каждого пользователя, созданного в данной ОС. Первое поле каждой строки – имя уникального пользователя. Как можно видеть, многие имена пользователей связаны с различными сервисами и приложениями.

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

Привилегии группы

Вторая категория прав, которые можно присвоить в Linux, — права «группы-владельца» файла.

Как и в предыдущей категории, файл может принадлежать ровно одной группе. Каждый пользователь может состоять в нескольких группах, и каждая группа может содержать несколько пользователей.

Чтобы просмотреть группы, в которых состоит текущий пользователь, наберите:

Это выведет все группы, в которых на данный момент состоит пользователь. По умолчанию пользователь может состоять в одной или двух группах, а имя одной из них может совпадать с именем данного пользователя.

Чтобы просмотреть все группы, существующие в системе, введите:

Первое поле каждой строки – имя группы.

Linux позволяет присваивать привилегии владельца файла группе. Благодаря этому можно присвоить пользовательские права группе людей, так как только один пользователь может владеть файлом.

Другие привилегии

Последняя категория прав, которую можно присвоить в Linux, — «другие привилегии».

В данном контексте под «другими» подразумевается любой пользователь, не владеющий файлом и не состоящий в группе, которая владеет файлом.

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

Типы привилегий

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

В случае с обычным файлом, права на чтение нужны, чтобы читать содержимое файла, права на изменение – чтобы менять его содержимое, права на запуск – чтобы запускать файл как скрипт или приложение.

Для каталогов права на чтение нужны, чтобы просматривать список (ls) содержимого, права на изменение – чтобы менять содержимое каталога, права на запуск – чтобы менять каталоги (cd) внутри каталога.

Linux представляет эти типы привилегий, используя два отдельных символические обозначения: буквенные и восьмеричные.

Буквенные обозначения

Буквенные обозначения легко понять, они используются несколькими распространенными программами для представления привилегий.

Каждое право представлено одной буквой:

  • r – право на чтение;
  • w – право на изменение;
  • x – право на запуск.

Важно помнить о том, что буквенные обозначения прав всегда указываются в данном порядке. Предоставленное право обозначается соответствующей буквой. Если определенный доступ ограничен, это обозначается с помощью ​​тире (-).

Сначала права предоставляются владельцу файла, затем группе, и только потом другим пользователям. Таким образом, есть три группы из трех значений.

Команда ls использует буквенные обозначения при запуске с опцией «-l» (long-format):

cd /etc
ls -l
drwxr-xr-x 3 root root 4096 Apr 26 2012 acpi
-rw-r—r— 1 root root 2981 Apr 26 2012 adduser.conf
drwxr-xr-x 2 root root 4096 Jul 5 20:53 alternatives
-rw-r—r— 1 root root 395 Jun 20 2010 anacrontab
drwxr-xr-x 3 root root 4096 Apr 26 2012 apm
drwxr-xr-x 3 root root 4096 Apr 26 2012 apparmor
drwxr-xr-x 5 root root 4096 Jul 5 20:52 apparmor.d
drwxr-xr-x 6 root root 4096 Apr 26 2012 apt

Первое поле выведенного результата представляет привилегии файла.

Эти данные обозначаются с помощью 10 символов. Первый на самом деле не является значением привилегии, он указывает на тип файла (тире для обычного файла, d – для каталога, и т.д.). Следующие 9 символов представляют описанные выше права. Три группы, представляющие владельца, группу и других пользователей, каждая со значениями, определяющими права на чтение, изменение и запуск.

Илон Маск рекомендует:  Синтаксис Sass


В приведенном выше примере владелец каталога «acpi» имеет права на чтение, изменение и запуск. Группа и другие пользователи имеют права на чтение и запуск.

Файл «anacrontab» позволяет владельцу читать и вносить изменения, но члены группы и другие пользователи имеет только право на чтение.

Восьмеричные обозначения

Более кратким, но менее понятным способом представления привилегий является восьмеричное обозначение.

В данном случае каждая категория привилегий (владелец группа и другие пользователи) представлена числом от 0 до 7.

Для обозначения каждого типа прав используется определенное число, таким образом, ему задается численное значение:

  • 4 = право на чтение;
  • 2 = право на изменение;
  • 1 = право на запуск.

Числа, связанные с типом прав, которые нужно предоставить каждой категории, нужно суммировать. Таким образом, получится число от 0 до 7 (0 означает, что никакие права не были предоставлены, 7 указывает на полные права на чтение, изменение и запуск).

К примеру, если владелец файла имеет права на чтение и изменение, то они будут представлены значением 6 в столбце владельца файла. Если группа имеет только право на чтение, то это право будет представлено символом 4.

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

Команда chmod является очень важной программой при использовании восьмеричных обозначений.

Использование команды Chmod

Самый популярный способ изменения прав доступа к файлу – использование восьмеричного значения с помощью команды chmod. Чтобы продемонстрировать работу команды, создадим пустой файл в домашнем каталоге:

cd
touch testfile

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

ls -l testfile
-rw-rw-r— 1 demouser demouser 0 Jul 10 17:23 testfile

Если интерпретировать значения, можно увидеть, что владелец файла и группа имеют права на чтение и изменение, а другие пользователи – только права на чтение.

Если перевести это в восьмеричную систему счисления, владелец и группа будут иметь значение прав 6 (4 для чтения, плюс 2 для изменения), а другим пользователям присвоено значение 4 (для чтения). В конечном виде права представлены триплетом 664.

Предположим, этот файл содержит bash-скрипт, который нужно запустить как владелец. Теперь нужно, чтобы никто вообще, в том числе члены группы, не имел права на изменение файла и даже на его чтение.

Нужные в данном случае привилегии можно представить в виде буквенного обозначения таким образом: -rwxr——. Теперь переведите эти значения в восьмеричную систему и измените права с помощью chmod:

chmod 740 testfile
ls -l testfile
-rwxr—— 1 demouser demouser 0 Jul 10 17:23 testfile

Как можно видеть, права были присвоены верно.

При необходимости вернуть прежние привилегии можно задать chmod следующее:

chmod 664 testfile
ls -l testfile
-rw-rw-r— 1 demouser demouser 0 Jul 10 17:23 testfile

Установка привилегий по умолчанию с Umask

Команда umask определяет права по умолчанию новых файлов, основываясь на «базовых» правах, установленных для каталогов и файлов.

Базовые права файлов устанавливаются значением 666, что означает право на чтение и изменение для всех пользователей. Право на запуск не предоставляется по умолчанию, поскольку большинство файлов не созданы для запуска (кроме того, присвоение права на запуск может стать причиной проблем безопасности сервера).

Права каталогов по умолчанию представлены значением 777, что означает права на чтение, изменение и запуск для вех пользователей.

Umask действует путем применения вычитаемой «маски» с базовыми правами, как показано выше. Рассмотрим ее работу на примере.

Предположим, нужно, чтобы владелец и члены группы-владельца имели право на изменение новых каталогов, а другие пользователи – нет; тогда значение прав будет775.
Теперь нужен триплет, показывающий разницу между базовыми и нужными правами. Это число 002.

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

touch test2
ls -l test2
-rw-rw-r— 1 demouser demouser 0 Jul 10 18:30 test2

С помощью команды umask можно определить другую umask.

Чтобы обезопасить систему, можно сделать так, чтобы пользователи, не владеющие файлом, вообще не имели никаких прав. Это можно сделать с помощью значения umask 077:

umask 077
touch restricted
ls -l restricted
-rw——- 1 demouser demouser 0 Jul 10 18:33 restricted

Если есть процесс, создающий контент общего пользования, то можно установить полные прав доступа на каждый файл и каталог, созданный ним:

umask 000
touch openfile
ls -l openfile
-rw-rw-rw- 1 demouser demouser 0 Jul 10 18:36 openfile

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

Чтобы настройки umask оставались в силе даже после перезагрузки, их нужно внести в файл .bashrc:

Найдите уже установленное значение umask и измените его. Если такого значения пока нет, внесите в конце файла строку с необходимым значением:

Приведенное выше значение предоставляет полные права доступа владельцу, и ограничивает право на изменение остальным категориям. Отредактируйте данное значение на свое усмотрение.

Предостережения

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

С другой стороны, предоставляя слишком много прав, система подвергается опасности.

Потому рекомендуется не редактировать привилегии вне домашнего каталога в случае, если вы не осведомлены о последствиях, которые могут возникнуть в связи с неправильными конфигурациями.

Еще одно правило, которое особенно важно соблюдать при конфигурировании программ вручную: всегда устанавливайте наиболее строгую политику прав доступа, не затрагивающую функциональности сервера.

Это значит, что если только один пользователь (например, сервис) нуждается в доступе к группе файлов, то нет необходимости позволять какой-либо доступ к содержимому этих файлов остальным пользователям. Особенно это касается файлов, хранящих пароли в виде простого текста.

Правильно используя права группы-владельца и добавляя необходимых пользователей в соответствующую группу, можно настроить права доступа более тонко. Если все пользователи, которым необходим доступ к файлу, являются членами группы-владельца, то категорию «другие пользователи» можно для большей безопасности лишить всех прав.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Всем привет. Это перевод статьи из книги RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300.

От себя: Надеюсь статья будет полезна не только начинающим, но и поможет более опытным администраторам упорядочить свои знания.

Чтобы получить доступ к файлам в Linux, используются разрешения. Эти разрешения назначаются трем объектам: файлу, группе и другому объекту (то есть всем остальным). В этой статье вы узнаете, как применять разрешения.

Статья начинается с обзора основных понятий, после чего обсуждаются специальные разрешения (Special permissions) и списки контроля доступа (ACL). В конце этой статьи рассматривается настройка прав доступа по умолчанию через umask, а также управление расширенными атрибутами пользователя.


Управление владением файлами

Прежде чем обсуждать разрешения, вы должны знать о роли владельца файла и каталога. Владение файлами и каталогами жизненно важно для работы с разрешениями. В этом разделе вы сначала узнаете, как вы можете увидеть владельца. Затем вы узнаете, как изменить владельца группы и пользователя для файлов и каталогов.

Отображение владельца файла или каталога

В Linux у каждого файла и каждого каталога есть два владельца: пользователь и группа.

Эти владельцы устанавливаются при создании файла или каталога. Пользователь, который создаёт файл становится владельцем этого файла, а первичная группа, в которую входит этот же пользователь, так же становится владельцем этого файла. Чтобы определить, есть ли у вас как у пользователя права доступа к файлу или каталогу, оболочка проверяет владение ими.

Это происходит в следующем порядке:

  1. Оболочка проверяет, являетесь ли вы владельцем файла, к которому вы хотите получить доступ. Если вы являетесь этим владельцем, вы получаете разрешения и оболочка прекращает проверку.
  2. Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.
  3. Если вы не являетесь ни пользователем, ни владельцем группы, вы получаете права других пользователей (Other).

Чтобы увидеть текущие назначения владельца, вы можете использовать команду ls -l. Эта команда показывает пользователя и группу-владельца. Ниже вы можете увидеть настройки владельца для каталогов в каталоге /home.

С помощью команды ls вы можете отобразить владельца файлов в данном каталоге. Иногда может оказаться полезным получить список всех файлов в системе, в которых в качестве владельца указан данный пользователь или группа. Для этого вы можете использовать find. Аргумент find -user может быть использован для этой цели. Например, следующая команда показывает все файлы, у которых в качестве владельца указан пользователь linda:

Вы также можете использовать find для поиска файлов, у которых определенная группа является их владельцем.

Например, следующая команда ищет все файлы, принадлежащие группе users:

Изменение владельца

Чтобы применить соответствующие разрешения, первое, что нужно учитывать, это владение. Для этого есть команда chown. Синтаксис этой команды несложен для понимания:

Например, следующая команда меняет владельца каталога /home/account на пользователя linda:

Команда chown имеет несколько опций, одна из которых особенно полезна: -R. Вы можете догадаться, что она делает, потому что эта опция доступна и для многих других команд. Это позволяет вам рекурсивно устанавливать владельца, что позволяет вам установить владельца текущего каталога и всего, что находится ниже. Следующая команда меняет владельца для каталога /home и всего, что находится под ним, на пользователя lisa:

Сейчас владельцы выглядят так:

Теперь пользователь lisa стал владельцем каталога account:

Изменение владельца группы

Есть два способа изменить владение группой. Вы можете сделать это, используя chown, но есть специальная команда с именем chgrp, которая выполняет эту работу. Если вы хотите использовать команду chown, используйте . или : перед названием группы.

Следующая команда изменяет какого-либо владельца группы /home/account на группу account:

Вы можете использовать chown для изменения владельца пользователя и/или группы несколькими способами. Вот несколько примеров:

  • chown lisa myfile1 устанавливает пользователя lisa владельцем файла myfile1.
  • chown lisa.sales myfile устанавливает пользователя lisa владельцем файла myfile, а так же устанавливает группу sales владельцем этого же файла.
  • chown lisa:sales myfile то же самое, что и предыдущая команда.
  • chown .sales myfile устанавливает группу sales владельцем файла myfile без изменения владельца пользователя.
  • chown :sales myfile то же самое, что и предыдущая команда.

Вы можете использовать команду chgrp, чтобы изменить владельца группы. Рассмотрим следующий пример, где вы можете с помощью chgrp установить владельцем каталога account группу sales:

Как и в случае с chown, вы можете использовать опцию -R с chgrp, а также рекурсивно менять владельца группы.

Понимание владельца по умолчанию

Вы могли заметить, что когда пользователь создает файл, применяется владение по умолчанию.
Пользователь, который создает файл, автоматически становится владельцем этого файла, а основная группа этого пользователя автоматически становится владельцем этого файла. Обычно это группа, которая указана в файле /etc/passwd в качестве основной группы пользователя. Однако если пользователь является членом нескольких групп, он может изменить эффективную основную группу.

Чтобы показать текущую эффективную первичную группу, пользователь может использовать команду groups:

Если текущий пользователь linda хочет изменить эффективную первичную группу, он будет использовать команду newgrp, за которой следует имя группы, которую он хочет установить в качестве новой эффективной первичной группы. После использования команды newgrp первичная группа будет активна, пока пользователь не введет команду exit или не выйдет из системы.

Ниже показано, как пользователь lisa использует эту команду, что бы первичной группой стала группа sales:

После изменения действующей основной группы все новые файлы, созданные пользователем, получат эту группу в качестве группы-владельца.Чтобы вернуться к исходной настройке первичной группы, используйте exit.

Чтобы иметь возможность использовать команду newgrp, пользователь должен быть членом той группы, которую он хочет использовать в качестве первичной. Кроме этого, групповой пароль может быть использован для группы с помощью команды gpasswd. Если пользователь использует команду newgrp, но не является членом целевой группы, оболочка запрашивает пароль группы. После того, как вы введете правильный групповой пароль, будет установлена новая эффективная первичная группа.

Управление основными правами

Система разрешений Linux была изобретена в 1970-х годах. Поскольку вычислительные потребности были ограничены в те годы, базовая система разрешений была довольно ограничена. Эта система разрешений использует три разрешения, которые можно применять к файлам и каталогам. В этом разделе вы узнаете, как использовать и изменять эти разрешения.

Понимание прав на чтение, запись и выполнение

Три основных разрешения позволяют вам читать, записывать и выполнять файлы. Эффект этих разрешений отличается при применении к файлам или каталогам. Применительно к файлу разрешение на чтение дает вам право открыть файл для чтения. Следовательно, вы можете прочитать его содержимое, но это означает, что ваш компьютер может открыть файл, чтобы что-то с ним сделать.

Программный файл, которому требуется доступ к библиотеке, должен, например, иметь доступ для чтения к этой библиотеке. Из этого следует, что разрешение на чтение — это самое основное разрешение, которое вам нужно для работы с файлами.

Применительно к каталогу чтение позволяет отображать содержимое этого каталога. Вы должны знать, что это разрешение не позволяет вам читать файлы в каталоге. Система разрешений Linux не знает наследования, и единственный способ прочитать файл — использовать разрешения на чтение для этого файла.

Как вы, вероятно, можете догадаться, разрешение на запись, если оно применяется к файлу, позволяет записывать в файл. Иначе говоря, позволяет изменять содержимое существующих файлов. Однако он не позволяет создавать или удалять новые файлы или изменять права доступа к файлу. Для этого вам нужно дать разрешение на запись каталогу, где вы хотите создать файл. В каталогах это разрешение также позволяет создавать и удалять новые подкаталоги.

Разрешение на выполнение — это то, что вам нужно для выполнения файла. Оно никогда не будет установлено по умолчанию, что делает Linux практически полностью невосприимчивым к вирусам. Только кто-то с правами записи на каталог может применять разрешение на выполнение.

Ниже обобщается использование основных разрешений:

Использование chmod

Для управления правами используется команда chmod. При использовании chmod вы можете устанавливать разрешения для пользователя (user), группы (group) и других (other). Вы можете использовать эту команду в двух режимах: относительный режим и абсолютный режим. В абсолютном режиме три цифры используются для установки основных разрешений.

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

Когда вы используете chmod таким способом, все текущие разрешения заменяются установленными вами разрешениями.

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

  1. Сначала вы указываете, для кого вы хотите изменить разрешения. Для этого вы можете выбрать между пользователем (u), группой (g) и другими (o).
  2. Затем вы используете оператор для добавления или удаления разрешений из текущего режима или устанавливаете их абсолютно.
  3. В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.

При изменении разрешений в относительном режиме вы можете пропустить часть «кому», чтобы добавить или удалить разрешение для всех объектов. Например, эта команда добавляет разрешение на выполнение для всех пользователей:

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

При использовании chmod -R o+rx /data вы устанавливаете разрешение на выполнение для всех каталогов, а также для файлов в каталоге /data. Чтобы установить разрешение на выполнение только для каталогов, а не для файлов, используйте chmod -R o+ rX /data.

Верхний регистр X гарантирует, что файлы не получат разрешение на выполнение, если файл уже не установил разрешение на выполнение для некоторых объектов. Это делает X более разумным способом работы с разрешениями на выполнение; это позволит избежать установки этого разрешения на файлы, где оно не требуется.

Расширенные права

Помимо основных разрешений, о которых вы только что прочитали, в Linux также есть набор расширенных разрешений. Это не те разрешения, которые вы устанавливаете по умолчанию, но иногда они предоставляют полезное дополнение. В этом разделе вы узнаете, что они из себя представляют и как их настроить.

Понимание расширенных прав SUID, GUID и sticky bit


Есть три продвинутых разрешения. Первое из них — это разрешение на установку идентификатора пользователя (SUID). В некоторых особых случаях вы можете применить это разрешение к исполняемым файлам. По умолчанию пользователь, запускающий исполняемый файл, запускает этот файл со своими собственными разрешениями.

Для обычных пользователей это обычно означает, что использование программы ограничено. Однако в некоторых случаях пользователю требуются специальные разрешения, только для выполнения определенной задачи.

Рассмотрим, например, ситуацию, когда пользователю необходимо сменить пароль. Для этого пользователь должен записать свой новый пароль в файл /etc/shadow. Однако этот файл недоступен для записи пользователям, не имеющим прав доступа root:

Разрешение SUID предлагает решение этой проблемы. В утилите /usr/bin/passwd это разрешение применяется по умолчанию. Это означает, что при смене пароля пользователь временно получает права root, что позволяет ему записывать в файл /etc/shadow. Вы можете видеть разрешение SUID с ls -l как s в позиции, где обычно вы ожидаете увидеть x для пользовательских разрешений:

Разрешение SUID может выглядеть полезным (и в некоторых случаях так оно и есть), но в то же время оно потенциально опасно. При неправильном применении вы можете случайно раздать права доступа root. Поэтому я рекомендую использовать его только с максимальной осторожностью.

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

Второе специальное разрешение — это идентификатор группы (SGID). Это разрешение имеет два эффекта. При применении к исполняемому файлу, он дает пользователю, который исполняет файл, разрешения владельца группы этого файла. Таким образом, SGID может выполнить более или менее то же самое, что SUID. Однако для этой цели SGID практически не используется.

Как и в случае с разрешением SUID, SGID применяется к некоторым системным файлам в качестве настройки по умолчанию.

Когда применяется к каталогу, SGID может быть полезен, потому что вы можете использовать его для установки владельца группы по умолчанию для файлов и подкаталогов, созданных в этом каталоге. По умолчанию, когда пользователь создает файл, его эффективная первичная группа устанавливается как владелец группы для этого файла.

Это не всегда очень полезно, особенно потому, что у пользователей Red Hat/CentOS в качестве основной группы задана группа с тем же именем, что и у пользователя, и из которых пользователь является единственным участником. Таким образом, по умолчанию файлы, которые создает пользователь, будут групповыми для общего доступа.

Представьте себе ситуацию, когда пользователи linda и lori работают в бухгалтерии и являются членами группы account. По умолчанию эти пользователи являются членами частной группы, единственным членом которой они являются. Однако оба пользователя являются членами группы account, но также и в качестве параметра вторичной группы.

Ситуация по умолчанию состоит в том, что когда любой из этих пользователей создает файл, основная группа становится владельцем. Поэтому по умолчанию linda не может получить доступ к файлам, созданным lori, и наоборот. Однако, если вы создаете общий каталог группы (скажем, /groups/account) и убедитесь, что разрешение SGID применено к этому каталогу и что учет группы установлен как владелец группы для этого каталога, все файлы, созданные в этом каталоге и во всех его подкаталогах, также получают account группы как владельца группы по умолчанию.

Илон Маск рекомендует:  Что такое код mhash_count

По этой причине разрешение SGID является очень полезным разрешением для установки в каталогах общих групп.

Разрешение SGID показывается в выводе ls -ld как s в позиции, где вы обычно находите разрешение на выполнение группы:

Третий из специальных разрешений — sticky bit. Это разрешение полезно для защиты файлов от случайного удаления в среде, где несколько пользователей имеют права на запись в один и тот же каталог. Если применяется закрепленный sticky bit, пользователь может удалить файл, только если он является пользователем-владельцем файла или каталога, в котором содержится файл. По этой причине он применяется в качестве разрешения по умолчанию для каталога /tmp и может быть полезен также для каталогов общих групп.

Без sticky bit, если пользователь может создавать файлы в каталоге, он также может удалять файлы из этого каталога. В общедоступной групповой среде это может раздражать. Представьте себе пользователей linda и lori, которые оба имеют права на запись в каталог /data/account и получают эти разрешения благодаря участию в группе account. Поэтому linda может удалять файлы, созданные lori, и наоборот.

Когда вы применяете sticky bit, пользователь может удалять файлы, только если выполняется одно из следующих условий:

  • Пользователь является владельцем файла;
  • Пользователь является владельцем каталога, в котором находится файл.

При использовании ls -ld, вы можете видеть sticky bit как t в позиции, где вы обычно видите разрешение на выполнение для других:

Применение расширенных прав

Чтобы применить SUID, SGID и sticky bit, вы также можете использовать chmod. SUID имеет числовое значение 4, SGID имеет числовое значение 2, а sticky bit имеет числовое значение 1.

Если вы хотите применить эти разрешения, вам нужно добавить четырехзначный аргумент в chmod, первая цифра которого относится к специальным разрешениям. Следующая строка, например, добавит разрешение SGID на каталог и установит rwx для пользователя и rx для группы и других:

Это довольно непрактично, если вам нужно посмотреть текущие права доступа, которые установлены, прежде чем работать с chmod в абсолютном режиме. (Вы рискуете перезаписать разрешения, если вы этого не сделаете.) Поэтому я рекомендую работать в относительном режиме, если вам нужно применить какое-либо из специальных разрешений:

  1. Для SUID используйте chmod u+s.
  2. Для SGID используйте chmod g+s.
  3. Для sticky bit используйте chmod +t, а затем имя файла или каталога, для которого вы хотите установить разрешения.

В таблице обобщено все, что важно знать об управлении специальными разрешениями.

Пример работы со специальными правами

В этом примере вы используете специальные разрешения, чтобы членам группы было проще обмениваться файлами в каталоге общей группы. Вы назначаете ID-бит установленного идентификатора группы, а также sticky bit, и видите, что после их установки добавляются функции, облегчающие совместную работу членов группы.

  1. Откройте терминал, в котором вы являетесь пользователем linda. Создать пользователя можно командой useradd linda, добавить пароль passwd linda.
  2. Создайте в корне каталог /data и подкаталог /data/sales командой mkdir -p /data/sales. Выполните cd /data/sales, чтобы перейти в каталог sales. Выполните touch linda1 и touch linda2, чтобы создать два пустых файла, владельцем которых является linda.
  3. Выполните su — lisa для переключения текущего пользователя на пользователя lisa, который также является членом группы sales.
  4. Выполните cd /data/sales и из этого каталога выполните ls -l. Вы увидите два файла, которые были созданы пользователем linda и принадлежат группе linda. Выполните rm -f linda*. Это удалит оба файла.
  5. Выполните touch lisa1 и touch lisa2, чтобы создать два файла, которые принадлежат пользователю lisa.
  6. Выполните su — для повышения ваших привилегий до уровня root.
  7. Выполните chmod g+s,o+t /data/sales, чтобы установить бит идентификатора группы (GUID), а также sticky bit в каталоге общей группы.
  8. Выполните su — linda. Затем выполните touch linda3 и touch linda4. Теперь вы должны увидеть, что два созданных вами файла принадлежат группе sales, которая является владельцем группы каталога /data/sales.
  9. Выполните rm -rf lisa*. Sticky bit предотвращает удаление этих файлов от имени пользователя linda, поскольку вы не являетесь владельцем этих файлов. Обратите внимание, что если пользователь linda является владельцем каталога /data/sales, он в любом случае может удалить эти файлы!

Управление ACL (setfacl, getfacl) в Linux

Даже если расширенные права, которые обсуждались выше, добавляют полезную функциональность к тому, как Linux работает с разрешениями, это не позволяет вам предоставлять разрешения более чем одному пользователю или одной группе в одном файле.

Списки контроля доступа предлагают эту функцию. Кроме того, они позволяют администраторам устанавливать разрешения по умолчанию сложным способом, при котором установленные разрешения могут различаться в разных каталогах.

Понимание ACL

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

Утилита tar не поддерживает ACL. Чтобы убедиться, что настройки ACL не будут потеряны при создании резервной копии, используйте star вместо tar. star работает с теми же параметрами, что и tar; он просто добавляет поддержку настроек ACL.

Вы также можете создать резервную копию ACL с помощью getfacl, которую можно восстановить с помощью команды setfacl. Чтобы создать резервную копию, используйте getfacl -R /directory > file.acls. Чтобы восстановить настройки из файла резервной копии, используйте setfacl —restore=file.acl.

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

Подготовка файловой системы для ACL

Перед началом работы с ACL может потребоваться подготовить файловую систему для поддержки ACL. Поскольку метаданные файловой системы необходимо расширять, не всегда есть поддержка по умолчанию для ACL в файловой системе. Если при настройке списков ACL для файловой системы вы получаете сообщение «operation not supported», возможно, в вашей файловой системе отсутствует поддержка ACL.

Чтобы это исправить, вам нужно добавить опцию acl mount в файле /etc/fstab, чтобы файловая система была смонтирована с поддержкой ACL по умолчанию.

Изменение и просмотр настроек ACL с помощью setfacl и getfacl

Чтобы установить ACL, вам нужна команда setfacl. Чтобы увидеть текущие настройки ACL, вам нужен getfacl. Команда ls -l не показывает никаких существующих ACL; он просто показывает + после списка разрешений, который указывает, что списки ACL применяются и к файлу.

Перед настройкой списков ACL всегда полезно показать текущие настройки ACL с помощью getfacl. Ниже на примере вы можете увидеть текущие права доступа, как показано с помощью ls -ld, а также как показано с getfacl. Если вы посмотрите достаточно внимательно, вы увидите, что показанная информация точно такая же.

В результате выполнения команды getfacl ниже видно, что разрешения показаны для трех разных объектов: пользователя, группы и других. Теперь давайте добавим ACL, чтобы дать права на чтение и выполнение и группе sales. Команда для этого setfacl -m g:sales:rx /dir. В этой команде -m указывает, что текущие настройки ACL необходимо изменить. После этого g:sales:rx сообщает команде установить ACL для чтения и выполнения (rx) для группы (g) sales. Ниже вы можете увидеть, как выглядит команда, а также вывод команды getfacl после изменения текущих настроек ACL.

Теперь, когда вы понимаете, как установить групповой ACL, легко понять ACL для пользователей и других пользователей. Например, команда setfacl -m u:linda:rwx /data дает разрешения пользователю linda в каталоге /data, не делая его владельцем и не изменяя назначение текущего владельца.

Команда setfacl имеет много возможностей и опций. Один вариант особенно важен, параметр -R. Если используется, опция делает настройку ACL для всех файлов и подкаталогов, которые в настоящее время существуют в каталоге, где вы устанавливаете ACL. Рекомендуется всегда использовать эту опцию при изменении списков ACL для существующих каталогов.

Работа с ACL по умолчанию

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

Установив ACL по умолчанию, вы определите разрешения, которые будут установлены для всех новых элементов, создаваемых в каталоге. Имейте в виду, что ACL по умолчанию не меняет разрешения для существующих файлов и подкаталогов. Чтобы изменить их, нужно добавить и обычный ACL!

Это важно знать. Если вы хотите использовать ACL для настройки доступа нескольких пользователей или групп к одному и тому же каталогу, вы должны установить ACL дважды. Сначала используйте setfacl -R -m, чтобы изменить ACL для текущих файлов. Затем используйте setfacl -m d:, чтобы позаботиться обо всех новых элементах, которые также будут созданы.

Чтобы установить ACL по умолчанию, вам просто нужно добавить опцию d после опции -m (порядок имеет значение!). Поэтому используйте setfacl -m d:g:sales:rx /data, если вы хотите, чтобы группа sales имела доступ на чтение и выполнение всего, что когда-либо будет создано в каталоге /data.

При использовании списков ACL по умолчанию также может быть полезно установить ACL для других. Обычно это не имеет особого смысла, потому что вы также можете изменить разрешения для других, используя chmod. Однако, что вы не можете сделать с помощью chmod, это указать права, которые должны быть предоставлены другим пользователям для каждого нового файла, который когда-либо будет создан. Если вы хотите, чтобы другие не получали никаких разрешений на что-либо, созданное в /data, например, используйте setfacl -m d:o::- /data.

ACL и обычные разрешения не всегда хорошо интегрированы. Проблемы могут возникнуть, если вы применили ACL по умолчанию к каталогу, после чего элементы были добавлены в этот каталог, и затем попытаетесь изменить обычные разрешения. Изменения, которые применяются к обычным разрешениям, не будут хорошо отражены в обзоре ACL. Чтобы избежать проблем, сначала установите обычные разрешения, после чего установите ACL по умолчанию (и после этого старайтесь не изменять их снова).

Пример управления расширенными правами с использованием ACL


В этом примере вы продолжите работу с каталогами /data/account и /data/sales, которые вы создали ранее. В предыдущих примерах вы гарантировали, что группа sales имеет разрешения на /data/sales, а группа account имеет разрешения на /data/account.

Сначала убедитесь, что группа account получает разрешения на чтение в каталоге /data/sales, а группа sales получает разрешения на чтение в каталоге /data/account.

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

  1. Откройте терминал.
  2. Выполните setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
  3. Выполните getfacl, чтобы убедиться, что права доступа были установлены так, как вы хотели.
  4. Выполните setfacl -m d:g:account:rwx,g:sales:rx /data/sales, чтобы установить ACL по умолчанию для каталога sales.
  5. Добавьте ACL по умолчанию для каталога /data/account, используя setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Выполните touch /data/sales/newfile и выполните getfacl /data/sales/newfile для проверки текущих разрешений.

Установка прав по умолчанию с помощью umask

Выше вы узнали, как работать с ACL по умолчанию. Если вы не используете ACL, есть параметр оболочки, который определяет права по умолчанию, которые вы получите: umask (обратная маска). В этом разделе вы узнаете, как изменить разрешения по умолчанию с помощью umask.

Вы, наверное, заметили, что при создании нового файла устанавливаются некоторые разрешения по умолчанию. Эти разрешения определяются настройкой umask. Этот параметр оболочки применяется ко всем пользователям при входе в систему. В параметре umask используется числовое значение, которое вычитается из максимальных разрешений, которые могут быть автоматически установлены для файла; максимальная настройка для файлов — 666, а для каталогов — 777.

Однако некоторые исключения относятся к этому правилу. Вы можете найти полный обзор настроек umask в таблице внизу.

Из цифр, используемых в umask, как и в случае числовых аргументов для команды chmod, первая цифра относится к разрешениям пользователя, вторая цифра относится к разрешениям группы, а последняя относится к разрешениям по умолчанию, установленным для других. Значение umask по умолчанию 022 дает 644 для всех новых файлов и 755 для всех новых каталогов, созданных на вашем сервере.

Полный обзор всех числовых значений umask и их результатов в таблице ниже.

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

Есть два способа изменить настройку umask: для всех пользователей и для отдельных пользователей. Если вы хотите установить umask для всех пользователей, вы должны убедиться, что параметр umask учитывается при запуске файлов среды оболочки, как указано в /etc/profile. Правильный подход — создать сценарий оболочки с именем umask.sh в каталоге /etc/profile.d и указать umask, который вы хотите использовать в этом сценарии оболочки. Если в этом файле изменяется umask, он применяется ко всем пользователям после входа на сервер.

Альтернативой настройке umask через /etc/profile и связанные файлы, где он применяется ко всем пользователям, входящим в систему, является изменение настроек umask в файле с именем .profile, который создается в домашнем каталоге каждого пользователя.

Настройки, примененные в этом файле, применяются только для отдельного пользователя; следовательно, это хороший метод, если вам нужно больше детализации. Мне лично нравится эта функция, чтобы изменить значение umask по умолчанию для пользователя root на 027, тогда как обычные пользователи работают с umask по умолчанию 022.

Работа с расширенными атрибутами пользователя

Это заключительный раздел о правах в Linux.

При работе с разрешениями всегда существует связь между объектом пользователя или группы и разрешениями, которые эти объекты пользователя или группы имеют для файла или каталога. Альтернативный метод защиты файлов на сервере Linux — работа с атрибутами.
Атрибуты выполняют свою работу независимо от пользователя, который обращается к файлу.

Как и в случае с ACL, для атрибутов файла может потребоваться включить параметр mount.

Это опция user_xattr. Если вы получаете сообщение «operation not supported» при работе с расширенными атрибутами пользователя, обязательно установите параметр mount в файле /etc/fstab.

Многие атрибуты задокументированы. Некоторые атрибуты доступны, но еще не реализованы. Не используйте их; они ничего вам не принесут.

Ниже приведены наиболее полезные атрибуты, которые вы можете применить:

A Этот атрибут гарантирует, что время доступа к файлу файла не изменяется.
Обычно каждый раз, когда файл открывается, время доступа к файлу должно быть записано в метаданные файла. Это отрицательно влияет на производительность; поэтому для файлов, к которым осуществляется регулярный доступ, атрибут A можно использовать для отключения этой функции.

a Этот атрибут позволяет добавлять, но не удалять файл.

c Если вы используете файловую систему, в которой поддерживается сжатие на уровне тома, этот атрибут файла гарантирует, что файл будет сжат при первом включении механизма сжатия.

D Этот атрибут гарантирует, что изменения в файлах записываются на диск немедленно, а не в кэширование в первую очередь. Это полезный атрибут в важных файлах базы данных, позволяющий убедиться, что они не теряются между файловым кешем и жестким диском.

d Этот атрибут гарантирует, что файл не будет сохранен в резервных копиях, где используется утилита дампа.

I Этот атрибут включает индексирование для каталога, в котором он включен. Это обеспечивает более быстрый доступ к файлам для примитивных файловых систем, таких как Ext3, которые не используют базу данных B-tree для быстрого доступа к файлам.

i Этот атрибут делает файл неизменным. Следовательно, в файл нельзя вносить изменения, что полезно для файлов, которые нуждаются в дополнительной защите.

j Этот атрибут гарантирует, что в файловой системе ext3 файл сначала записывается в журнал, а затем — в блоки данных на жестком диске.

s Перезаписать блоки, в которых файл был сохранен, на 0 с после удаления файла. Это гарантирует, что восстановление файла невозможно после того, как он был удален.

u Этот атрибут сохраняет информацию об удалении. Это позволяет разрабатывать утилиту, которая работает с этой информацией для спасения удаленных файлов.

Если вы хотите применить атрибуты, вы можете использовать команду chattr. Например, используйте chattr +s somefile, чтобы применить атрибуты к somefile. Нужно удалить атрибут? Тогда используйте chattr -s somefile, и он будет удален. Чтобы получить обзор всех атрибутов, которые в настоящее время применяются, используйте команду lsattr.

Резюме

В этой статье вы узнали, как работать с разрешениями. Вы прочитали о трех основных разрешениях, расширенных разрешениях и о том, как применять ACL-списки в файловой системе. Вы также узнали, как использовать параметр umask для применения разрешений по умолчанию. В конце этой статьи вы узнали, как использовать расширенные пользователем атрибуты для применения дополнительного уровня безопасности файловой системы.

Если вам понравился этот перевод, то прошу написать об этом в комментариях. Будет больше мотивации делать полезные переводы.

В статье исправил некоторые опечатки и грамматические ошибки. Уменьшил некоторые громоздкие абзацы на более мелкие для удобства восприятия.

Вместо «Только кто-то с административными правами на каталог может применять разрешение на выполнение.» исправил на «Только кто-то с правами записи на каталог может применять разрешение на выполнение.», что будет более правильным.

Заменил:
Если вы не являетесь владельцем пользователя, оболочка проверит, являетесь ли вы участником группы, которая также называется группой файла.

На:
Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.

Что такое umask «относительно»?

Я понимаю, что umask является «последним фильтром этапа», который гарантирует, что определенные биты разрешения будут установлены на вновь созданных файлах или каталогах. Мой вопрос: на чем он работает? Как определяется набор разрешений ввода?

Чтобы проиллюстрировать мое замешательство, рассмотрите следующее:

  • Я установил umask на 000
  • Я создаю каталог внутри моего домашнего каталога, а perimssions — 777
  • Я создаю каталог в корне системы (/) с помощью sudo, а разрешения — 755

Umask интерпретируется определенными системными вызовами, которые создают объекты файловой системы. Обычно это относится к аргументу явного режима, переданному системному вызову. Например, mkdir работает следующим образом:

Биты разрешения файла нового каталога должны быть инициализированы из mode . Эти биты разрешения файла аргумента режима должны быть изменены маской создания файла процесса.

биты разрешения доступа (см. ) в файловом режиме должны быть установлены на значение третьего аргумента, принятого как тип mode_t измененного следующим образом: побитовое И выполняется в битах файлового режима и соответствующем бит в дополнение к маске создания режима файла процесса. Таким образом, все биты в режиме файла, соответствующий бит в маске создания режима файла, очищаются.

Процесс umask унаследован его дочерними элементами, но, конечно, любой процесс может изменить свой собственный umask.

Основываясь на информации, предоставленной OP, я буду считать, что OP выполняет следующие команды из оболочки:

Команда mkdir использует режим по умолчанию следующим образом:

В качестве аргумента режима используется значение бит-включительного ИЛИ S_IRWXU, S_IRWXG и S_IRWXO.

Итак, S_IRWXU|S_IRWXG|S_IRWXO — 0777, и, как и ожидалось, с umask 000, режим

Но sudo всегда устанавливает umask, либо значение, указанное в /etc/sudoers либо значение по умолчанию, выбранное во время компиляции, которое на Ubuntu равно 022. Таким образом, sudo mkdir/root/foo будет запускаться с umask 022, в результате будет создан каталог, который это 0755.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL