设为首页 收藏本站
查看: 1046|回复: 0

[经验分享] 管理 IBM AIX 中的用户

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-4 06:04:49 | 显示全部楼层 |阅读模式
  管理 IBM AIX 中的用户和组是管理员的重要责任之一。可以以许多种方式管理用户和组:可以通过 AIX System Management Interface Tool (SMIT) 管理它们,也可以手工编辑配置文件或使用命令行命令。本文讨论 AIX 上与用户和组相关的配置文件,以及用来帮助管理用户和组的命令行工具。
  先了解文件,然后了解命令
  在学习 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
  /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

  
  可以看到这个文件使用冒号 (:) 作为分隔符,每个条目按以下格式包含 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
  /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 文件示例。
  
清单 2. /etc/security/.profile 文件示例



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 中的字段

软限制硬限制说明

fsize
fsize_hard
用户可以创建的文件的大小


core
core_hard
用户可以创建的核心文件的大小


cpu
cpu_hard
允许的系统时间量


data
data_hard
进程数据段的大小


stack
stack_hard
进程堆栈段的大小


rss
rss_hard
允许的物理内存量


nofiles
nofiles_hard
同时打开的文件描述符数量


nproc
nproc_hard
同时运行的进程数量
  软限制和硬限制的区别是什么?在最大值(硬限制)范围内,用户或应用程序可以动态地修改软限制硬限制 就是参数可以设置的最大值。如果把参数设置为数字值太困难(例如,如果开发人员不知道程序将使用的内存量或它需要打开的文件数量),那么可以把参数设置为 -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 文件示例。
  
清单 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 由 default 部分的 4,194,303 降低到 131,072;但是,允许他在需要时把这个值增加到 262,144。另外,pac 经常把自己的程序弄坏。因此,把他的 core ulimit 增加到 262,144。
  /etc/security/passwd
  /etc/security/passwd 文件包含 AIX 用户的密码信息。在这个文件中,每个用户有三个字段:


  • password。加密的密码。  注意:如果这个字段只包含星号 (*),那么账户被锁定,直到设置密码为止。

  • lastupdate。最后一次更新密码的时间(系统纪元以来的秒数)。
  • flags。对修改用户密码的限制。可以设置三个标志:

    • ADMIN。如果设置,那么只有根用户可以修改用户的密码。
    • ADMCHG。如果设置,那么在用户下一次登录或执行 su 时提示修改密码。
    • NOCHECK。如果设置,那么忽略 /etc/security/user 中的任何其他限制。


  清单 4 提供一个 /etc/security/password 文件示例。
  
清单 4. /etc/security/password 文件示例



amdc:
password = oBQaUkPkUryCY
lastupdate = 1243972006
flags = ADMCHG

  
  在这个示例中,用户 “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

  
  /etc/security/user
  现在,要接触到 AIX 用户管理的核心了。除了 /etc/passwd 中的基本信息之外,/etc/security/user 文件包含最重要的用户设置。表 2 说明一些参数。
  
表 2. /etc/security/user 文件中的参数

参数格式说明

account_locked
TRUE | FALSE
锁定账户;如果设置为 True,用户就无法登录。


admin
TRUE | FALSE
如果设置为 True,用户就具有管理权力。


expires
MMDDHHYY
如果到达此日期,账户就会过期并被锁定。


histexpire
0-260
用户在这个期限内不能重用密码(星期数)。


histsize
0-50
以前使用过的不能重用的密码数量。


login
TRUE | FALSE
如果设置为 True,用户可以登录。


maxage
0-52
密码的有效期(星期数)。


minage
0-52
用户在此期限之后才能修改密码(星期数)。


rlogin
TRUE | FALSE
如果设置为 True,那么可以远程访问此账户。


su
TRUE | FALSE
如果设置为 True,那么其他用户可以使用 su 访问此账户。
  参数的完整列表请查看 AIX 系统上的 /etc/security/user,或访问 AIX Information Center。与 /etc/security/limits 一样,如果没有为账户指定值,就使用 default 部分设置所有字段。
  /usr/lib/security/mkuser.default
  /usr/lib/security/mkuser.default 文件包含在通过 mkuser 创建新的 AIX 用户时使用的值。清单 5 提供这个文件的示例。
  
清单 5. /usr/lib/security/mkuser.default 文件示例



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,其他命令都没什么用。使用这个命令创建 AIX 用户并设置初始值。下面是在创建用户时要记住的几条简单规则:


  • 用户名不能以下面的字符开头:

    • 连字符或减号 (-)
    • 加号 (+)
    • At 符号 (@)
    • 波浪号 (~)


  • 用户名不能是 ALLdefault,因为这些名称是为操作系统保留的。
  • 用户名不能包含:

    • 冒号 (:)
    • 引号 — 单引号或双引号 (' 或 ")
    • 镑符或数字符 (#)
    • 逗号 (,)
    • 等号 (=)
    • 斜杠 — 反斜杠或前向斜杠 (\ 或 /)
    • 问号 (?)
    • 反引号或勾号 (`)
    • 空白(空格或制表符)
    • 换行符


  • 在 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。
  
清单 6. 修改用户的 core ulimit



# 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

  
  与 /etc/passwd 中的其他字段一样,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 过程
DSC0000.jpg
  填写用户名、GECOS 字段和 core ulimit 之后,按 Enter 创建用户。当 SMIT 返回命令成功完成的消息时,按 F10Esc + 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 的经理 Ann 刚才来告诉您 Xander 的 core ulimit 应该是 1,048,576(有人忘记乘以 2 了)。没问题:只需用 chuser 修改 ulimit。
  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

  
  可以使用快速路径在 SMIT 中方便地访问这些命令。smitty chuser 会把您直接带到用户修改屏幕。
  chsh
  有时候希望改变 shell。AIX 中的默认 shell 是 Korn shell,即 ksh。改变 shell 的方法是执行 chsh 并提供用户名,然后选择所需的 shell,见 清单 9。
  
清单 9. 改变用户的 shell



# 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 创建 AIX 用户时,管理员在 GECOS 信息中的姓名中出现了输入错误。要纠正这个错误,应该使用 chfn 命令。这个命令与 chsh 很相似,它显示当前值,询问用户是否希望修改它,然后把值改为输入的值。清单 10 提供一个示例。
  
清单 10. chfn 命令示例



# 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 信息看起来可能意义不大,但是这对系统上的其他管理员和用户有帮助。例如,如果您试图找到 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 提供输出的示例。
  
清单 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

  
  这输出大量信息,看起来很乱。但是,如果把这些数据导入电子表格,就一目了然了。在脚本中使用这些数据管理用户时,这种包含分隔符的格式也有帮助。
  如果只想寻找几个字段(例如用户的 shell 和主目录),那么可以在 lsuser 命令中使用 -a 开关。清单 13 提供这个命令的示例,使用来自 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 配置文件中设置的规则,标准用户就可以修改自己的密码;如果作为根用户登录,还可以修改其他用户的密码,见 清单 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 命令还可以像 chfn 一样修改用户的 GECOS 信息,或者像 chsh 一样修改用户登录时执行的 shell/命令。清单 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
  AIX 中的 pwdadm 命令可以修改密码。另外,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 提供 /etc/group 文件的示例。
  
清单 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 文件一样,这个文件使用冒号作为分隔符,每个条目按以下格式包含 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/group 文件与 /etc/security/user 很相似:它包含指定的组的扩展属性。表 3 说明这个配置文件中的两个参数。
  
表 3. /etc/security/group 参数

参数格式说明

adms
user1, user2, …
对这个组有管理权限的逗号分隔的用户列表。


admin
TRUE | 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 中创建组非常简单明了。对创建用户的限制也适用于组:


  • 组名不能以下面的字符开头:

    • 连字符或减号 (-)
    • 加号 (+)
    • At 符号 (@)
    • 波浪号 (~)


  • 组名不能是 ALLdefault,因为这些名称是为操作系统保留的。
  • 组名不能包含:

    • 冒号 (:)
    • 引号 — 单引号或双引号 (' 或 ")
    • 镑符或数字符 (#)
    • 逗号 (,)
    • 等号 (=)
    • 斜杠 — 反斜杠或前向斜杠 (\ 或 /)
    • 问号 (?)
    • 反引号或勾号 (`)
    • 空白(空格或制表符)
    • 换行符


  • 在 AIX 5.2 和更早的版本上,组名的长度必须小于等于 8 个字符。从 AIX 5.3 开始,最大字符数增加到了 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

  
  要想创建组并指定 Xander 作为组的管理员,应该在命令行上指定 adms=xander,这会在 /etc/security/group 文件中添加 adms 属性,见 清单 21。
  
清单 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 相似,它的手册页包含可以修改的所有组属性。清单 22 中的示例把 xangroup 组的 GID 由 203 改为 204,还添加了几个用户。
  
清单 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 是组管理员。从组中删除 atc,见 清单 23。
  
清单 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。lsgroup 采用 AIX 的标准命令和选项格式,采用与 lsuser 相同的结构。
  清单 25 中的示例使用 清单 11、清单 12 和 清单 13 中在 lsuser 中使用过的开关。
  
清单 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 大大简化了这些维护任务,让您能够集中精力处理更复杂的问题。
  
  
  参考资料
  学习


  • getconf:通过 IBM 的手册页了解 getconf 命令。
  • /etc/security/limits:访问 IBM 的 System Information Center 网页,了解 /etc/security/limits。
  • /etc/security/user:访问 IBM 的 System Information Center 网页,了解 /etc/security/user。
  • /usr/lib/security/mkuser.default:访问 IBM 的 System Information Center 网页,了解 /usr/lib/security/mkuser.default。
  • chuser:访问 IBM 的 System Information Center 网页,了解 chuser 命令。
  • /etc/group:访问 IBM 的 System Information Center 网页,了解 /etc/group。
  • /etc/security/group:访问 IBM 的 System Information Center 网页,了解 /etc/security/group。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • 在 技术书店 浏览关于这些主题和其他技术主题的图书。
  讨论


  • 参与 developerWorks blogs 并加入 developerWorks 社区。
  • 参与 AIX 和 UNIX 论坛:

    • AIX 论坛
    • 针对开发人员的 AIX 论坛
    • Cluster Systems Management
    • IBM Support Assistant 论坛
    • 性能工具论坛
    • 虚拟化论坛
    • 更多 AIX 和 UNIX 论坛


  关于作者




  Adam Cormany 目前是国家数据中心的经理,同时还一直担任 Scientific Games 公司的 UNIX 系统工程师、UNIX 管理员和运营经理。Adam 潜心从事 AIX 以及 Solaris 和 Red Hat Linux 管理已有 10 多年。他是一位 pSeries AIX 系统管理方面的 IBM eServer 认证专家。除管理外,Adam 还在 BASH、CSH 和 KSH 的 Shell 脚本编写以及 C、PHP 和 Perl 编程方面具有渊博的知识。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-122291-1-1.html 上篇帖子: 推荐引擎概述(转自IBM worker) 下篇帖子: 转 IBM Rational Rose-01 统一建模语言(UML) 版本 2.0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表