Пользователи, группы и безопасность
В данной главе рассматриваются следующие вопросы:
- пользователи;
- различия между привилегированными и непривилегированными пользователями;
- файлы входа в систему;
- файл /etc/passwd;
- файл /etc/shadow;
- файл /etc/gshadow;
- файл /etc/login.defs;
- модификация сведений об устаревании паролей;
- РАМ.
В основе безопасности МСВС лежат концепции пользователей и групп. Все решения о том, что разрешается или не разрешается делать пользователю, принимаются на основании того, кем является вошедший в систему пользователь с точки зрения ядра операционной системы.
Общий взгляд на пользователей
МСВС является многозадачной многопользовательской системой. В обязанности операционной системы входят изоляция и защита пользователей друг от друга. Система следит за каждым из пользователей и, исходя из того, кем является этот пользователь, определяет, можно ли предоставить ему доступ к тому или иному файлу или разрешить запуск той или иной программы.
При создании нового пользователя ему ставится в соответствие уникальное имя
ПРИМЕЧАНИЕ
Система определяет привилегии пользователя на основании идентификатора пользователя (userID, UID). В отличие от имени пользователя, UID может и не быть уникальным, в этом случае для сопоставления ему имени пользователя берется первое найденное имя, UID которого совпадает с данным.
Каждому новому регистрируемому в системе пользователю ставятся в соответствие определенные элементы системы.
Привилегированные и непривилегированные пользователи
При добавлении нового пользователя в систему ему выделяется специальный номер, называемый идентификатором пользователя (userID, UID). В Caldera МСВС выделение идентификаторов новым пользователям начинается с 500 и продолжается в сторону больших чисел, вплоть до 65 534. Номера до 500 зарезервированы для системных учетных записей.
В общем и целом идентификаторы с номерами, меньшими 500, ничем не отличаются от остальных идентификаторов. Часто программе для нормального функционирования требуется специальный пользователь с полным доступом ко всем файлам.
Нумерация идентификаторов начинается с 0 и продолжается до 65 535. UID 0 — это особенный UID. Любой процесс или пользователь с нулевым идентификатором является привилегированным. Такой человек или процесс имеет неограниченную власть над системой. Ничто не может служить для него запретом. Учетная запись root (учетная запись, UID которой равен 0), также называемая учетной записью суперпользователя, делает вошедшего с ее использованием если не владельцем, то как минимум его доверенным лицом.
Остается UID, равный 65 535. Он тоже не из обычных. Этот UID принадлежит пользователю nobody(никто).
Когда-то одним из способов взлома системы было создание пользователя с идентификатором 65 536, в результате чего он получал привилегии суперпользователя. Действительно, если взять любой UID и перевести соответствующее число в двоичную форму, то получится комбинация из шестнадцати двоичных разрядов, каждый из которых равен либо 0, либо 1. Подавляющее количество идентификаторов включают в себя как нули, так и единицы. Исключением является нулевой UID суперпользователя, состоящий из одних нулей, и UIDnobody, равный 65535 и состоящий из 16 единиц, то есть 1111111111111111. Число 65 536 нельзя разместить в 16 разрядах — для представления этого числа в двоичной форме требуется использовать уже 17 разрядов. Самый старший разряд будет равен единице (1), все остальные равны нулю (0). Так что же происходит при создании пользователя с идентификатором длиной в 17 двоичных разрядов — 10000000000000000? Теоретически, пользователь с нулевым идентификатором: поскольку под идентификатор отводится лишь 16 двоичных разрядов, 17 разряд хранить негде, и он отбрасывается. Стало быть, единственная единица идентификатора теряется, и остаются одни нули, а в системе появляется новый пользователь с идентификатором, а значит, и привилегиями, суперпользователя. Но теперь же в МСВС нет программ, которые позволили бы вам установить UID в 65 536.
ПРИМЕЧАНИЕ
Пользователей с идентификаторами, превышающими 65 536, создавать можно, но использовать их без подмены /bin/login не получится.
Любой взломщик обязательно постарается получить привилегии суперпользователя. Как только он их получит, дальнейшая судьба системы полностью будет зависеть от его намерений. Возможно, он, удовлетворившись самим фактом взлома, не сделает с ней ничего плохого и, послав вам письмо с описанием найденных им дыр в системе безопасности, навсегда оставит ее в покое, а возможно, и нет. Если намерения взломавшего хакера не столь чисты, то тогда лучшее, на что можно надеяться, — это выведение системы из строя.
Файл /etc/passwd
Желающий войти в систему должен ввести имя пользователя и пароль, которые проверяются по базе данных пользователей, хранящейся в файле /etc/passwd. В нем, кроме всего прочего, хранятся пароли всех пользователей. При подключении к системе введенный пароль сверяется с паролем, соответствующим данному имени, и в случае совпадения пользователь допускается в систему, после чего запускается программа, указанная для данного имени пользователя в файле паролей. Если это командная оболочка, пользователь получает возможность вводить команды.
Рассмотрим листинг 1.1. Это файл passwd в старом стиле.
Листинг 1.1. Файл /etc/passwd в старом стиле
root: *:1i DYwrOmhmEBU: 0:0: root:: /root: /bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:11:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:uucp:/var/spool/uucp:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/1ib/gopher-data:
ftp:*:14:50:FTP User:/home/ftp:
man:*:15:15:Manuals Owner:/:
majordom:*:16:16:Majordomo:/:/bin/false
postgres:*:17:17:Postgres User:/home/postgres:/bin/bash
mysql:*:18:18:MySQL User:/usr/local/var:/bin/false
silvia:1iDYwrOmhmEBU:501:501:Silvia Bandel:/home/silvia:/bin/bash
nobody:*:65534:65534:Nobody:/:/bi n/false
david:1iDYwrOmhmEBU:500:500:David A. Bandel :/home/david:/bin/bash
Файл паролей имеет жестко заданную структуру. Содержимое файла представляет собой таблицу. Каждая строка файла — это запись таблицы. Каждая запись состоит из нескольких полей. Поля файла passwd, разделяются двоеточием, поэтому двоеточия нельзя использовать ни в одном из полей. Всего имеется семь полей: имя пользователя, пароль, идентификатор пользователя, идентификатор группы, поле GECOS (оно же поле комментариев), домашний каталог и командная оболочка входа в систему.
Подробнее о /etc/passwd
В первом поле указывается имя пользователя. Оно должно быть уникальным — нельзя, чтобы два пользователя системы имели одно и то же имя. Поле имени является единственным полем, значение которого должно быть уникальным. Во втором поле хранится пароль пользователя. Для того чтобы обеспечить защиту системы, пароль хранится в хэшированном виде. Термин «хэшированный» в данном контексте означает «зашифрованный». В случае с МСВС пароль шифруется по алгоритму DES (DataEncryptionStandard). Длина хэшированного пароля в этом поле всегда равна 13 символам, причем некоторые из символов, такие как двоеточие и одинарная кавычка, никогда не встречаются среди них. Любое другое значение поля, отличное от правильного хэшированного 13-символьного пароля, делает невозможным вход данного пользователя в систему, за одним чрезвычайно важным исключением: поле пароля может быть пустым.
Во втором поле не стоит ничего, даже пробела, это означает, что соответствующему пользователю не нужен пароль для входа в систему. Если изменить пароль, хранящийся в поле, добавив к нему какой-либо символ, например одинарную кавычку, то данная учетная запись окажется заблокированной, а соответствующий пользователь не сможет войти в систему. Дело в том, что после добавления в 14-символьный хэшированный пароль нелегального символа система отказывалась аутентифицировать пользователя с таким паролем.
В настоящее время длина пароля ограничена восьмью символами. Пользователь может вводить и более длинные пароли, однако значимыми будут только первые восемь символов. Первые два символа хэшированного пароля являются затравкой (salt). (Затравкой называется число, используемое для инициализации алгоритма шифрования. При каждой смене пароля затравка выбирается случайным образом.) В результате число всех возможных перестановок достаточно велико, поэтому выяснить, есть ли в системе пользователи с одинаковыми паролями, простым сравнением хэшированных паролей нельзя.
ПРИМЕЧАНИЕ
Атака по словарю (dictionaryattack) относится к методам взлома паролей грубой силой и подразумевает использование словаря и известной затравки. Атака состоит в переборе всех слов словаря, шифрования их с данной затравкой и сравнении результата со взламываемым паролем. При этом кроме слов из словаря обычно рассматриваются и некоторые их модификации, например, все буквы заглавные, только первая буква заглавная и добавление чисел (обычно только 0-9) в конец всех этих комбинаций. Подобным образом можно взломать достаточно много легко угадываемых паролей.
В третьем поле указывается идентификатор пользователя. Идентификатор пользователя не обязан быть уникальным. В частности, кроме пользователя root, может быть сколь угодно других пользователей с нулевым идентификатором, и все они будут обладать привилегиями суперпользователя.
Четвертое поле содержит идентификатор группы (GroupID, GID). Группа, указанная в этом поле, называется первичной группой пользователя (primarygroup). Пользователь может принадлежать к нескольким группам, но одна из них обязательно должна быть первичной группой.
Пятое поле теперь называют полем комментариев, но первоначальное его название — GECOS, от «GEConsolidatedOperatingSystem». При запросе информации о пользователе через finger или иную программу содержимое данного поля теперь возвращается как истинное имя пользователя. Поле комментариев может быть пустым.
Шестое поле задает домашний каталог пользователя. У каждого пользователя должен быть свой домашний каталог. Обычно пользователь, войдя в систему, оказывается в своем домашнем каталоге, но если такового не существует, то он попадает в корневой каталог.