使用者管理----使用者資訊與密碼的設定檔
使用者管理要學的內容很多,當然了,不會簡單的放兩個建立使用者的命令,這樣的文章太多了。我們來看兩個使用者管理中非常重要的設定檔吧! 我們來看看使用者的相關設定檔都存放在什麼地方。
使用者資訊檔: /etc/passwd
密碼檔案: /etc/shadow
使用者組檔案: /etc/group
使用者組密碼檔案: /etc/gshadow
使用者設定檔:
/etc/login.defs
/etc/default/useradd
新使用者資訊檔:/etc/skel
登入資訊: /etc/motd
========================
使用者資訊檔詳解============================================我們先看一下使用者資訊檔裡都放的什麼 [root@localhost ~]#
vi /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinnews:x:9:13:news:/etc/news:/sbin/nologin........每一行內容存放一個使用者的資訊,每個使用者資訊有7部分組成
root:x:0:0:root:/root:/bin/bashroot 使用者名稱 使用者登入系統時使用的使用者名稱x 密碼 密碼位2 UID 使用者標識號2 GID 預設組標識root 注釋性描述 例如存放使用者全名等資訊/root 宿主目錄 使用者登入系統後的預設目錄/bin/bash 命令直譯器 使用者使用的Shell ,預設為bash
UID ? 關於上面的UID這裡細說一下,其實決定使用者是什麼許可權,是由UID號決定的。 linux使用者分為三種:
超級使用者:(root UID=0)
普通使用者: (UID 500~60000)
偽使用者: (UID 1~499) 所以,我們可以修改使用者的UID號來修改使用者的類型,如果把root的UID號為500,那麼root就變成了普通使用者,如果把fnngj使用者的UID改為0,那麼它就擁有了root使用者的超能力。[root@localhost ~]# vi /etc/passwd 進入之後修改,完了儲存退出就OK了。
偽使用者? 說到使用者種類,又牽扯到一個偽使用者,那麼偽使用者是幹什麼用的?1.偽使用者與系統和程式服務相關 bin、daemon、shutdown、halt等,任何Linux系統預設都有這些偽使用者。 mail、news、games、apache、ftp、mysql及sshd等,與linux系統的進程相關。2. 偽使用者通常不需要或無法登入系統3. 可以沒有宿主目錄 ==========================
密碼檔案詳解======================================== 使用者密碼檔案,使用者資訊檔中留有密碼位,為什麼沒密碼了呢? 其實,最早的linux這個位置真的是放密碼的,因為不全安,所以,就將密碼單獨存放了,現在只是用x表示這裡有存放密碼的位置。 為什麼要把密碼放在/etc/shadow中 [root@bogon /]#
ls -l /etc/shadow -r-------- 1 root root 1021 2月 27 21:31 /etc/shadow 我可以看到這個檔案只有管理員root有許可權查看修改 現在我們來看密碼檔案都放了什嗎?[root@bogon /]#
more /etc/shadowroot:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7:::bin:*:15391:0:99999:7:::daemon:*:15391:0:99999:7:::adm:*:15391:0:99999:7:::lp:*:15391:0:99999:7:::sync:*:15391:0:99999:7:::shutdown:*:15391:0:99999:7:::halt:*:15391:0:99999:7:::mail:*:15391:0:99999:7:::news:*:15391:0:99999:7:::uucp:*:15391:0:99999:7:::operator:*:15391:0:99999:7:::games:*:15391:0:99999:7:::.......................... 我們還以第一行為例進行分解。
root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7:::root 使用者名稱 使用者登入系統時使用的使用者名稱$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs. 密碼 加密密碼 MD515391 最後一次修改時間 linux這裡以1970年1月1日作為1,1971年1月1日就是366,依次類推到我修改密碼的日期表示為15391了。0 最小時間間隔 這個欄位代表要經過多久才可以更改密碼。如果是“0”表密碼可以隨時更改。99999 最大時間間隔 於害怕密碼被人盜取而危害到整個系統的安全,所以安排了這個欄位,你必須在這個時間內重新修改密碼,否則這個帳號將暫時失效。上面的99999,表示密碼不需要重新輸入,最好設定一段時間修改密碼。確保系統安全7 密碼變更期期限快到前的警告期:當帳號的密碼失效期限快到時,系統依據這個欄位的設定發出警告,提醒使用者“再過n天您的密碼將到期,請儘快重新設定密碼。預設的是七天。帳號失效期: 如果使用者過了警告期沒有重新輸入密碼,使得密碼失效,而該使用者在這個欄位限定的時間內又沒有向管理員反映,讓帳號重新啟用,那麼這個帳號將暫時失效。帳號取消日期: 這個日期跟第三個欄位一樣,都是使用1970年以來的日期設定方法。這個欄位表示:這個帳號在此欄位規定的日期之後將無法再使用。這個欄位通常用於收費服務系統中,可以規定一個日期讓該帳號不能再使用。保留: 最後一個欄位是保留的,看以後有沒有新功能加入。
疑問:
既然shadow檔案儲存了密碼,而passwd檔案中沒有儲存密碼,為什麼不把passwd檔案中的密碼位取消掉呢? 其實,密碼在存放之前,是先放在passwd檔案中的,然後再轉換到shadow檔案中的。下面來驗證下[root@bogon /]#
grep root /etc/passwd /etc/shadow/etc/passwd:root:x:0:0:root:/root:/bin/bash/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin/etc/shadow:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7::: [root@bogon /]#
pwunconv 將密碼回寫[root@bogon /]#
grep root /etc/passwd /etc/shadow/etc/passwd:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:0:0:root:/root:/bin/bash/etc/passwd:operator:*:11:0:operator:/root:/sbin/nologingrep: /etc/shadow: 沒有那個檔案或目錄 [root@bogon /]#
pwconv 轉換到shdow檔案中,只不過平時這個動作平時由linux自動完成。[root@bogon /]#
grep root /etc/passwd /etc/shadow/etc/passwd:root:x:0:0:root:/root:/bin/bash/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin/etc/shadow:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15456:0:99999:7::: linux對使用者登入的驗證就是通passwod檔案來驗證使用者名稱是否存在,然後通過shadow檔案來驗證使用者名稱對應的密碼是否正確,那麼理解了底層東西很有必要,我們可以不需要去學習建立使用者命令,真接通過vim命令在兩個檔案中添加使用者。這就是linux的魅力噢。不像windows一樣,我們不但知其然,還知其所以然。
“會靈魂附體的”命令許可權 繼續使用者管理的學習,上一小節我們知道,只有root可以修改密碼檔案,那麼普通使用者為什麼可以修改自己的密碼,這是因為我們所操作有命令“靈魂附體”般的擁有了root許可權。這個小節自我感覺不教難理解,而我的內容也是順著思路寫,按著順序看,最好去實驗一下。^_^ 小節重點:===============================setUID=4 所有人setGID=2 所屬組粘著位=1 其它人===============================
建立使用者:[root@localhost ~]#
useradd lisi 添加建立了一使用者lisi[root@localhost ~]#
passwd lisi 設定lisi的密碼Changing password for user wangwu.New UNIX password: 這裡輸入密碼BAD PASSWORD: it is based on a dictionary wordRetype new UNIX password: 再次確認密碼passwd: all authentication tokens updated successfully. 上面這種是不被推薦的一種建立使用者的方式,任何的使用者都應該屬於某個組。建立這樣的“散人”實際中沒有太大意義。 [root@localhost ~]#
grep lisi /etc/passwdlisi:x:502:502::/home/lisi:/bin/bash 從上面資訊中看到,系統預設為我們建立了一個lisi的組,組ID為504
使用者切換:[root@localhost ~]# su -- lisi root切換到lisi使用者[lisi@localhost root]$ su -- root lisi使用者切換到rootPassword: 普通使用者切換root使用者是要密碼的喲!親!普通使用者切換到其它普通使用者也是要密碼的喲!
使用者修改密碼:[lisi@localhost root]$
passwdChanging password for user lisi.Changing password for wangwu(current) UNIX password: 先輸入原始密碼New UNIX password: 輸入新有密碼Retype new UNIX password: 再次確認新密碼passwd: all authentication tokens updated successfully. 上面是鋪墊,下面才是重點。。
思考:在上一節中,我們提到,存放使用者密碼的檔案shadow只有root使用者才可操作。那麼普通使用者為什麼可以修改密碼呢? =========================
setUID=============================== 這裡引出一個東東----setUID
定義:當一個可執行程式具有setUID許可權,使用者執行這個程式時,將以這個程式所有者的身份執行。 哈哈!小狼不能和小羊談朋友,小羊可以與小羊談朋友,於是,小狼披上了羊的外衣,然後以羊的身份和小羊一起幸福的生活。吼吼。 其實,使用者執行的這個程式就是命令,passwd命令授權了SetUID許可權。所以普通使用者也可以通過passwd命令改密碼。 下面來做個實驗!!很有意思的噢,要不要也來試試噢? 切換到lisi使用者下面。[lisi@localhost ~]$
touch file01 touch建立一個file01的檔案[lisi@localhost ~]$
ls -l file01-rw-rw-r-- 1 lisi lisi 0 5月 5 22:14 file01 我們看到,這個時候用touch命令建立的檔案,所有者是lisi,所屬於組是lisi組 切換到root下面[root@localhost ~]# ls -l /bin/touch -rwxr-xr-x 1 root root 38056 2009-07-03 /bin/touch細心朋友會發現許可權前面還多一位。沒錯!setUID就屬於這一位。 setUID=4 現在我們給touch命令授予個setUID授予setUID許可權有兩種方式。[root@localhost ~]#
chmod u+s /bin/touch [root@localhost ~]#
chmod 4755 /bin/touch關於使用者權限不理解的看我之前的相關文章。 再次切換到lisi目錄下[lisi@localhost ~]$
touch file02 建立檔案file02[lisi@localhost ~]$
ls -l file02-rw-rw-r-- 1 root lisi 0 5月 5 22:35 file02 這次我們發現,同樣的一個命令touch ,這次建立出來的檔案所有者變成的root 去掉setUID許可權的兩種方式:[root@localhost ~]# chmod u-s /bin/touch [root@localhost ~]# chmod 755 /bin/touch ========================
setGID================================= setGID的用法與setUID的用法一起,它是添加組許可權的。setGID=2添加setGID的方式如下:[root@localhost ~]#
chmod g+s /bin/touch [root@localhost ~]#
chmod 2755 /bin/touch 一般的命令我們不能隨便授予setUID許可權假如給vi命令授予setUID命令,無疑於給linux留了個後面,那樣我們就可以通過vi命令修改使用者與密碼資訊檔了。那麼到底有哪些命令設定有setUID呢?我們可以尋找一下。 [root@localhost ~]#
find / -perm -4000 -o -perm -2000在目前的目錄下(/)尋找具有setUID(-perm -4000)或者(-o)具有 setGID(-perm -2000)許可權的命令 =======================
粘著位================================== 粘著位有什麼作用,我們來看一個例子,這樣更容易理解。。 [root@localhost test]#
mkdir abc 建立一個目錄abc[root@localhost test]#
touch abc/newfile 在這個目錄下建立一個檔案newfile[root@localhost test]#
chmod 777 abc 對這個目錄設定許可權為所有人都有所有許可權[root@localhost test]#
ls -ld abcdrwxrwxrwx 2 root root 4096 5月 5 23:44 abc [root@localhost test]#
ls -l abc/newfile newfile檔案的許可權是其它人沒有刪改的許可權。-rw-r--r-- 1 root root 0 5月 5 23:44 abc/newfile 切換到lisi使用者[lisi@localhost test]$
rm -rf abc 具然把abc目錄下面的newfile幹掉了,lisi使用者雖然有對abc目錄的所有許可權,但對newfile檔案沒有刪除許可權呀。這就是linux對檔案的許可權規定。 假如張三和李四對一個檔案夾都有所有權,這個檔案夾下放的有張三的檔案,也有李四的檔案,如果張三看李四的檔案不爽,那麼他就直接幹掉了,李四上去一看哭了。為什麼辦法讓李四不哭呢?這裡就用到粘著位了。
粘著位粘著位=1t,如果一個許可權為777目錄有粘著位,每個使用者都可以在這個目錄下建立檔案,但只能刪除自己是所有者的檔案。
粘著位的授權方式:[root@localhost test]# chmod o+t abc [root@localhost test]# chmod 1755 abc 我們再來刪除試試:[lisi@localhost abc]$ rm newfilerm:是否刪除有防寫保護的一般空檔案‘newfile’? yrm: 無法刪除‘newfile’: 許可權不夠 自己建立的檔案就可以刪除噢![root@localhost test]# touch newfile2[root@localhost test]# rm newfile2 rm:是否刪除一般空檔案‘newfile2’? y