Linux下對于新添加的用戶,用戶密碼過期時(shí)間是從/etc/login.defs中PASS_MAX_DAYS提取的,普通系統(tǒng)默認(rèn)就是99999,而有些安全操作系統(tǒng)是90。更改此處,只是讓新建的用戶默認(rèn)密碼過期時(shí)間變化,已有用戶密碼過期時(shí)間仍然不變。
[root@linuxidc ~]# chage --help
Usage: chage [options] user
Options:
-d, --lastday LAST_DAY set last password change to LAST_DAY
-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-h, --help display this help message and exit
-I, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --list show account aging information
-m, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-M, --maxdays MAX_DAYS set maximim number of days before password
change to MAX_DAYS
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
chage:密碼失效是通過此命令來管理的。
參數(shù)意思:
-m 密碼可更改的最小天數(shù)。為零時(shí)代表任何時(shí)候都可以更改密碼。
-M 密碼保持有效的最大天數(shù)。www.linuxidc.com
-W 用戶密碼到期前,提前收到警告信息的天數(shù)。
-E 帳號到期的日期。過了這天,此帳號將不可用。
-d 上一次更改的日期
-i 停滯時(shí)期。如果一個(gè)密碼已過期這些天,那么此帳號將不可用。
-l 例出當(dāng)前的設(shè)置。由非特權(quán)用戶來確定他們的密碼或帳號何時(shí)過期。
[root@linuxidc ~]# chage -l root
Last password change : Oct 19, 2010
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
更改用: chage -M 90 root
[root@linuxidc ~]#chage -M 90 root
[root@linuxidc ~]#chage -l root
如果以后添加一個(gè)用戶,那么默認(rèn)的時(shí)間還是沒改的,還必須得去/etc/login.defs修改PASS_MAX_DAYS 的默認(rèn)值.那么如果我直接修改全局/etc/login.defs所在的用戶會(huì)跟著改變嗎? 據(jù)我的測試是不會(huì)改變的,除非重啟后,但我們的服務(wù)器不是你想重啟的就可以重啟的!如果管理嚴(yán)格的地方,重啟還得經(jīng)過很多程序步驟.改完全局時(shí),沒有更改 的用戶,想要讓他也同樣具備此功能.就得一個(gè)個(gè)的執(zhí)行!
你也可以直接用vim 編輯器去編輯PASS_MAX_DAYS 99999
也可以用其它的工具
[root@linuxidc ~]#sed -i.bak -e 's/^\(PASS_MAX_DAYS\).*/\1 90/' /etc/login.defs
查看一下是否
[root@linuxidc ~]#cat /etc/login.defs |grep "PASS_M";
強(qiáng)制用戶登陸時(shí)修改口令
[root@linuxidc ~]#chage -d 0 username(linux)
[root@linuxidc ~]#passwd -f username(solaris)
強(qiáng)制用戶下次登陸時(shí)修改密碼,并且設(shè)置密碼最低有效期0和最高有限期90,提前15天發(fā)警報(bào)提示
[root@linuxidc ~]#chage -d 0 -m 0 -M 90 -W 15 root(linux)
[root@linuxidc ~]#passwd -f -n 0 -x 90 -w 15 root(solaris)
查看某個(gè)用戶的密碼設(shè)置情況
[root@linuxidc ~]#chage -l username
修改密碼配置文件
[root@linuxidc ~]#vi /etc/login.defs
Linux ssh建立一個(gè)新的用戶包括兩個(gè)步驟,第一步是使用useradd命令完成一個(gè)新用戶的初始化設(shè)置工作;第二步是用passwd為這個(gè)新用戶設(shè)置密碼。例如,我們要給系統(tǒng)添加一個(gè)用戶叫floatboat ,密碼為lan2010,那相關(guān)的操作是:
useradd floatboat -d /u01/Lanlp<回車>
這時(shí)候系統(tǒng)沒有任何顯示。接著:
passwd floatboat <回車>
系統(tǒng)顯示:
Changing password for user floatboat
New UNIX password:
你輸入:
lan2010<回車>
注意,由于linux并不采用類似windows的密碼回顯(顯示為*號)——為避免你輸入密碼時(shí)被人注意到有多少位——所以,輸入的這些字符你是看不見的。
系統(tǒng)顯示:
Retype new UNIX password:
你再重新輸入一次密碼,然后回車確認(rèn),這時(shí)系統(tǒng)會(huì)顯示:
passwd:all authentication tokens updated successfully
表示你修改密碼成功了。
到這里,新用戶的創(chuàng)建工作就算完成了。
下面,我們再補(bǔ)充一些有關(guān)增加新用戶的常識:
1、useradd所做的初始化操作已經(jīng)包括在/home目錄下為floatboat帳號建立一個(gè)名為floatboat的主目錄。如果你不想 使用這個(gè)缺省的目錄,而希望把他的主目錄放在/home/goal里(還放在/home下,只是一種良好的習(xí)慣,沒有其他什么特別的要求),可以使用 useradd的參數(shù)-d,命令如下:
useradd -d /home/goal floatboat
2、useradd的初始化操作還包括為用戶單獨(dú)建立一個(gè)與用戶名同名的組(floatboat組)。這叫用戶私有組的機(jī)制,與默認(rèn)組機(jī)制相對 應(yīng)。對用戶分組一是方便管理,二是可以明確權(quán)限。復(fù)雜的我們將在以后的深入內(nèi)容中探討。我們?nèi)绻胱尨擞脩艏尤胍粋€(gè)已有的組的話,可以使用-g參數(shù)。例如 我們想讓floatboat加入webusers組,那么可以使用以下命令:
useradd -g webusers floatboat
同樣的,我們還可以使用-G參數(shù)使他同時(shí)加入多個(gè)組,例如webusers和ftpusers:
useradd -G ftpusers,webusers floatboat
3、passwd命令為一個(gè)用戶設(shè)置密碼,但它實(shí)質(zhì)上是一個(gè)修改密碼的程序。只有超級用戶和用戶自己可以修改密碼,其它的普通用戶沒有給他修改 密碼的 權(quán)利。用戶密碼的組成要盡量的復(fù)雜,最好包括字母、數(shù)字和特殊符號,而且最好設(shè)成6位以上。太短passwd程序不允許,只是單純的字母或單純的數(shù) 字,passwd也會(huì)有意見。你都會(huì)看見passwd出現(xiàn)的提示的,不要害怕,仔細(xì)看看到底它是怎么說的:)
4、你在增加一個(gè)新用戶的時(shí)候,也可以設(shè)置用戶登錄的shell。缺省的,系統(tǒng)提供了/bin/bash。你如果非要指定的話,可以使用-s參數(shù)就可以了。例如
useradd -d /www -s /usr/bin/passwd floatboat
注意,這些參數(shù)是可以一塊使用的,如上例所示,它表示增加新用戶,并把其主目錄路徑設(shè)置在/www,登錄的shell為/usr/bin/passwd。關(guān)于shell的更詳細(xì)的說明,請參考下面的修改用戶的個(gè)人設(shè)置相關(guān)內(nèi)容。
5、刪除一個(gè)用戶可以使用userdel命令,直接帶用戶名做參數(shù)就可以了。
修改用戶的設(shè)置
對現(xiàn)有用戶的修改,比較常用的主要是修改密碼(使用passwd就好了),修改用戶的登錄shell,修改用戶所屬的默認(rèn)組,設(shè)置帳號有效期,修改用戶的說明信息等等,偶爾也會(huì)用到修改用戶主目錄。
修改用戶的登錄shell
使用chsh命令可以修改自己的shell,只有超級用戶才能用chsh username為其它用戶修改shell設(shè)置。注意,指定的shell必須是列入/etc/shells文件中的shell,否則該用戶將不能登陸。
一般,比較常見的shells文件包括下面這些shell:
/bin/bash2
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
而網(wǎng)管們還喜歡在里面加上/usr/bin/passwd,這是為了不然用戶通過控制臺(tái)或telnet登錄系統(tǒng),卻可以使用修改帳戶密碼(比如在FTP里 用)。以及/bin/false,也就是不讓這個(gè)用戶登錄的意思嘍^&^,連FTP也不能用。
你也可以使用usermod命令修改shell信息,如下所示:
usermod -s /bin/bash floatboat
其中/bin/bash和floatboat應(yīng)取相應(yīng)的shell路徑文件名及用戶名。
還有一種情況,就是你為用戶設(shè)置了一個(gè)空的shell(就是""),也就是說,這個(gè)用戶沒有shell。呵呵,絕對沒有在我還未曾見過,因?yàn)檫@種用戶登錄后,系統(tǒng)還是會(huì)給它一個(gè)shell用的。不信你試試:
usermod -s "" floatboat
這種用戶根據(jù)系統(tǒng)的不同,會(huì)有一個(gè)sh或bash進(jìn)行操作,我也沒有看出功能上和其它普通用戶登錄有什么不同。
修改用戶所屬的默認(rèn)組
這個(gè)功能也可以通過usermod命令來實(shí)現(xiàn),使用-g參數(shù),例如把floatboat的默認(rèn)組改為nobody,可以使用如下命令:
usermod -g nobody floatboat
nobody在類UNIX系統(tǒng)中一般都意味著沒有任何權(quán)限。
設(shè)置帳號有效期
如果使用了影子口令,則可以使用如下命令來修改一個(gè)帳號的有效期:
usermod -e MM/DD/YY username
例如把用戶floatboat的有效期定為2001年12月31日:
usermod -e 12/31/01 floatboat
如果把該用戶的有效期設(shè)為已經(jīng)過去的時(shí)間,就可以暫時(shí)禁止該用戶登錄系統(tǒng)。
修改用戶的說明信息
修改用戶的說明信息,最簡單的方法莫過于直接修改/etc/passwd文件,找到對應(yīng)的用戶記錄行,例如下列行:
floatboat:x:503:503::/home/floatboat:/bin/bash
你可以直接在第四個(gè)冒號和第五個(gè)冒號之間插入該用戶的說明就可以了。其實(shí),很多用戶設(shè)置都可以在這修改,比如該行最后一部分/bin/bash就是用戶登錄shell的設(shè)置。關(guān)于這個(gè)/etc/passwd文件,我們后面將進(jìn)一步的深入探討。
修改用戶主目錄
修改用戶的主目錄主要使用usermod命令的-d參數(shù),例如:
usermod -d /www floatboat
這一行將floatboat的主目錄改到/www。如果想將現(xiàn)有主目錄的主要內(nèi)容轉(zhuǎn)移到新的目錄,應(yīng)該使用-m開關(guān),如下所示:
usermod -d -m /www floatboat
文件目錄的權(quán)限
linux下,每一個(gè)文件、每一個(gè)目錄都有一個(gè)屬主,并針對用戶自己、用戶所在組、其它所有帳號(組)分別設(shè)定讀、寫、執(zhí)行三種權(quán)限。例如,我(假定是webusers組的floatboat帳戶的擁有者)使用如下命令建立一個(gè)新的文件
touch mytestfile
然后我們使用ls -l mytestfile這一命令來查看這個(gè)文件的權(quán)限狀態(tài)(關(guān)于ls命令,可以查閱本站的命令查詢),可以得到如下的屏幕輸出顯示:
-rw-rw-r-- 1 floatboat webusers 0 Feb 6 21:37 mytestfile
輸出由空格分為9個(gè)部分,我們比較關(guān)心第一、三、四個(gè)字段,分別表示文件權(quán)限屬性、文件所有者帳戶、文件所屬組。
◆使用chown命令修改文件的主人
當(dāng)你新建立一個(gè)文件的時(shí)候,文件的所有者當(dāng)然就是你了。這一事實(shí)只有超級用戶(比如說root)才可以通過chown命令改變(例如chown otheruser mytestfile,把mytestfile文件的屬主改為otheruser)。普通用戶不能把自己的文件“送”給別人,不然你把有特殊目的的程序給 了root怎么辦?:)
chown命令的用法比較簡單。這里我先假設(shè)你現(xiàn)在擁有超級用戶權(quán)限,那么你就可以使用如下命令將一個(gè)文件“送給”floatboat了:
chown floatboat /home/floatboat/thefileisrootcreate.txt(假定該文件是由root創(chuàng)建的)
修改一個(gè)目錄的所有者也是類似的:
chown floatboat /home/newboat
當(dāng)然,如果這個(gè)目錄還有子目錄及文件需要同時(shí)送給floatboat,chown也是支持-R參數(shù)的:
chown -R floatboat /home/newboat
如果你同時(shí)想修改文件/目錄所屬的組的話,你可以使用以下命令方便的達(dá)到目的:
chown -R floatboat.ftpusers /home/newboat
這樣,不但文件主人得到了修改,文件所屬的組也變成了ftpusers
◆修改文件的組屬性
文件所屬組你倒是可以改變,前提是:
1、你的超級用戶。
2、你同時(shí)屬于兩個(gè)或兩個(gè)以上的組。
兩個(gè)條件你至少具備一個(gè),你才能夠把文件所屬舊組變?yōu)樾陆M。使用如下的命令將當(dāng)前目錄下所有html文件所屬的組改為httpd:
chgrp httpd *.html
和chown命令一樣,chgrp也可以使用-R參數(shù)對一個(gè)目錄內(nèi)的所有文件和子目錄進(jìn)行遞歸的修改組屬性。
<提示>:你可以使用不帶參數(shù)的groups命令查看自己屬于哪個(gè)組。
文件權(quán)限的設(shè)定是我們這一小節(jié)討論的核心,我們主要介紹chmod命令的兩種用法。
◆使用訪問字符串設(shè)置文件目錄權(quán)限 正如前面所說的,每一個(gè)文件、目錄都針對用戶自己、用戶所在組、其它所有帳號(組)分別有讀、寫、執(zhí)行三種權(quán)限及其組合。當(dāng)一個(gè)普通用戶新建一 個(gè)文件 的時(shí)候,它默認(rèn)的訪問權(quán)限顯示就如我們剛才所舉例子的第一個(gè)字段所示。總共十位字符“-rw-rw-r--”,第一位是目錄區(qū)分標(biāo)志,如果是d的話,表示 這是一個(gè)目錄。第二到四位分別表示文件所有者的讀(r:read)、寫(w:write)、執(zhí)行(x:execute)屬性,第五到七位是文件所屬組的 讀、寫、執(zhí)行權(quán)限,第八到第十位則是其它用戶的讀、寫、執(zhí)行權(quán)限。如果對應(yīng)的位是相應(yīng)的字母,就是有這相應(yīng)權(quán)限,否則為“-”,表示沒有獲得這個(gè)許可。象 剛才例子中的文件就是自己可讀寫,本組可讀寫,其它用戶可讀,所有的用戶(包括自己)都不能執(zhí)行它。
我們的用u、g、o分別來指代用戶(user)、組(group)、其它帳戶(other),就可以方便的設(shè)置文件和目錄的權(quán)限了。當(dāng)然,我們也可以用a來表示所有的這三項(xiàng)。
例如,我們要對所有perl的腳本文件設(shè)定權(quán)限,對所有用戶都可以讀和執(zhí)行,文件所有者還允許寫許可,那么我們可以使用如下命令:
chmod a+rx,u+w *.pl
注意:如果要使用多個(gè)訪問字符串,它們之間要用逗號隔開,各個(gè)許可字符串之間不允許有空格。正如上例所示。
如果要修改目錄中所有文件和子目錄的權(quán)限屬性,可以使用chmod提供的-R參數(shù)來遞歸修改。例如,下列命令將/www/site1目錄及其下面的子目錄的權(quán)限屬性設(shè)定為所有者和組可讀、寫、執(zhí)行,其它用戶不可訪問:
chmod -R a+rwx,o-rwd /www/site1
注意,不要輕易使用-R選項(xiàng),這可能會(huì)帶來安全隱患。
使用字符串方便了理解,單輸入那么多字母還是有點(diǎn)累,如果你對8進(jìn)制有些概念的話,可以使用下面介紹的方法來做權(quán)限設(shè)置。
◆使用八進(jìn)制數(shù)設(shè)置文件目錄權(quán)限
我們知道,在ls -l的輸出中,文件權(quán)限表示為“-rw-rw-r--”,前一位只和是否為目錄有關(guān),其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和 “r--”,“-”代表無效“0”,其它字符代表有效“1”,那么這個(gè)文件的權(quán)限就是“110”、“110”、“100”,把這個(gè)2進(jìn)制串轉(zhuǎn)換成對應(yīng)的8 進(jìn)制數(shù)就是6、6、4,也就是說該文件的權(quán)限為664(三位八進(jìn)制數(shù))。我們也可以使用類似這種三位八進(jìn)制數(shù)來設(shè)定文件授權(quán),如上邊兩個(gè)例子,就也可以寫 為:
chmod 755 *.pl
chmod -R 770 /www/site1
是不是很簡潔?關(guān)鍵在于你能根據(jù)你需要設(shè)定的權(quán)限正確的選擇八進(jìn)制數(shù)(利用八進(jìn)制數(shù)的二進(jìn)制表示可以非常輕易的做到這一點(diǎn))。
◆讀、寫、執(zhí)行的權(quán)限說明
1、所謂寫的權(quán)限,也就是對文件修改和刪除的權(quán)限。如果目錄的寫權(quán)限也對你開放了,則可以創(chuàng)建、刪除或修改該目錄下的任何文件或自目錄——即使該文件和子目錄并不屬于你。
2、對目錄有只讀許可的用戶,不能用cd命令進(jìn)入該目錄;還必須同時(shí)有執(zhí)行許可才可以進(jìn)入該目錄。
3、必須同時(shí)擁有讀和執(zhí)行權(quán)限才可以使用ls這樣的程序列出目錄內(nèi)容清單。
4、只對目錄有執(zhí)行權(quán)限的用戶,想訪問該目錄下的文件有讀權(quán)限的文件,必須知道該文件名才可以訪問。
兩個(gè)重要文件:passwd與group
在linux的安全機(jī)制里,/etc/passwd與/etc/group這兩個(gè)文件占著非常重要的地位。它們控制著linux的用戶和組一些重要設(shè)置。
◆/etc/passwd文件說明
下面是一個(gè)RHlinux里普通的passwd文件的例子:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
……
operator:x:11:0perator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
nobody:x:99:99:Nobody:/:
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
named:x:25:25:Named:/var/named:/bin/false
postgres:x:26:26ostgreSQL Server:/var/lib/pgsql:/bin/bash
lanf:x:500:500::/home/hujm:/bin/bash
mysql:x:101:101:MySQL server:/var/lib/mysql:/bin/bash
imnotroot:x:0:0::/home/imnotroot:/bin/bash
在這個(gè)文件里只有一個(gè)普通帳號lanf。其它都是系統(tǒng)或系統(tǒng)服務(wù)的進(jìn)程需要的帳號,包括我們非常熟悉的root這個(gè)超級用戶。在passwd的文件里,每一行被冒號(":")分成7個(gè)部分,分別是:
[用戶名]:[密碼]:[UID]:[GID]:[身份描述]:[主目錄]:[登錄shell]
其中:
⒈[用戶名]是passwd文件里各記錄行唯一的有"唯一性"要求的域。也就是說每一行的第一個(gè)區(qū)域的內(nèi)容都不能相同,其它區(qū)域就無所謂了。
⒉[密碼]區(qū)域在以前,保存著一個(gè)經(jīng)過不可逆的哈希算法進(jìn)行DES加密的13位字符,但不包括單引號和冒號。這13位字符中,前兩位是密鑰,在 加密的 時(shí)候隨機(jī)生成的。由于這個(gè)字符串不包括單引號,所以以前有一種不修改密碼又禁止用戶登錄的方式就是在密碼前面加一個(gè)單引號。值得注意的是,現(xiàn)在由于使用了 shadow口令,在密碼區(qū)域只有一個(gè)x字符。
⒊[UID]雖然是系統(tǒng)用來標(biāo)志文件歸屬,確定各種權(quán)限的標(biāo)志,但這個(gè)區(qū)域的內(nèi)容并不要求唯一的。比較常見而又與安全問題相關(guān)的一個(gè)例子是有多 個(gè) UID和GID均為0的用戶帳號。注意到在該文件最后一行還有一個(gè)UID和GID為0的用戶imnotroot,雖然它聲稱自己不是root,但是它卻有 和root完全相同的權(quán)限,因?yàn)橄到y(tǒng)并非根據(jù)[用戶名],而是根據(jù)UID和GID來分用戶的權(quán)力的。所以,這種情況無疑為系統(tǒng)埋下了安全的zhadan。 但是,當(dāng) imnorroot做鎖定屏幕等操作的時(shí)候,如果它的密碼和root的不一樣,它將無法解鎖,因?yàn)橄到y(tǒng)只是查到第一個(gè)UID為0的用戶(自然是root) 后,就不在往下查找了——它當(dāng)UID也是唯一的。
⒋[GID]用戶默認(rèn)的組ID,這個(gè)ID可以在文件/etc/group里查到對應(yīng)的組名。
⒌[身份描述]:就是用戶的身份說明,默認(rèn)的是無任何說明,可人工添加。
⒍[主目錄]:用戶的主目錄,可以使用前面介紹的命令修改。
⒎[登錄shell]:用戶登錄時(shí)系統(tǒng)提供的shell,請參考前面的有關(guān)內(nèi)容。
<注意>:[UID]和[GID]小于500的一般都是系統(tǒng)自己保留,不做普通用戶和組的標(biāo)識的,所以新增加的用戶和組一般都是UID和GID大于500的。
◆/etc/group文件說明
下面是RH的一個(gè)group文件的例子:
root:x:0:root,hujm,hjm
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
……
hujm:x:503:root,mynoshell,hjm
mysql:x:101:
mynoshell:x:505:
ftpusers:x:506:
它總共分四個(gè)部分:
[組名]:[密碼域]:[GID]:[組員列表]
意思非常明顯,需要說明一下的是,由于組一般都不用密碼保護(hù),所以雖然看起來密碼域有個(gè)X字符,其實(shí)那只表示使用了SHADOW(對應(yīng)文件為 gshadow)。組員列表用逗號分隔各個(gè)帳號。另外,一個(gè)組的組員如果默認(rèn)登錄組就是它的話,那么在組員列表里將不顯示這個(gè)組員的帳號,例如用如下命令 增加的用戶:
useradd -g ftpusers floatboat
在/etc/group文件里ftpusers的組員列表將不顯示這個(gè)組員(真是失敗),而只是在passwd文件中的GID被設(shè)置為506。而使用如下命令:
usermod -G ftpusers,mysql,webusers floatboat
就可以看見相關(guān)的組后邊加上了floatboat帳號。當(dāng)然,你可以直接用vi來直接編輯這個(gè)文件。
group文件和passwd文件是通過GID聯(lián)系在一起的,這有點(diǎn)象關(guān)系數(shù)據(jù)庫。根據(jù)passwd文件中一個(gè)帳戶的GID,可以在group 文件中 找到對應(yīng)的組名。如果采用了用戶私有組機(jī)制的話,那么一般新增一個(gè)帳號,就會(huì)有對應(yīng)的一個(gè)與帳號同名的組增加到group文件中。雖然這時(shí)passwd文 件中具有唯一性的[用戶名]字段和group文件中具有唯一性的[組名]字段一樣,并不代表著它們是通過這兩個(gè)字段形成一一對應(yīng)的關(guān)系的。千萬別忘記,系 統(tǒng)對數(shù)字(UID,GID)更加敏感.