一.用戶與組的概念
1.理解linux多用戶,多任務的特性
Linux是一個真實的、完整的多用戶多任務操作系統,多用戶多任務就是可以在系統上建立多個用戶,而多個用戶可以在同一時間內登錄同一個系統執行各自不同的任務,而互不影響,例如某台linux服務器上有4個用戶,分別是root、www、ftp和mysql,在同一時間內,root用戶可能在查看系統日志,管理維護系統,www用戶可能在修改自己的網頁程序,ftp用戶可能在上傳軟件到服務器,mysql用戶可能在執行自己的SQL查詢,每個用戶互不干擾,有條不紊的進行著自己的工作,而每個用戶之間不能越權訪問,比如www用戶不能執行mysql用戶的SQL查詢操作,ftp用戶也不能修改www用戶的網頁程序,因此可知,不同用戶具有不同的權限,每個用戶是在權限允許的范圍內完成不同的任務,linux正是通過這種權限的劃分與管理,實現了多用戶多任務的運行機制。
2.linux下用戶的角色分類
在linux下用戶是根據角色定義的,具體分為三種角色:
超級用戶:擁有對系統的最高管理權限,默認是root用戶。
普通用戶:只能對自己目錄下的文件進行訪問和修改,具有登錄系統的權限,例如上面提到的www用戶、ftp用戶等。
虛擬用戶:也叫“偽”用戶,這類用戶最大的特點是不能登錄系統,它們的存在主要是方便系統管理,滿足相應的系統進程對文件屬主的要求。例如系統默認的bin、adm、nobody用戶等,一般運行的web服務,默認就是使用的nobody用戶,但是nobody用戶是不能登錄系統的。
3.用戶和組的概念
我們知道,Linux是一個多用戶多任務的分時操作系統,如果要使用系統資源,就必須向系統管理員申請一個賬戶,然後通過這個賬戶進入系統。這個賬戶和用戶是一個概念,通過建立不同屬性的用戶,一方面,可以合理的利用和控制系統資源,另一方面也可以幫助用戶組織文件,提供對用戶文件的安全性保護。
每個用戶都用一個唯一的用戶名和用戶口令,在登錄系統時,只有正確輸入了用戶名和密碼,才能進入系統和自己的主目錄。
用戶組是具有相同特征用戶的邏輯集合,有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權,如果有10個用戶的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有查看、修改此文件的權限,然後將所有需要訪問此文件的用戶放入這個組中,那麼所有用戶就具有了和組一樣的權限。這就是用戶組,將用戶分組是Linux 系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了管理工作。
4.用戶和組的關系:
用戶和用戶組的對應關系有:一對一、一對多、多對一和多對多;下圖展示了這種關系:
一對一:即一個用戶可以存在一個組中,也可以是組中的唯一成員。
一對多:即一個用戶可以存在多個用戶組中。那麼此用戶具有多個組的共同權限。
多對一:多個用戶可以存在一個組中,這些用戶具有和組相同的權限。
多對多:多個用戶可以存在多個組中。其實就是上面三個對應關系的擴展。
二 用戶配置文件概述
1.用戶和組相關的配置文件
(1)/etc/passwd文件
系統用戶配置文件,是用戶管理中最重要的一個文件。這個文件記錄了Linux系統中每個用戶的一些基本屬性,並且對所有用戶可讀。/etc/passwd中每一行記錄對應一個用戶,每行記錄又被冒號分割,其格式和具體含義如下:
用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:默認shell
下面是/etc/passwd文件的部分輸出:
[root@localhost ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
下面是每個字段的詳細含義:
用戶名:是代表用戶賬號的字符串。
口令:存放著加密後的用戶口令,雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow技術,把真正加密後的用戶口令存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如用“x”或者“*”來表示。
用戶標識號:就是用戶的UID,每個用戶都有一個UID,並且是唯一的,通常UID號的取值范圍是0~65535,0是超級用戶root的標識號,1~99由系統保留,作為管理賬號,普通用戶的標識號從100開始。而在Linux系統中,普通用戶UID默認從500開始。UID是linux下確認用戶權限的標志,用戶的角色和權限都是通過UID來實現的,因此多個用戶公用一個UID是非常危險的,會造成系統權限和管理的混亂,例如將普通用戶的UID設置為0後,這個普通用戶就具有了root用戶的權限,這是極度危險的操作。因此要盡量保持用戶UID的唯一性。
組標識號:就是組的GID,與用戶的UID類似,這個字段記錄了用戶所屬的用戶組。它對應著/etc/group文件中的一條記錄。
注釋性描述:字段是對用戶的描述信息,比如用戶的住址、電話、姓名等等。
主目錄:也就是用戶登錄到系統之後默認所處的目錄,也可以叫做用戶的主目錄、家目錄、根目錄等等。
默認shell:就是用戶登錄系統後默認使用的命令解釋器,shell是用戶和linux內核之間的接口,用戶所作的任何操作,都是通過shell傳遞給系統內核的。linux下常用的shell有sh、bash、csh等,管理員可以根據用戶的習慣,為每個用戶設置不同的shell。
(2)/etc/shadow文件
用戶影子文件,由於/etc/passwd文件是所有用戶都可讀的,這樣就導致了用戶的密碼容易出現洩露,因此,linux將用戶的密碼信息從/etc/passwd中分離出來,單獨的放到了一個文件中,這個文件就是/etc/shadow,該文件只有root用戶擁有讀權限,從而保證了用戶密碼的安全性。
下面介紹下/etc/shadow文件內容的格式:
用戶名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留字段
例如:下面是/etc/shadow文件的部分輸出:
[root@localhost ~]# more /etc/shadow
root:$1$Uvip.QJI$GteCsLrSSfpnMs.VCOvbs/:14169:0:99999:7:::
bin:*:13934:0:99999:7:::
daemon:*:13934:0:99999:7:::
adm:*:13934:0:99999:7:::
下面是每個字段的詳細含義:
用戶名:與/etc/passwd文件中的用戶名有相同的含義。
加密口令:存放的是加密後的用戶口令字串,如果此字段是“*”、“!”、“x”等字符,則對應的用戶不能登錄系統。
最後一次修改時間:表示從某個時間起,到用戶最近一次修改口令的間隔天數。可以通過passwd 來修改用戶的密碼,然後查看/etc/shadow中此字段的變化。
最小時間間隔:表示兩次修改密碼之間的最小時間間隔。
最大時間間隔:表示兩次修改密碼之間的最大時間間隔,這個設置能增強管理員管理用戶的時效性。
警告時間:表示從系統開始警告用戶到密碼正式失效之間的天數。
不活動時間:此字段表示用戶口令作廢多少天後,系統會禁用此用戶,也就是說系統不再讓此用戶登錄,也不會提示用戶過期,是完全禁用。
失效時間:表示該用戶的帳號生存期,超過這個設定時間,帳號失效,用戶就無法登錄系統了。如果這個字段的值為空,帳號永久可用。
保留字段:linux的保留字段,目前為空,以備linux日後發展之用。
(3)/etc/group文件
用戶組配置文件,用戶組的所有信息都存放在此文件中。
下面介紹下/etc/group文件內容的格式:
組名:口令:組標識號:組內用戶列表
例如:下面是/etc/group的部分輸出:
[root@localhost ~]# more /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
下面是/etc/group每個字段的含義:
組名:是用戶組的名稱,由字母或數字構成。與/etc/passwd中的用戶名一樣,組名不能重復。
口令:存放的是用戶組加密後的口令字串,密碼默認設置在/etc/gshadow文件中,而在這裡用“x”代替,linux系統下默認的用戶組都沒有口令,可以通過gpasswd來給用戶組添加密碼。
組標識號:就是GID,與/etc/passwd中的組標識號對應。
組內用戶列表: 顯示屬於這個組的所有用戶,多個用戶之間用逗號分隔。
2./etc/login.defs文件
用來定義創建一個用戶時的默認設置,比如指定用戶的UID和GID的范圍,用戶的過期時間、是否需要創建用戶主目錄等等。
下面是rhel5下的/etc/login.defs文件,簡單介紹如下:
MAIL_DIR /var/spool/mail
當創建用戶時,同時在目錄/var/spool/mail中創建一個用戶mail文件
PASS_MAX_DAYS 99999
#指定密碼保持有效的最大天數
PASS_MIN_DAYS 0
表示自從上次密碼修改以來多少天後用戶才被允許修改口令
PASS_MIN_LEN 5
指定密碼的最小長度
PASS_WARN_AGE 7
表示在口令到期前多少天系統開始通知用戶口令即將到期
UID_MIN 500
指定最小UID為500 ,也就是說添加用戶時,用戶的UID 從500開始
UID_MAX 60000
指定最大UID為60000
GID_MIN 500
指定最小GID為500,也就是添加組時,組的GID從500開始。
GID_MAX 60000
指定最大GID為60000
CREATE_HOME yes
此項是指定是否創建用戶主目錄,yes為創建,no為不創建。
3./etc/default/useradd文件
當我們通過useradd命令不加任何參數創建一個用戶後,用戶默認的主目錄一般位於/home下,默認使用的shell是/bin/bash,這是為什麼呢,看看/etc/default/useradd這個文件的內容就完全明白了。
[root@localhost ~]# more /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home #此項表示將新建用戶的主目錄放在/home目錄下
INACTIVE=-1 #此項表示是否啟用帳號過期禁用,-1表示不啟用
EXPIRE= #此項表示帳號過期日期,不設置表示不啟用
SHELL=/bin/bash #此項指定了新建用戶的默認shell類型
SKEL=/etc/skel #此項用來指定用戶主目錄默認文件的來源,也就是說新建用戶主目錄下的文件都是從這個目錄下復制而來的
CREATE_MAIL_SPOOL=no
/etc/default/useradd文件定義了新建用戶的一些默認屬性,比如用戶的主目錄、使用的shell等等,通過更改此文件,可以改變創建新用戶的默認屬性值。
改變此文件有兩種方法,一種是通過文本編輯器方式更改,另一種是通過useradd命令來更改。這裡介紹一下第二種方法:
Useradd命令加“-D”參數後,就可以修改配置文件/etc/default/useradd,使用的一般格式為:
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
每個選項詳細含義如下:
-g default_group
表示新建用戶的起始組名或者GID,組名必須為已經存在的用戶組名稱,GID也必須是已經存在的用戶組GID。與/etc/default/useradd文件中“GROUP”行對應。
-b default_home
指定新建用戶主目錄的上級目錄,也就是所有新建用戶都會在此目錄下創建自己的主目錄。與/etc/default/useradd文件中HOME行對應。
-s default_shell
指定新建用戶默認使用的shell,與/etc/default/useradd文件中“SHELL”行對應。
-f default_inactive
指定用戶帳號過期多長時間後就永久停用,與/etc/default/useradd文件中“INACTIVE”行對應。
-e default_expire_date
指定用戶帳號的過期時間。與/etc/default/useradd文件中“EXPIRE”行對應。
例子:
useradd –D不加任何參數時,顯示/etc/default/useradd文件的當前設置
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
如果要修改添加用戶時的默認shell為/bin/csh,可以這麼操作:
[root@localhost ~]# useradd -D -s /bin/csh
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
4./etc/skel目錄
在創建一個新用戶後,會在新用戶的主目錄下看到類似.bash_profile, .bashrc, .bash_logout等文件,這些文件是怎麼來的呢,如果我想讓新建立的用戶在主目錄下默認擁有自己指定的配置文件,該如何設置呢?
/etc/skel目錄就是解決這個問題的,/etc/skel目錄定義了新建用戶在主目錄下默認的配置文件,更改/etc/skel目錄下的內容就可以改變新建用戶默認主目錄的配置文件信息。
待續!
本文出自 “技術成就夢想” 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/531787