Як змінити дані користувача за допомогою chfn і usermod в Linux

Обліковий запис користувача — це не просто ідентифікатор. Давайте розберемося, як персоналізувати та коригувати усі дані, що належать до вашого профілю в Linux, використовуючи командний рядок.

Що криється в імені?

У системах, подібних до Linux чи Unix, кожен користувач має свій обліковий запис. Ім’я цього облікового запису — це ваш логін, який ви застосовуєте для входу в систему. Воно також є назвою вашої групи за замовчуванням та назвою вашої домашньої директорії. Всі вони пов’язані єдиним ідентифікатором.

Для кожного облікового запису користувача можна зберігати різноманітні відомості. Наприклад, реальне ім’я особи, її посаду, номер кабінету, службовий телефонний номер тощо. Фактично, до профілів користувачів можливо додавати будь-яку довільну інформацію.

Це особливо зручно для системних адміністраторів, які підтримують комп’ютери з багатьма користувачами. Але навіть на персональному комп’ютері під керуванням Linux корисно розуміти, як все працює “під капотом”.

Поле GECOS

У минулому, коли Unix тільки з’явився, користувачі не мали своїх принтерів. Їм доводилося відправляти завдання друку на мейнфрейм General Electric, де працювала General Electric Comprehensive Operating System (GECOS). Для цього користувачам Unix потрібно було зберігати дані своїх облікових записів в системі GECOS.

Саме для зберігання цих даних було створено поле GECOS. Хоча потреба в цьому давно відпала, поле GECOS використовується для зберігання іншої інформації про власника профілю. Воно змінило своє призначення, але зберегло стару назву. Його досі називають полем GECOS.

Це поле, разом з іншими відомостями про користувача, зберігається у файлі /etc/passwd:

Ім’я користувача.
Ідентифікатор користувача.
Ідентифікатор групи.
Шлях до домашньої директорії користувача.
Оболонка, що запускається під час входу в систему.

Саме звідси команди finger та pinky отримують інформацію, яку потім відображають.

Команда chfn

Команда chfn (зміна інформації finger) дає змогу встановлювати та змінювати дані, що містяться в полі GECOS. Інформація в цьому полі зберігається у вигляді списку, розділеного комами.

Команда chfn була встановлена за замовчуванням в Ubuntu 18.04.1 та Manjaro 18.1.0. Для Fedora 31 її потрібно було встановити окремо, використовуючи таку команду:

sudo dnf install util-linux-user

Подивимось, що команда finger може дізнатись про користувача “Дейв”. Щоб отримати максимум даних, використаємо параметр -l (довгий формат):

finger dave -l

Ось що вона знайшла:

Вона отримала ім’я профілю, шлях до домашньої директорії та оболонку за замовчуванням. Вся ця інформація відноситься до профілю користувача, а не до реальної особи. Використаємо команду chfn, щоб додати дані про особу.

chfn dave

Команда chfn запустила інтерактивний процес. Вам буде запропоновано ввести значення для кожної частини інформації, яку може містити поле GECOS. Поточне значення відображається в дужках []. Щоб зберегти поточні дані, натисніть Enter.

Введемо наступні дані:

Номер кабінету: 512
Службовий телефон: 555-4567
Домашній телефон: 555-5432

Перевіримо, чи отримала команда finger нові дані:

finger dave -l

Так, але вона не запропонувала змінити повне ім’я. Це можна зробити лише з правами адміністратора (sudo). Нам не потрібно проходити всю процедуру знову. Ми можемо змінити будь-яке значення окремо.

Редагування окремих значень

Щоб встановити повне ім’я, скористаємось параметром -f (повне ім’я) з командою sudo.

sudo chfn -f "Dave McKay" dave

Перевіримо за допомогою finger:

Повне ім’я додано. Є ще інші параметри для зміни номера кабінету та телефонів. Щоб змінити номер кабінету, використаємо параметр -r (номер кабінету):

sudo chfn -r 633 dave

Зверніть увагу, що в деяких дистрибутивах замість параметра -r можна використовувати параметр -o (номер офісу). Щоб дізнатися, які параметри є у вашій версії chfn, введіть:

man chfn

Для зміни службового телефону використаємо параметр -w (робочий телефон):

sudo chfn -w 555-1122 dave

І, нарешті, щоб змінити домашній телефон, використаємо параметр -h (номер домашнього телефону):

sudo chfn -h 555-6576 dave

Знову перевіримо за допомогою finger, чи всі зміни збереглися:

finger dave -l

Все успішно, всі зміни збережені.

Зміна даних інших користувачів

Ми розглянули, як змінювати власні дані. А як щодо зміни даних GECOS інших користувачів? Це так само просто. Єдина відмінність — потрібно використовувати sudo. Перевіримо, які дані встановлено для користувача mary:

finger mary -l

Для цього профілю встановлено стандартні дані. Додамо до цієї інформації:

sudo chfn mary

Запуститься той же інтерактивний сеанс, і буде запропоновано ввести значення для кожної частини інформації. Оскільки ми використовуємо sudo, нас запитають також повне ім’я.

Зачекайте, а що це за пункт “Інше?”

Він не підтримується усіма версіями chfn і з’являється лише за умови використання sudo. Тому ми не бачили його раніше, коли навмисне не використовували sudo з:

chfn dave

Значення “Інше” може містити будь-які дані, які ви захочете. Воно не має конкретного застосування.

Версії chfn, які підтримують поле “Інше”, також мають опцію -o (інше) для безпосередньої зміни цього значення. Через конфлікт між -o для “номера офісу” та -o для “інше”, деякі системи використовують -r для “номера кабінету”.

Подивимось дані користувача mary у файлі /etc/passwd за допомогою less:

less /etc/passwd

У системах, які його підтримують (перевірте man-сторінку вашої версії chfn), можна встановити значення поля “інше” безпосередньо, використовуючи параметр -o (інше):

sudo chfn -o "HTG Freelancer" dave

Перевіримо дані користувача dave за допомогою команди less:

less /etc/passwd

Тут виникає логічне запитання. Якщо ваша версія chfn не підтримує поле “Інше”, як його змінити? Це можна зробити за допомогою команди usermod.

Команда usermod

Команда usermod дозволяє змінювати різні аспекти облікового запису користувача, такі як додавання або видалення користувача з груп, зміну оболонки. Її також можна використовувати для редагування поля GECOS.

Детальніше розглянемо рядок у файлі /etc/passwd, що відповідає користувачу mary. Використаємо grep, щоб отримати потрібний рядок. Це спрацює, оскільки імена користувачів повинні бути унікальними. Лише один користувач може мати ім’я mary.

grep mary /etc/passwd

Виводиться вміст полів файлу etc/passwd. Двокрапка “:” використовується як роздільник. Зліва направо поля:

Ім’я користувача.
Символ “x”, що означає, що пароль зберігається в зашифрованому вигляді у файлі /etc/shadow.
Ідентифікатор користувача mary.
Ідентифікатор групи користувача mary.
Поле GECOS.
Шлях до домашньої директорії користувача mary.
Оболонка, яка запускається при вході користувача mary.

Кома “,” є роздільником для даних у полі GECOS. Зліва направо, значення в полі GECOS:

Повне ім’я.
Номер кабінету.
Службовий телефон.
Домашній телефон.
Інша інформація.

Команда usermod встановлює для всього поля GECOS нове значення, яке ви їй надаєте. Якщо ви вкажете лише ім’я, то в полі GECOS залишиться лише ім’я. Це означає, що вам потрібно вказати всі дані, які потрібно зберегти.

Ось приклад. Користувача Мері підвищили, вона переїжджає на четвертий поверх. У неї новий номер кабінету, службовий телефон і додається її по батькові. Її поле “Інше” також зміниться. Хоча її домашній телефон не змінюється, нам потрібно вказати його в команді usermod.

Використаємо параметр -c (коментар) і команду sudo.

sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary

Перевіримо, як змінилися дані користувача mary у файлі /etc/passwd за допомогою grep.

grep mary /etc/passwd

Все змінюється, ніщо не залишається незмінним

Неточні дані є марними. Коли інформація про людей змінюється — зміни кабінетів, імен, посад — ви можете легко оновлювати їхні дані, щоб вони відображали актуальну ситуацію.