参考http://www.ibm.com/developerworks/cn/aix/library/au-aixuseradmin/
管理 IBM AIX 中的用户和组是管理员的重要责任之一。可以以许多种方式管理用户和组:可以通过 AIX System Management Interface Tool (SMIT) 管理它们,也可以手工编辑配置文件或使用命令行命令。本文讨论 AIX 上与用户和组相关的配置文件,以及用来帮助管理用户和组的命令行工具。
在学习 AIX 中用来创建、修改和维护用户和组的命令之前,一定要了解在幕后发生的情况。例如,应该了解相关文件及其作用。
下面是影响用户本身的一些文件:
请记住,本文讨论的命令和方法应该可以在配置文件中有本地用户和组的 AIX 系统上使用。如果系统处理来自远程源(例如 Network Information System,即 NIS)的用户和组,那么不应该使用 chuser 和 chgroup 等命令。
/etc/passwd /etc/security/.profile /etc/security/limits /etc/security/passwd /etc/security/user /usr/lib/security/mkuser.default/etc/passwd 文件包含用户的基本信息,它可能是 UNIX® 和 Linux® 用户最熟知的用户管理文件。清单 1 给出 /etc/passwd 文件的示例。
可以看到这个文件使用冒号 (:) 作为分隔符,每个条目按以下格式包含 7 个字段(为了便于阅读,在分隔符前后添加了空格):
Username : Password Flag : UID : GID : GECOS : Home : Shell/Command下面逐一解释这些字段:
Username。这是与用户账户相关联的登录名/用户名。 Password Flag。这个字段因 UNIX 和 Linux 的风格而异。在 AIX 上,第二个字段可以包含两个字符之一:! 或 *。如果显示 !,那么已经为此用户设置了密码。如果还没有设置密码,就会出现 *。密码本身存储在 /etc/security/passwd 中。 UID。User Identifier (UID) 是用户的数字标识符。 GID。Group Identifier (GID) 与 UID 相似,但是它与组相关联。GID 在 /etc/group 中定义。 GECOS。General Electric Comprehensive Operating System (GECOS) 信息存储在第五个字段中。这里存储用户的姓名、电话号码和其他一般个人信息。 Home。这是用户的主目录。 Shell/Command。通常情况下,最后一个字段包含在用户登录时启动的 shell。管理员也可以通过修改这个字段执行其他命令而不是 shell(例如 /bin/false),从而限制访问。/etc/security/.profile 文件可以节省宝贵的时间和减少麻烦。在使用 mkuser 命令创建用户时,执行 /usr/lib/security/mkuser.sys 脚本。这个脚本创建用户的目录,设置正确的权限,“创建” 用户的 .profile。mkuser.sys 脚本实际上是把 /etc/security/.profile 文件复制到新用户的主目录中。
如果您正在构建新系统,或者一个新部门有 100 名员工需要在系统上建立账户,那么一定要先修改 /etc/security/.profile 文件,然后再开始创建用户账户。如果已经创建了账户,然后意识到需要对某个变量或其他设置做简单的修改,就不得不手工修改每个用户的 profile。可以使用脚本简化这个过程,但是如果提前修改了 /etc/security/.profile,会简单得多。
清单 2 给出一个 /etc/security/.profile 文件示例。
/etc/security/limits 文件包含所有 ulimit,即用户的系统资源限制。表 1 列出 /etc/security/limits 文件中的字段及其用途。
软限制和硬限制的区别是什么?在最大值(硬限制)范围内,用户或应用程序可以动态地修改软限制。硬限制 就是参数可以设置的最大值。如果把参数设置为数字值太困难(例如,如果开发人员不知道程序将使用的内存量或它需要打开的文件数量),那么可以把参数设置为 -1,这表示无限制。
但是,不必为每个用户设置所有 ulimit。/etc/security/limits 文件包含一个 default 部分,它为每个用户定义一组标准值,如果用户没有设置定制的值,就会使用这些值。如果 default 部分不存在,系统会设置预先确定的限制。
IBM 的默认值如下:
* Attribute Value * ========== ============ * fsize_hard set to fsize * cpu_hard set to cpu * core_hard -1 * data_hard -1 * stack_hard 8388608 * rss_hard -1 * nofiles_hard -1清单 3 给出一个 /etc/security/limits 文件示例。
假设用户 “pac” 是一位初级 UNIX 管理员,他的软限制值 fsize 由 default 部分的 4,194,303 降低到 131,072;但是,允许他在需要时把这个值增加到 262,144。另外,pac 经常把自己的程序弄坏。因此,把他的 core ulimit 增加到 262,144。
/etc/security/passwd 文件包含 AIX 用户的密码信息。在这个文件中,每个用户有三个字段:
password。加密的密码。注意:如果这个字段只包含星号 (*),那么账户被锁定,直到设置密码为止。
lastupdate。最后一次更新密码的时间(系统纪元以来的秒数)。 flags。对修改用户密码的限制。可以设置三个标志: ADMIN。如果设置,那么只有根用户可以修改用户的密码。 ADMCHG。如果设置,那么在用户下一次登录或执行 su 时提示修改密码。 NOCHECK。如果设置,那么忽略 /etc/security/user 中的任何其他限制。清单 4 提供一个 /etc/security/password 文件示例。
在这个示例中,用户 “amdc” 的密码是在 2009 年 6 月 2 日星期二 15:46:46 EDT 设置的。当用户下一次登录或执行 su 时,会提示修改密码。
您可能想知道如何把系统纪元以来的秒数转换为可读性更好的表示法,为此我编写了一个 Perl 脚本。这个脚本的核心如下:
# perl -e 'use POSIX; print strftime("%c\n", localtime(1243972006));' Tue Jun 2 15:46:46 EDT 2009现在,要接触到 AIX 用户管理的核心了。除了 /etc/passwd 中的基本信息之外,/etc/security/user 文件包含最重要的用户设置。表 2 说明一些参数。
参数的完整列表请查看 AIX 系统上的 /etc/security/user,或访问 AIX Information Center。与 /etc/security/limits 一样,如果没有为账户指定值,就使用 default 部分设置所有字段。
/usr/lib/security/mkuser.default 文件包含在通过 mkuser 创建新的 AIX 用户时使用的值。清单 5 提供这个文件的示例。
在这个文件中可以定义许多参数。完整的列表请参见 man chuser 或访问 IBM Systems Information Center。
回页首
既然您已经熟悉了命令背后的文件,现在就来看看命令本身。学习如何创建用户以及在创建用户之后修改用户。
要了解的第一个命令是 mkuser。如果没有 mkuser,其他命令都没什么用。使用这个命令创建 AIX 用户并设置初始值。下面是在创建用户时要记住的几条简单规则:
用户名不能以下面的字符开头: 连字符或减号 (-) 加号 (+) At 符号 (@) 波浪号 (~) 用户名不能是 ALL 或 default,因为这些名称是为操作系统保留的。 用户名不能包含: 冒号 (:) 引号 — 单引号或双引号 (' 或 ") 镑符或数字符 (#) 逗号 (,) 等号 (=) 斜杠 — 反斜杠或前向斜杠 (\ 或 /) 问号 (?) 反引号或勾号 (`) 空白(空格或制表符) 换行符 在 AIX 5.2 和更早的版本上,用户名的长度必须小于等于 8 个字符。从 AIX 5.3 开始,最大字符数增加到了 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但是请记住,如果环境包含 AIX 5.3 之前的 IBM RS/6000® 服务器,或者操作系统无法处理超过 8 个字符的用户名,而且依靠 NIS 或其他身份验证机制,那么应该继续使用 8 个字符的用户名。
要想用默认设置创建用户并分配下一个可用的 UID,只需执行 mkuser 加上用户名:
# mkuser xander # finger xander Login name: xander Directory: /home/xander Shell: /usr/bin/ksh No Plan.很容易,不是吗?现在试一下更有意思的操作。通过添加在 chuser 手册页 (man chuser) 上找到的一些值,可以包含用户的 GECOS 信息并把用户的 core ulimit 改为 524,288,见 清单 6。
与 /etc/passwd 中的其他字段一样,GECOS 的值不应该包含冒号 (:)。添加冒号就会影响对字段位置的解释,所有期望值会向右移。例如,如果用户试图在 /etc/passwd 的 GECOS 字段中设置 Xander:Cormany 值,Xander 实际上会在正确的字段中,而 Cormany 成为右边字段(即主目录)的值。另外,GECOS 字段不能以 !# 结尾。
大多数管理员其实并不使用这样的命令行,但是了解 SMIT(man smit 或 man smitty)等实用程序在幕后做的工作是很重要的。如果您愿意使用 SMIT,过程很简单。下面是使用 SMIT 创建具有相同属性的同一用户的示例。在用户创建屏幕上直接输入 SMIT,然后使用快速路径mkuser:
# smitty mkuser图 1 显示 SMIT 实用程序。
填写用户名、GECOS 字段和 core ulimit 之后,按 Enter 创建用户。当 SMIT 返回命令成功完成的消息时,按 F10 或 Esc + 0 退出程序。可以使用 清单 7 中的代码检查用户。
现在到了比较难的部分。但是等等:Xander 的经理 Ann 刚才来告诉您 Xander 的 core ulimit 应该是 1,048,576(有人忘记乘以 2 了)。没问题:只需用 chuser 修改 ulimit。
chuser 命令的语法与 mkuser 非常相似,使用相同的属性。清单 8 提供 chuser 命令的示例。
可以使用快速路径在 SMIT 中方便地访问这些命令。smitty chuser 会把您直接带到用户修改屏幕。
有时候希望改变 shell。AIX 中的默认 shell 是 Korn shell,即 ksh。改变 shell 的方法是执行 chsh 并提供用户名,然后选择所需的 shell,见 清单 9。
在为 Xander 创建 AIX 用户时,管理员在 GECOS 信息中的姓名中出现了输入错误。要纠正这个错误,应该使用 chfn 命令。这个命令与 chsh很相似,它显示当前值,询问用户是否希望修改它,然后把值改为输入的值。清单 10 提供一个示例。
纠正 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.从各个用户文件收集某一用户的所有信息看起来可能很繁琐。好在 AIX 提供了一个简便的命令,可以一下子收集所有数据。lsuser 命令从各个管理文件收集指定用户的所有属性。这对于许多任务非常有帮助,比如对比用户、生成要备份的所有用户的完整列表和解决某一账户的问题。
可以使用 -f 开关查看一个用户的属性,它按特定的结构显示所有信息。清单 11 提供输出的示例。
如果要对比用户,只需把开关由 -f 改为 -c 并通过逗号分隔的参数添加要对比的用户。清单 12 提供输出示例。
这输出大量信息,看起来很乱。但是,如果把这些数据导入电子表格,就一目了然了。在脚本中使用这些数据管理用户时,这种包含分隔符的格式也有帮助。
如果只想寻找几个字段(例如用户的 shell 和主目录),那么可以在 lsuser 命令中使用 -a 开关。清单 13 提供这个命令的示例,使用来自chuser 手册页的字段。
许多人认为 passwd 命令只用于修改用户的密码。尽管 passwd 确实执行这种重要的功能,但是它还有其他特性。
passwd 最重要的特性确实是修改用户的密码。如果符合 /etc/security/user 和 /etc/security/passwd 配置文件中设置的规则,标准用户就可以修改自己的密码;如果作为根用户登录,还可以修改其他用户的密码,见 清单 14。
passwd 命令还可以像 chfn 一样修改用户的 GECOS 信息,或者像 chsh 一样修改用户登录时执行的 shell/命令。清单 15 提供一个示例。
AIX 中的 pwdadm 命令可以修改密码。另外,pwdadm 可以显示(不包括加密的密码)或更新 /etc/security/passwd 中的用户标志。仍然以 Xander 的账户做实验,首先修改他的密码,然后查看当前的密码属性。因为修改了密码,将设置 ADMCHG 标志。把这个标志改为 ADMIN 并限制账户,以后只允许管理员更新密码。清单 16 给出执行此任务的代码。
现在要从系统中删除用户;必须删除 Xander 的账户。这需要使用 rmuser。
要想删除用户,只需执行 rmuser 并作为参数指定用户的账户名。这样做会从系统中删除用户,但是用户的密码信息仍然保留在 /etc/security/passwd 文件中:
# rmuser xander可以使用 -p 开关完全删除用户的密码信息:
# rmuser –p xander注意,rmuser 并不删除用户的主目录。用户的主目录中可能有应该保留的重要数据,由您负责在确认安全时删除主目录。
回页首
您已经熟悉了一些用户修改命令;现在,我们来讨论组。与用户管理一样,一定要了解命令在幕后修改的配置文件。
/etc/group 文件包含组的基本信息。清单 17 提供 /etc/group 文件的示例。
与 /etc/passwd 文件一样,这个文件使用冒号作为分隔符,每个条目按以下格式包含 4 个字段(为了便于阅读,在分隔符前后添加了空格):
Group Name : Password Flag : GID : User(s)下面逐一解释这些字段:
Group Name。与组相关联的组名。 Password Flag。AIX 中不使用这个字段。AIX 使用 /etc/security/group 文件存储组管理员信息。 GID。与组相关联的 GID。 User(s)。属于组成员的用户的列表。注意:这个字段以逗号作为分隔符。
/etc/security/group 文件与 /etc/security/user 很相似:它包含指定的组的扩展属性。表 3 说明这个配置文件中的两个参数。
更多属性请参见 /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 定义为组的管理员。
回页首
您已经了解了命令背后的文件。现在来看看命令本身。学习如何创建组以及在创建组之后修改组。
在 AIX 中创建组非常简单明了。对创建用户的限制也适用于组:
组名不能以下面的字符开头: 连字符或减号 (-) 加号 (+) At 符号 (@) 波浪号 (~) 组名不能是 ALL 或 default,因为这些名称是为操作系统保留的。 组名不能包含: 冒号 (:) 引号 — 单引号或双引号 (' 或 ") 镑符或数字符 (#) 逗号 (,) 等号 (=) 斜杠 — 反斜杠或前向斜杠 (\ 或 /) 问号 (?) 反引号或勾号 (`) 空白(空格或制表符) 换行符 在 AIX 5.2 和更早的版本上,组名的长度必须小于等于 8 个字符。从 AIX 5.3 开始,最大字符数增加到了 255。由同一个参数 v_max_logname 控制用户名和组名的长度。要想查看或修改这个值,请参见本文前面 mkuser 小节中对查看和修改用户名长度的说明。
要想创建组,只需执行 mkgroup 命令并指定组名,见 清单 19。
添加 -a 可以创建管理员组,见 清单 20。
要想创建组并指定 Xander 作为组的管理员,应该在命令行上指定 adms=xander,这会在 /etc/security/group 文件中添加 adms 属性,见 清单 21。
与 mkuser 一样,mkgroup 采用与 chgroup 相同的属性。完整的属性列表请参见 chgroup 的手册页 (man chgroup)。
chgroup 命令与 chuser 相似,它的手册页包含可以修改的所有组属性。清单 22 中的示例把 xangroup 组的 GID 由 203 改为 204,还添加了几个用户。
也可以使用 chgrpmem 修改组的成员。可以使用 chgrpmem 命令列出、添加和删除组中的用户,以及改变组管理员。
例如,xangroup 组包含成员 xander 和 atc,xander 是组管理员。从组中删除 atc,见 清单 23。
假设这是错的,不应该删除 atc 用户。相反,应该把 atc 用户变成组管理员,删除 xander 的管理权限。清单 24 给出纠正错误的代码。
lsuser 对于用户管理很有用,有相似的组管理命令吗?有,这就是 lsgroup。lsgroup 采用 AIX 的标准命令和选项格式,采用与 lsuser 相同的结构。
清单 25 中的示例使用 清单 11、清单 12 和 清单 13 中在 lsuser 中使用过的开关。
前面创建了组。现在,要清理 AIX 系统。要想从系统中删除组,只需执行 rmgroup 并指定组名:
# rmgroup atctest以这个组作为主组的所有用户必须把主组改为另一个组,然后 rmgroup 命令才允许删除这个组。
回页首
阅读完本文之后,现在您应该已经熟悉了 AIX 中用于用户和组维护的配置文件。还应该更好地了解了命令行工具,知道如何创建、修改和删除用户和组。IBM 大大简化了这些维护任务,让您能够集中精力处理更复杂的问题
