帳號文件由5個部分組成:1、“/etc/passwd”,系統使用者設定文件,儲存了系統中所有使用者的基本資訊;2、“/etc/shadow”,儲存了系統中用戶的密碼資訊;3、“/ect/group”,用戶群組配置文件,儲存了用戶群組的所有資訊等等。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
linux系統的帳號檔案有5個組成部分:
# /etc/passwd 檔案
/etc/shadow 檔案
/ect/group 檔案
#/etc/gshadow檔案
/etc/login.defs 檔案
#1、/etc/passwd 檔案
/etc/ passwd 文件,是系統使用者設定文件,儲存了系統中所有使用者的基本信息,並且所有使用者都可以對此文件執行讀取操作。
首先我們來開啟這個文件,看看到底包含哪些內容,執行指令如下:
[root@localhost ~]# vi /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 ...省略部分输出...
可以看到,/etc/passwd 文件中的內容非常規律,每行記錄對應一個用戶。
讀者可能會問,Linux 系統中預設怎麼會有這麼多的使用者?這些用戶中的絕大多數是系統或服務正常運作所必需的用戶,這種用戶通常稱為系統用戶或偽用戶。系統使用者無法用來登入系統,但也不能刪除,因為一旦刪除,依賴這些使用者執行的服務或程式就無法正常執行,會導致系統問題。 不僅如此,每行用戶資訊都以":" 作為分隔符,劃分為7 個字段,每個字段所表示的含義如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
接下來,給大家逐個介紹這些字段。
使用者名稱使用者名,就是一串代表使用者身分的字串。
前面講過,使用者名稱僅是為了方便使用者記憶,Linux 系統是透過 UID 來識別使用者身份,分配使用者權限的。 /etc/passwd 檔案中就定義了使用者名稱和 UID 之間的對應關係。
密碼"x" 表示此使用者設有密碼,但不是真正的密碼,真正的密碼保存在/etc/shadow 檔案中(下一節做詳細介紹)。
在早期的 UNIX 中,這裡保存的就是真正的加密密碼串,但由於所有程式都能讀取此文件,非常容易造成用戶資料被竊取。
雖然密碼是加密的,但是採用暴力破解的方式也是能夠進行破解的。
因此,現在 Linux 系統把真正的加密密碼串放置在 /etc/shadow 檔案中,此檔案只有 root 使用者可以瀏覽和操作,這樣就最大限度地保證了密碼的安全。 要注意的是,雖然"x" 不表示真正的密碼,但也不能刪除,如果刪除了"x",那麼系統會認為這個用戶沒有密碼,從而導致只輸入用戶名而不用輸入密碼就可以登陸(只能在使用無密碼登錄,遠端是不可以的),除非特殊情況(如破解用戶密碼),這當然是不可行的。
UIDUID,也就是使用者 ID。每個使用者都有唯一的一個 UID,Linux 系統透過 UID 來識別不同的使用者。
###實際上,UID 就是一個 0~65535 之間的數,不同範圍的數字表示不同的使用者身分。 #########GID#########全名為“Group ID”,簡稱“群組ID”,表示使用者初始群組的群組 ID 號碼。這裡需要解釋一下初始組和附加組的概念。 ######初始群組,指使用者登陸時就擁有這個使用者群組的相關權限。每個使用者的初始群組只能有一個,通常就是將和此使用者的使用者名稱相同的群組名稱作為該使用者的初始群組。比方說,我們手工加入使用者 lamp,在建立使用者 lamp 的同時,就會建立 lamp 群組作為 lamp 使用者的初始群組。 ######附加群組,指使用者可以加入多個其他的使用者群組,並擁有這些群組的權限。每個使用者只能有一個初始群組,除初始群組外,使用者再加入其他的使用者群組,這些使用者群組就是這個使用者的附加群組。附加群組可以有多個,而且使用者可以有這些附加群組的權限。 ######舉例來說,剛剛的lamp 使用者除屬於初始群組lamp 外,我又把它加入了users 群組,那麼lamp 使用者同時屬於lamp 群組和users 群組,其中lamp 是初始群組,users 是附加組。 ######當然,初始群組和附加群組的身份是可以修改的,但是我們在工作中不修改初始群組,只修改附加群組,因為修改了初始群組有時會讓管理員邏輯混亂。 ######要注意的是,在 /etc/passwd 檔案的第四個欄位中看到的 ID 是這個使用者的初始群組。 #########描述性資訊#########這個欄位並沒有什麼重要的用途,只是用來解釋這個使用者的意義而已。 #########主目錄#######也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
例如,root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname,即在 /home/ 目录下建立和用户名相同的目录作为主目录,如 lamp 用户的主目录就是 /home/lamp/ 目录。
默认的Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。
我们知道,用户登陆 Linux 系统后,通过使用 Linux 命令完成操作任务,但系统只认识类似 0101 的机器语言,这里就需要使用命令解释器。也就是说,Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。
通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。
2、/etc/shadow 文件
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。
介绍此文件之前,我们先打开看看,执行如下命令:
[root@localhost ~]#vim /etc/shadow root: $6$9w5Td6lg $bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: …省略部分输出…
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
接下来,给大家分别介绍这 9 个字段。
用户名
同 /etc/passwd 文件的用户名有相同的含义。
加密密码
这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。
所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
最后一次修改时间
此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢?
这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。
那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:
[root@localhost ~]# date -d "1970-01-01 15775 days" 2013年03月11日 星期一 00:00:00 CST
可以看到,通过以上命令,即可将其换算为我们习惯的系统日期。
最小修改时间间隔
最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
此字段是为了针对某些人频繁更改账户密码而设计的。
密码有效期
经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
密码需要变更前的警告天数
与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。
该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。
密码过期后的宽限天数
也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
账号失效时间
同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!
该字段通常被使用在具有收费服务的系统中。
保留
这个字段目前没有使用,等待新功能的加入。
3、/ect/group 文件
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找。
/etc/group 文件的内容可以通过 Vim 看到:
[root@localhost ~]#vim /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon …省略部分输出… lamp:x:502:
可以看到,此文件中每一行各代表一个用户组。在前面章节中,我们曾创建 lamp 用户,系统默认生成一个 lamp 用户组,在此可以看到,此用户组的 GID 为 502,目前它仅作为 lamp 用户的初始组。
各用户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:密码:GID:该用户组中的用户列表
接下来,分别介绍各个字段具体的含义。
组名
也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
组密码
和 /etc/passwd 文件一样,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
组ID (GID)
就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
组中的用户
此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
举个例子,lamp 组的组信息为 "lamp:x:502:",可以看到,第四个字段没有写入 lamp 用户,因为 lamp 组是 lamp 用户的初始组。如果要查询这些用户的初始组,则需要先到 /etc/passwd 文件中查看 GID(第四个字段),然后到 /etc/group 文件中比对组名。
每个用户都可以加入多个附加组,但是只能属于一个初始组。所以我们在实际工作中,如果需要把用户加入其他组,则需要以附加组的形式添加。例如,我们想让 lamp 也加入 root 这个群组,那么只需要在第一行的最后一个字段加入 lamp,即 root:x:0:lamp 就可以了。
一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。
4、/etc/gshadow文件
组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。
首先,我们借助 Vim 命令查看一下此文件中的内容:
[root@localhost ~]#vim /etc/gshadow root::: bin:::bin, daemon daemon:::bin, daemon ...省略部分输出... lamp:!::
文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:
组名:加密密码:组管理员:组附加用户列表
组名
同 /etc/group 文件中的组名相对应。
组密码
對於大多數使用者來說,通常不設定群組密碼,因此該欄位常為空,但有時為 "!",指的是群組沒有群組密碼,也不設有群組管理員。
群組管理員
從系統管理員的角度來說,該檔案最大的功能就是建立群組管理員。那麼,什麼是群組管理員呢?
考慮到 Linux 系統中帳號太多,而超級管理員 root 可能比較忙碌,因此當有使用者想要加入某群組時,root 或許無法及時回應。在這種情況下,如果有群組管理員,那麼他就能將使用者加入自己管理的群組中,也就免去麻煩 root 了。
不過,由於目前有 sudo 之類的工具,因此群組管理員的這個功能已經很少使用了。
群組中的附加用戶
該欄位顯示這個用戶群組中有哪些附加用戶,和 /etc/group 檔案中附加群組顯示內容相同。
5、/etc/login.defs 檔案
#/etc/login.defs 檔案用於在建立使用者時,對使用者的一些基本屬性做預設設置,例如指定用戶UID 和GID 的範圍,用戶的過期時間,密碼的最大長度,等等。
要注意的是,該檔案的使用者預設配置對 root 使用者無效。並且,當此檔案中的配置與 /etc/passwd 和 /etc/shadow 檔案中的使用者資訊有衝突時,系統會以/etc/passwd 和 /etc/shadow 為準。
讀者可自行使用 vim /etc/login.defs
指令查看該文件中的內容,表 1 中對文件中的各個選項做出了具體的解釋。
設定項目 | 意義 |
---|---|
MAIL_DIR /var/spool/mail | 建立使用者時,系統會在目錄 /var/spool/mail 中建立使用者信箱,例如 lamp 使用者的信箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密碼有效期限,99999 是自 1970 年 1 月 1 日起密碼有效的天數,相當於 273 年,可理解為密碼始終有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密碼以來,最少隔多少天後使用者才能再次修改密碼,預設值是 0。 |
PASS_MIN_LEN 5 | 指定密碼的最小長度,預設不小於 5 位,但是現在使用者登入時驗證已經被 PAM 模組取代,所以這個選項並不生效。 |
PASS_WARN_AGE 7 | 指定在密碼到期前多少天,系統就開始透過使用者密碼即將到期,預設為 7 天。 |
UID_MIN 500 | 指定最小 UID 為 500,也就是說,新增使用者時,預設 UID 從 500 開始。注意,如果手工指定了一個使用者的 UID 是 550,那麼下一個建立的使用者的 UID 就會從 551 開始,哪怕 500~549 之間的 UID 沒有使用。 |
UID_MAX 60000 | 指定使用者最大的 UID 為 60000。 |
GID_MIN 500 | 指定最小 GID 為 500,也就是在新增群組時,群組的 GID 從 500 開始。 |
GID_MAX 60000 | 用戶 GID 最大為 60000。 |
CREATE_HOME yes | 指定在創建使用者時,是否同時建立使用者主目錄,yes 表示創建,no 則不創建,預設為 yes。 |
UMASK 077 | 使用者主目錄的權限預設為 077。 |
USERGROUPS_ENAB yes | 指定刪除使用者的時候是否同時刪除使用者群組,準備地說,這裡指的是刪除使用者的初始群組,此項目的預設值為 yes。 |
ENCRYPT_METHOD SHA512 | 指定使用者密碼採用的加密規則,預設採用 SHA512,這是新的密碼加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
相關推薦:《Linux影片教學》
以上是linux系統的帳號檔案由哪些組成的詳細內容。更多資訊請關注PHP中文網其他相關文章!