root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
|
Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).
Столбцы по порядку:
1.name – логин пользователя, который будет использоваться при входе в систему
2.password – зашифрованный пароль в файле /etc/master.passwd и * в /etc/passwd
3.uid – уникальный идентификатор пользователя.
4.gid – уникальный идентификатор группы.
5.class – класс настроек и установок, который берётся из файла /etc/login.conf
6.change – время жизни пароля, т.е период через который необходимо сменить пароль. Количество секунд с 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
7.expire – время жизни аккуанта, после прошествия этого периода времени он заблокируется, 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
8.gecos – общая информация о пользователе
9.home dir – домашний каталог пользователя
10.shell – оболочка, которую будет использовать пользователь
При создании файла /etc/passwd из файла /etc/master.passwd поля class, change, expireудаляются, а пароль заменяется на *.
Поле логина (name) не может начинаться с символа (-), так же не советуется использовать прописные буквы в имени пользователя и разделять логин символом (.), что может вызвать проблемы при работе с почтой. В файле /etc/master.passwd поле password зашифровано, если поле отсутствует, т.е вместо пароля стоит символ *, то доступ к машине вы не получите. Для быстрого редактирования файла /etc/master.passwd и без последующего применения команды pwd_mkdb(8) применяется команда vipw(8), это тот же редактор vi(1), поэтому перед применение команды vipw(8) ознакомьтесь с man страницей по vi(1).
Пример:
# vipw
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
|
При использовании (*) в /etc/master.passwd вместо поля password запрещается авторизация в системе так как символ (*) не может быть зашифрованным паролем. Например, для временной блокировки пользователя, можно использовать вместо поля password в файле/etc/master.passwd такую комбинацию *LOCKED* или добавить такую комбинацию в начало пароля, если он существует, а при разблокировке просто её удалить, для этого Вам понадобится команда vipw(8). Для того, чтобы посмотреть как блокировать аккуант с помощью командной строки прочтите man по команде pw(8).
Поле gecos дающее общую информацию о пользователи, содержит в себе следующие поля, разделённые запятой:
•name – полное имя пользователя
•office – номер офиса
•wphone – рабочий телефон
•hphone – домашний телефон
Поле home_dir, определяет путь к домашнему каталогу пользователя, владельцем которого он будет являться.
Поле shell, определяет оболочку пользователя, список доступных оболочек для пользователя можно посмотреть в файле /etc/shells. Для пользователя root изменять текущую оболочку не рекомендуется, т.к в случае аварии файловая система /usr может быть не примонтирована, в следствии чего пользователь root не получит доступ к системе.
Если Вы хотите запретить доступ пользователя к системе, замените его оболочку на/sbin/nologin. Данная программа более корректно, чем другие (пр.: /dev/null) обработает попытку входа пользователя.
При добавлении нового пользователя необходимо выбрать уникальное имя (login name) которое не будет встречаться в файле /etc/passwd и /etc/mail/aliases. Так же имя не должно начинаться с символа (-) и содержать в себе символ (.), и прописные буквы, так как могут возникнуть непредвиденные ситуации при работе с почтой. Новый пользователь получает уникальный id – UID и становится членом группы, имя которой совпадает с именем пользователя, в которой он будет один. Такая стратегия именования группы позволяет улучшить безопасность и гибкость при управлении доступом. UID и имя пользователя(login name) являются уникальными в системе и будут использоваться при осуществлении контроля доступа к файловой системе. После добавления пользователя в систему, в его домашний каталог копируются файлы .profile (выполняется при заходе пользователя в систему), если используется оболочка /bin/sh или .cshrc(при старте оболочки) и .login(при заходе пользователя в систему), если используется оболочка /bin/csh. Все эти файлы копируются из каталога /usr/share/skel.
В файле /etc/group находятся все локальные группы системы. Данный файл можно редактировать любым текстовым редактором на Ваше усмотрение, т.е чтобы добавить группу достаточно отредактировать вышеуказанный файл.
Файл состоит из отдельных строк, столбцы в которых разделены с помощью специального символа (:). Строка состоит из следующих столбцов или полей:
•group – название или имя группы
•password – зашифрованный пароль для группы
•gid – уникальный номер группы
•member – члены данной группы
В данном файле, каждая строка, начинающаяся с символа (#) является комментарием.
Поле group является именем группы, которое определяет доступ пользователям к файлам, являющимися членами данной группы. С полем group ассоциируется поле gid, которое определяет уникальный идентификатор группы. Два этих поля неразрывно связаны, точно также как имя пользователя и его UID. Поле password является необязательным, оно редко используется и поэтому символ (*) никак лучше подходит вместо шифрованного пароля. Поле member содержит членов группы, виде имён пользователей разделённых между собой с помощью сивола (,) – запятая. В группе может находится не больше 200 пользователей. Максимальная длина строки в файле /etc/group 1024 символа.
Управление ресурсами пользователя и ограничения.
Управление ресурсами пользователя осуществляется с помощью классов, которые определяются в специальном файле /etc/login.conf, а также задаются пользователю при его добавлении. Если для пользователя не определён какой-либо класс, то ему присваивается класс – default. Каждый класс имеет набор характеристик в виде имя=значение. Для ускорения доступа к данным система непосредственно не читает файл /etc/login.conf, а вместо этого читает файл /etc/login.conf.db, который создаётся специальной командойcap_mkdb(1)
Поэтому после каждого изменения файла /etc/login.conf не забывайте исполнять командуcap_mkdb(1)
Изменить или задать класс пользователю можно в файле /etc/master.passwd, в котором для этого имеется специальное поле class. Это обсуждалось выше. Пользователь с UID = 0, т.е администратор системы (root) не имеет действующего класса, к нему применяется запись root в /etc/login.conf или класс default, если запись root отсутствует.
Пользователь может для себя создать индивидуальный файл с настройками ресурсов в домашнем каталоге под названием ~/login.conf, этот файл использует тот же синтаксис, что и файл /etc/login.conf, но он содержит только запись id с именем «me». В этом файле пользователь может только уменьшать предоставляемые ему ресурсы, но никак не увеличивать.
В качестве разделителя полей в файле /etc/login.conf используется символ (:). Первое поле в файле означает имя класса, который в последующем будет применяться к тому или иному пользователю.
Каждое поле в файле /etc/login.conf может принимать следующие значения:
•bool – если параметр является булевым, то оно может принимать следующие значения – true или false; Просто запись опции в файле /etc/login.conf без указания явного значения означает – true. Для определения false необходимо явно указать.
•file – опция принимает значение в виде пути к файлу;
•program – опция принимает значение в виде пути к исполняемуму файлу или программе;
•list – опция принимает значения в виде списка разделённого запятой или пробелом;
•path – опция принимает значения путей, разделённых запятой или пробелом. Тильда (~) раскрывается в домашний каталог пользователя;
•number – числовой значение, в десятичном, шестнадцатиричном или восьмеричном виде.
•string – в виде строки;
•size – размер. По умолчанию принимается в байтах. Может принимать следующие суффиксы для обозначения единиц размеров:
b – байты
k – килобайты
m – мегабайты
g – гигабайты
t – терабайты
Возможно объединение значений с указанием соответствующих суффикосв: 1m30k
•time – период времени, по умолчанию выраженный в секундах. В качестве суффикса используются следующие обозначения:
y – год
w – неделя
d – день
h – час
m – минуты
s – секунды
Возможно объединение значений с указанием соответствующих суффиксов: 2h30m
•unlimited – отсутствие ограничений
Ограничение ресурсов:
Название опции |
Тип значения |
Описание |
coredumpsize |
size |
Ограничивает размер файла coredump |
cputime |
time |
Ограничивает время использования процессора |
datasize |
size |
Максимальный размер данных |
filesize |
size |
Максимальный размер файла. Запрещает создавать файлы больше указанного размера |
maxproc |
number |
Максимальное число процессов которые может создать пользователь |
memorylocked |
size |
Максимальный размер в core memory котрую может заблокировать процесс |
memoryuse |
size |
Максимальный размер памяти которую может использовать процесс |
openfiles |
number |
Максимально количество файлов которые может открыть каждый процесс |
sbsize |
size |
Максимально разрешённый размер сокетбуфера |
vmemoryuse |
size |
Максимально разрешенный размер виртуальной памяти для каждого процесса |
stacksize |
size |
Максимальный размер стека | |
Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы –max и –cur. Пр: filesize-max
Окружение пользователя:
Название опции |
Тип значения |
Дефолт |
Описание |
charset |
string |
|
Устанавливает значение переменной окружения $MM_CHARSET. Пр: KOI8-R |
hushlogin |
bool |
false |
Разрешает (false) показывать файл /etc/motd при загрузке или запрещает (true). Тоже самое что присутствие файла ~/.hushlogin в домашнем каталоге. |
ftp-chroot |
bool |
false |
Делать chroot(2) пользователя в его домашнем каталоге при заходе по FTP. Применительно только к стандартному демону ftpd(8). |
ignorenologin |
bool |
false |
Логин не блокируется nologin. |
label |
string |
|
Политика MAC (maclabel(7)) применяемая к пользователю. |
lang |
string |
|
Устанавливает значение переменной окружения $LANG. Пр: ru_RU.KOI8-R |
manpath |
path |
|
Определяет пути поиска man страниц |
nocheckmail |
bool |
false |
Показывать состояние почтового ящика при заходе пользователя в систему. |
nologin |
file |
|
Если данный файл существует то отображается его содержимое при заходе в систему и сессия закрывается. Можно указать данную опцию в классе для пользователя и заблокировать для него вход в систему если даже у него в файле /etc/master.passwd установлена оболочка. |
path |
path |
|
Определяет пути поиска выполняемых файлов или программ. |
priority |
number |
|
Определяет первоначальный приоритет пользователя (nice(1)). |
requirehome |
bool |
false |
Требуется ли пользователю рабочий домашний каталог. Если его нет то пользователь не сможет войти в систему. |
setenv |
list |
|
Устанавливает переменные окружения в виде переменная=значение разделённые запятой |
shell |
prog |
|
Оболочка пользователя. Имеет приоритет над оболочкой указанной в файле /etc/master.passwd. |
term |
string |
|
Определяет тип терминала. |
timezone |
string |
|
Устанавливает значение переменной окружения $TZ. Зоны находятся /usr/share/zoneinfo. |
umask |
number |
022 |
Определяет права на создаваемые файлы. Права рассчитываются вычитанием маски из 666 а на каталог из 777. |
welcome |
file |
./etc/motd |
Файл приветствия который показывается при заходе пользователя в систему. | |
Авторизация пользователя:
Название опции |
Тип значения |
Дефолт |
Описание |
copyright |
file |
|
Дополнительный файл содержащий информацию о кооперайтах |
host.allow |
list |
|
Список удалённых хостов с которых пользователи данного класса могут заходить на машину. |
host.deny |
list |
|
Список удалённых хостов с которых пользователи данного класса не могут заходить на машину. |
login_prompt |
string |
|
Строка выводимая при запросе логина login(1) |
login-backoff |
number |
|
Определяет величину задержки умноженную на 5 секунд между неправильными логинами после того как исчерпаются попытки входа параметр ниже. Применимо к неудалённому терминалу. |
login-retries |
number |
10 |
Количество разрешённых неправильных попыток входа прежде чем логин будет признан неудачным. |
passwd_format |
string |
|
Формат в котором будет шифроваться новый пароль. Значения которые можно использовать – ‘md5’ ‘blf’ ‘des’. Советую по умолчанию использовать формат шифрования – 'blf’ так как это наиболее криптостойкий алгоритм. |
passwd_prompt |
string |
|
Приветствие для пароля. |
times.allow |
list |
|
Список периодов времени в течение которых заходить в систему можно |
times.deny |
list |
|
Список периодов времени в течение которых заходить в систему запрещено |
ttys.allow |
list |
|
Список терминалов или групп терминалов которые пользователь с данным классом может использовать. Группы терминалов указаны в файле /etc/ttys(5) |
ttys.deny |
list |
|
Список терминалов или групп терминалов которые пользователю с данным классом запрещено использовать. Группы терминалов указаны в файле /etc/ttys(5) |
warnexpire |
time |
|
Период времени за который необходимо предупреждать пользователя об истечении срока действия учётной записи. |
warnpassword |
time |
|
Период времени за который необходимо предупреждать пользователя об истечении срока действия пароля. | |
В опциях host.allow и host.deny разделителем хостов является запятая.
В опциях times.allow и times.deny записи разделяются запятой. Значения периодов времени записываются в 24 –х часовом формате, отделённых друг от друга дефисом.
Для примера: MoThSa0200-1300 Данная запись расшифровывается следующим образом: доступ пользователю разрешён по понедельникам, четвергам, субботам в период с 2 –ч часов ночи до часу дня. Если обе опции в пользовательском классе отсутствуют, то доступ разрешается в любое время. Если период времени разрешённый в опции times.allowзапрещается периодом времени в файле times.deny, то приоритет имеет опция times.deny.
В опциях ttys.allow и ttys.deny содержаться записи tty устройств, разделённые запятой (без префикса /dev/) и список ttygroups (смотрите getttyent(3) и ttys(5)) к которым пользователь данного класса имеет или не имеет доступ. Если в опции нет ни одной записи, то пользователь имеет неограниченный доступ.
Параметры пароля такие как минимальная длинна (minpasswordlen) и параметр отвечающий за предупрждение, если пользователь вводит пароль только в нижнем регистре (minpasswordcase) не поддерживаются, для этих ограничений применяется pam модульpam_passwdqc(8).
Задание классов для системных пользователей является очень хорошим средством индивидуального ограничения пользователя, но используйте это средство осознанно и с осторожностью.