Основы привилегий 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, – права «группы-владельца» файла.

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

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

groups

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

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

cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

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

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 символов представляют описанные выше права. Три группы, представляющие владельца, группу и других пользователей, каждая со значениями, определяющими права на чтение, изменение и запуск.

В приведенном выше примере владелец каталога «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.

777
- 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:

cd
nano .bashrc

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

umask 022

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

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

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

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

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

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

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

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

Tags: , , ,

Добавить комментарий