Команда chfn

Команда chfn позволяет вызвать одноименную утилиту, предназначенную для изменения информации о пользователе. В частности, она позволяет сменить полное имя пользователя, номер офиса, в котором он работает, а также номера его рабочего и домашнего телефонов. Вообще, в современных дистрибутивах Linux при установке системы пользователю предоставляется возможность ввода лишь своего полного имени, тем не менее, стоит знать обо всех возможностях утилиты. Что касается упомянутой выше информации, то она хранится в системном файле конфигурации /etc/passwd, а именно, в пятом поле строки с информацией об учетной записи пользователя. Например, эта строка может выглядеть следующим образом:

$ cat /etc/passwd | grep alex
alex:x:1000:1000:Alex,,,:/home/alex:/bin/bash

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

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

Для настройки утилиты используется файл конфигурации /etc/login.defs. В рамках данного файла на работу утилиты оказывает влияние параметр CHFN_RESTRICT. Его строковое значение декларирует параметры, изменяемые с помощью утилиты. Допустимыми значениями являются значение "yes", позволяющее изменять номер офиса пользователя, а также его домашний и рабочий телефоны, значение "no", позволяющее изменять полное имя пользователя, номер его офиса, а также домашний и рабочий телефоны, а также произвольная комбинация обозначений изменяемых параметров, а именно, "f" для изменения полного имени пользователя, "r" для изменения номера офиса пользователя, "w" для изменения рабочего телефона и "h" для изменения домашнего телефона. В Ubuntu по умолчанию утилите не позволено изменять полное имя пользователя:

$ cat /etc/login.defs | grep CHFN_RESTRICT
CHFN_RESTRICT    rwh

В случае вызова от лица суперпользователя данные ограничения не действуют.

Базовый синтаксис команды выглядит следующим образом:

$ chsh [параметры] [имя пользователя]

Утилита может вызываться вообще без параметров -  в этом случае она сама запросит всю необходимую информацию. Что касается параметров, то вы можете использовать параметр -f для передачи полного имени пользователя, -r для изменения номера офиса пользователя, -w для изменения рабочего телефона пользователя и -h для изменения домашнего телефона пользователя. Также существует параметр -o, позволяющий добавлять в пятое поле строки с информацией об учетной записи пользователя произвольную информацию, который доступен лишь суперпользователю и должен использоваться с особой осторожностью.

Примеры использования

Изменение информации об учетной записи

Для смены информации в рамках своей учетной записи достаточно использовать утилиту без каких-либо параметров — она запросит ваш пароль и всю необходимую информацию:

$ chfn
Пароль: 
Изменение информации о пользователе alex
Введите новое значение или нажмите ENTER для выбора значения по умолчанию
    Полное имя: Alex
    Номер комнаты []: 1
    Рабочий телефон []: 123
    Домашний телефон []: 456
$ cat /etc/passwd | grep alex
alex:x:1000:1000:Alex,1,123,456:/home/alex:/bin/bash

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

# chfn alex
Изменение информации о пользователе alex
Введите новое значение или нажмите ENTER для выбора значения по умолчанию
    Полное имя [Alex]: Alex Alex
    Номер комнаты [1]: 2
    Рабочий телефон [123]: 098
    Домашний телефон [456]: 765
    Другое []: 
$ cat /etc/passwd | grep alex
alex:x:1000:1000:Alex Alex,2,098,765:/home/alex:/bin/bash

Информация была успешно добавлена в файл конфигурации. А что насчет удаления информации? Для этого достаточно вызвать утилиту с отдельными параметрами:

# chfn -f "Alex" -r "" -w "" -h "" alex
$ cat /etc/passwd | grep alex
alex:x:1000:1000:Alex,,,:/home/alex:/bin/bash

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