Bootstrap

Многопользовательская архитектура, юникс систем

Многопользовательская архитектура, юникс систем

Единовременное использование одной операционной системы разными пользователями в GNU/Linux, реализовано через механизм управления правами доступа и уровнем привилегий. Ещё на этапе проектирования Unix, были созданы: пользователь root, которому позволено выполнять любые действия, и другие пользователи, права которых можно настраивать множеством способов - ссылка на статью по DAC.

Такая многопользовательская архитектура, является одним из инвариантных принципов, который присущь всем Unix и GNU/Linux системам. Поэтому с этой темой стоит досконально разобраться, и грамотно использовать полученные знания.

В линукс, всегда одновременно работает множество пользователей. Причём это могут быть как реальные пользователи удалённого входа с тонких клентов, так и системные, псевдо-пользователи, созданные для контроля определённых сервисов. В этой статье мы рассмотрим как создавать пользователей во всех GNU/linux, в первую очередь через консоль, затем рассмотрим пару способов для (GUI)графического интерфейса...

В этой статье мы разберём системные файлы и консольные утилиты которые их правят:

/etc/passwd  ,  /etc/shadow  ,  /etc/group  ,  /etc/gshadow  ,  /etc/login.defs   - основные файлы управления всеми учётными записями, и всеми группами в системе.

Утилиты, которые с ними работают:

useradd и adduser ,  userdel  ,  usermod — Используются для добавления,удаления, изменения пользователей меняя системные файлы начиная с /etc/passwd. Благодаря им можно управлять учётными записями пользователей.

groupadd  ,  groupdel  ,  groupmod — Используются для добавления,удаления,изменения групп в файле /etc/group.

chage — утилита используется для просмотра и изменения настроек срока действия паролей, сохраненных в файле /etc/shadow.

pwck и grpck — проверяют на согласованность и корректность данных в файлах: /etc/passwd, /etc/shadow и /etc/group, /etc/gshadow

passwd — утилита управления паролями пользователей, вносит изменения в файл /etc/shadow

gpasswd — утилита управления паролями групп, вносит изменения в файл /etc/gshadow

newgrp — По умолчанию, любой файл, который создает пользователь, сразу же присваивается к группе, в которой он состоит, определенной в /etc/passwd. Если пользователь принадлежит к другим группам, он или она может набрать newgrp thisgroup чтобы стать членом группы thisgroup. Затем, любые новые созданные файлы унаследуют членство в thisgroup.

p.s по каждой из них можете пройтись с man

В GNU/Linux, почти любые операции, в том числе и создание учётных записей, возможно делать несколькими способами.

Для многих, будет достаточным установить программу Cockpit. Это удобная и мощная панель управления сервером, с понятным и красивым веб-интерфейсом. В ней имеется базовый функционал по созданию и управлению учётными записями, и многое другое.Тема cockpit подробно раскрыта в отдельной статье.

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

Традиционно пользователи проходят проверку подлинности локально, используя информацию, хранящуюся в /etc/passwd и /etc/shadow. Но на большинстве крупных предприятий, информация об учётных записях пользователей, хранится на централизованном сервере аутентификации. Но это тема отдельного раздела (ознакомьтесь с LDAP, NIS и Winbind,Windows Active Directory).

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

Управление аккаунтами в Linux, файл /etc/passwd

Для начала мы познакомимся с локальным механизмом управления аккаунтами в Linux и начнём с его основы, т.е. с файла /etc/passwd, в котором определены все пользователи, которые существуют в системе.

Каждая строка файла /etc/passwd определяет аккаунт одного из пользователей данной системы.

Terminal:

 [21:12:50 vagrant@centos7:~] $ cat /etc/passwd                                           
        root:x:0:0:root:/root:/bin/bash
        bin:x:1:1:bin:/bin: /sbin/nologin
        daemon:x:2:2:daemon:/sbin:/sbin/nologin
        adm:x:3:4:adm:/var/adm:/sbin/nologin
        lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
        sync:x:5:0:sync:/sbin:/bin/sync
        shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
        halt:x:7:0:halt:/sbin:/sbin/halt
        mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        vagrant:x:1000:1000:Mister Vagrant:/home/vagrant:/bin/bash
        ...
        

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

Чтобы наглядно прочесть следующее описание, можете навести на подсветку в терминале выше:

  • Первое поле отвечает за имя пользователя
  • Второе поле содержит «x». На устаревших Linux-системах второе поле содержало зашифрованный пароль для аутентификации, но фактически, сейчас все Linux-системы хранят эту информацию в файле /etc/shadow.
  • Третье поле отвечает за числовой пользовательский идентификатор, связанный с конкретным пользователем UID;
  • Четвертое поле ассоциирует этого пользователя с конкретной группой GID;
  • Пятое поле содержит текстовое описание аккаунта, комментарий, или полное имя пользователя.
  • Шестое поле определяет домашний каталог пользователя.
  • Седьмое — устанавливает стартовую оболочку пользователя, которая будет автоматически запускаться когда пользователь входит в систему.

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

Большая часть из них это и есть системные аккаунты, их идентификатор (uid) меньше 100, и обычно вместо стартовой оболочки установлен параметр /sbin/nologin, что эффективно препятствует использованию этих аккаунтов в качестве обычных аккаунтов для логина — т.е. они предназначены только для внутрисистемного пользования, любые попытки войти в систему с консоли или через ssh в качестве учётной записи, например, пользователя bin будут отклонены. Однако до тех пор, пока у подобного пользователя есть пароль и включен доступ локальной учетной записи к FTP-серверу, он сможет войти на сервер через FTP-клиент. Не каждый пользователь с учётной записью в системе Linux имеет доступ к FTP-серверу - подробнее об этом здесь.

Файл установленных констант /etc/login.defs

Суть всех представленных полей будет проще понимать, если увидеть файл настроек /etc/login.defs, содержащий установленные константы,действующие в этой системе по умолчанию. Для удобства создания новых учётных записей. Все раскомментированные строки содержат пару «ключевое слово — значение».

Terminal:

    [06:30:16 vagrant@centos7:~] $ cat /etc/login.defs                                                                                                
    #
    # Please note that the parameters in this configuration file control the
    # behavior of the tools from the shadow-utils component. None of these
    # tools uses the PAM mechanism, and the utilities that use PAM (such as the
    # passwd command) should therefore be configured elsewhere. Refer to
    # /etc/pam.d/system-auth for more information.
    #

    # *REQUIRED*
    #   Directory where mailboxes reside, _or_ name of file, relative to the
    #   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
    #   QMAIL_DIR is for Qmail
    #
    #QMAIL_DIR	Maildir
    MAIL_DIR	/var/spool/mail
    #MAIL_FILE	.mail

    # Password aging controls:
    #
    #	PASS_MAX_DAYS	Maximum number of days a password may be used.
    #	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
    #	PASS_MIN_LEN	Minimum acceptable password length.
    #	PASS_WARN_AGE	Number of days warning given before a password expires.
    #
    PASS_MAX_DAYS	99999
    PASS_MIN_DAYS	0
    PASS_MIN_LEN	5
    PASS_WARN_AGE	7

    #
    # Min/max values for automatic uid selection in useradd
    #
    UID_MIN                  1000
    UID_MAX                 60000
    # System accounts
    SYS_UID_MIN               201
    SYS_UID_MAX               999

    #
    # Min/max values for automatic gid selection in groupadd
    #
    GID_MIN                  1000
    GID_MAX                 60000
    # System accounts
    SYS_GID_MIN               201
    SYS_GID_MAX               999

    #
    # If defined, this command is run when removing a user.
    # It should remove any at/cron/print jobs etc. owned by
    # the user to be removed (passed as the first argument).
    #
    #USERDEL_CMD	/usr/sbin/userdel_local

    #
    # If useradd should create home directories for users by default
    # On RH systems, we do. This option is overridden with the -m flag on
    # useradd command line.
    #
    CREATE_HOME	yes

    # The permission mask is initialized to this value. If not specified,
    # the permission mask will be initialized to 022.
    UMASK           077

    # This enables userdel to remove user groups if no members exist.
    #
    USERGROUPS_ENAB yes

    # Use SHA512 to encrypt password.
    ENCRYPT_METHOD SHA512
    

Файл-компаньон хранитель паролей /etc/shadow

Итак, сами пользовательские аккаунты определены в /etc/passwd, но пароли к аккаунтам, аналогичным образом, построчно содержатся в его файле-компаньоне /etc/shadow. Только он, в отличие от /etc/passwd, доступен для чтения исключительно суперпользователю, т.к. содержит конфиденциальную информацию в зашифрованном виде, используя хэши.

Вы можете(очень маловероятно) пользоваться системой Linux, в которой всё ещё действует старый метод хранения хешированных паролей в файле /etc/passwd. Это легко исправить. Просто примените команду pwconv, и файл /etc/shadow будет создан, а хешированные пароли перемещены в него. Имейте в виду, что команда chage о которой мы поговорим после, не сработает, если у вас нет настроенного файла /etc/shadow или файл /etc/login.defs не поддерживается.

В обычном случае просто выводим содержимое файла на экран с помощью: sudo cat /etc/shadow

Каждая строка определяет информацию о пароле конкретного аккаунта, а поля в ней разделены двоеточием ( : ). Первое поле определяет конкретный пользовательский аккаунт, которому соответствует данная «теневая» запись. Во втором поле содержится зашифрованный пароль.

Terminal:

[07:37:40 vagrant@centos7:/var/www/html/styles] $ ls -la /etc/shadow
    ---------- 1 root root 1784 Dec 20 09:57 /etc/shadow                                                                                                        

[07:46:57 vagrant@centos7:/var/www/html/styles] $ sudo cat /etc/shadow                                                                                                   
...
    root:$6$Ob/WgpLyUiqYp0y7$ncQsdfsdfDFsdfdsfNgtyNW/ohJxLeTZJCclmZ96uiy1nJo/Dd.sllY2WHVYXkDX8B7Wa8/MXPkxyHn.V0:16491:0:99999:7:::
    bin:*:16231:0:99999:7:::
    daemon:*:16231:0:99999:7:::
    adm:*:16231:0:99999:7:::
    lp:*:16231:0:99999:7:::
    sync:*:16231:0:99999:7:::
    shutdown:*:16231:0:99999:7:::
    halt:*:16231:0:99999:7:::
    mail:*:16231:0:99999:7:::
    vagrant:$6$vw5Vl0yK7Lf1EUds$fy0U88XxyPG7jdsfLS.uAWmC3OZa25udfgM11JfRB.GQvdBryKldHNITowAj7p0TNTyIoyAMrX9qw9n0qwetDfgs:16491:0:99999:7:-1:-1: 
...

Подробное описание полей, (доп. см. подстветку в терминале выше). Учётная запись в /etc/shadow:

  • поле 1 : Логин пользователя. Символьное имя, которое вы вводите при входе в систему. Учётная запись пользователя, которая существует в системе.
  • поле 2: Зашифрованный пароль. Пароль использует формат $type$salt$hashed.
    $type является методом криптографического алгоритма хеширования, указан в файле /etc/login.defs
    и может иметь следующие значения:
    
    $1$ – MD5
    $2a$ – Blowfish
    $2y$ – Eksblowfish
    $5$ – SHA-256
    $6$ – SHA-512
    
    $salt - набор символов, который добавляется в хэш к паролю в момент хэширования для SHA512 - 16 символов.
    $hashed - результат хэширования с солью. Сам хэшированный пароль. Для SHA512 - 86 символов
    
    Если поле пароля содержит звездочку (*) или восклицательный знак ( !), пользователь
    не сможет войти в систему с использованием аутентификации по паролю.
    
    Другие методы входа, такие как аутентификация на основе ключей или переключение на
    пользователя, по-прежнему разрешены.
    
    В старых системах Linux это поле находилось в файле /etc/passwd.
  • поле 3 : — Формат такой, указано количество дней с начала эпохи Unix 01.01.1970 до момента, когда пароль был изменён.
  • поле 4 : — Минимальное количество дней которое должно пройти прежде, чем будет снова разрешено сменить пароль («0» — «менять в любое время»)
  • поле 5 : — Отсчёт от последней даты установки пароля. Указывается максимальный срок действия пароля, количество дней до того, как система заставит пользователя сменить пароль, после установки. ("-1" — «никогда»). По умолчанию часто ставится 99999 дней.
  • поле 6 : — количество дней, счётчик начинает отсчитываться, до наступающей даты указанной в поле 5(срок действия пароля). В течении этих дней, пока не наступила дата из пятого поля, пользователь начнёт получать предупреждение, о необходимости сменить пароль. ("-1" — «не предупреждать»)
  • поле 7 : — Допустимый период бездействия. Количество дней начинает отсчитываться, после наступления даты указанная в поле 5(срок действия пароля). Здесь указывается количество дополнительных дней, возможной работоспособности аккаунта, по прошествии которых, учётная запись будет заблокирована. Если значение 0, то учётка блокируется немедленно в тот же день, что указан в пятом поле. (-1 — «фактически отключает блокировку учётки, по устареванию пароля»)
  • поле 8 : — Устанавливается конкретная дата когда учётная запись будет заблокирована, независимо от всех прочих условий. Фактически - срок годности учётной записи. В этом файле представлена, в формате общего количества дней прошедших с начала эпохи Unix. ("-1" — «означает, что аккаунт не имеет срока годности»)
  • поле 9 : — Зарезервировано для будущего использования

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

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


Файл /etc/group, который определяет группы. И его файл-тень /etc/gshadow.

Все перечисляемые файлы, имеют общую логику хранения информации об учётных записях. Поэтому ещё раз вспомним, что в основном файле /etc/passwd каждая строка представляет собой одну учётную запись пользователя. И каждое поле отделяется от следующего двоеточием ( : ). Очерёдность поля, слева-направо, в строке определяет его назначение. Первым идёт имя пользователя. Во втором поле с паролем содержится элемент x, который раскрывает своё значение в виде зашифрованного пароля (в файле /etc/shadow). Затем идёт идентификатор (UID) равный 1000 и основной идентификатор группы (GID) тоже 1000, что соответствует группе этого пользователя в файле /etc/group.

Формат полей файла /etc/group тоже построчный и имеет идентичную структуру:

  • Первое поле определяет символьное имя группы.
  • Второе поле остаточный пароль, которое сейчас просто зарезервировано x, его значение, аналогичным образом, находится в файле /etc/gshadow.
  • Третье поле, основа этого файла, устанавливает соответствие символьного имени группы с его числовым идентификатором (GID) заданном в /etc/passwd.
  • Четвёртое поле (которое у некоторых групп в примере выше пустое) определяет всех членов конкретной группы, как и везде без пробельных символов, через запятую, если пользователей несколько.

Рассмотрим реальное содержимое обоих файлов, начнём с /etc/group :

Terminal:

[02:37:31 vagrant@centos7:~] $ cat /etc/group                                                                                      
    root:x:0:
    bin:x:1:
    ...
    wheel:x:10:vagrant,vagrant2,vagrant3
    cdrom:x:11:
    mail:x:12:postfix
    man:x:15:
    ...
    vagrant:x:1000:vagrant
    ...
    

/etc/gshadow - который хранит зашифрованные пароли от каждой группы, если они установлены пользователем.

Аналогичным образом поля в этом файле разделены двоеточием ( : ),

  • Первым выступает символьное имя группы.
  • Второе поле хранит хэшированный пароль группы. Это поле может быть пустым, и в этом случае только члены группы могут получить групповые разрешения. Если же это поле начинается с восклицательного знака ( ! ), значит пароль заблокирован, остальные символы после ( ! ) в этом поле содержат значение пароля до того, как он был заблокирован. И для таких групп тоже, никакие пользователи не будут иметь возможность использовать пароль для доступа к групповым разрешениям. Подобная группа доступна только её участникам. Пароль может быть установлен владельцем группы или администратором группы, утилитой gpasswd.
    Если пароль задан, тогда, любой пользователь, который пожелает получить разрешения этой группы, имеет такую возможность, зная этот пароль, присоедениться к группе на время текущей сессии, выполнив команду newgrp(см.newgrp (1) ).
  • Третье поле это список имён администраторов, перечисленных через запятую, кто может менять пароль или членство в группе. Администраторы также имеют те же права, что и члены группы.
  • Четвёртое поле - список имён участников, членов группы, пользователи перечисляются через запятую, без пробельных символов. Участники имеют постоянный доступ к группе без ввода пароля.

Посмотрим содержимое файла /etc/gshadow:

Terminal:

[07:05:03 vagrant@centos7:~] $ sudo cat /etc/gshadow
    root:::
    bin:::
    ...
    wheel:::vagrant,vagrant2,vagrant3
    cdrom:::
    mail:::postfix
    man:::
    ...
    vagrant:!!: :vagrant
    ...
    vboxsf:!::
    ...
    

Членство в группах при ручном изменении, т.е. без использования специализированных утилит, необходимо дублировать в обоих этих файлах. Т.е. информация в этих файлах должна быть идентичной, и/или дополнять друг друга. Программа grpck проверяет целостность информации о группах в системе. Проверяются формат и правильность данных всех записей в файлах /etc/group и /etc/gshadow, и их идентичность.

Общие примечания об именах групп:

В большинстве дистрибутивов, под каждую учётную запись, логин-аккаунт создаётся одноимённая группа в файлах групп, при этом обычно идентификаторы UID и GID тоже одинаковы.

Но на некоторых других системах все логин-аккаунты могут принадлежать только к какой-то одной группе пользователей. Какой из этих методов выбрать зависит от администратора системы.

Создание соответствующей одноимённой группы для каждого пользователя имеет преимущество в том, что позволяет легко контролировать их собственный доступ, самостоятельно помещая доверенных друзей-пользователей в свою личную группу.


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

Порядок следующий:

Добавим нового пользователя в систему. Для начала убедитесь, что вам понятен механизм текстового редактора системных файлов (как пользоваться vim и emacs смотрите здесь):

sudo vipw

Теперь ваш редактор должен быть запущен с уже загруженным /etc/passwd экране. Изменяя системные файлы /etc/passwd и /etc/group обязательно используйте команды vipw и vigr. Они имеют повышенные меры предосторожности, оберегая ваши файлы от участи быть испорченными.

Первый шаг: редактирование /etc/passwd.

Terminal:

Чтобы находясь в редакторе vim, войти в режим редактирования нажмите i, после внесения нужных изменений,
возвращаяйтесь в режим просмотра, клавиша ESC, и теперь, чтобы выйти из редактора, с
сохранением сделанных изменений, введите символ двоеточие (:)
И в поле для ввода, введите символы wq и нажмите Enter. Но если вы ошиблись или просто не желаете сохраняться,
то нужно ввести q! и Enter.
Итак вот содержимое файла "/etc/passwd" открытый командой "sudo vipw".

[05:29:35 vagrant@centos7:~] $ sudo vipw

Для создания пользователя testuser добавляем в конец следующую строку:


root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash ... testuser:x:3000:3000:user for test:/home/testuser:/bin/bash ...

Если вы внимательно читали статью, то объяснять вам значение полей не потребуется. Однако поясним, что этим простым действием, мы добавили пользователя «testuser» с идентификатором UID 3000. А также определили его в группу с таким же идентификатором GID 3000, которую, кстати ещё не создали, и пока не дали ей имя. Хотя мы могли бы и добавить его к уже имеющейся группе vagrant например, если бы захотели так сделать, то GID поставили бы 1000...

При этом у этого пользователя установлен комментарий, гласящий «user for test», домашний каталог установлен как /home/testuser, который мы тоже ещё не создали, а командная оболочка — установлена как /bin/bash. Однако, в целях безопасности, при таком желании, здесь можно было бы поставить и отсутствие оболочки /bin/false.

Второй шаг: редактирование /etc/shadow.

Сейчас нам нужно добавить запись в /etc/shadow для нового пользователя testuser. Для этого сначала установим разрешение на запись в файл, и откроем его аналгичным образом, добавив специальный ключ -s: (подробная статья по манимуляциям с правами на файлы представлена здесь)

sudo chmod u+w /etc/shadow
sudo vipw -s

проделаем эти операции, заодно поймём, откуда берутся наши просоленные пароли в /etc/shadow

Terminal:

Небольшое оступление, чтобы записать в этот файл пароль, его нужно получить в нужном виде,
метод шифрования указан в файле констант /etc/login.defs, ближе к его концу есть запись:
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

[06:07:00 vagrant@centos7:~] $ cat /etc/login.defs | grep "ENCRYPT_METHOD"
ENCRYPT_METHOD SHA512

Обладая этой информацией, при желании, вы можете самостоятельно получить новый просоленный
пароль, с помощью сценария Python (> = 3.3)

[06:07:13 vagrant@centos7:~] $ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

    Password:    

    $6$jA9/HeSBmMuxzqg8$gfVSWV0W7G56lSyOYLRah3i4rRc86P0a89gPOdLtUBY6GHvoSZxo3mb2vSzl11wAzwBBDgMMpaDA.BefE0dbJ1

#Эту всю строчку пароля, весь шифр можно вставлять в соответствующее поле и ваш пароль будет работать. Но мы здесь сделаем иначе.

[06:07:31 vagrant@centos7:~] $ sudo chmod u+w /etc/shadow [06:13:35 vagrant@centos7:~] $ sudo vipw -s Мы скопируем строку существующего пользовательского аккаунта пароль от которого в незашифрованном виде мы знаем. Заменим имя пользователя в скопированной строке на имя нашего нового пользователя testuser и убедимся,что все поля (особенно старый пароль) установлены как надо т.е. идентично. Имейте ввиду, что в вашем терминале, из-за длинных шифров паролей, визуально строки могут не помещаться в одной строке, и продолжаться на следующей строке в системном редакторе, но это только визуально. (Позже вы всегда можете поменять пароль нового пользователя штатными утилитами, которые мы тоже разберём, дальше)
#результат этой операции, (файл /etc/shadow):
root:$6$Ob/WgpLyUdsfgsfdgW7l2n5.X0LhMkbsNgtyNW/ohJxLeTZJCclmZ96uiy1nJo/Dd.sllY2WHVYXkDX8B7Wa8/MXPkxyHn.V0:16491:0:99999:7::: bin:*:16231:0:99999:7::: daemon:*:16231:0:99999:7::: adm:*:16231:0:99999:7::: lp:*:16231:0:99999:7::: sync:*:16231:0:99999:7::: shutdown:*:16231:0:99999:7::: halt:*:16231:0:99999:7::: mail:*:16231:0:99999:7::: ... vagrant:$6$vw5Vl0yK7Lf1EURo$y0U88XxyPGsdfv3OZa25uWJZje8r8dM11JfRB.GQvdBryKldHNITowAj7p0TNTyIoyAMrX9qw9n0:16491:0:99999:7::: testuser:$6$vw5Vl0yK7Lf1EURo$y0U88XxyPGsdfv3OZa25uWJZje8r8dM11JfRB.GQvdBryKldHNITowAj7p0TNTyIoyAMrX9qw9n0:16491:0:99999:7::: ...

После сохранения изменений в файле shadow, верните ему прежние правовые настройки командой.

sudo chmod u-w /etc/shadow

Чтобы вы уже сейчас имели понимание, как обычно задают пароль для нового пользователя с помощью штатной утилиты, чтобы уже хешированный пароль сам записывался в файл shadow, в соответствующем поле указанного пользователя, то вот, но подробнее мы это ещё разберём позже:

sudo passwd testuser

Пришло время для редактирования файла /etc/group

/etc/passwd и /etc/shadow готовы, самое время настроить /etc/group. Для этого, вводим:

sudo vigr

Перед вами появится ваш /etc/group файл, готовый к редактированию. Если ранее вы решили добавлять созданного пользователя к уже имеющейся группе, то вам не понадобиться здесь создавать новую группу, просто добавить его, в четвёртое поле нужной группы в этом файле /etc/group, а потом и в /etc/gshadow.

Но в нашем текущем случае, мы внесём в файл новую группу в первый файл, и сразу включим в неё этого пользователя, потом, тоже самое сделаем и во втором файле-тени. Итак сначала, добавляем следующую строку в конце файла /etc/group:

Terminal:

    root:x:0:
    bin:x:1:
    ...
    wheel:x:10:vagrant,vagrant2,vagrant3
    ...
    testuser:x:3000:testuser

добавим пароль группы в файле /etc/gshadow

при желании установить пароль на группу, также вставляйте хэшированный просоленный пароль в второе поле файла /etc/gshadow. С помощью следующих команд:

sudo chmod u+w /etc/shadow
sudo vigr -s

В нашем примере для наглядности, он будет идентичен паролю пользователя из файла passwd.

Terminal:

    root:::
    bin:::
    daemon:::
    sys:::
    ...
    testuser:$6$vw5Vl0yK7Lf1EURo$y0U88XxyPGsdfv3OZa25uWJZje8r8dM11JfRB.GQvdBryKldHNITowAj7p0TNTyIoyAMrX9qw9n0::
    ...

Теперь разрешения группы testuser сможет получить любой пользователь, кто знает пароль, убедимся в этом после того, как создадим домашний каталог нашему пользователю.

Создание домашнего каталога новому пользователю

Мы почти закончили. Создать подкаталог пользователя testuser, в каталоге /home мы сможем только с правами администратора, т.е. от пользователя root, поэтому после его создания сменим владельца и группу владельца у подкаталога, на желаемые. Для этой цели воспользуемся утилитой chown, о которой подробнее ещё поговорим чуть позже.

Сейчас создадим домашний подкаталог testuser. И ограничим права на него, для всех остальных, предоставив полный доступ, только владельцу и его группе, утилитой chmod:

sudo mkdir /home/testuser
sudo chown testuser:testuser /home/testuser
sudo chmod 0770 testuser

Вот, что мы получим:

Terminal:

    [09:16:30 vagrant@centos7:~] $ sudo mkdir /home/testuser
    [09:17:00 vagrant@centos7:~] $ sudo chown testuser:testuser /home/testuser
    [09:17:17 vagrant@centos7:~] $ sudo chmod 0770 /home/testuser

    [09:18:19 vagrant@centos7:~] $ cd /home/testuser
    bash: cd: /home/testuser: Permission denied

    [09:18:25 vagrant@centos7:~] $ sudo ls -la /home/testuser
    total 0
    drwxrwx---  2 testuser testuser  6 Dec 27 09:16 .
    drwxr-xr-x. 7 root     root     78 Dec 27 09:16 ..

    

Наш каталог пользователя на месте и аккаунт полностью готов к использованию. Однако как вы видите текущий пользователь vagrant не может увидеть содержимое домашнего каталога пользователя testuser. Но мы не зря задали пароль для группы в файле gshadow, пришло время им воспользоваться. И посмотреть, что это нам даст.

Для начала убедимся, что наш пользователь testuser работает как надо, просто залогинимся им.

Terminal:

[01:51:51 vagrant@centos7:~] $ su testuser
    Password:    

[01:53:20 testuser@centos7:/home/vagrant] $ cd ~

[01:53:27 testuser@centos7:~] $ ls -la
    total 0
    drwxrwx---  2 testuser testuser  6 Dec 27 10:06 .
    drwxr-xr-x. 7 root     root     78 Dec 27 10:06 ..

[01:53:35 testuser@centos7:~] $ su vagrant Password: [01:58:34 vagrant@centos7:/home/testuser] $ ls ls: cannot open directory .: Permission denied [01:58:39 vagrant@centos7:/home/testuser] $ newgrp testuser Password: [01:58:58 vagrant@centos7:/home/testuser] $ ls -la total 0 drwxrwx--- 2 testuser testuser 6 Dec 27 10:06 . drwxr-xr-x. 7 root root 78 Dec 27 10:06 .. #однако не спешите радоваться, эти права действуют лишь до первой перезагрузки OS, потому что в системные #файлы никакие настройки не вносятся, можете убедиться сами. Для доступа к такому каталогу от других пользователей #нужно будет снова вводить пароль группы, ну или сразу простить владельца, добавить себя в его группу на постоянной основе, #с помощью редактирования системных файлов которые мы рассматривали выше, либо с помощью утилит которые рассмотрим теперь

Утилиты администрирования учётных записей:

Итак каждый пользователь системы Linux должен иметь отдельную учётную запись. Благодаря которой, можно безопасно хранить файлы, а также средства настройки пользовательского интерфейса (GUI, путь, переменные окружения и т. д.), соответствующие тому, как используется данный компьютер.

Вы уже знаете как вручную добавлять новые аккаунты и группы, то-же самое можно сделать и другим способом. Сейчас мы подробно рассмотрим утилиты, которые созданы для ускоренного управления аккаунтами. Под каждую из приведённых далее утилит, есть, как полагается в Linux, своя man-страничка.

Создание учётной записи пользователя, утилита:

useradd

useradd - это встроенная в любой, unix/linux, низкоуровневая утилита, для добавления пользователей. Во многих дистрибутивах, с помощью неё, по умолчанию, т.е. без соответствующих настроек и указанных опций, создаётся только учётная запись пользователя без каких-либо дополнительных данных. Почти всё придётся указывать конкретно, в момент вызова этой утилиты, с помощью передачи параметров, создавать домашний каталог, группу пользователя, и т.д. Однако в дистрибутивах от "прадедушки" Red Hat, например в Fedora 34 эта утилита многое делает и сама без параметров, основываясь на установках файла /etc/login.defs, и /etc/default/useradd. Системный администратор сам решает, какие файлы нужно положить в каталог /etc/skel/ (или в любой другой каталог шаблонов, указанный в /etc/default/useradd или в командной строке). В других дистрибутивах от дедушки Debian, например Canonical, и их Ubuntu в частности, по умолчанию нет таких установок, однако есть удобный скрипт adduser, но об этом позже.

useradd - это простой способ создания нового пользователя из консоли. Просто откройте окно терминала и с правами суперпользователя, наберите useradd в командной строке. Можете сразу добавить дополнительные параметры, которые утилита тогда запишет, в соответствующие поля системных файлов, начиная с файла /etc/passwd.

Но указывать какие-то параметры, не обязательно, т.к. единственным совершенно необходимым параметром, является только логин пользователя. Иногда это действительно всё, что вам требуется от новой учётной записи... При этом, после создания, можно будет с помощью других утилит, дополнять любые данные: устанавливать и менять пароль, настраивать группы, и делать все остальные возможные настройки.

Для каждого поля данных учётной записи в системных файлах, есть своя утилита, и/или соответствующие опции, в виде символьных параметров с дефисом перед ним. Программа useradd работает со следующими параметрами, значения которых нам знакомо по системным файлам, что описаны выше. Рассмотрим их применение с этой утилитой:

Опция и значение: Пример:
-c, комментарий — комментарий к новой учетной записи пользователя. Обычно это полное имя пользователя. Укажите полное имя пользователя и оно будет записано в пятое поле в файла /etc/passwd. Предназначено для текстового описание аккаунта, ФИО, например.
useradd ivan -c "Ivan Ivanov Ivanovich"
-b, базовый_каталог— с помощью этой опции указывается только базовая часть от общего пути к каталогу пользователя (без слэша в конце). Без данной опции, базовый каталог по умолчанию, соответствует каталогу /home. В некоторых дистрибутивах, опция не может создать, новый базовый каталог, а использует существующие, которые должны уже присутствовать в системе. В таком случае когда необходимо именно создать, дерево для базового каталога, добавьте параметр -m. Однако, имейте ввиду, при последующем удалении пользователя с его подкаталогом userdell -r, базовые каталоги остаются в системе.
Так или иначе, к указанному пути базового каталога, системой добавляется новый подкаталог, которым будет владеть пользователь данной учётной записи, и этот домашний подкаталог будет идентичен имени учётной записи(логину).
Поэтому конечное имя, домашнего подкаталога указывать не нужно. Указывается только путь к базовому каталогу, без слэша на конце. При этом полный путь домашнего каталога, будет записан в шестое поле файла /etc/passwd.
p.s. Если же вы укажете в качестве базового каталога полный путь к домашнему каталогу, то утилита вознамерится, в нём создать ещё и подкаталог с именем логина, по указанному вами пути, и в "худшем" случае, когда без опции (-m) этого не произойдёт, каталог, не создастся, а указанный вами путь будет записан в файл /etc/passwd.
useradd ivan -b /mnt
useradd ivan -m -b /newdir/newdir1/newdir2
-d, домашний_каталог — создаётся новый каталог, которым будет владеть пользователь данной учётной записи. По умолчанию его название совпадает с именем учётной записи(логином) и располагается в базовом, уже существующем общем каталоге /home . При необходимости укажите любое имя домашнего каталога, но если вы желаете создать домашний каталог, в другом базовом каталоге, то возможно, что вашем дистрибутиве, последний должен уже присутствовать в системе. Укажите новый полный путь вместе с конечным именем домашнего каталога, и результат будет записан в шестое поле в файла /etc/passwd. Эта опция более универсальна и упраздняет необходимость в использовании -b
sudo useradd ivan -d /home/my_ivan
или
sudo useradd ivan -d /tmp/ivanov
-D, — вместо того, чтобы создавать учётную запись, выводит на экран существующие настройки действующие по умолчанию для создаваемых новых учётных записей. Первая строчка в примере справа.
С помощью этого параметра можно не только смотреть, но и устанавливать новые значения по умолчанию. Если передать новые нужные параметры через соответствующие опции. Они будут действовать, и сохранятся в файле /etc/default/useradd. В примере справа второй строчкой показано, как установить новый базовый каталог, для вновь создаваемых пользователей.
Не все параметры useradd можно изменить параметром -D, только следующие пять: -b,-e,-f,-g,-s
sudo useradd -D
sudo useradd -D -b /usr
-e, дата_устаревания — назначает дату, когда учётная запись пользователя будет заблокирована, в формате ГГГГ-ММ-ДД. Замените нужной датой, например, для срока действия учётной записи до 5 мая 2022 года. Или установите -1, чтобы сделать учётную запись действующей, без этого ограничительного параметра. Без указания этой опции, по умолчанию, обычно это поле остаётся пустым, т.е. тоже без срока действия. Параметр записывается в восьмое поле файла /etc/shadow в формате: количество дней прошедших с эпохи основания unix.
Настройка переменной оболочки с текущей датой в виде числа дней, прошедших с 1 января 1970 года, не представляет особой сложности. Команда date может выдавать количество секунд с 1 января 1970 года. Чтобы получить необходимое значение в днях, разделите результат команды date на количество секунд в сутках — 86 400.
Скрипт получения сегодняшней даты в днях:
TODAY=$(echo $(($(date --utc --date "$1" +%s)/86400)))
echo $TODAY

useradd ivan -e 2022-05-05
-f, число — устанавливает количество дней, которые должны пройти с момента устаревания пароля до блокирования учётной записи. По умолчанию значение -1 отключает этот параметр. Значение 0 блокирует учётную запись сразу же в момент истечения срока действия пароля. При необходимости установите нужное число. Параметр записывается в седьмое поле файла /etc/shadow
useradd ivan -f 15
-g, имя группы — устанавливает уже существующую группу в системе, в качестве основной, для создаваемого пользователя, путём присвоения номера группы GID в четвёртое поле новой учётной записи в файле /etc/passwd. (Указываемая группа и её GID уже должны присутствовать в файле /etc/group). В результате непосредственного указания самого GID, символьное имя пользователя НЕ будет добавлено в файл /etc/group.
В обратном случае, т.е. без использования параметра -g, в совокупности со всеми общими настройками, по умолчанию, создаётся новая запись в файлы: /etc/passwd, /etc/group и /etc/gshadow, с сгенерированным GID и символьным именем группы, совпадающим с именем пользователя, которая автоматически становится основной группой данного пользователя.
useradd ivan -g wheel
-G, список групп — добавляет символьное имя пользователя, в качестве нового члена группы, из предоставленного списка, в каждую из указанных групп, через запятую, к другим участникам, в файле /etc/group.
p.s. Если использовать параметр -G с утилитой usermod, для модификации параметров уже существующего пользователя необходимо указывать -aG. Если вводить просто -G, то все уже существовавшие членства пользователя в других группах, будут удалены и заменены назначенными, в текущем вызове утилиты.
useradd ivan -G wheel,sales,tech,lunch
-k, skel_dir — устанавливает каталог с шаблонами, который содержит файлы и каталоги для копирования в домашний каталог пользователя при его создании. Этот параметр можно использовать только в сочетании с параметром -m. Замените skel_dir именем нужного каталога. (Без этого параметра применяется каталог /etc/skel, который определяется переменной SKEL из файла /etc/default/useradd).
/etc/skel — все файлы, содержащиеся в этом каталоге, автоматически копируются в домашний каталог пользователя при добавлении этого пользователя в систему. По умолчанию большинство этих файлов начинаются с точки(.), например kde (каталог для настройки параметров рабочего стола KDE по умолчанию) и .bashrc (каталог для установки значений по умолчанию, применяемых с оболочкой bash). Если возможно, выполняется копирование списков ACL и расширенных атрибутов.
useradd ivan -k newskel_dir
-K, --key КЛЮЧ=ЗНАЧЕНИЕ Переопределяет значения по умолчанию, установленные в файле /etc/login.defs (UID_MIN, UID_MAX, UMASK, PASS_MAX_DAYS и другие).
useradd ivan -K UID_MIN=100 -K UID_MAX=499
useradd ivan -K PASS_MAX_DAYS=-1
-l, --no-log-init. Не добавлять пользователя в базы данных lastlog и faillog. По умолчанию записи пользователя в базах данных lastlog и faillog сбрасываются во избежание повторного использования записей от ранее удалённого, одноимённого пользователя. Для совместимости с предыдущей версией useradd в Debian также поддерживается опция -O.
useradd ivan -l
-m, --create-home — автоматически создает домашний каталог пользователя и копирует в него файлы из каталога шаблонов (/etc/skel ). (Это происходит по умолчанию для Fedora и RHEL, поэтому действие не требуется. Но в Ubuntu необходимо указывать.) Создать домашний каталог пользователя, если он не существует. Файлы и каталоги, содержащиеся в каталоге шаблонов (который можно указать с помощью параметра the -k option), будут скопированы в домашний каталог. По умолчанию, если этот параметр не указан или переменная выключена CREATE_HOME=NO, /etc/login.defs домашний каталог не создаётся.
useradd ivan -m
-M, --no-create-home принудительно не создает домашний каталог нового пользователя, даже если для его создания было задано поведение по умолчанию.
useradd ivan -M
-n, -N, — отключает поведение по умолчанию при создании новой группы, соответствующей имени и идентификатору нового пользователя. Этот параметр доступен в системах Fedora и RHEL. Другие системы Linux назначают нового пользователя в группу с тем же именем.
С этой опцией создаётся пользователь с идентификатором группы указанном в файле общих настроек для такого случая /etc/default/useradd, обычно это общая группа с именем users с GID=100. Или добавляет пользователя в указанную группу, что задана с параметром -g.
p.s. Поведение по умолчанию определяется переменной USERGROUPS_ENAB из файла /etc/login.defs и действует (если не указан параметр -g, -N и -U)
useradd ivan -n
useradd ivan -N
useradd ivan -n -g wheel
, --non-unique — используется с атрибутом -u UID для создания учетной записи пользователя, которая имеет тот же, уже существующий UID, что и у другого пользователя. (Фактически это позволяет иметь два разных имени пользователя с правами на один и тот же набор файлов и каталогов.) Разрешить создание учётной записи с уже имеющимся (не уникальным) UID. Этот параметр используется ТОЛЬКО с параметром -u.
useradd ivan -o -u 1000
-p, пароль — добавляет пароль для новой учетной записи. В этом случае пароль в открытом виде указывается в командной строке и это не самый безопасный способ, потому что он должен быть зашифрованным. Обычно этой опцией не пользуются, т.к. пароль можно добавить не сразу, а позже применить программу sudo passwd с именем пользователя, чтобы сгенерировать просоленный, хешированный пароль.
useradd ivan -p "пароль"
-r, --system Создать системную учётную запись. Системные пользователи создаются без информации об устаревании в /etc/shadow, и их числовые идентификаторы выбираются из диапазона SYS_UID_MIN-SYS_UID_MAX, определённого в /etc/login.defs, а не из UID_MIN-UID_MAX (это же касается и части с GID при создании групп). Обратите внимание, что для такого пользователя не будет создаваться домашний каталог, независимо от настроек CREATE_HOME по умолчанию в /etc/login.defs. Вы должны указать опции -m если вы хотите создать домашний каталог для системной учётной записи.
useradd ivan -r
-R, --root CHROOT каталог, в который выполняется chroot
useradd ivan -R /chroot_dir
-s, --shell оболочка — указывает командную оболочку, которая будет использоваться для этой учетной записи. Замените оболочка нужной командной оболочкой, например -s /bin/csh. По умолчанию это поле пусто, что вызывает выбор регистрационной оболочки по умолчанию согласно значению переменной SHELL из файла /etc/default/useradd, или по умолчанию используется пустая строка.
useradd ivan -s /bin/fasle
-u, --uid, id_пользователя, UID— укажите идентификатор (UID) пользователя для учётной записи. Без параметра -u будет реализовано поведение по умолчанию — автоматически назначен следующий доступный номер. Автоматические идентификаторы для обычных пользователей начинаются с UID_MIN и большее чем у остальных пользователей, поэтому для таких пользователей нужно вводить идентификаторы, превышающие это число, чтобы не пересекаться с автоматическими назначениями. Оно должно быть уникальным, если не используется параметр -o. Значение должно быть неотрицательным. Смотрите также описание -r и UID_MAX.
useradd ivan -u 1108
-U, --user-group Создать группу с тем же именем, что и у пользователя, и добавить пользователя в эту группу.
Поведение по умолчанию (если не указан параметр -g, -N и -U) определяется переменной USERGROUPS_ENAB из файла /etc/login.defs.
useradd ivan -U 1111
-Z, --selinux-user SEUSER
Пользователь SELinux для регистрационной оболочки пользователя. По умолчанию это поле пусто, что заставляет систему выбрать пользователя SELinux по умолчанию.
useradd ivan -Z

Рассмотрим подробнее этот функционал в терминале:

Terminal:

[04:19:00 vagrant@centos7:/home/testuser] $ sudo useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

[04:19:38 vagrant@centos7:/home/testuser] $ sudo useradd -c 'Ivan Ivanov Ivanovich' ivan

[04:19:49 vagrant@centos7:/home/testuser] $ cat /etc/passwd | grep "ivan"
    ivan:x:3001:3001:Ivan Ivanov Ivanovich:/home/ivan:/bin/bash

[04:19:53 vagrant@centos7:/home/testuser] $ cat /etc/group | grep "ivan"
    ivan:x:3001:

#утилита useradd можно пользоваться только в момент создания нового пользователя, для модификации параметров уже существующего пользователя
#используется утилита usermod
[04:20:03 vagrant@centos7:/home/testuser] $ sudo useradd ivan -e 2022-05-05
    useradd: user 'ivan' already exists

#удалим для примера: пользователя, его группу, и домашний каталог, чтобы заново его создать с нужными параметрами, делается это такой командой:
[04:21:50 vagrant@centos7:/home/testuser] $ sudo userdel -r ivan

#теперь если мы желаем в момент создания пользователя, указать сразу несколько нужных параметров, то делается это, так: [05:02:14 vagrant@centos7:/home/testuser] $ sudo useradd ivan -c 'Ivan Ivanov Ivanovich' -e 2022-05-05 -d /home/ivan2/ -f 8 -G wheel -u 1888 [05:02:20 vagrant@centos7:/home/testuser] $ cat /etc/login.defs | grep 'CREATE_HOME' CREATE_HOME yes [05:02:32 vagrant@centos7:/home/testuser] $ ls /home/ivan ls: cannot access /home/ivan: No such file or directory [05:02:47 vagrant@centos7:/home/testuser] $ ls /home/ivan2 ls: cannot open directory /home/ivan2: Permission denied [05:02:51 vagrant@centos7:~] $ cat /etc/login.defs | grep "UMASK" UMASK 077 [05:02:54 vagrant@centos7:/home/testuser] $ cat /etc/group | grep "ivan" wheel:x:10:vagrant,vagrant2,vagrant3,ivan ivan:x:1888: [05:03:13 vagrant@centos7:/home/testuser] $ cat /etc/passwd | grep "ivan" ivan:x:1888:1888:Ivan Ivanov Ivanovich:/home/ivan2:/bin/bash [05:03:43 vagrant@centos7:/home/testuser] $ sudo cat /etc/shadow | grep "ivan" ivan:!!:18989:0:99999:7:8:19117: [05:03:47 vagrant@centos7:/home/testuser] $ sudo cat /etc/gshadow | grep "ivan" wheel:::vagrant,vagrant2,vagrant3,ivan ivan:!::

Уточнение:

Данной утилитой, нельзя добавить пользователя в группу NIS или LDAP (Системы централизованного управления пользователями в локальной сети). Это необходимо делать на соответствующем сервере.

Также, если имя пользователя уже существует во внешней базе данных такой как NIS или LDAP, то useradd не станет создавать учётную запись пользователя.

p.s. Обычно рекомендуется использовать только имена пользователей, начинающиеся со строчной буквы или подчеркивание, за которым следуют строчные буквы, цифры, символы подчеркивания или тире. Они могут закончиться со знаком доллара. В терминах регулярных выражений: [a-z _] [a-z0-9 _-] * [$]?
Имена пользователей могут быть длиной не более 32 знаков.

Использование сторонней утилиты, фактически надстройка useradd :

v

adduser

adduser - не является стандартной командой Linux. Тоже используется для добавления пользователей и групп в систему. Это сценарий на языке Perl, который использует команду useradd в фоновом режиме. Программа учитывает политики дистрибутива по желаемому UID и GID, в интерактивном режиме делает привязку пользовательсткого комментария к учётной записи, запрашивает и устанавливает пароль, сама создаёт домашний каталог, копирует туда файлы по умолчанию и запускает специальные сценарии. не является стандартной командой Linux. По сути, это сценарий Perl, который использует команду useradd в фоновом режиме. Эта высокоуровневая утилита более эффективна для правильного создания новых пользователей в Linux. Параметры по умолчанию для всех новых пользователей также можно установить с помощью команды adduser.

Terminal:

#Не во всех дистрибутивах есть эта утилита, например в openSUSE Tumbleweed её нет:

vs@localhost:~> ls -la /usr/sbin/adduser ls: cannot access '/usr/sbin/adduser': No such file or directory vs@localhost:~> ls -la /usr/sbin/useradd -rwxr-xr-x 1 root root 140688 Sep 22 23:18 /usr/sbin/useradd vs@localhost:~>
#А для дистрибутивов Fedora34 и Centos7, есть лишь символьная ссылка на штатную утилиту useradd
[ramanzes@fedora ~]$ ls -la /usr/sbin/useradd -rwxr-xr-x 1 root root 133904 Nov 30 16:50 /usr/sbin/useradd [ramanzes@fedora ~]$ ls -la /usr/sbin/adduser lrwxrwxrwx 1 root root 7 Nov 30 16:50 /usr/sbin/adduser -> useradd
Однако например для Ubuntu данная утилита имеет непосредственный смысл, потому что это именно отдельный файл сценарий написанный на языке Perl, аналогичным образом обстоят дела и с многими другими дистрибутивами основанных на Debian:
vs@vs-Standard-PC-Q35-ICH9-2009:~$ ls -la /usr/sbin/adduser -rwxr-xr-x 1 root root 37785 апр 16 2020 /usr/sbin/adduser vs@vs-Standard-PC-Q35-ICH9-2009:~$ ls -la /usr/sbin/useradd -rwxr-xr-x 1 root root 147160 июл 15 01:08 /usr/sbin/useradd vs@vs-Standard-PC-Q35-ICH9-2009:~$ sudo adduser newadmin Adding user `newadmin' ... Adding new group `newadmin' (1001) ... Adding new user `newadmin' (1001) with group `newadmin' ... Creating home directory `/home/newadmin' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for newadmin Enter the new value, or press ENTER for the default Full Name []: newadmin_full_name_kot_Matroskin Room Number []: 5 Work Phone []: 333 Home Phone []: 777 Other []: other Is the information correct? [Y/n] y vs@vs-Standard-PC-Q35-ICH9-2009:~$ cat /etc/passwd | grep "newadmin" newadmin:x:1001:1001:newadmin,5,333,777,other:/home/newadmin:/bin/bash vs@vs-Standard-PC-Q35-ICH9-2009:~$ sudo cat /etc/shadow | grep "newadmin" newadmin:$6$MXsn/vjV3jhMiECK$QcXenqK3vJVc3JVv.0e2VQKEzQCPFEIEdkbNIPX/9Jgwm5f6TEhfCtHu/rhph3RrL.IMuEPYDeGyUPQ/UOPay1:18990:0:99999:7::: vs@vs-Standard-PC-Q35-ICH9-2009:~$ su newadmin Password: newadmin@vs-Standard-PC-Q35-ICH9-2009:/home/vs$ cd ~ newadmin@vs-Standard-PC-Q35-ICH9-2009:~$ ls -la total 25 drwxr-xr-x 2 newadmin newadmin 5 дек 29 12:01 . drwxr-xr-x 4 root root 6 дек 29 12:01 .. -rw-r--r-- 1 newadmin newadmin 220 дек 29 12:01 .bash_logout -rw-r--r-- 1 newadmin newadmin 3771 дек 29 12:01 .bashrc -rw-r--r-- 1 newadmin newadmin 807 дек 29 12:01 .profile

Изменить учётную запись пользователя

утилита usermod

Команда usermod изменяет файлы системной учётной записи, используя похожие параметры, что и при создании новых учётных записей useradd и adduser.

Опция и значение: Пример:
-a, --append ДОБАВЛЕНИЕ Добавить пользователя в дополнительные группы. Используйте только с опцией -G .
usermod ivan -aG wheel,vagrant
-b, --badnames ПЛОХИЕ_ИМЕНА Разрешить имена, не соответствующие стандартам. Применяется совместно с опцией -l смена текущего имени логина на новое. Изменения вносятся в первое поле файлов /etc/passwd и /etc/shadow
p.s. в некоторых дистрибутивах такая опция отсутствует, может это и правильно...
sudo usermod -b oldlogin -l ne~$+^
su ne~$+^
-c , --comment КОММЕНТАРИЙ Новое значение пятого поля комментария в файле /etc/passwd пользователя. Обычно его модифицируют с помощью утилиты chfn.
sudo usermod ivan -c "Ivanovich ili net"
-d , --home ДОМАШНИЙ_КАТАЛОГ Новый каталог для входа пользователя. Вносится изменение в шестое поле файла /etc/passwd. Новый каталог при этом не создаётся.
Если задана опция -m (-md, -dm), то существующий каталог будет переименован в новый, указываемый в команде, без утери содержимого. Но в случае изначального отсутствия домашнего каталога у пользователя, каталог всё-равно не создастся, воспользуйтесь утилитой useradd.
p.s. здесь мы создали идентичный каталог, для пользователя с нестандартным именем. Но к подобному каталогу, впоследствии, будет лучше обращаться с кавычками ls /home/'ne~$+^'
sudo usermod shura -d /usr/shura
usermod ne~$+^ -md /home/ne~$+^
sudo usermod login -md /usr/login
-e , --expiredate ДАТА_ИСТЕЧЕНИЯ
Фактическая дата, когда учётная запись пользователя будет отключена. Параметр может передаваться пользователем в человеческом формате ГГГГ-ММ-ДД либо сразу в системном по выбору пользователя... Передача аргумента со значением -1 отключает срок действия учётной записи, делая это поле пустым.
Все изменения при этом отражаются в восьмом поле файла /etc/shadow исключительно в системном формате, т.е. как число дней прошедших, с эпохи основания unix(с 01|01|1970), до устанавливаемого в этом вызове значения.
usermod ivan -e 2022-05-05
-f , --inactive НЕАКТИВНЫЙ
Параметр записывается в седьмое поле файла /etc/shadow.
Количество дней, которые должны пройти с момента устаревания пароля до блокирования учётной записи.
Значение 0 отключает учётную запись, как только срок действия пароля истёк, а значение -1 отключает функцию.
usermod ivan -f 15
-g , --gid НОМЕР_ГРУППЫ
Параметр записывается в четвёртое поле учётной записи в файле /etc/passwd
Указывается символьное имя группы, или сам номер, новой начальной группы входа пользователя. Группа должна уже существовать в файле /ets/group.
Любой файл из домашнего каталога пользователя, принадлежащий предыдущей основной группе пользователя будет принадлежать этой новой группе.
p.s. Групповое владение файлами вне домашнего каталога пользователя должно быть исправлено вручную.
usermod ivan -g wheel
-G , --groups GROUP1[,GROUP2,... [,GROUPN]]]
Добавляет символьное имя пользователя, в качестве нового члена группы, из указываемого списка, в каждую из указанных групп, через запятую, к другим если есть участникам, в четвёртые поля, файла /etc/group.
В качестве параметров передаётся, список дополнительных групп, членом которых будет являться пользователь. Каждая группа отделяется от следующего запятой, без пробелов. Имена групп подчиняется тем же ограничениям, что и с параметром -g.
Если пользователь в настоящее время является членом группы, которой нет в указанном списке, то он будет удалён из такой группы. Но это можно предотвратить с помощью добавления опции -a , тогда пользователь будет добавлен в новый список дополнительных групп, не потеряв членство в других группах.
usermod ivan -G wheel,sales,tech,lunch
usermod ivan -aG wheel,sales,tech,lunch
-l , --login НОВЫЙ_ЛОГИН
Имя пользователя будет сразу изменено с LOGIN на NEW_LOGIN в первом поле, в файлах: /etc/passwd и /etc/gshadow, и в в четвёртом поле файлов: /etc/group и /etc/gshadow, сохраняя членство в группах.
Но, следует уже дополнительно, с помощью параметров -md, переименовать домашний каталог и|или почтовый ящик пользователя, вручную, чтобы установить новое имя каталога, идентичным новому логину.
sudo usermod oldlogin -l newlogin
или
sudo usermod -l newlogin oldlogin
-L , --lock БЛОКИРОВКА_ПАРОЛЯ
Используется, чтобы заблокировать пароль пользователя, это ставит '!' перед зашифрованным паролем, прямое отключение пароля, во втором поле файла /etc/shadow.
p.s.Эта опция противоречит другим опциями -p или -U: поэтому они не могут использоваться одновременно.
Примечание: если вы хотите заблокировать учётную запись (а не только доступ с паролем), вам следует также установить параметр -e EXPIRE_DATE например 1 день.
sudo usermod login -L
-m , --move-home ПЕРЕМЕЩЕНИЕ_ДОМА
Это используется, при перемещении содержимого домашнего каталога пользователя в новое место, и/или для создания нового домашнего каталога.
Этот параметр работает только в сочетании с параметром -d.
usermod попытается адаптировать права собственности на файлы и скопировать режимы, ACL и расширенные атрибуты, но впоследствии могут потребоваться изменения вручную.
sudo usermod login -md /usr/login
-o , --non-unique НЕ_УНИКАЛЬНЫЙ
Этот параметр, используется с параметром -u, что позволяет изменить идентификатор пользователя UID на уже существуеющий. Таким образом добавляются пользователи с одинаковыми UID.
sudo usermod login -ou 1000
-p , --password ПАРОЛЬ
Зашифрованный пароль, возвращенный crypt ().
Примеры: Первый вариант установки пароля не рекомендуется, поскольку сам зашифрованный пароль, будет видимым для пользователей, перечисляющих процессы.
Второй вариант передаёт пароль открыто и шифрует функцией:
openssl passwd ВАШПАРОЛЬ

Пароль будет записан во втором поле в файле /etc/shadow. Это может отличается от базы данных паролей, настроенной в вашей конфигурации PAM.
Вы должны убедиться, что пароль соответствует политике паролей системы.
p.s.И вообще для этих целей лучше пользоваться утилитой passwd
sudo usermod -p hl.eUPZftSPT. login
usermod -p $(openssl passwd 123) login
-R , --root CHROOT_DIR Применить изменения в каталоге CHROOT_DIR и использовать файлы конфигурации из каталога CHROOT_DIR .

ps. возможно, что для такого пользователя используется свой каталог со своей системой.. в каталоге root РАЗОБРАТЬСЯ
sudo usermod -R /usr/chroot1
-P , --prefix PREFIX_DIR Префикс
Применить изменения в каталоге PREFIX_DIR и использовать файлы конфигурации из каталога PREFIX_DIR . Эта опция не исключает chroot и предназначена для подготовки цель кросс-компиляции. Некоторые ограничения: пользователи / группы NIS и LDAP не проверено. Аутентификация PAM использует файлы хоста. Нет поддержки SELINUX.
usermod ivan -P 'PREFIX_DIR'
-s , --shell Оболочка
Имя новой оболочки входа пользователя. Если оставить это поле пустым, система , чтобы выбрать оболочку входа по умолчанию.
usermod ivan -s /bin/bash
-R, --root CHROOT
каталог, в который выполняется chroot
useradd ivan -R /chroot_dir
-u , --uid UID
Новое числовое значение идентификатора пользователя.
Это значение должно быть уникальным, если не используется опция -o. Значение не должно быть отрицательным.
Почтовый ящик пользователя и любые файлы, которыми владеет пользователь и которые находятся в в домашнем каталоге пользователя будет автоматически изменён идентификатор пользователя файла.
Право собственности на файлы вне домашнего каталога пользователя необходимо исправить вручную.
Проверки не будут выполняться: UID_MIN, UID_MAX, SYS_UID_MIN или SYS_UID_MAX из /etc/login.defs.
usermod ivan -u 1777
usermod ivan2 -ou 1777
-U , --unlock
Используется, чтобы разблокировать пароль пользователя. Это удаляет '!' перед зашифрованным паролем во втором поле файла: /etc/shadow.
Эта опция противоречит другим опциями -p или -L: поэтому они не могут использоваться одновременно.
Примечание: если вы хотите разблокировать учетную запись (а не только доступ с паролем), вам следует также установить EXPIRE_DATE через параметр -e(например, на 99999 или на значение EXPIRE из /etc/default/useradd).
sudo usermod login -U
-v , --add-subuids ПЕРВЫЙ - ПОСЛЕДНИЙ
Добавьте в учётную запись пользователя ряд подчиненных uid.
Этот параметр можно указывать несколько раз, чтобы добавить несколько диапазонов в учетную запись пользователя.
Никакие проверки не будут выполняться в отношении SUB_UID_MIN , SUB_UID_MAX или SUB_UID_COUNT из /etc/login.defs. эти переменные в Федора есть., что они значат я так и не понял. попробовать создать юзеров подчинённых и проверить полномочия такой иерархичности.
usermod ivan -v 1111-2222
-V , --del-subuids ПЕРВЫЙ - ПОСЛЕДНИЙ
Удалите ряд подчиненных uid из учетной записи пользователя.
Этот параметр можно указывать несколько раз, чтобы удалить несколько диапазонов для пользователей. Счет. Если указаны оба параметра --del-subuids и --add-subuids , удаление всех подчиненный диапазон uid происходит до добавления любого подчиненного диапазона uid. Никакие проверки не будут выполняться в отношении SUB_UID_MIN , SUB_UID_MAX или SUB_UID_COUNT из /etc/login.defs.
usermod ivan -V 1999
-w , --add-subgids ПЕРВЫЙ - ПОСЛЕДНИЙ
Добавьте в учетную запись пользователя ряд подчиненных gid. Этот параметр можно указывать несколько раз, чтобы добавить несколько диапазонов в учётную запись пользователя. Никакие проверки не будут выполняться в отношении SUB_GID_MIN , SUB_GID_MAX или SUB_GID_COUNT из /etc/login.defs.
usermod ivan -w 1111-2222
-W , --del-subgids ПЕРВЫЙ - ПОСЛЕДНИЙ
Удалите ряд подчиненных gid из учетной записи пользователя. Этот параметр можно указывать несколько раз, чтобы удалить несколько диапазонов для пользователей. Счет. Если указаны оба параметра --del-subgids и --add-subgids , удаление всех подчиненный диапазон gid происходит до добавления любого подчиненного диапазона gid. Никакие проверки не будут выполняться в отношении SUB_GID_MIN , SUB_GID_MAX или SUB_GID_COUNT из /etc/login.defs.
usermod ivan -W 1999
-Z , --selinux-пользователь SEUSER
Новый пользователь SELinux для входа пользователя. Пустой SEUSER удалит отображение пользователя SELinux для входа в систему (если есть).
usermod ivan -Z SEUSER


Вот как это выглядит в терминале  Centos 7:

Terminal:

                                                   _                ____
           _   _ ___  ___ _ __ _ __ ___   ___   __| |         __ _ / ___|
          | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` |  _____ / _` | |  _
          | |_| \__ \  __/ |  | | | | | | (_) | (_| | |_____| (_| | |_| |
           \__,_|___/\___|_|  |_| |_| |_|\___/ \__,_|        \__,_|\____|

разберём такой пример: есть пользователь vagrant2 сначала смотрим в каких группах он состоит, затем
добавим новую группу пользователю с опциями -aG, посмотрим на результат, а потом добавим ещё одну группу
но уже только с помощью параметра -G и посмотрим, что изменится:


[07:46:37 vagrant@centos7:~] $ cat /etc/group | grep "vagrant2"
wheel:x:10:vagrant,vagrant3,ivan,vagrant2
my_new:x:1001:vagrant,vagrant2
vagrant2:x:1002:

Видим, что сейчас пользователь vagrant2 является участником ещё двух групп, помимо его основной группы.

[08:04:32 vagrant@centos7:~] $ sudo usermod vagrant2 -aG vagrant [08:04:39 vagrant@centos7:~] $ cat /etc/group | grep "vagrant2" wheel:x:10:vagrant,vagrant3,ivan,vagrant2 vagrant:x:1000:vagrant,vagrant2 my_new:x:1001:vagrant,vagrant2 vagrant2:x:1002: Видим, что сейчас пользователь vagrant2 является участником уже трёх групп, помимо его основной группы.
[08:04:43 vagrant@centos7:~] $ sudo usermod vagrant2 -G vagrant3 [08:06:13 vagrant@centos7:~] $ cat /etc/group | grep "vagrant2" vagrant2:x:1002: vagrant3:x:1004:vagrant2 А сейчас мы видим, что пользователь vagrant2 является участником только ещё одной указанной в команде группы и своей основной группы, только потому что, ему не нужно быть в списке участников своей группы, она принадлежит ему по GID через файл /etc/passwd.
[08:06:16 vagrant@centos7:~] $ sudo usermod vagrant2 -aG vagrant,wheel,my_new [08:07:24 vagrant@centos7:~] $ cat /etc/group | grep "vagrant2" wheel:x:10:vagrant,vagrant3,ivan,vagrant2 vagrant:x:1000:vagrant,vagrant2 my_new:x:1001:vagrant,vagrant2 vagrant2:x:1002: vagrant3:x:1004:vagrant2 Видим, что теперь пользователь является участником пяти групп, в соответствии с нашими командами.
_ _ _ _ _ ___ ___ _ __ _ __ ___ ___ __| | | |__ | | | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` | _____| '_ \ _____| | | |_| \__ \ __/ | | | | | | | (_) | (_| | |_____| |_) | |_____| | \__,_|___/\___|_| |_| |_| |_|\___/ \__,_| |_.__/ |_| Сменим символьное имя(логин) пользователя, воспользуемся опцией -b(--badnames), чтобы можно было в качестве нового имени(логина) выбрать не стандартный набор символов. Данная опция применяется всегда совместно с опцией -l(--login), используемой просто для смены имени логина на другое имя. p.s. не забыть проверить с именами групп.
db@debian11:~$ cat /etc/passwd | grep "ivan" ivan:x:1001:1001:Ivan Ivanov Ivanovich:/home/ivan:/bin/bash db@debian11:~$ cat /etc/group | grep "ivan" db:x:1000:ivan ivan:x:1001:
Видим, что сейчас пользователь с логином ivan, поменяем его имя на другое, которое не соответствует принятым стандартам. с помощью дополнительного параметра -b, позволяющего такую операцию.
db@debian11:~$ sudo usermod ivan -b -l n#e~_-$+^R db@debian11:~$ cat /etc/passwd | grep "n#e~_-$+^R" n#e~_-$+^R:x:1001:1001:Ivan Ivanov Ivanovich:/home/ivan:/bin/bash db@debian11:~$ sudo cat /etc/shadow | grep "n#e~_-$+^R" n#e~_-$+^R:!:19000:0:99999:7::: db@debian11:~$ cat /etc/group | grep "ivan" ivan:x:1001: db@debian11:~$ cat /etc/group | grep "n#e~_-$+^R" db:x:1000:n#e~_-$+^R
Видим, что символьное имя пользователя изменилось на указанное, и в основном файле /etc/passwd и в его тени /etc/shadow. Но символьное имя группы, и имя домашнего каталога остались такими же, какими и были. Это естественно их мы не трогали этой операцией. И это стоит иметь ввиду.
_ _ ___ ___ _ __ _ __ ___ ___ __| | ___ | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` | _____ / __| | |_| \__ \ __/ | | | | | | | (_) | (_| | |_____| (__ \__,_|___/\___|_| |_| |_| |_|\___/ \__,_| \___| поменяем комметарий учётной записи, бывший пользователь ivan у которого мы сменили логин с "--badnames", но остался одноимённый домашний каталог, выводим его с помощью grep: db@debian11:~$ cat /etc/passwd | grep "ivan" n#e~_-$+^R:x:1001:1001:Ivan Ivanov Ivanovich:/home/ivan:/bin/bash db@debian11:~$ sudo usermod -c 'new comments for us' 'n#e~_-$+^R' db@debian11:~$ cat /etc/passwd | grep "ivan" n#e~_-$+^R:x:1001:1001:new comments for us:/home/ivan:/bin/bash
_ _ _ _ ___ ___ _ __ _ __ ___ ___ __| | __| | | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` | _____ / _` | | |_| \__ \ __/ | | | | | | | (_) | (_| | |_____| (_| | \__,_|___/\___|_| |_| |_| |_|\___/ \__,_| \__,_| Сменим домашний каталог пользователя, с помощью параметра -d. Обратите внимание, что эта операция меняет шестое поле файла /etc/passwd на указанную строку при вызове утилиты. При этом новый каталог не создаётся. Либо он уже должен быть в системе, либо предполагается, что пользователь будет иметь права на создание его самостоятельно в базовом каталоге. db@debian11:~$ cat /etc/passwd | grep "n#e~_-$+^R" n#e~_-$+^R:x:1001:1001:new comments for us:/home/ivan:/bin/bash db@debian11:~$ ls /home db db@debian11:~$ sudo usermod 'n#e~_-$+^R' -d /home/test2 [sudo] пароль для db: db@debian11:~$ sudo usermod 'n#e~_-$+^R' -md /home/test1 db@debian11:~$ ls /home db db@debian11:~$ cat /etc/passwd | grep "n#e~_-$+^R" n#e~_-$+^R:x:1001:1001:new comments for us:/home/test1:/bin/bash Видим что в нашем случае, наш пользователь с новым именем n#e~_-$+^R был изначально без домашнего каталога. Но в файле /etc/passwd изменения отразились правильно, только по факту этого каталога нет. Поэтому создадим для него каталог с помощью прав администратора, и применим необходимые действия, установим правильно владельца на каталог, и группу владельца, а также запишем системные скрипты из каталога /etc/skel. Чтобы было понимание, что можно сделать в подобном случае: db@debian11:~$ sudo mkdir /home/test1 db@debian11:~$ ls -la /home итого 0 drwxr-xr-x 1 root root 14 янв 13 16:00 . drwxr-xr-x 1 root root 250 янв 2 20:31 .. drwxr-xr-x 1 db db 518 янв 2 22:15 db drwxr-xr-x 1 root root 0 янв 13 16:00 test1 db@debian11:~$ sudo cp /etc/skel/.* /home/test1 cp: не указан -r; пропускается каталог '/etc/skel/.' cp: не указан -r; пропускается каталог '/etc/skel/..' db@debian11:~$ cat /etc/group | grep "1001" ivan:x:1001: db@debian11:~$ sudo chown -hR 'n#e~_-$+^R':ivan /home/test1 db@debian11:~$ ls -la /home/test1 итого 12 drwxr-xr-x 1 n#e~_-$+^R ivan 54 янв 13 16:06 . drwxr-xr-x 1 root root 14 янв 13 16:00 .. -rw-r--r-- 1 n#e~_-$+^R ivan 220 янв 13 16:14 .bash_logout -rw-r--r-- 1 n#e~_-$+^R ivan 3526 янв 13 16:14 .bashrc -rw-r--r-- 1 n#e~_-$+^R ivan 807 янв 13 16:14 .profile На этом можно успокоиться, теперь наш пользователь с домашним каталогом. Убедимся в этом: db@debian11:~$ su n#e~_-$+^R Пароль: n#e~_-$+^R@debian11:/home/db$ n#e~_-$+^R@debian11:/home/db$ cd ~ n#e~_-$+^R@debian11:~$ pwd /home/test1 n#e~_-$+^R@debian11:~$ ls -la ~ итого 16 drwxr-xr-x 1 n#e~_-$+^R ivan 80 янв 14 12:27 . drwxr-xr-x 1 root root 12 янв 13 16:25 .. -rw------- 1 n#e~_-$+^R ivan 5 янв 14 12:27 .bash_history -rw-r--r-- 1 n#e~_-$+^R ivan 220 янв 13 16:14 .bash_logout -rw-r--r-- 1 n#e~_-$+^R ivan 3526 янв 13 16:14 .bashrc -rw-r--r-- 1 n#e~_-$+^R ivan 807 янв 13 16:14 .profile n#e~_-$+^R@debian11:~$ n#e~_-$+^R@debian11:~$ exit exit db@debian11:~$
_ _ _ _ ___ ___ _ __ _ __ ___ ___ __| | _ __ ___ __| | | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` | _____| '_ ` _ \ / _` | | |_| \__ \ __/ | | | | | | | (_) | (_| | |_____| | | | | | (_| | \__,_|___/\___|_| |_| |_| |_|\___/ \__,_| |_| |_| |_|\__,_| Для удобства восприятия, вернём прежнее имя пользователю идентичное символьному имени группы, а затем сменим имя у уже существующего домашнего каталога. Здесь обязательно добавлять параметр -m так, как домашний каталог с нашей помощью, уже существует у пользователя в то время, как в первом примере добавление этого параметра ничего не изменило, то здесь мы получим нужное имя каталога со всем содержимым. Утилита одновременно изменит системные файлы: /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, и переименует существующий домашний каталог, сохранив владельца и права... db@debian11:~$ sudo usermod -b n#e~_-$+^R -l ivan db@debian11:~$ sudo usermod ivan -md /home/ivan db@debian11:~$ ls -la /home итого 0 drwxr-xr-x 1 root root 12 янв 13 16:25 . drwxr-xr-x 1 root root 250 янв 2 20:31 .. drwxr-xr-x 1 db db 518 янв 2 22:15 db drwxr-xr-x 1 ivan ivan 54 янв 13 16:06 ivan
_ _ _ ___ ___ _ __ _ __ ___ ___ __| | ___ | | | / __|/ _ \ '__| '_ ` _ \ / _ \ / _` | _____ / _ \ | |_| \__ \ __/ | | | | | | | (_) | (_| | |_____| __/ \__,_|___/\___|_| |_| |_| |_|\___/ \__,_| \___| #Установим срок действия учётной записи до 5-го мая 2022 года, в "человеческом" формате: db@debian11:~$ sudo cat /etc/shadow | grep "ivan" ivan:BSDGjHhJcKKi2:19000:0:99999:7:: : db@debian11:~$ sudo usermod ivan -e 2022-05-05 db@debian11:~$ sudo cat /etc/shadow | grep "ivan" ivan:BSDGjHhJcKKi2:19000:0:99999:7::19117: #Теперь сделаем тоже самое только в системном формате: db@debian11:~$ sudo usermod ivan -e 19117 db@debian11:~$ sudo cat /etc/shadow | grep "ivan" ivan:BSDGjHhJcKKi2:19000:0:99999:7::19117: #Чтобы заблокировать учётную запись достаточно указать в этом параметре просроченную дату, например так. db@debian11:~$ sudo usermod ivan -e 19 db@debian11:~$ sudo cat /etc/shadow | grep "ivan" ivan:BSDGjHhJcKKi2:19000:0:99999:7::19: db@debian11:~$ su ivan Пароль: Срок действия учетной записи истек; обратитесь к системному администратору. su: Сбой при проверке подлинности db@debian11:~$ #Удалим срок действия учётной записи. db@debian11:~$ sudo usermod ivan -e -1 db@debian11:~$ sudo cat /etc/shadow | grep "ivan" ivan:BSDGjHhJcKKi2:19000:0:99999:7::: db@debian11:~$ su ivan Пароль: ivan@debian11:/home/db$

Удаление учётных записей пользователей

утилита userdel

Если утилита usermod используется для изменения параметров пользователя, useradd — для создания учётных записей, то userdel — для удаления пользователей. Команда, приведенная далее, удаляет пользователя ivan:

sudo userdel -r ivan

Здесь пользователь ivan удаляется из файлов: /etc/password и /etc/shadow. Параметр -r удаляет также домашний каталог пользователя. Если не применять параметр -r, как показано далее, то его домашний каталог /home/ivan не будет удален:

sudo userdel ivan

Имейте в виду, что простое удаление учетной записи пользователя ничего не меняет в файлах, которые пользователь оставляет в системе (за исключением удаляемых в ходе работы с параметром -r). Однако при запуске ls -l для этих файлов права собственности принадлежат идентификатору предыдущего владельца. Прежде чем удалить пользователя, запустите команду find, чтобы найти все его файлы. После удаления пользователя можно выполнить поиск по его идентифи- катору, чтобы найти оставшиеся файлы. Два варианта поиска:

find / -user ivan -ls
find / -uid 1001 -ls

Поскольку файлы, не привязанные к какому-либо имени пользователя, считаются небезопасными, рекомендуется найти их и назначить реальной учетной записи. Вот пример команды find, которая находит все файлы в файловой системе, не связанные ни с одним пользователем (файлы перечислены по UID):

sudo find / -nouser -ls

Вот как это выглядит в терминале  Debian 11:

Terminal:

db@debian11:~$ sudo userdel --help
  [sudo] пароль для db:
  Использование: userdel [параметры] ПОЛЬЗОВАТЕЛЬ

  Параметры:
    -f, --force                   удалять файлы, даже если они
                                  не принадлежат пользователю
    -h, --help                    показать данное сообщение и закончить работу
    -r, --remove                  удалить домашний каталог и почтовый ящик
    -R, --root КАТ_CHROOT         каталог, в который выполняется chroot
    -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
    -Z, --selinux-user            удалить все пользовательские сопоставления
                                  SELinux для пользователя


#Рассмотим внимательно текущее присутствие пользователя ivan в системе: db@debian11:~$ cat /etc/passwd | grep "ivan" ivan:x:1001:1001:new comments for us:/home/ivan:/bin/bash db@debian11:~$ ls /home db ivan db@debian11:~$ ls /var/mail db ivan db@debian11:~$ cat /etc/group | grep "ivan" db:x:1000:ivan ivan:x:1001:
db@debian11:~$ sudo userdel -r ivan userdel: почтовый ящик ivan (/var/mail/ivan) не найден db@debian11:~$ cat /etc/passwd | grep "ivan" db@debian11:~$ cat /etc/group | grep "ivan" db@debian11:~$ ls /var/mail db db@debian11:~$ ls /home db #Видим, что в результате действия утилиты userdel, у пользователя ivan в системе ничего не осталось.

Свежие статьи

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: