Администрирование пользователей и групп пользователей в AIX

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

Адам Кормани, менеджер национального вычислительного центра, Scientific Games Corporation

Адам Кормани в настоящее время является менеджером в национальном вычислительном центре (National Data Center). Ранее работал системным инженером UNIX, UNIX-администратором и менеджером операций в Scientific Games Corporation. Адам на протяжении 10 лет много занимался администрированием систем AIX, Solaris и Red Hat Linux. Он является сертифицированным специалистом по администрированию систем AIX на серверах eServer pSeries. Помимо администрирования, Адам имеет большие знания в создании сценариев оболочки для Bash, CSH и KSH, а также в программировании на C, PHP и Perl. Связаться с Адамом можно по электронной почте acormany@yahoo.com



20.12.2010

Администрирование пользователей и групп пользователей является одной из главных задач, с которыми сталкивается администратор систем IBM AIX. Управлять пользователями и группами можно, используя имеющийся в AIX инструмент SMIT (System Management Interface Tool), средства командной строки или вручную редактируя конфигурационные файлы. В этой статье обсуждаются конфигурационные файлы, хранящие информацию о пользователях и группах в AIX, а также инструменты командной строки, упрощающие управление пользователями и группами.

В первую очередь мы изучим файлы, затем команды

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

Рассмотрим файлы, хранящие настройки пользователей:

  • /etc/passwd
  • /etc/security/.profile
  • /etc/security/limits
  • /etc/security/passwd
  • /etc/security/user
  • /usr/lib/security/mkuser.default

Команды в AIX

Помните, что команды и приемы, рассматриваемые в этой статье, применимы для систем AIX, в конфигурационных файлах которых хранятся только локальные пользователи и группы. Некоторые команды, например chuser и chgroup, не следует применять, если система работает с пользователями и группами из удаленного источника (например, Network Information System (NIS)).

/etc/passwd

Основная информация о пользователях хранится в файле /etc/passwd, который для людей, работающих в UNIX® и Linux®, является, возможно, самым известным файлом администрирования пользователями. В листинге 1 показан пример того, как может выглядеть файл /etc/passwd.

Листинг 1. Пример файла /etc/passwd
root:!:0:0::/:/usr/bin/ksh
daemon:!:1:1::/etc:
bin:!:2:2::/bin:
sys:!:3:3::/usr/sys:
adm:!:4:4::/var/adm:
uucp:!:5:5::/usr/lib/uucp:
guest:!:100:100::/home/guest:
nobody:!:4294967294:4294967294::/:
lpd:!:9:4294967294::/:
lp:*:11:11::/var/spool/lp:/bin/false
invscout:*:6:12::/var/adm/invscout:/usr/bin/ksh
snapp:*:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd
ipsec:*:201:1::/etc/ipsec:/usr/bin/ksh
nuucp:*:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico
pconsole:*:8:0::/var/adm/pconsole:/usr/bin/ksh
esaadmin:*:10:0::/var/esa:/usr/bin/ksh
sshd:*:206:201::/var/empty:/usr/bin/ksh
atc:!:8000:400:Adam Cormany,Sr UNIX Admin:/home/atc:/bin/ksh
amdc:!:8001:401:AMDC:/home/amdc:/bin/ksh
pac:!:8002:400:PAC,Jr UNIX Admin:/home/pac:/bin/ksh
atc2:!:8003:402:ATCv2:/home/atc2:/bin/ksh

Каждая строка в этом файле состоит из семи разделенных двоеточием (:) полей и имеет следующий формат (добавим для удобочитаемости пробелы перед и после каждого разделителя):

Имя пользователя : Флаг пароля : UID : GID : GECOS : Домашняя директория : Оболочка

Опишем по порядку значения этих полей.

  • Имя пользователя. Имя пользователя, ассоциированное с данной учетной записью.
  • Флаг пароля. Значение этого поля незначительно различается между разными типами систем UNIX и Linux. В AIX второе поле может содержать один из двух символов: ! или *. Символ ! отображается, если пользователь имеет пароль, в противном случае здесь находится *. Сами пароли хранятся в файле /etc/security/passwd.
  • UID. Это числовой идентификатор пользователя (User Identifier).
  • GID. Это числовой идентификатор группы пользователя (Group Identifier). Идентификаторы групп хранятся в файле /etc/group.
  • GECOS. В пятом поле хранится информация GECOS (General Electric Comprehensive Operating System). Здесь хранятся имя, телефонные номера и другая персональная информация пользователя.
  • Домашняя директория. Это домашняя директория пользователя.
  • Оболочка (Команда). Обычно в этом седьмом и последнем поле указывается оболочка, которая будет запущена при входе пользователя в систему. Администраторы могут изменить это поле, чтобы ограничить доступ пользователя в систему (указав вместо оболочки, например, /bin/false).

/etc/security/.profile

Файл /etc/security/.profile иногда может помочь сэкономить рабочее время и автоматизировать выполнение повторяющихся процедур. При создании пользователя с помощью команды mkuser система выполняет сценарий /usr/lib/security/mkuser.sys. Этот сценарий создает домашнюю директорию пользователя, задает корректные права и «создает» пользователю файл .profile. На самом деле сценарий /usr/lib/security/mkuser.sys просто копирует файл /etc/security/.profile в домашнюю директорию нового пользователя.

Если вы создаете новую систему или, допустим, для нового отдела, где работает 100 человек, нужно завести учетные записи в системе, то перед созданием учетных записей убедитесь, что файл /etc/security/.profile содержит все нужные вам изменения. Если вы создадите учетные записи и потом обнаружите, что вам нужно поменять значение какой-либо переменной или настройки профиля, вам придется вручную редактировать профиль для каждой записи. Конечно, можно легко создать сценарий, который сделает эту работу за вас, но будет гораздо проще, если вы заранее всего лишь поправите файл /etc/security/.profile.

В листинге 2 показан пример файла /etc/security/.profile

Листинг 2. Пример файла /etc/security/.profile file
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.

export PATH

if [ -s "$MAIL" ]           # This is at Shell startup.  In normal
then echo "$MAILMSG"        # operation, the Shell checks
fi                          # periodically.

/etc/security/limits

В файле /etc/security/limits хранятся значения ulimit-ограничений пользователей на использование системных ресурсов. В таблице 1 описываются поля, имеющиеся в файле /etc/security/limits

Таблица 1. Поля файла /etc/security/limits
Гибкое ограничениеЖесткое ограничениеОписание
fsizefsize_hardРазмер файла, который может создать пользователь
corecore_hardРазмер core-файла, который может создать пользователь
cpucpu_hardКоличество разрешенного процессорного времени
datadata_hardРазмер сегмента данных процесса
stackstack_hardРазмер сегмента стека процесса
rssrss_hardРазрешенное количество физической памяти
nofilesnofiles_hardКоличество одновременно открытых файловых дескрипторов
nprocnproc_hardКоличество одновременно выполняемых процессов

В чем разница между жесткими и гибкими ограничениями? Гибкое ограничение – это значение, которое пользователь может увеличивать налету, вплоть до максимального значения (жесткого ограничения). Жесткое ограничение, как можно догадаться, – это максимальное значение, которое может принимать определенный параметр. Если задать числовое значение параметра слишком сложно (например, если разработчик не может оценить, сколько памяти или открытых файлов будет нужно его программе), можно дать параметру значение -1, которое означает, что данный параметр не будет ограничиваться.

Вовсе не обязательно выставлять значения ограничений ulimit индивидуально для каждого пользователя. В файле /etc/security/limits есть секция default, определяющая стандартные значения ограничений, которые применяются, если пользователю не заданы отдельные значения. Если секция default отсутствует, IBM AIX на всякий случай задает предопределенные значения ограничений.

Вот как выглядят выставляемые IBM AIX значения по умолчанию:

*   Атрибут        Значение
*   ==========    ============
*   fsize_hard    равно fsize
*   cpu_hard      равно cpu
*   core_hard         -1
*   data_hard         -1
*   stack_hard      8388608
*   rss_hard          -1
*   nofiles_hard      -1

В листинге 3 приведен пример файла /etc/security/limits.

Листинг 3. Пример файла /etc/security/limits
default:
        fsize = 4194303
        core = 16384
        cpu = -1
        data = 262144
        rss = 65536
        stack = 65536

pac:
        fsize = 131072
        fsize_hard = 262144
        core = 262144

ДДопустим, пользователь "pac" – это начинающий UNIX-администратор, поэтому мы уменьшили ему значение fsize со значения по умолчанию 4194303 (из секции default) до 131072, однако оставили возможность при необходимости увеличить это значение до 262144. Кроме того, поскольку он довольно часто вызывает некорректное завершение своих программ, мы увеличили ему верхнюю границу размера core-файлов до 262144.

/etc/security/passwd

Файл /etc/security/passwd содержит информацию о паролях пользователей. В этом файле для каждого пользователя имеются три поля:

  • password. Зашифрованный пароль.

    Замечание: если в этом поле указана звездочка (*), значит учетная запись заблокирована, так как для нее пока не задан пароль.

  • lastupdate. Количество секунд с момента последнего обновления пароля.
  • flags. Ограничения на изменение пароля пользователя. Здесь можно задать три типа флагов:
    • ADMIN. Если флаг задан, то пароль пользователя может поменять только пользователь root.
    • ADMCHG. Если этот флаг задан, пользователю будет предложено поменять пароль при следующем входе в систему (или при смене пользователя командой su).
    • NOCHECK. Если этот флаг задан, то все дополнительные ограничения, заданные в файле /etc/security/user, будут игнорироваться.

В листинге 4 приведен пример файла /etc/security/password

Листинг 4. Пример файла /etc/security/password
amdc:
        password = oBQaUkPkUryCY
        lastupdate = 1243972006
        flags = ADMCHG

В этом примере у пользователя "amdc" есть пароль, который был задан во вторник, 2 июня 2009 года в 15:46:46. В следующий раз при входе в систему или переключении с помощью команды su пользователю будет предложено поменять пароль.

Если вам интересно знать, я преобразовал время из секунд с начала эпохи в более понятный вид с помощью сценария на Perl. Суть этого сценария выглядит так:

# perl -e 'use POSIX; print strftime("%c\n", localtime(1243972006));'
Tue Jun  2 15:46:46 EDT 2009

/etc/security/user

Теперь мы добрались до основного механизма администрирования пользователей в AIX. Если не считать etc/passwd, то в файле /etc/security/user хранятся наиболее важные настройки пользователя. В таблице 2 показаны некоторые из имеющихся в нем параметров.

Таблица 2. Параметры пользователей, имеющиеся в файле /etc/security/user
ПараметрФорматОписание
account_lockedTRUE | FALSEБлокирует ученую запись; если задать значение True, то пользователь не сможет войти в систему.
adminTRUE | FALSEЕсли True, то пользователь имеет права администратора.
expiresMMDDHHYYПри наступлении указанной здесь даты срок действия учетной записи истекает и она блокируется.
histexpire0-260Количество недель, в течение которых пользователь не может повторно использовать старый пароль.
histsize0-50 Количество предыдущих паролей, которые нельзя использовать повторно.
loginTRUE | FALSEПользователь может входить в систему, если здесь находится значение True.
maxage0-52Срок действия пароля в неделях.
minage0-52Минимальное количество недель, через которое пользователь может поменять свой пароль.
rloginTRUE | FALSEЕсли True, то этой учетной записи разрешен удаленный доступ.
suTRUE | FALSEЕсли True, то другие пользователи могут с помощью команды su переключаться на эту учетную запись.

C полным списком параметров можно ознакомиться непосредственно в файле /etc/security/user или на сайте информационного центра AIX.. По аналогии с файлом /etc/security/limits здесь также имеется секция default, в которой полям задаются значения по умолчанию.

/usr/lib/security/mkuser.default

В файле /usr/lib/security/mkuser.default хранятся значения, которые используются при создании нового пользователя AIX с помощью команды mkuser. В листинге 5 приведен пример того, как может выглядеть этот файл.

Листинг 5. Пример файла /usr/lib/security/mkuser.default file
user:
        pgrp = staff
        groups = staff
        shell = /usr/bin/ksh
        home = /home/$USER

admin:
        pgrp = system
        groups = system
        shell = /usr/bin/ksh
        home = /home/$USER

В этом файле можно определить гораздо больше параметров, с полным списком которых можно ознакомиться на странице руководства man chuser или на сайте IBM Systems Information Center.


Знакомимся с некоторыми командами

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

mkuser

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

  • Имя пользователя не может начинаться со следующих знаков:
    • тире или знака минус (-)
    • знака плюс (+)
    • "собачки" (@)
    • тильды (~)
  • Пользователей нельзя называть ALL или default, так как эти имена зарезервированы операционной системой.
  • Имена пользователей не могут включать в себя:
    • двоеточие (:)
    • двойную или одиночную кавычку (' или ")
    • решетку (#)
    • запятую (,)
    • знак равенства (=)
    • прямую или обратную косую черту (\ или /)
    • вопросительный знак (?)
    • обратную кавычку (`)
    • пробельные символы (пробел или табуляцию)
    • символ новой строки
  • В AIX версии меньше чем 5.3 имена пользователей не могут превышать восьми символов. Начиная с версии AIX 5.3, IBM увеличила максимальную длину имени пользователя до 255 символов.

Проверить значение этого параметра в AIX версии 5.3 и более поздней можно с помощью getconf:

# getconf LOGIN_NAME_MAX
9

или lsattr:

# lsattr -El sys0

SW_dist_intr    false              Enable SW distribution of interrupts              True
autorestart     true               Automatically REBOOT OS after a crash             True
boottype        disk               N/A                                               False
capacity_inc    1.00               Processor capacity increment                      False
capped          true               Partition is capped                               False
conslogin       enable             System Console Login                              False
cpuguard        enable             CPU Guard                                         True
dedicated       true               Partition is dedicated                            False
enhanced_RBAC   true               Enhanced RBAC Mode                                True
ent_capacity    1.00               Entitled processor capacity                       False
frequency       2656000000         System Bus Frequency                              False
fullcore        true               Enable full CORE dump                             True
fwversion       IBM,EL340_075      Firmware version and revision levels              False
id_to_partition 0X80000CE988400001 Partition ID                                      False
id_to_system    0X80000CE988400000 System ID                                         False
iostat          false              Continuously maintain DISK I/O history            True
keylock         normal             State of system keylock at boot time              False
log_pg_dealloc  true               Log predictive memory page deallocation events    True
max_capacity    1.00               Maximum potential processor capacity              False
max_logname     9                  Maximum login name length at boot time            True
maxbuf          20                 Maximum number of pages in block I/O BUFFER CACHE True
maxmbuf         0                  Maximum Kbytes of real memory allowed for MBUFS   True
maxpout         0                  HIGH water mark for pending write I/Os per file   True
maxuproc        800                Maximum number of PROCESSES allowed per user      True
min_capacity    1.00               Minimum potential processor capacity              False
minpout         0                  LOW water mark for pending write I/Os per file    True
modelname       IBM,8203-E4A       Machine name                                      False
ncargs          256                ARG/ENV list size in 4K byte blocks               True
nfs4_acl_compat secure             NFS4 ACL Compatibility Mode                       True
pre430core      false              Use pre-430 style CORE dump                       True
pre520tune      disable            Pre-520 tuning compatibility mode                 True
realmem         3784704            Amount of usable physical memory in Kbytes        False
rtasversion     1                  Open Firmware RTAS version                        False
sed_config      select             Stack Execution Disable (SED) Mode                True
systemid        IBM,021082744      Hardware system identifier                        False
variable_weight 0                  Variable processor capacity weight                False

Чтобы изменить это значение задайте с помощью команды chdev параметру v_max_logname (который в выводе lsattr показан как max_logname) значение на единицу большее желаемой максимальной длины имени (с учетом завершающего символа). Например, если вы хотите, чтобы имена пользователей могли быть длиной 128 символов, задайте параметру v_max_logname значение 129.

# chdev -l sys0 -a max_logname=129
sys0 changed

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

# getconf LOGIN_NAME_MAX
128

Однако если вы используете NIS или другие средства (удаленной) аутентификации и в вашем сетевом окружении имеются серверы IBM RS/6000® с AIX версией 5.2, или более ранней, или другой операционной системой, которая не умеет работать с именами пользователей длиннее 8 символов, то было бы разумным решением продолжать работать с 8-символьными именами.

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

# mkuser xander
# finger xander
Login name: xander
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

Не правда ли, просто? Давайте попробуем немного персонифицировать пользователя, добавив некоторые значения, которые можно найти на man-странице команды chuser (man chuser). Можно добавить пользователю информацию GECOS и изменить ограничение на размер core-файлов до 524288, как показано влистинге 6.

Листинг 6. Изменяем пользователю ограничение на размер core-файлов
# mkuser core=524288 gecos="Xander Cormany,317.555.1234" xander
# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

# su - xander "-c ulimit -a"
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        4194304
memory(kbytes)       unlimited
coredump(blocks)     524288
nofiles(descriptors) unlimited
threads(per process) unlimited
processes(per user)  unlimited

Стоит заметить, что значение GECOS, как и любого другого поля в /etc/passwd, не должно содержать двоеточия (:). Если добавить двоеточие, то все поля сдвинутся вправо. Например, если в поле GECOS поместить Xander:Cormany , то Xander окажется в правильном поле, а Cormany станет значением следующего справа поля (т.е. домашней директории). Также поле GECOS не может заканчиваться на !#.

Большинство администраторов не используют подобные инструменты командной строки, но тем не менее важно понимать, как работают такие программы, как SMIT (man smit или man smitty). Если вы желаете продолжить работу в SMIT, то это очень просто сделать. Ниже показан пример создания в точности такого же пользователя с помощью SMIT. Для входа сразу в экран создания нового пользователя в SMIT предусмотрен аргумент быстрого запуска mkuser:

# smitty mkuser

На рисунке 1 показана работа утилиты SMIT.

Рисунок 1. Создаем пользователя с помощью smitty mkuser
The smitty mkuser process

Задайте имя пользователя, информацию GECOS, ограничение core и нажмите Enter, чтобы создать пользователя. Когда SMIT сообщит о том, что команда успешно выполнена, нажмите F10 или Esc + 0 для выхода из программы. Проверить параметры созданного пользователя можно с помощью кода, показанного в листинге 7.

Листинг 7. Проверяем правильность настроек пользователя, созданного с помощью SMIT
# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

# su - xander "-c ulimit -a"
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        4194304
memory(kbytes)       unlimited
coredump(blocks)     524288
nofiles(descriptors) unlimited
threads(per process) unlimited
processes(per user)  unlimited

chuser

Трудная работа на этом закончена. Однако подождите: представим, что только что к нам заглянул начальник пользователя Xander и сообщил, что его ограничение core должно быть 1048576 (кто-то забыл умножить его на 2). Никаких проблем, мы поменяем это значение с помощью команды chuser.

Команда chuser использует такие же атрибуты, как и mkuser, а также имеет очень похожий синтаксис. В листинге 8 показан пример работы команды chuser.

Листинг 8. Команда chuser
# chuser core=1048576 xander
# su - xander "-c ulimit -a"
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        4194304
memory(kbytes)       unlimited
coredump(blocks)     1048576
nofiles(descriptors) unlimited
threads(per process) unlimited
processes(per user)  unlimited

Как всегда, IBM сделала эту команду удобной для вызова в SMIT с помощью аргумента быстрого запуска. Команда smitty chuser, как было бы логично предположить, открывает экран изменения пользователя.

chsh

Иногда бывает нужно изменить рабочую оболочку пользователя. В AIX оболочкой по умолчанию является Korn или ksh. Чтобы изменить оболочку, выполните команду chsh, указав имя пользователя, после чего, как показано в листинге 9, выберите желаемую оболочку.

Листинг 9. Изменяем рабочую оболочку пользователя
# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

# chsh xander
 Current available shells:
                /bin/sh
                /bin/bsh
                /bin/csh
                /bin/ksh
                /bin/tsh
                /bin/ksh93
                /usr/bin/sh
                /usr/bin/bsh
                /usr/bin/csh
                /usr/bin/ksh
                /usr/bin/tsh
                /usr/bin/ksh93
                /usr/bin/rksh
                /usr/bin/rksh93
                /usr/sbin/uucp/uucico
                /usr/sbin/sliplogin
                /usr/sbin/snappd
 xander's current login shell:
                /usr/bin/ksh
 Change (yes) or (no)? > yes
 To?>/usr/bin/csh

# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/csh
No Plan.

chfn

Далее, предположим, что администратор, который создал пользователя Xander, неправильно написал его имя в информации GECOS. Чтобы исправить эту ошибку, следует воспользоваться командой chfn. Эта команда работает аналогично команде chsh: отображает текущее значение, спрашивает, желает ли пользователь его изменить и затем заменяет старое значение тем, что было введено. В листинге 10 показан пример работы этой команды.

Листинг 10. Пример работы команды cnfn
# finger xander
Login name: xander                    In real life: Zander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

# chfn xander
 xander's current gecos:
                "Zander Cormany,317.555.1234"
 Change (yes) or (no)? > yes
 To?>Xander Cormany,317.555.1234

# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

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

# finger cormany
Login name: atc                       In real life: Adam Cormany
Directory: /home/cormany                Shell: /bin/ksh
No Plan.

Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.1234
Directory: /home/xander                 Shell: /usr/bin/ksh
No Plan.

lsuser

Сбор всей информации о пользователе из множества файлов может показаться довольно утомительной процедурой. К счастью, в AIX имеется команда, которая может собрать воедино все данные пользователя. Команда lsuser возвращает из различных административных файлов все атрибуты пользователя. Это может быть полезным, если вы сравниваете пользователей для того, чтобы в целях резервного копирования создать полный список пользователей или решить проблему, связанную с какой-либо отдельной учетной записью.

Просмотреть атрибуты пользователя можно с помощью ключа -f, который выводит все данные в виде списка. В листинге 11 показан пример работы команды lsuser.

Листинг 11. Результат команды lsuser –f
# lsuser -f xander
xander:
        id=214
        pgrp=staff
        groups=staff
        home=/home/xander
        shell=/usr/bin/ksh
        gecos=Xander Cormany,317.555.1234
        login=true
        su=true
        rlogin=true
        daemon=true
        admin=false
        sugroups=ALL
        admgroups=
        tpath=nosak
        ttys=ALL
        expires=0
        auth1=SYSTEM
        auth2=NONE
        umask=22
        registry=files
        SYSTEM=compat
        logintimes=
        loginretries=0
        pwdwarntime=0
        account_locked=false
        minage=0
        maxage=0
        maxexpired=-1
        minalpha=0
        minother=0
        mindiff=0
        maxrepeats=8
        minlen=0
        histexpire=0
        histsize=0
        pwdchecks=
        dictionlist=
        default_roles=
        fsize=-1
        cpu=-1
        data=-1
        stack=-1
        core=1048576
        rss=-1
        nofiles=-1
        roles=

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

Листинг 12. Результат команды lsuser –c
# lsuser -c xander,atc

#name:id:pgrp:groups:home:shell:gecos:login:su:rlogin:daemon:admin:
sugroups:tpath:ttys:expires:auth1:auth2:umask:registry:SYSTEM:loginretries:
pwdwarntime:account_locked:minage:maxage:maxexpired:minalpha:minother:
mindiff:maxrepeats:minlen:histexpire:histsize:fsize:cpu:data:stack:core:rss:nofiles
xander:214:staff:staff:/home/xander:/usr/bin/ksh:Xander Cormany,317.555.1234:
true:true:true:true:false:ALL:nosak:ALL:0:SYSTEM:NONE:22:files:compat:0:0:false:
0:0:-1:0:0:0:8:0:0:0:-1:-1:-1:-1:1048576:-1:-1
#name:id:pgrp:groups:home:shell:gecos:login:su:rlogin:daemon:admin:sugroups:
tpath:ttys:expires:auth1:auth2:umask:registry:SYSTEM:loginretries:pwdwarntime:
account_locked:minage:maxage:maxexpired:minalpha:minother:mindiff:maxrepeats:
minlen:histexpire:histsize:fsize:cpu:data:stack:core:rss:nofiles:time_last_login:
time_last_unsuccessful_login:tty_last_login:tty_last_unsuccessful_login:host_last_login:
host_last_unsuccessful_login:unsuccessful_login_count
cormany:215:staff:staff,support:/home/cormany:/bin/ksh:Adam Cormany:true:true:
true:true:false:ALL:nosak:ALL:0:SYSTEM:NONE:22:NIS:compat:0:0:false:0:0:
-1:0:0:0:8:0:0:0:-1:-1:-1:-1:-1:-1:-1:1250854405:1250522447:/dev/pts/3:/dev/pts/13:
10.20.30.40:10.20.30.41:0

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

Если вам интересны лишь некоторые поля, например оболочка и домашняя директория пользователя, то вам подойдет команда lsuser с ключом -a. В листинге 13 приведен пример этой команды с использованием полей из man-страницы команды chuser.

Листинг 13. Выполняем команду lsuser -c –a
# lsuser -c -a shell home xander,cormany
#name:shell:home
xander:/usr/bin/ksh:/home/xander
#name:shell:home
cormany:/bin/ksh:/home/cormany

passwd

Многие думают, что команда passwd только изменяет пароль пользователя. Хотя passwd действительно выполняет эту важную функцию, она имеет и другие применения.

Наиболее важная функция команды passwd это действительно смена пароля пользователя. Согласно правилам, заданным в конфигурационных файлах /etc/security/user и /etc/security/passwd, стандартный пользователь может изменить свой пароль, а пользователь root может менять пароли и других пользователей. В листинге 14 показан пример работы этой команды.

Листинг 14. Меняем пароль пользователя с помощью команды passwd
# lsuser -c -a password xander
#name:password
xander:*

# passwd xander
Changing password for "xander"
xander's New password:
Enter the new password again:

# lsuser -c -a password xander
#name:password
xander:!

С помощью команды passwd можно менять информацию GECOS, как с помощью chfn, а также менять оболочку/команду, выполняемую при входе пользователя в систему, как с помощью chsh. В листинге 15 показан пример.

Листинг 15. Используем passwd для изменения информации о пользователе
# passwd -f xander
 xander's current gecos:
                "Xander Cormany,317.555.1234"
 Change (yes) or (no)? > yes
 To?>Xander Cormany,317.555.7890

# passwd -s xander
 Current available shells:
                /bin/sh
                /bin/bsh
                /bin/csh
                /bin/ksh
                /bin/tsh
                /bin/ksh93
                /usr/bin/sh
                /usr/bin/bsh
                /usr/bin/csh
                /usr/bin/ksh
                /usr/bin/tsh
                /usr/bin/ksh93
                /usr/bin/rksh
                /usr/bin/rksh93
                /usr/sbin/uucp/uucico
                /usr/sbin/sliplogin
                /usr/sbin/snappd
 xander's current login shell:
                /usr/bin/ksh
 Change (yes) or (no)? > yes
 To?>/usr/bin/bsh

# finger xander
Login name: xander                    In real life: Xander Cormany
Site Info: 317.555.7890
Directory: /home/xander                 Shell: /usr/bin/bsh
No Plan.

pwdadm

С помощью команды pwdadm в AIX можно менять пароли. Кроме того, pwdadm может отображать пользовательские флаги в файле /etc/security/passwd (за исключением зашифрованных паролей), а также обновлять их. Продолжим наши эксперименты с учетной записью пользователя Xander. Сначала изменим у него пароль, а затем посмотрим текущие атрибуты пароля. Так как пароль был только что изменен, для него выставлен флаг ADMCHG. Поменяем значение этого флага на ADMIN, чтобы в дальнейшем этот пароль могли менять только администраторы. В листинге 16 показан код, с помощью которого мы выполним эту задачу.

Листинг 16. Изменяем пользовательские флаги и ограничиваем привилегии изменения пароля
# pwdadm xander
Changing password for "xander"
xander's New password:
Enter the new password again:

# pwdadm -q xander
xander:
        lastupdate = 1250858719
        flags = ADMCHG

# pwdadm -f ADMIN xander

# pwdadm -q xander
xander:
        lastupdate = 1250858719
        flags = ADMIN

rmuser

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

Чтобы удалить пользователя, просто выполним команду rmuser, передав ей в качестве аргумента имя учетной записи. Без указания ключей эта команда удаляет пользователя из системы, но оставляет информацию о нем в файле /etc/security/passwd:

# rmuser xander

Чтобы удалить информацию о пароле пользователя, следует использовать ключ -p:

# rmuser –p xander

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


Группы

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

/etc/group

Основная информация о группах содержится в файле /etc/group. В листинге 17 показан пример содержимого этого файла.

Листинг 17. Пример файла /etc/group
system:!:0:root,pconsole,esaadmin
staff:!:1:ipsec,esaadmin,sshd,xander
bin:!:2:root,bin
sys:!:3:root,bin,sys
adm:!:4:bin,adm
uucp:!:5:uucp,nuucp
mail:!:6:
security:!:7:root
cron:!:8:root
printq:!:9:lp
audit:!:10:root
ecs:!:28:
nobody:!:4294967294:nobody,lpd
perf:!:20:
shutdown:!:21:
lp:!:11:root,lp
invscout:!:12:invscout
snapp:!:13:snapp
ipsec:!:200:
pconsole:!:14:pconsole
sshd:!:201:sshd

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

Имя группы : Флаг пароля : GID : Пользователи

Опишем по порядку значения этих полей.

  • Имя группы. Имя, ассоциированное с группой.
  • Флаг пароля. В AIX это поле не используется. Вместо него для администраторов группы используется файл /etc/security/group.
  • GID. Идентификатор GID (group id), ассоциированный с группой.
  • Пользователи. Список входящих в эту группу пользователей.

    Замечание: содержимое этого поля разделяется запятыми.

/etc/security/group

Файл /etc/security/group очень похож на файл /etc/security/user для пользователей: он содержит дополнительные атрибуты группы. В таблице 3 представлено несколько полезных настроек, имеющихся в этом конфигурационном файле.

Таблица 3. Параметры из файла /etc/security/group
ПараметрФорматОписание
admsuser1, user2, …Список, в котором через запятую указаны пользователи, имеющие права администратора группы.
adminTRUE | FALSEЕсли True, то вся группа имеет права администратора.

С остальными атрибутами можно ознакомиться на странице руководства для /etc/security/group (man group) или на сайте http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/group.htm.

Как и в остальных файлах в директории /etc/security, содержимое этого файла разбито на секции. В данном случае в каждой из секций идентификатором является имя группы. Этот файл предоставляет приятную возможность дать стандартному пользователю этой группы права администратора. Администраторы группы могут добавлять и удалять членов группы по своему усмотрению. В листинге 18 приведен пример того, как может выглядеть файл /etc/security/group. В данном примере для группы jradmin атрибут admin выставлен в False, и обычные пользователи pac и xander указаны как администраторы группы.

Листинг 18. Пример файла /etc/security/group
system:
        admin = true

staff:
        admin = false

bin:
        admin = true

sys:
        admin = true

jradmin:
        admin = false
        adms = pac,xander

Еще немного команд

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

mkgroup

В AIX группа создается очень просто. При создании групп имеют место те же ограничения, что и при создании пользователей.

  • Имя группы не может начинаться со следующих знаков:
    • тире или знака минус (-).
    • знака плюс (+)
    • "собачки" (@)
    • тильды (~)
  • Группы не могут называться ALL или default, так как эти имена зарезервированы операционной системой.
  • Имена групп не могут включать в себя:
    • двоеточие (:)
    • двойную или одиночную кавычку (' или ")
    • решетку (#)
    • запятую (,)
    • знак равенства (=)
    • прямую или обратную косую черту (\ или /)
    • вопросительный знак (?)
    • обратную кавычку (`)
    • пробельные символы (пробел или табуляцию)
    • символ новой строки
  • • В AIX версии 5.2 и ранее имена групп не могут превышать восьми символов. Начиная с версии AIX 5.3, IBM увеличила максимальную длину имени пользователя до 255 символов.

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

Чтобы создать группу, просто выполните команду mkgroup, указав ей в качестве аргумента имя группы, как показано в листинге 19.

Листинг 19. Создаем группу с помощью команды mkgroup
# mkgroup atctest

# grep atctest /etc/group
atctest:!:202:

# grep -p atctest /etc/security/group
atctest:
        admin = false

Для создания администраторской группы используйте ключ -a, как показано в листинге 20.

Листинг 20. Создаем администраторскую группу
# mkgroup -a atcadmin

# grep atcadmin /etc/group
atcadmin:!:15:

# grep -p atcadmin /etc/security/group
atcadmin:
        admin = true

Как показано в листинге 21, чтобы создать группу и сделать пользователя Xander администратором этой группы, следует указать его имя в значении параметра adms (который назван по имени секции, имеющейся в каждом разделе файла /etc/security/group).

Листинг 21. Делаем пользователя администратором группы
# mkgroup adms=xander xangroup

# grep xangroup /etc/group
xangroup:!:203:

# grep -p xangroup /etc/security/group
xangroup:
        admin = false
        adms = xander

По аналогии с mkuser, для команды mkgroup доступны те же атрибуты, что и для chgroup. С полным списком атрибутов можно ознакомиться на справочной странице команды chgroup (man chgroup).

chgroup

Команда chgroup работает точно так же, как chuser, а на ее man-странице представлены все атрибуты группы, которые можно поменять. В листинге 22 приведен пример, в котором у группы xangroup меняется GID, а также в нее добавляется несколько пользователей.

Листинг 22. Изменяем GID группы и добавляем пользователей
# grep xangroup /etc/group
xangroup:!:203:

# chgroup id=204 users=xander,atc,amdc xangroup

# grep xangroup /etc/group
xangroup:!:204:xander,atc,amdc

chgrpmem

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

Например, членами группы xangroup являются пользователи xander и atc, а пользователь xander является администратором группы. В листинге 23 показано, как можно удалить пользователя atc из группы.

Листинг 23. Удаляем пользователя из группы
# chgrpmem xangroup
xangroup:
        members = xander,atc
        adms = xander

# chgrpmem -m - atc xangroup

# chgrpmem xangroup
xangroup:
        members = xander
        adms = xander

Предположим, что произошла ошибка, и пользователя atc не следовало удалять. Вместо этого пользователя atc нужно было сделать администратором группы, а у пользователя xander права администратора следовало забрать. В листинге 24 показан код, с помощью которого можно сделать эти изменения.

Листинг 24. Возвращаем удаленного пользователя в группу и меняем администратора группы
# chgrpmem -m + atc xangroup

# chgrpmem -a + atc xangroup

# chgrpmem -a - xander xangroup

# chgrpmem xangroup
xangroup:
        members = xander,atc
        adms = atc

lsgroup

Если есть такая удобная команда, как lsuser, наверное, должна быть похожая команда и для групп, не так ли? Да, и она называется lsgroup. Чтобы следовать стандартному формату команд и их параметров в AIX, lsgroup имеет ту же структуру, что и команда lsuser.

В листинге 25 приводится несколько примеров с использованием в lsgroup тех же ключей, что и для lsuser в листинге 11, листинге 12 и листинге 13.

Листинг 25. Работа команды lsgroup
# lsgroup xangroup
xangroup id=204 admin=false users=xander,cormany adms=cormany registry=files

# lsgroup -f xangroup
xangroup:
        id=204
        admin=false
        users=xander,cormany
        adms=cormany
        registry=files

# lsgroup -c xangroup,atcadmin
#name:id:admin:users:adms:registry
xangroup:204:false:xander,cormany:cormany:files
#name:id:admin:registry
atcadmin:15:true:files

# lsgroup -c -a id xangroup,atcadmin
#name:id
xangroup:204
#name:id
atcadmin:15

rmgroup

В этой статье мы создавали тестовые группы пользователей. Настало время почистить нашу AIX-систему после использования. Чтобы удалить пользователя из системы, просто выполните команду rmgroup, передав ей в качестве аргумента имя группы:

# rmgroup atctest

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


Заключение

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

Ресурсы

Научиться

  • AIX user and group administration (Адам Кормани, developerWorks, сентябрь 2009 г.) - оригинал статьи (EN).
  • getconf: посетите на сайте IBM Systems Information Center man-страницу команды getconf (EN).
  • /etc/security/limits: посетите на сайте IBM Systems Information Center страницу, посвященную файлу /etc/security/limits (EN).
  • /etc/security/user: посетите на сайте IBM Systems Information Center страницу, посвященную файлу /etc/security/user (EN).
  • /usr/lib/security/mkuser.default: посетите на сайте IBM Systems Information Center страницу, посвященную файлу /usr/lib/security/mkuser.default (EN).
  • chuser: See IBM's System Information Center Web page for the chuser - посетите на сайте IBM Systems Information Center страницу, посвященную команде chuser (EN).
  • /etc/group: посетите на сайте IBM Systems Information Center страницу, посвященную файлу /etc/group (EN).
  • /etc/security/group: посетите на сайте IBM Systems Information Center страницу, посвященную файлу /etc/security/group (EN).
  • Посетите электронный магазин технической литературы Safari, чтобы найти интересующую вас информацию по этой и другим темам (EN).

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



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

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=604250
ArticleTitle=Администрирование пользователей и групп пользователей в AIX
publish-date=12202010