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