linux那點事兒(四)----用戶管理詳解


 

用戶管理----用戶信息與密碼的配置文件                                                                                                      

      

     用戶管理要學的內容很多,當然了,不會簡單的放兩個創建用戶的命令,這樣的文章太多了。我們來看兩個用戶管理中非常重要的配置文件吧!
     我們來看看用戶的相關配置文件都存放在什么地方。
用戶信息文件:      /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        用戶名         用戶登錄系統時使用的用戶名
            密碼            密碼位
            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這里以197011日作為1197111日就是366,依次類推到我修改密碼的日期表示為15391了。
0         最小時間間隔           這個字段代表要經過多久才可以更改密碼。如果是“0”表密碼可以隨時更改。
99999         最大時間間隔           於害怕密碼被人盜取而危害到整個系統的安全,所以安排了這個字段,你必須在這個時間內重新修改密碼,否則這個帳號將暫時失效。上面的99999,表示密碼不需要重新輸入,最好設定一段時間修改密碼。確保系統安全
        密碼變更期期限快到前的警告期:當帳號的密碼失效期限快到時,系統依據這個字段的設定發出警告,提醒用戶“再過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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM