用戶管理----用戶信息與密碼的配置文件
用戶管理要學的內容很多,當然了,不會簡單的放兩個創建用戶的命令,這樣的文章太多了。我們來看兩個用戶管理中非常重要的配置文件吧!
我們來看看用戶的相關配置文件都存放在什么地方。
用戶信息文件: /etc/passwd
密碼文件: /etc/shadow
用戶組文件: /etc/group
用戶組密碼文件: /etc/gshadow
用戶配置文件:
/etc/login.defs
/etc/default/useradd
新用戶信息文件:/etc/skel
登錄信息: /etc/motd
========================用戶信息文件詳解============================================
我們先看一下用戶信息文件里都放的什么
[root@localhost ~]# vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:/sbin/nologin
........
每一行內容存放一個用戶的信息,每個用戶信息有7部分組成
root:x:0:0:root:/root:/bin/bash
root 用戶名 用戶登錄系統時使用的用戶名
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/shadow
root:$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. 密碼 加密密碼 MD5
15391 最后一次修改時間 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/nologin
grep: /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 word
Retype new UNIX password: 再次確認密碼
passwd: all authentication tokens updated successfully.
上面這種是不被推薦的一種創建用戶的方式,任何的用戶都應該屬於某個組。創建這樣的“散人”實際中沒有太大意義。
[root@localhost ~]# grep lisi /etc/passwd
lisi:x:502:502::/home/lisi:/bin/bash
從上面信息中看到,系統默認為我們創建了一個lisi的組,組ID為504
用戶切換:
[root@localhost ~]# su -- lisi root切換到lisi用戶
[lisi@localhost root]$ su -- root lisi用戶切換到root
Password: 普通用戶切換root用戶是要密碼的喲!親!
普通用戶切換到其它普通用戶也是要密碼的喲!
用戶修改密碼:
[lisi@localhost root]$ passwd
Changing 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 abc
drwxrwxrwx 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對文件的權限規定。
假如張三和李四對一個文件夾都有所有權,這個文件夾下放的有張三的文件,也有李四的文件,如果張三看李四的文件不爽,那么他就直接干掉了,李四上去一看哭了。為什么辦法讓李四不哭呢?這里就用到粘着位了。
粘着位
粘着位=1
t,如果一個權限為777目錄有粘着位,每個用戶都可以在這個目錄下創
建文件,但只能刪除自己是所有者的文件。
粘着位的授權方式:
[root@localhost test]# chmod o+t abc
[root@localhost test]# chmod 1755 abc
我們再來刪除試試:
[lisi@localhost abc]$ rm newfile
rm:是否刪除有寫保護的一般空文件‘newfile’? y
rm: 無法刪除‘newfile’: 權限不夠
自己創建的文件就可以刪除噢!
[root@localhost test]# touch newfile2
[root@localhost test]# rm newfile2
rm:是否刪除一般空文件‘newfile2’? y