Права доступа к файлам в Linux

17.01.2022 Автор: Mohira Абдукаримова

Ни одна система не будет полной без какой-либо формы безопасности. Должен быть доступен механизм для защиты файлов от несанкционированного просмотра или изменения. Система Linux следует методу разрешений файлов Unix, разрешая отдельным пользователям и группам доступ к файлам на основе набора параметров безопасности для каждого файла и каталога. 

Изучение безопасности Linux

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

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

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

Файл /etc/passwd

Система Linux использует специальный файл для сопоставления имени пользователя с соответствующим значением UID. Это файл /etc/passwd. Файл /etc/passwd содержит несколько фрагментов информации о пользователе. Вот как выглядит типичный файл /etc/passwd в системе Linux:

$ cat /etc/passwd

 root:x:0:0:root:/root:/bin/bash

 bin:x:1:1:bin:/bin:/sbin/nologin

 daemon:x:2:2:daemon:/sbin:/sbin/nologin

 adm:x:3:4:adm:/var/adm:/sbin/nologin

 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

 sync:x:5:0:sync:/sbin:/bin/sync

 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 halt:x:7:0:halt:/sbin:/sbin/halt

 …

 rich:x:500:500:Rich Blum:/home/rich:/bin/bash

 mama:x:501:501:Mama:/home/mama:/bin/bash

 katie:x:502:502:katie:/home/katie:/bin/bash

 jessica:x:503:503:Jessica:/home/jessica:/bin/bash

 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

 $

Список может быть очень длинным. Учетная запись пользователя root является администратором системы Linux и ей всегда назначается UID 0. Как видите, система Linux создает множество учетных записей пользователей для различных функций, которые не являются реальными пользователями. Они называются системными учетными записями. Системная учетная запись — это специальная учетная запись, которую службы, работающие в системе, используют для получения доступа к ресурсам в системе. Все службы, работающие в фоновом режиме, должны быть зарегистрированы в системе Linux под системной учетной записью пользователя.

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

Linux резервирует UID ниже 500 для системных учетных записей. Некоторым службам для правильной работы даже требуются определенные UID. Когда вы создаете учетные записи для обычных пользователей, большинство систем Linux назначают первый доступный UID, начинающийся с 500 (хотя это не обязательно верно для всех дистрибутивов Linux, таких как Ubuntu, который начинается с 1000).

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

  • Имя пользователя для входа
  • Пароль для пользователя
  • Числовой UID учетной записи пользователя
  • Числовой идентификатор группы (GID) основной группы пользователя.
  • Текстовое описание учетной записи пользователя (так называемое поле комментария).
  • Расположение каталога $HOME для пользователя
  • Оболочка по умолчанию для пользователя

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

Теперь в большинстве систем Linux пароли пользователей хранятся в отдельном файле (так называемом теневом файле, расположенном в /etc/shadow). Доступ к этому файлу разрешен только специальным программам (например, программе входа в систему).

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

Файл /etc/shadow

Файл /etc/shadow обеспечивает больший контроль над тем, как система Linux управляет паролями. Только пользователь root имеет доступ к файлу /etc/shadow, что делает его более безопасным, чем файл /etc/passwd.

Файл /etc/shadow содержит по одной записи для каждой учетной записи пользователя в системе. Запись выглядит так:

rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::

Каждая запись файла /etc/shadow включает девять полей:

  • Логин, соответствующий логину в файле /etc/passwd
  • Зашифрованный пароль
  • День последнего изменения пароля, указанный как количество дней с 1 января 1970 г.
  • Минимальное количество дней до смены пароля
  • Количество дней до смены пароля
  • Количество дней до истечения срока действия пароля, за которое пользователь получает предупреждение о смене пароля.
  • Количество дней после истечения срока действия пароля, прежде чем учетная запись будет отключена
  • Дата (сохраненная как количество дней с 1 января 1970 г.) с момента отключения учетной записи пользователя.
  • Поле, зарезервированное для будущего использования

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

Добавление нового пользователя

Основным инструментом, используемым для добавления новых пользователей в вашу систему Linux, является useradd. Эта команда предоставляет простой способ создать новую учетную запись пользователя и одновременно настроить структуру каталогов пользователя $HOME. Команда useradd использует комбинацию системных значений по умолчанию и параметров командной строки для определения учетной записи пользователя. Чтобы просмотреть системные значения по умолчанию, используемые в вашем дистрибутиве Linux, введите команду useradd с параметром -D:

# useradd -D

 GROUP=100

 HOME=/home

 INACTIVE=-1

 EXPIRE=

 SHELL=/bin/bash

 SKEL=/etc/skel

 CREATE_MAIL_SPOOL=yes

#

Значения по умолчанию для команды useradd задаются с помощью файла /etc/default/useradd. Кроме того, дополнительные параметры безопасности определяются в файле /etc/login.defs. Вы можете настроить эти файлы, чтобы изменить поведение безопасности по умолчанию в вашей системе Linux.

Параметр -D показывает, какие значения по умолчанию использует команда useradd, если вы не укажете их в командной строке при создании новой учетной записи пользователя. В этом примере показаны следующие значения по умолчанию:

Новый пользователь будет добавлен в общую группу с идентификатором группы 100.

  • Новый пользователь будет иметь домашнюю учетную запись, созданную в каталоге /home/loginname.
  • Учетная запись не будет отключена по истечении срока действия пароля.
  • Срок действия новой учетной записи не истечет в установленную дату.
  • Новая учетная запись будет использовать оболочку bash в качестве оболочки по умолчанию.
  • Система скопирует содержимое каталога /etc/skel в каталог пользователя $HOME.
  • Система создаст файл в почтовом каталоге, чтобы учетная запись пользователя могла получать почту.

Команда useradd позволяет администратору создать конфигурацию каталога $HOME по умолчанию, а затем использовать ее в качестве шаблона для создания каталога $HOME нового пользователя. Это позволяет автоматически помещать файлы по умолчанию для системы в каталог $HOME каждого нового пользователя. В системе Ubuntu Linux каталог /etc/skel содержит следующие файлы:

$ ls -al /etc/skel

total 32

drwxr-xr-x   2 root root  4096 2010-04-29 08:26 .

drwxr-xr-x 135 root root 12288 2010-09-23 18:49 ..

-rw-r—r—   1 root root   220 2010-04-18 21:51 .bash_logout

-rw-r—r—   1 root root  3103 2010-04-18 21:51 .bashrc

-rw-r—r—   1 root root   179 2010-03-26 08:31 examples.desktop

-rw-r—r—   1 root root   675 2010-04-18 21:51 .profile

$

Это стандартные файлы запуска для среды оболочки Bash. Система автоматически копирует эти файлы по умолчанию в созданный вами каталог $HOME каждого пользователя.

Вы можете проверить это, создав новую учетную запись пользователя, используя системные параметры по умолчанию, а затем просмотрев каталог $HOME для нового пользователя:

# useradd -m test

# ls -al /home/test

total 24

drwxr-xr-x 2 test test 4096 2010-09-23 19:01 .

drwxr-xr-x 4 root root 4096 2010-09-23 19:01 ..

-rw-r—r— 1 test test  220 2010-04-18 21:51 .bash_logout

-rw-r—r— 1 test test 3103 2010-04-18 21:51 .bashrc

-rw-r—r— 1 test test  179 2010-03-26 08:31 examples.desktop

-rw-r—r— 1 test test  675 2010-04-18 21:51 .profile

#

Для многих дистрибутивов Linux команда useradd по умолчанию не создает каталог $HOME, но параметр командной строки –m сообщает ей создать каталог $HOME. Вы можете изменить это поведение в файле /etc/login.defs. Как видно из примера, команда useradd создала новый каталог $HOME, используя файлы, содержащиеся в каталоге /etc/skel.

Чтобы выполнить команды администрирования учетной записи пользователя, вам нужно либо войти в систему как специальная учетная запись пользователя root, либо использовать команду sudo для запуска команд в качестве учетной записи пользователя root.

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

Они показаны в таблице:

ПараметрОписание
-c commentДобавьте текст в поле комментария нового пользователя.
-d home_dirУкажите другое имя для домашнего каталога, отличное от имени для входа.
-e expire_dateУкажите дату в формате ГГГГ-ММ-ДД, когда истечет срок действия учетной записи.
-f inactive_daysУкажите количество дней после истечения срока действия пароля, по истечении которого учетная запись будет отключена. Значение 0 отключает учетную запись, как только истечет срок действия пароля; значение -1 отключает эту функцию.
-g initial_groupУкажите имя группы или GID группы входа пользователя.
-G group . . .Укажите одну или несколько дополнительных групп, к которым принадлежит пользователь.
-kСкопируйте содержимое каталога /etc/skel в каталог $HOME пользователя (также необходимо использовать -m).
-mСоздайте каталог $HOME пользователя
-MНе создавайте каталог $HOME пользователя (используется, если по умолчанию он создается).
-nСоздайте новую группу, используя то же имя, что и имя пользователя для входа.
-rСоздайте системную учетную запись.
-p passwdУкажите пароль по умолчанию для учетной записи пользователя.
-s shellУкажите оболочку входа по умолчанию.
-u uidУкажите уникальный UID для учетной записи.

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

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

ПараметрОписание
-b default_homeИзмените место, где создаются домашние каталоги пользователей.
-e expiration_dateИзменить срок действия для новых учетных записей.
-f inactiveИзменить количество дней после истечения срока действия пароля до отключения учетной записи.
-g groupИзмените имя группы по умолчанию или используемый GID.
-s shellИзмените оболочку входа по умолчанию.

Изменить значения по умолчанию несложно:

# useradd -D -s /bin/tsch

# useradd -D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/tsch

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

#

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

replique montre replique rolex Laser Pointer Cheap Jerseys