Команда 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
Очевидно, что информация была корректно изменена. В таком формате утилита может использоваться там, где неуместен интерактивный режим, например, в рамках сценариев командной оболочки.