Безопасность и пользователи


Изменение учетных записей с помощью chpass(1)

В учетной записи хранится не только пароль, но и масса другой информации. Утилита chpass(1) дает пользователям возможность редактировать все доступные для их учетной записи сведения. Например, если chpass запустить из командной строки, откроется текстовый редактор со следующим содержимым:

#Changing user information for mwlucas.
Shell: /bin/tcsh
Full Name: Michael W Lucas
Office Location:
Office Phone:
Home Phone:
Other information:

В данном случае мне разрешено редактировать шесть информационных полей, входящих в мою учетную запись. В первом поле, оболочка (Shell), можно установить любой командный интерпретатор из перечисленных в файле /etc/shells (раздел «Интерпретаторы команд и /etc/shells»). Я могу изменить свое полное имя (Full Name), если, к примеру, мне захочется указать свое отчество полностью или я захочу, чтобы другие пользователи системы знали меня как мистера Зануду. Я могу изменить адрес своего офиса (Office Location) и номер рабочего телефона (Office Phone), по которым мои коллеги смогут меня отыскать. Это одна из особенностей, которая была полезна в университетских городках, где выросла BSD и где пользователи системы почти не знали о физическом местоположении других пользователей. Теперь, когда в нашем распоряжении имеются электронные каталоги и масса компьютеров, это поле перестало быть таким полезным. Обычно в поле с номером домашнего телефона (Home Phone) я указываю номер 911 (999 — в Великобритании), а в поле с прочей информацией (Other) могу внести некоторые дополнительные сведения. Кроме того, следует отметить, какую информацию я не могу изменять, будучи обычным пользователем. Местоположение моего домашнего каталога определяется системным администратором, и я не могу изменить его, даже если в систему был установлен новый жесткий диск огромного объема, который так пригодился бы для размещения моих файлов MP3. Аналогичным образом мои числовые идентификаторы пользователя и группы (UID и GID) присваиваются системой или системным администратором.

С другой стороны, если пользователь root запустит команду chpass mwlucas, его привилегированное положение позволит увидеть иную картину.

Как суперпользователь вы сможете сделать с бедным пользователем все, что угодно. Изменение имени учетной записи на megaloser — это только начало. Вы даже имеете доступ к зашифрованному паролю пользователя (1). Не изменяйте его значение, если вы не в состоянии производить шифрование в уме. Программа passwd(1) позволяет сделать это более безопасно. Вам будет даже позволено изменить местоположение домашнего каталога пользователя, при этом следует помнить, что chpass(1) не выполняет перемещение файлов пользователя — вам придется сделать это вручную.

Вы также можете установить дату изменения пароля и срок действия учетной записи. Срок действия пароля (Change) удобно определять в случаях, когда необходимо вынудить пользователя задать свой пароль при первом входе в систему. Срок действия учетной записи (Expire) удобно назначать, когда кто-то просит создать ему учетную запись на ограниченный период времени. Вы можете забыть вовремя удалить эту учетную запись, но FreeBSD никогда не забудет. В обоих случаях требуется указать дату в формате месяц день год, при этом следует указывать только первые три символа названия месяца. Например, чтобы пароль пользователя перестал действовать 8 июня 2008 года, я мог бы ввести в поле Change значение Jun 8 2008. Как только пользователь изменит свой пароль, поле срока действия пароля будет очищено, а что касается срока действия учетной записи, то только системный администратор сможет продлить его.

Большая кувалда: vipw(8)

Программу chpass удобно использовать для редактирования отдельных учетных записей, а как быть, если возникает необходимость отредактировать сразу множество записей? Предположим, что в системе имеются сотни пользователей, и в нее был установлен новый жесткий диск, предназначенный специально для размещения домашних каталогов, — неужели у вас хватит терпения запускать chpass(1) несколько сотен раз? Это тот случай, когда на помощь приходит программа vipw(8).

vipw позволяет редактировать непосредственно файл /etc/master.passwd. По окончании внесения изменений vipw проверит синтаксис файла паролей, чтобы убедиться, что вы ничего не разрушили, затем сохранит обновленный файл паролей и запустит pwd_mkdb(8). vipw может защитить ваш файл паролей от массы досадных ошибок, но не стоит выпускать процесс из-под контроля. Чтобы должным образом использовать vipw(8), вам необходимо знать формат файла паролей.

Если информация в файле /etc/master.passwd не совпадает с информацией в других файлах, программа предполагает, что верная информация находится в файле /etc/master.passwd. Например, в файле /etc/group отсутствуют группы, которые определены как основные группы пользователей. Группа, указанная в качестве основной в файле /etc/master.passwd, считается правильной, даже если она отсутствует в файле /etc/group.

Каждой учетной записи соответствует отдельная строка в файле /etc/master.passwd, которая состоит из 10 полей, разделенных двоеточиями. Это следующие поля:

  • Имя учетной записи
    Это или имя учетной записи, созданной системным администратором, или имя учетной записи, созданной во время установки какой-либо системной службы. Система FreeBSD включает такие имена учетных записей для нужд системного администрирования, как root, daemon, games и т. д. Каждая из таких учетных записей является владельцем некоторой части основной системы. В этот перечень входят также учетные записи для таких наиболее распространенных служб, как пользователь www, необходимый для работы веб-сервера. Дополнительное программное обеспечение может добавлять собственные учетные записи.
  • Зашифрованный пароль
    Второе поле в строке — это пароль в зашифрованном виде. Системные пользователи не имеют пароля, поэтому вы не сможете войти в систему под одной из таких учетных записей. Для обычных пользователей это поле содержит случайные, на первый взгляд, последовательности символов.
  • Числовой идентификатор пользователя (UID)
    Третье поле — это числовой идентификатор пользователя, или UID. Каждый пользователь имеет свой, уникальный UID.
  • Числовой идентификатор группы (GID)
    Четвертое поле — это числовой идентификатор группы, или GID. В этом поле приводится идентификатор основной группы пользователя. Обычно он совпадает с UID, а сама группа имеет то же имя, что и учетная запись пользователя.
  • Класс доступа
    Следующее поле — это класс доступа, определение которого находится в файле /etc/login.conf (раздел «Ограничение на использование ресурсов системы»).
  • Срок действия пароля
    Это то же самое поле срока действия пароля, что и в программе chpass(1), однако здесь время хранится в виде числа секунд, прошедших с начала времен. Для преобразования реальной даты в секунды можно использовать команду date -j с форматом вывода +%s. Чтобы перевести полночь 1 июня 2008 года в число секунд, прошедших от начала эпохи, можно воспользоваться командой date -j 200806010000 '+%s'.
  • Срок действия учетной записи
    Чтобы заблокировать учетную запись в заданный день, нужно установить значение этого поля так же, как если бы это было поле, определяющее срок действия пароля.
  • Личные данные
    Это поле известно также под названием gecos по малопонятным историческим причинам. Это поле содержит действительное имя пользователя, адрес офиса, рабочий телефон и домашний телефон. Все элементы этого поля отделяются друг от друга запятыми. Не используйте двоеточия внутри этого поля — двоеточия используются для разделения полей самой записи из /etc/master.passwd.
  • Домашний каталог пользователя
    Девятое поле — это домашний каталог пользователя. По умолчанию в это поле записывается значение в формате /home/<username>, но вы можете указать любой другой каталог по своему усмотрению. Кроме того, при изменении этого поля вам потребуется вручную переместить файлы пользователя в новый каталог. Пользователи с несуществующим домашним каталогом по умолчанию не могут заходить в систему, хотя такое поведение можно изменить с помощью параметра настройки requirehome в файле login.conf’.
  • Командный интерпретатор
    Последнее поле — это командный интерпретатор пользователя. Если это поле оставить пустым, система будет предоставлять старый, скучный интерпретатор /bin/sh.

Если программа chpass(1) дает вам возможность калечить отдельные учетные записи, то vipw(8) вверяет вам в руки всю базу данных о пользователях. Будьте внимательны при работе с ней!

Удаление пользователя

Учетные записи пользователей удаляются с помощью программы rmuser(8). Программа попросит ввести имя учетной записи, которую необходимо удалить, и спросит, следует ли удалять домашний каталог пользователя. Вот и все, что необходимо сделать, — разрушать всегда легче, чем созидать.

Использование pw(8) в сценариях

Команда pw(8) предоставляет мощный интерфейс командной строки для доступа к ученым записям пользователей. В то время как программа useradd(8) проведет вас по всем этапам создания учетной записи в диалоговом режиме, pw(8) позволит выполнить все необходимые действия одной-единственной командой. Я считаю, что pw(8) слишком громоздка для повседневного использования, но если вам приходится администрировать большое число учетных записей, ее помощь будет неоценима.

Я часто использую pw(8) для блокировки учетных записей. Хотя заблокированная учетная запись остается активной, никто не может войти с ней в систему. Я использую эту замечательную возможность, когда сумма на счете клиента опускается ниже нуля, — пользователи очень быстро реагируют на отсутствие возможности войти в систему, даже при том, что их веб-сайты продолжают работать, а электронная почта продолжает поступать.

# pw lock mwlucas

Разблокировка учетной записи производится командой pw unlock username.

Если вам потребуется писать сценарии для управления своими пользователями, вам определенно стоит прочитать страницу руководства pw(8).

Комментарии запрещены.