了解 IBM® AIX® 中與用戶和組相關的配置文件,以及用來幫助管理用戶和組的命令行工具。
先了解文件,然后了解命令
在學習 AIX 中用來創(chuàng)建、修改和維護用戶和組的命令之前,一定要了解在幕后發(fā)生的情況。例如,應該了解相關文件及其作用。
下面是影響用戶本身的一些文件:
AIX 中的命令
請記住,本文討論的命令和方法應該可以在配置文件中有本地用戶和組的 AIX 系統(tǒng)上使用。如果系統(tǒng)處理來自遠程源(例如 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。這是與用戶賬戶相關聯(lián)的登錄名/用戶名。
Password Flag。這個字段因 UNIX 和 Linux 的風格而異。在 AIX 上,第二個字段可以包含兩個字符之一:! 或 *。如果顯示 !,那么已經(jīng)為此用戶設置了密碼。如果還沒有設置密碼,就會出現(xiàn) *。密碼本身存儲在 /etc/security/passwd 中。
UID。User Identifier (UID) 是用戶的數(shù)字標識符。
GID。Group Identifier (GID) 與 UID 相似,但是它與組相關聯(lián)。GID 在 /etc/group 中定義。
GECOS。General Electric Comprehensive Operating System (GECOS) 信息存儲在第五個字段中。這里存儲用戶的姓名、電話號碼和其他一般個人信息。
Home。這是用戶的主目錄。
Shell/Command。通常情況下,最后一個字段包含在用戶登錄時啟動的 shell。管理員也可以通過修改這個字段執(zhí)行其他命令而不是 shell(例如 /bin/false),從而限制訪問。
/etc/security/.profile
/etc/security/.profile 文件可以節(jié)省寶貴的時間和減少麻煩。在使用 mkuser 命令創(chuàng)建用戶時,執(zhí)行 /usr/lib/security/mkuser.sys 腳本。這個腳本創(chuàng)建用戶的目錄,設置正確的權限,“創(chuàng)建” 用戶的 .profile。mkuser.sys 腳本實際上是把 /etc/security/.profile 文件復制到新用戶的主目錄中。
如果您正在構(gòu)建新系統(tǒng),或者一個新部門有 100 名員工需要在系統(tǒng)上建立賬戶,那么一定要先修改 /etc/security/.profile 文件,然后再開始創(chuàng)建用戶賬戶。如果已經(jīng)創(chuàng)建了賬戶,然后意識到需要對某個變量或其他設置做簡單的修改,就不得不手工修改每個用戶的 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,即用戶的系統(tǒng)資源限制。表 1 列出 /etc/security/limits 文件中的字段及其用途。
表 1. /etc/security/limits 中的字段
軟限制 | 硬限制 | 說明 |
fsize | fsize_hard | 用戶可以創(chuàng)建的文件的大小 |
core | core_hard | 用戶可以創(chuàng)建的核心文件的大小 |
cpu | cpu_hard | 允許的系統(tǒng)時間量 |
data | data_hard | 進程數(shù)據(jù)段的大小 |
stack | stack_hard | 進程堆棧段的大小 |
rss | rss_hard | 允許的物理內(nèi)存量 |
nofiles | nofiles_hard | 同時打開的文件描述符數(shù)量 |
nproc | nproc_hard | 同時運行的進程數(shù)量 |
軟限制和硬限制的區(qū)別是什么?在最大值(硬限制)范圍內(nèi),用戶或應用程序可以動態(tài)地修改軟限制。硬限制 就是參數(shù)可以設置的最大值。如果把參數(shù)設置為數(shù)字值太困難(例如,如果開發(fā)人員不知道程序?qū)⑹褂玫膬?nèi)存量或它需要打開的文件數(shù)量),那么可以把參數(shù)設置為 -1,這表示無限制。
但是,不必為每個用戶設置所有 ulimit。/etc/security/limits 文件包含一個 default 部分,它為每個用戶定義一組標準值,如果用戶沒有設置定制的值,就會使用這些值。如果 default 部分不存在,系統(tǒng)會設置預先確定的限制。
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 經(jīng)常把自己的程序弄壞。因此,把他的 core ulimit 增加到 262,144。
/etc/security/passwd
/etc/security/passwd 文件包含 AIX 用戶的密碼信息。在這個文件中,每個用戶有三個字段:
password。加密的密碼。
注意:如果這個字段只包含星號 (*),那么賬戶被鎖定,直到設置密碼為止。
lastupdate。最后一次更新密碼的時間(系統(tǒng)紀元以來的秒數(shù))。
flags。對修改用戶密碼的限制。可以設置三個標志:
ADMIN。如果設置,那么只有根用戶可以修改用戶的密碼。
ADMCHG。如果設置,那么在用戶下一次登錄或執(zhí)行 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 設置的。當用戶下一次登錄或執(zhí)行 su 時,會提示修改密碼。
您可能想知道如何把系統(tǒng)紀元以來的秒數(shù)轉(zhuǎn)換為可讀性更好的表示法,為此我編寫了一個 Perl 腳本。這個腳本的核心如下:
# perl -e 'use POSIX; print strftime("%c\n", localtime(1243972006));'
Tue Jun 2 15:46:46 EDT 2009
/etc/security/user
現(xiàn)在,要接觸到 AIX 用戶管理的核心了。除了 /etc/passwd 中的基本信息之外,/etc/security/user 文件包含最重要的用戶設置。表 2 說明一些參數(shù)。
表 2. /etc/security/user 文件中的參數(shù)
參數(shù) | 格式 | 說明 |
account_locked | TRUE | FALSE | 鎖定賬戶;如果設置為 True,用戶就無法登錄。 |
admin | TRUE | FALSE | 如果設置為 True,用戶就具有管理權力。 |
expires | MMDDHHYY | 如果到達此日期,賬戶就會過期并被鎖定。 |
histexpire | 0-260 | 用戶在這個期限內(nèi)不能重用密碼(星期數(shù))。 |
histsize | 0-50 | 以前使用過的不能重用的密碼數(shù)量。 |
login | TRUE | FALSE | 如果設置為 True,用戶可以登錄。 |
maxage | 0-52 | 密碼的有效期(星期數(shù))。 |
minage | 0-52 | 用戶在此期限之后才能修改密碼(星期數(shù))。 |
rlogin | TRUE | FALSE | 如果設置為 True,那么可以遠程訪問此賬戶。 |
su | TRUE | FALSE | 如果設置為 True,那么其他用戶可以使用 su 訪問此賬戶。 |
參數(shù)的完整列表請查看 AIX 系統(tǒng)上的 /etc/security/user,或訪問 AIX Information Center。與 /etc/security/limits 一樣,如果沒有為賬戶指定值,就使用 default 部分設置所有字段。
/usr/lib/security/mkuser.default
/usr/lib/security/mkuser.default 文件包含在通過 mkuser 創(chuàng)建新的 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
在這個文件中可以定義許多參數(shù)。完整的列表請參見 man chuser 或訪問 IBM Systems Information Center。
基本命令
既然您已經(jīng)熟悉了命令背后的文件,現(xiàn)在就來看看命令本身。學習如何創(chuàng)建用戶以及在創(chuàng)建用戶之后修改用戶。
mkuser
要了解的第一個命令是 mkuser。如果沒有 mkuser,其他命令都沒什么用。使用這個命令創(chuàng)建 AIX 用戶并設置初始值。下面是在創(chuàng)建用戶時要記住的幾條簡單規(guī)則:
用戶名不能以下面的字符開頭:
連字符或減號 (-)
加號 (+)
At 符號 (@)
波浪號 (~)
用戶名不能是 ALL 或 default,因為這些名稱是為操作系統(tǒng)保留的。
用戶名不能包含:
冒號 (:)
引號 — 單引號或雙引號 (' 或 ")
鎊符或數(shù)字符 (#)
逗號 (,)
等號 (=)
斜杠 — 反斜杠或前向斜杠 (\ 或 /)
問號 (?)
反引號或勾號 (`)
空白(空格或制表符)
換行符
在 AIX 5.2 和更早的版本上,用戶名的長度必須小于等于 8 個字符。從 AIX 5.3 開始,最大字符數(shù)增加到了 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 調(diào)整 v_max_logname 參數(shù)(在 lsattr 輸出中顯示為 max_logname),把它設置為所需的最大字符數(shù)加一,加一是為了容納終止字符。例如,如果希望用戶名的長度是 128 個字符,那么應該把 v_max_logname 設置為 129:
# chdev -l sys0 -a max_logname=129
sys0 changed
請注意,這一修改直到重新引導操作系統(tǒng)之后才會生效。重新引導服務器之后,可以檢查修改是否已經(jīng)生效了:
# getconf LOGIN_NAME_MAX
128
但是請記住,如果環(huán)境包含 AIX 5.3 之前的 IBM RS/6000® 服務器,或者操作系統(tǒng)無法處理超過 8 個字符的用戶名,而且依靠 NIS 或其他身份驗證機制,那么應該繼續(xù)使用 8 個字符的用戶名。
要想用默認設置創(chuàng)建用戶并分配下一個可用的 UID,只需執(zhí)行 mkuser 加上用戶名:
# mkuser xander
# finger xander
Login name: xander
Directory: /home/xander Shell: /usr/bin/ksh
No Plan.
很容易,不是嗎?現(xiàn)在試一下更有意思的操作。通過添加在 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 字段不能以 !# 結(jié)尾。
大多數(shù)管理員其實并不使用這樣的命令行,但是了解 SMIT(man smit 或 man smitty)等實用程序在幕后做的工作是很重要的。如果您愿意使用 SMIT,過程很簡單。下面是使用 SMIT 創(chuàng)建具有相同屬性的同一用戶的示例。在用戶創(chuàng)建屏幕上直接輸入 SMIT,然后使用快速路徑 mkuser:
# smitty mkuser
圖 1 顯示 SMIT 實用程序。
圖 1. smitty mkuser 過程
填寫用戶名、GECOS 字段和 core ulimit 之后,按 Enter 創(chuàng)建用戶。當 SMIT 返回命令成功完成的消息時,按 F10 或 Esc + 0 退出程序??梢允褂?清單 7 中的代碼檢查用戶。
清單 7. 檢查 SMIT 是否成功地創(chuàng)建了用戶# 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
現(xiàn)在到了比較難的部分。但是等等:Xander 的經(jīng)理 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 的方法是執(zhí)行 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 創(chuàng)建 AIX 用戶時,管理員在 GECOS 信息中的姓名中出現(xiàn)了輸入錯誤。要糾正這個錯誤,應該使用 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 信息看起來可能意義不大,但是這對系統(tǒng)上的其他管理員和用戶有幫助。例如,如果您試圖找到 Xander 的賬戶,但是沒有記住他的用戶名,就可以在 GECOS 信息中搜索他的姓名。搜索他的姓(已經(jīng)在 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 提供了一個簡便的命令,可以一下子收集所有數(shù)據(jù)。lsuser 命令從各個管理文件收集指定用戶的所有屬性。這對于許多任務非常有幫助,比如對比用戶、生成要備份的所有用戶的完整列表和解決某一賬戶的問題。
可以使用 -f 開關查看一個用戶的屬性,它按特定的結(jié)構(gòu)顯示所有信息。清單 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 并通過逗號分隔的參數(shù)添加要對比的用戶。清單 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
這輸出大量信息,看起來很亂。但是,如果把這些數(shù)據(jù)導入電子表格,就一目了然了。在腳本中使用這些數(shù)據(jù)管理用戶時,這種包含分隔符的格式也有幫助。
如果只想尋找?guī)讉€字段(例如用戶的 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 確實執(zhí)行這種重要的功能,但是它還有其他特性。
passwd 最重要的特性確實是修改用戶的密碼。如果符合 /etc/security/user 和 /etc/security/passwd 配置文件中設置的規(guī)則,標準用戶就可以修改自己的密碼;如果作為根用戶登錄,還可以修改其他用戶的密碼,見 清單 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 一樣修改用戶登錄時執(zhí)行的 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 給出執(zhí)行此任務的代碼。
清單 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
現(xiàn)在要從系統(tǒng)中刪除用戶;必須刪除 Xander 的賬戶。這需要使用 rmuser。
要想刪除用戶,只需執(zhí)行 rmuser 并作為參數(shù)指定用戶的賬戶名。這樣做會從系統(tǒng)中刪除用戶,但是用戶的密碼信息仍然保留在 /etc/security/passwd 文件中:
# rmuser xander
可以使用 -p 開關完全刪除用戶的密碼信息:
# rmuser –p xander
注意,rmuser 并不刪除用戶的主目錄。用戶的主目錄中可能有應該保留的重要數(shù)據(jù),由您負責在確認安全時刪除主目錄。
組
您已經(jīng)熟悉了一些用戶修改命令;現(xiàn)在,我們來討論組。與用戶管理一樣,一定要了解命令在幕后修改的配置文件。
/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。與組相關聯(lián)的組名。
Password Flag。AIX 中不使用這個字段。AIX 使用 /etc/security/group 文件存儲組管理員信息。
GID。與組相關聯(lián)的 GID。
User(s)。屬于組成員的用戶的列表。
注意:這個字段以逗號作為分隔符。
/etc/security/group
/etc/security/group 文件與 /etc/security/user 很相似:它包含指定的組的擴展屬性。表 3 說明這個配置文件中的兩個參數(shù)。
表 3. /etc/security/group 參數(shù)
參數(shù) | 格式 | 說明 |
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 中的其他配置文件一樣,這個文件劃分為小節(jié),組名作為標識符。這個文件的特性之一是允許把組的管理員權限分配給標準用戶。組的管理員可以根據(jù)需要在組中添加或刪除成員。清單 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
幾個命令
您已經(jīng)了解了命令背后的文件?,F(xiàn)在來看看命令本身。學習如何創(chuàng)建組以及在創(chuàng)建組之后修改組。
mkgroup
在 AIX 中創(chuàng)建組非常簡單明了。對創(chuàng)建用戶的限制也適用于組:
組名不能以下面的字符開頭:
連字符或減號 (-)
加號 (+)
At 符號 (@)
波浪號 (~)
組名不能是 ALL 或 default,因為這些名稱是為操作系統(tǒng)保留的。
組名不能包含:
冒號 (:)
引號 — 單引號或雙引號 (' 或 ")
鎊符或數(shù)字符 (#)
逗號 (,)
等號 (=)
斜杠 — 反斜杠或前向斜杠 (\ 或 /)
問號 (?)
反引號或勾號 (`)
空白(空格或制表符)
換行符
在 AIX 5.2 和更早的版本上,組名的長度必須小于等于 8 個字符。從 AIX 5.3 開始,最大字符數(shù)增加到了 255。
由同一個參數(shù) v_max_logname 控制用戶名和組名的長度。要想查看或修改這個值,請參見本文前面 mkuser 小節(jié)中對查看和修改用戶名長度的說明。
要想創(chuàng)建組,只需執(zhí)行 mkgroup 命令并指定組名,見 清單 19。
清單 19. 用 mkgroup 創(chuàng)建組# mkgroup atctest
# grep atctest /etc/group
atctest:!:202:
# grep -p atctest /etc/security/group
atctest:
admin = false
添加 -a 可以創(chuàng)建管理員組,見 清單 20。
清單 20. 創(chuàng)建管理員組# mkgroup -a atcadmin
# grep atcadmin /etc/group
atcadmin:!:15:
# grep -p atcadmin /etc/security/group
atcadmin:
admin = true
要想創(chuàng)建組并指定 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. 添加已經(jīng)刪除的用戶并改變組管理員# 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 相同的結(jié)構(gòu)。
清單 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
前面創(chuàng)建了組?,F(xiàn)在,要清理 AIX 系統(tǒng)。要想從系統(tǒng)中刪除組,只需執(zhí)行 rmgroup 并指定組名:
# rmgroup atctest
以這個組作為主組的所有用戶必須把主組改為另一個組,然后 rmgroup 命令才允許刪除這個組。
結(jié)束語
閱讀完本文之后,現(xiàn)在您應該已經(jīng)熟悉了 AIX 中用于用戶和組維護的配置文件。還應該更好地了解了命令行工具,知道如何創(chuàng)建、修改和刪除用戶和組。IBM 大大簡化了這些維護任務,讓您能夠集中精力處理更復雜的問題。