English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Управление пользователями и группами в Linux

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

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

Каждая учетная запись пользователя имеет уникальное имя пользователя и свои собственные пароли.

Пользователь может войти в систему и свой домашний каталог, если он введет правильное имя пользователя и пароль при входе.

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

  • Добавление, удаление и изменение учетных записей пользователей.

  • Управление паролями пользователей.

  • Управление группами пользователей.

I. Управление учетными записями пользователей в системе Linux

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

Добавление учетной записи пользователя заключается в создании новой учетной записи в системе, а затем в分配е ресурсов для новой учетной записи, таких как номер пользователя, группа пользователей, домашний каталог и shells для входа. Новоиспеченная учетная запись заблокирована и не может быть использована.

1. Добавление новой учетной записи пользователя с помощью команды useradd, синтаксис которой следующий:

useradd опция имя_пользователя

Объяснение параметров:

  • Опции:

    • -c comment Определяет комментарий.

    • -d каталог Определяет домашний каталог пользователя, если этот каталог не существует, можно использовать опцию -m для создания каталога.

    • -g группа Определяет группу пользователя.

    • -G группа, группа Определяет дополнительные группы пользователя.

    • -s файл_Shell Определяет shell для входа пользователя.

    • -u номер_пользователя Определяет номер пользователя, если также используется опция -o, то можно повторно использовать идентификатор другого пользователя.

  • Имя пользователя:

    Определение нового login name для учетной записи.

Пример 1

# useradd –d /home/sam –m sam

Эта команда создала пользователя sam, где опции -d и -m используются для создания домашнего каталога для login name sam /home/sam (default parent directory of the user's home directory is /home).

Пример 2

# useradd -s /bin/sh -g group –G adm,root gem

Эта команда создала пользователя gem, у которого shell для входа /bin/sh, он принадлежит к группе пользователей group, а также к группам adm и root, где group - это основная группа.

Здесь может быть создана новая группа: # groupadd group и groupadd adm

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

Linux предоставляет интегрированный инструмент системы управления пользователями userconf, который можно использовать для единой управления учетными записями пользователей.

2. Удаление учетной записи

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

Удаление существующей учетной записи пользователя с помощью команды userdel, формат которой следующий:

userdel опция имя_пользователя

Часто используемый параметр -r, который удаляет домашний каталог пользователя.

Например:

# userdel -r sam

Эта команда удаляет запись пользователя sam в системных файлах (в основном в /etc/passwd, /etc/shadow, /etc/group и т.д.) и удаляет домашний каталог пользователя.

3. Изменение учетной записи

Изменение учетной записи пользователя означает изменение связанных свойств пользователя в зависимости от实际情况, таких как номер пользователя, домашний каталог, группа пользователей, shells для входа и т.д.

Изменение информации о существующем пользователе с помощью команды usermod, формат которой следующий:

usermod опция имя_пользователя

Часто используемые опции включают -c, -d, -m, -g, -G, -s, -u и -o, которые имеют то же значение, что и опции команды useradd, и могут назначать пользователям новые значения ресурсов.

Кроме того, некоторые системы могут использовать опцию: -l новое_имя_пользователя

Эта опция указывает на новый аккаунт, то есть изменяет текущее имя пользователя на новое имя пользователя.

Например:

# usermod -s /bin/ksh -d /home/z –g developer sam

Эта команда изменяет登录 Shell пользователя sam на ksh, изменяет домашний каталог на /home/z, а группу на developer.

4. Управление паролями пользователей

Одним из важных аспектов управления пользователями является управление паролями пользователей. При создании учетной записи пользователя не существует пароля, но она заблокирована системой и не может быть использована. Ее необходимо разблокировать, назначив пароль, даже если это пустой пароль.

Команда passwd для назначения и изменения пароля пользователя. Суперпользователь может назначать пароли себе и другим пользователям, а обычные пользователи могут использовать ее только для изменения своего пароля. Формат команды:

passwd опция имя_пользователя

Доступные опции:

  • -l блокирует пароль, то есть отключает аккаунт.

  • -u разблокирует пароль.

  • -d делает аккаунт без пароля.

  • -f принудительно требует изменения пароля при следующем входе.

Если указан имя пользователя по умолчанию, то изменяется пароль текущего пользователя.

Например, предположим, что текущий пользователь sam, то下面的 команда изменяет пароль этого пользователя:

$ passwd 
Старый пароль:****** 
Новый пароль:******* 
Повторите новый пароль:*******

Если это суперпользователь, то можно указать пароль любому пользователю в следующей форме:

# passwd sam 
Новый пароль:******* 
Повторите новый пароль:*******

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

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

При указании пустого пароля для пользователя, выполняется команда в следующей форме:

# passwd -d sam

Эта команда удаляет пароль пользователя sam, таким образом, при следующем входе пользователя sam в систему, система больше не позволяет этому пользователю входить.

Команда passwd может также использовать опцию -l (lock), чтобы заблокировать определенного пользователя, чтобы он не мог входить, например:

# passwd -l sam

Два. Управление группами пользователей в системе Linux

Каждый пользователь имеет группу пользователей, и система может управлять всеми пользователями в группе пользователей. Разные системы Linux по-разному определяют группы пользователей, например, в Linux пользователи belong к группе с их именем, которая создается одновременно с созданием пользователя.

Управление группами пользователей включает добавление, удаление и изменение групп. Добавление, удаление и изменение групп на самом деле является обновлением файла /etc/group.

1. Добавление новой группы пользователей выполняется с помощью команды groupadd. Формат такой:

groupadd опция группа пользователей

Используемые опции включают:

  • -g GID Определяет GID нового пользователя группы (GID).

  • -o Обычно используется вместе с опцией -g, что означает, что GID нового пользователя группы может быть таким же, как у существующей группы пользователей системы.

Пример 1:

# groupadd group1

Эта команда добавляет новую группу group1 в систему, новый идентификатор группы (GID) является следующим за наибольшим уже существующим идентификатором группы.

Пример 2:

# groupadd –g 101 group2

Эта команда добавляет новую группу group2 в систему, одновременно specifying новый идентификатор группы (GID) 101.

2. Если нужно удалить существующую группу пользователей, используйте команду groupdel, формат которой такой:

groupdel группа пользователей

Например:

# groupdel group1

Эта команда удаляет группу group1 из системы.

3. Используйте команду groupmod для изменения свойств группы пользователей. Синтаксис такой:

groupmod опция группа пользователей

Обычные опции включают:

  • -g GID Определяет новый идентификатор группы (GID) для группы пользователей.

  • -o Используется вместе с опцией -g, новый GID группы пользователя может быть таким же, как у существующей группы пользователей системы.

  • -n новогруппа пользователя Изменяет имя группы пользователя на новое имя

Пример 1:

# groupmod –g 102 group2

Эта команда изменяет идентификатор группы group2 на 102.

Пример 2:

# groupmod –g 10000 –n group3 group2

Эта команда изменяет идентификатор группы group2 на 10000 и имя группы на group3.

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

Пользователь может切换 к другой группе пользователей после входа в систему, используя команду newgrp, параметром которой является целевая группа пользователей. Например:

$ newgrp root

Эта команда переключает текущего пользователя в группу root, при условии, что группа root действительно является основной или дополнительной группой этого пользователя. Управление группами пользователей, как и управление учетными записями пользователей, можно выполнять с помощью интегрированных системных инструментов управления.

Третий раздел: Системные файлы, связанные с учетными записями пользователей

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

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

Ниже мы рассмотрим содержимое этих файлов.

1. Файл /etc/passwd является одним из важнейших файлов, связанных с управлением пользователями.

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

Этот файл доступен для чтения всем пользователям. Его содержимое类似 следующему примеру:

# cat /etc/passwd
root:x:0:0:Суперпользователь:/:
daemon:x:1:1:Системные демоны:/etc:
bin:x:2:2:Владелец системных команд:/bin:
sys:x:3:3:Владелец системных файлов:/usr/sys:
adm:x:4:4:Счетная система:/usr/adm:
uucp:x:5:5:Administrator UUCP:/usr/lib/uucp:
auth:x:7:21:Administrator аутентификации:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Administrator принтера:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh

Из примера выше мы можем видеть, что каждая строка в /etc/passwd соответствует одному пользователю, каждая строка разделена двоеточием (:) на 7 полей, формат и конкретное значение которых таковы:

Имя пользователя:пароль:идентификатор пользователя:идентификатор группы:описание:основная директория: SHELL для входа

1) "Имя пользователя" это строка, представляющая учетную запись пользователя.

Обычно длина не превышает 8 символов и состоит из больших и малых букв и/или цифр. В登录ном имени не должно быть двоеточия (:), так как здесь оно служит разделителем.

Для совместимости最好不要在登录名中包含点字符(.) и не использовать дефис (-) и плюс (+) в начале.

2) «Пароль» в некоторых системах хранится зашифрованный пароль пользователя.

Хотя это поле содержит только зашифрованный строку пароля, а не текст, так как файл /etc/passwd доступен для чтения всем пользователям, это все же является потенциальной уязвимостью безопасности. Поэтому многие системы Linux (например, SVR4) используют технологию shadow, чтобы хранить настоящие зашифрованные пароли в файле /etc/shadow, а в поле пароля файла /etc/passwd хранится специальный символ, например «x» или «*».

3) «Идентификатор пользователя» - это целое число, которое система использует для идентификации пользователя.

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

Обычно диапазон значений идентификатора пользователя составляет от 0 до 65 535. Значение 0 - это идентификатор суперпользователя root, значения от 1 до 99 зарезервированы системой для учетных записей администраторов, идентификаторы обычных пользователей начинаются с 100. В системе Linux этот предел составляет 500.

4) Поле «идентификатор группы» записывает группу, к которой принадлежит пользователь.

Это соответствует записи в файле /etc/group.

5) Поле «комментариев» записывает некоторые личные данные пользователя.

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

6) «Основной каталог» - это начальный рабочий каталог пользователя.

Это каталог, в котором пользователь находится после входа в систему. В большинстве систем основные каталоги всех пользователей организованы в одном конкретном каталоге, а имя основного каталога пользователя соответствует его имени пользователя. У каждого пользователя есть права на чтение, запись и выполнение (поиск) в своем основном каталоге, в то время как доступ других пользователей к этому каталогу устанавливается в зависимости от конкретной ситуации.

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

Shell является интерфейсом между пользователем и операционной системой Linux. В Linux существует множество различных Shell, у каждого из которых есть свои особенности. Самыми распространенными являются sh (Bourne Shell), csh (C Shell), ksh (Korn Shell), tcsh (TENEX/TOPS-20 type C Shell) и bash (Bourne Again Shell).

系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。

利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

8)系统中有一类用户称为伪用户(pseudo users)。

这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

常见的伪用户如下所示:

伪 用 户 含 义 
bin 拥有可执行的用户命令文件 
sys 拥有系统文件 
adm 拥有帐户文件 
uucp UUCP使用 
lp lp或lpd子系统使用 
nobody NFS使用

拥有帐户文件

1、除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。

由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。

2、/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生

它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。这些字段是:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  • "登录名"是与/etc/passwd文件中的登录名相一致的用户账号

  • "口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。

  • Поле "время последнего изменения" указывает на количество дней с определенного момента до момента последнего изменения пароля пользователем. Начало времени может варьироваться в зависимости от системы. Например, в SCO Linux это начало времени — 1 января 1970 года.

  • Поле "минимальный интервал" означает минимальное количество дней между двумя изменениями пароля.

  • Поле "максимальный интервал" означает максимальное количество дней, в течение которых пароль действует.

  • Поле "время предупреждения" указывает на количество дней между началом предупреждения пользователя о скором истечении срока действия пароля и его официальным失效ом.

  • Поле "недактивный период" указывает на максимальное количество дней, в течение которых пользователь не может быть активен, но аккаунт все еще остается действительным.

  • Поле "время失效" указывает на абсолютное количество дней, если это поле используется, то оно указывает на срок жизни соответствующего аккаунта. По истечении срока жизни аккаунт больше не является легитимным и не может быть использован для входа.

  • Вот пример файла /etc/shadow:

    # cat /etc/shadow
    root:Dnakfw28zf38w:8764:0:168:7:::
    daemon:*::0:0::::
    bin:*::0:0::::
    sys:*::0:0::::
    adm:*::0:0::::
    uucp:*::0:0::::
    nuucp:*::0:0::::
    auth:*::0:0::::
    cron:*::0:0::::
    listen:*::0:0::::
    lp:*::0:0::::
    sam:EkdiSECLWPdSa:9740:0:0::::

    3. Все информация о группах пользователей хранится в файле /etc/group.

    Разделение пользователей на группы — это один из способов управления пользователями и контроля доступа в операционной системе Linux.

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

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

    Чтобы пользователь мог получить доступ к файлам, принадлежащим дополнительным группам, он должен сначала использовать команду newgrp, чтобы стать членом группы, к которой он хочет получить доступ.

    Все информация о группах пользователей хранится в файле /etc/group. Формат этого файла также ähnlich dem des Dateis /etc/passwd, разделенный двумя точками (:), и включает в себя следующие поля:

    Имя группы: пароль: идентификатор группы: список пользователей в группе
  • "Имя группы" — это имя группы пользователей, состоящее из букв и цифр. Как и имя пользователя в файле /etc/passwd, имя группы не должно повторяться.

  • "口令" поле хранит зашифрованный пароль пользователя группы. Обычно в Linux-системах у групп нет паролей, поэтому это поле обычно пусто или содержит '*'.

  • "Идентификатор группы" аналогичен идентификатору пользователя и является целым числом, которое используется системой для идентификации группы.

  • "Список пользователей в группе" - это список всех пользователей, принадлежащих к этой группе, разделенных запятыми (,). Эта группа может быть основной или дополнительной.

  • Пример файла /etc/group может выглядеть так:

    root::0:root
    bin::2:root,bin
    sys::3:root,uucp
    adm::4:root,adm
    daemon::5:root,daemon
    lp::7:root,lp
    users::20:root,sam

    Четвертый раздел: Добавление大批量用户

    Добавление и удаление пользователей для каждого администратора Linux-системы не составляет большого труда, но когда нужно добавить несколько десятков, сотен или даже тысяч пользователей, мы вряд ли будем использовать команду useradd для добавления пользователей по одному, а必然会 искать более удобный способ создания большого количества пользователей. Linux-система предоставляет инструменты для создания большого количества пользователей, которые позволяют сразу же создать большое количество пользователей, следующим образом:

    (1) Сначала создайте текстовый файл пользователей.

    Каждая колонка должна быть написана в формате файла паролей /etc/passwd. Важно, чтобы имя пользователя, UID и домашний каталог каждого пользователя были уникальными, а строка с паролем могла быть оставлена пустой или заполнена символом 'x'. Пример файла user.txt может выглядеть так:

    user001::600:100:user:/home/user001:/bin/bash
    user002::601:100:user:/home/user002:/bin/bash
    user003::602:100:user:/home/user003:/bin/bash
    user004::603:100:user:/home/user004:/bin/bash
    user005::604:100:user:/home/user005:/bin/bash
    user006::605:100:user:/home/user006:/bin/bash

    (2) Выполните команду /usr/sbin/newusers от имени root, чтобы импортировать данные из только что созданного файла пользователей user.txt и создать пользователей:

    # newusers < user.txt

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

    (3) Выполните команду /usr/sbin/pwunconv.

    Декодируйте shadow-пароли, созданные в /etc/shadow, и перепишите их в /etc/passwd, а также удалите строку паролей shadow в /etc/shadow. Это делается для удобства下一步 работы с паролями, то есть сначала отключить функцию shadow-паролей.

    # pwunconv

    (4) Редактируйте файл паролей для каждого пользователя.

    Формат:

    Имя пользователя:пароль

    Содержимое примерного файла passwd.txt такое:

    user001:123456
    user002:123456
    user003:123456
    user004:123456
    user005:123456
    user006:123456

    (5) Выполните команду /usr/sbin/chpasswd от имени root.

    Создайте пароль пользователя, команда chpasswd записывает закодированные пароли, обработанные командой /usr/bin/passwd, в строку паролей в /etc/passwd.

    # chpasswd < passwd.txt

    (6) Убедитесь, что пароли после кодирования записаны в строку паролей в /etc/passwd.

    Выполните команду /usr/sbin/pwconv, чтобы закодировать пароли в shadow-пароли и записать результат в /etc/shadow.

    # pwconv

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