Каждая строка этого текстового файла состоит из 7 полей: регистрационное имя пользователя, признак пароля, идентификатор пользователя, идентификатор группы, дополнительная информация, «домашний» каталог пользователя, полный путь к файлу командного процессора.
В приведенном листинге значится один суперпользователь, 25 псевдопользователей и три обычных пользователя. Сами хэшированные пароли в файле /etc/passwd обычно не хранятся. Если в учетной записи пользователя вместо признака пароля стоит символ :х:, это указывает на то, что хэшированный пароль находится в другом файле – /etc/shadow. Однако в некоторых дистрибутивах Linux во втором поле записей файла /etc/passwd можно прочитать хэш-функцию пароля, которая является фальшивой и служит, вероятно, для отвлечения внимания начинающих хакеров.
В определенном смысле признак пароля представляет собой наиболее уязвимое место учетной записи. Удаление этого символа в большинстве версий Linux позволяет и обычным пользователям, и администратору входить в систему без пароля. Наличие в этом поле иных символов не предусмотрено.
Блокирование учетной записи производится командой
usermod -L <user_name> ,
при этом выполняется вставка символа «!» перед зашифрованным паролем в файле /etc/shadow, а по команде
usermod -U <user_name>
выполняется обратное действие.
Программа авторизации разрешает вход в систему пользователю с неполной учетной записью. Так, вставив в файл паролей запись из четырех полей:
echo john::999:99: >>/etc/passwd ,
администратор обеспечит беспрепятственный (т. е. «беспарольный») вход в систему пользователя john. По причине отсутствия у него домашнего каталога этот пользователь после входа окажется в корневом каталоге, а командную оболочку система ему выделит по умолчанию. Четыре поля в учетной записи минимально необходимы, и отсутствие любого из них воспринимается как отсутствие самой записи.
Еще одним уязвимым местом учетных записей пользователей является UID – уникальный идентификатор пользователя. Достаточно поменять в третьем поле UID обычного пользователя на ноль – и бесправный «юзер» становится еще одним администратором. Число таких администраторов может быть произвольным, главное, чтобы их имена различались между собой.
Путем непосредственного редактирования файлов /etc/passwd и /etc/shadow можно создать учетные записи с повторяющимися именами. Но авторизоваться в системе сможет только один пользователь, который поименован в файле /etc/passwd первым, т. к. выборка строк происходит от начала файла до первого совпадения.
Файл /etc/shadow (рис. 1.3) представляет собой продолжение таблицы учетных записей, каждая строка которой состоит из 9 полей, также разделенных двоеточиями:
· регистрационное имя пользователя или псевдопользователя,
· хэшированный пароль,
· число дней, прошедших с полуночи 01.01.1970 до дня последнего изменения пароля,
· минимальное число дней действия пароля со дня его последнего изменения,
· максимальное число дней действия пароля,
· число дней до даты, когда система начнет выдавать предупреждения о необходимости смены пароля,
· число дней со времени обязательной смены пароля до блокировки учетной записи,
Последнее, девятое, поле зарезервировано и не используется. В принципе можно обойтись всего первыми двумя полями, а пользователи с «пустым» паролем в этом файле вообще не нуждаются. Шесть временных отметок, связанных с паролем, можно установить командой chage (change aging – дословно: изменить возраст).
Файл /etc/shadow является секретным и недоступен для чтения и записи обычным пользователям. Право доступа к этому файлу имеет только администратор. Впрочем, на короткое время изменения своих паролей право записи в этот файл могут получить и обычные пользователи.
Первый пароль пользователю назначает администратор при создании учетной записи. Обновление паролей происходит в соответствии с выбранной политикой администрирования. В системе предусмотрена команда passwd, с помощью которой каждый пользователь может изменить свой пароль (если минимальный срок действия старого пароля был установлен и еще не истек). Passwd – это одна из утилит, которая может запускаться обычным пользователем, а выполняется всегда с правами администратора, поскольку ей приходится записывать новые данные в теневой файл /etc/shadow, чтение и запись которого разрешены только пользователю root. Такие исполняемые файлы имеют установленный бит SUID, речь о котором пойдет ниже.
Программа passwd запрашивает у пользователя старый пароль и, если он оказывается верным, требует ввести новый. На систему возлагается обязанность проверять вновь введенный пароль по словарю и по длине. Если введенный пароль окажется слишком простым или коротким, программа предупредит пользователя об опасности и запросит у него другой пароль. Обычный пользователь не сможет игнорировать такое предупреждение и вынужден будет подчиниться. Администратор, впрочем, может подтвердить свое намерение ввести простой пароль, и система вынуждена будет повиноваться своему хозяину.
Проверить парольные файлы /etc/passwd и /etc/shadow на предмет отсутствия ошибок позволяет утилита pwck (password check). Утилита способна выявить случайные ошибки, которые были пропущены командами useradd и usermod, а также допущены при непосредственном редактировании файлов. В частности, выявляются дублирующие строки, связанные с одним именем, пользовательские записи без установленного пароля, незавершенные записи и отдельные поля, наличие файлов, на которые дана ссылка, и др. Но преднамеренные и хитрые искажения парольных файлов этой утилитой не выявляются, и визуальная проверка файлов вовсе не исключается.
Для модификации существующей учетной записи используется команда usermod, которая имеет такой же синтаксис, что и команда useradd. Эта команда не создает, а модифицирует учетную запись, и после команды следует указывать только те параметры, которые подлежат изменению. В случае необходимости удаления параметра, назначенного утилитой useradd, он удаляется указанием пустого символа, например командой