1. 程式人生 > 其它 >14 Linux-使用者管理

14 Linux-使用者管理

14 Linux-使用者管理

14.1 使用者相關檔案

14.1.1 /etc/passwd 使用者資訊檔案

root:x:0:0:root:/root:/bin/bash

第一列: 使用者名稱

第二列: 密碼位

第三列: 使用者ID

  • 0 超級使用者UID。如果使用者UID為0,代表這個賬號是管理員賬號。那Linux中如何把普通使用者升級成為管理員呢?就是把其他使用者的UID修改為0就可以了,這點和Windows是不同的。不過不建議建立多個管理員賬號。

  • 1-499 系統使用者(偽使用者)UID。這些UID賬號是系統保留給系統使用者的UID,也就是說UID是1-499範圍內的使用者是不能登入系統的,而是用來執行系統或服務的。其中1-99是系統保留的賬號,系統自動建立。100-499 是預留給使用者建立系統賬號的。

  • 500-60000 普通使用者UID。建立的普通使用者UID從500開始,最大到60000。這些使用者足夠使用了,但是如果不夠也不用害怕,2.6.x核心以後的Linux系統使用者UID已經可以支援232這麼多了。

第四列:組ID GID 新增使用者時,如果不指定使用者所屬的初始組,那麼會建立和使用者名稱相同的組

第五列: 使用者說明

第六列: 使用者家目錄 ~

第七列: 登入shell /bin/bash

如何把普通使用者變成超級使用者?
可以把使用者UID改為0

14.1.2 /etc/shadow 影子檔案

root:$6$9w5Td6lg$bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fI38RH15wzVoomff9isV1PzdcXmixzhnMVhMxbv0:15775:0:99999:7:::

第一列: 使用者名稱

第二列: 加密密碼 我們也可以在密碼前人為的加入“!”或“”改變加密值讓密碼暫時失效,使這個使用者無法登陸,達到暫時禁止使用者登入的效果。 注意所有偽使用者的密碼都是“!!”或“”,代表沒有密碼是不能登入的。當然我新建立的使用者如果不設定密碼,它的密碼項也是“!!”,代表這個使用者沒有密碼,不能登入

第三列: 密碼最近更改時間, 1970年1月1日作為標準時間

# 時間戳轉日期
[root@localhost ~]# date -d "1970-01-01 15775 days"
2013年 03月 11日 星期一 00:00:00 CST
# 日期轉時間戳
[root@localhost ~]# echo $(($(date --date="2013/03/11" +%s)/86400+1))
15775

第四列: 兩次密碼的修改間隔時間(和第3欄位相比)

第五例: 密碼有效期(和第3欄位相比)

第六列: 密碼修改到期前的警告天數(和第5欄位相比)

第七列: 密碼過期後的寬限天數(和第5欄位相比)

第八列: 密碼失效時間 這裡同樣要寫時間戳,也就是用1970年1月1日進行時間換算。如果超過了失效時間,就算密碼沒有過期,使用者也就失效無法使用了 第九列: 保留

14.1.3 /etc/group 組資訊檔案

root:x:0:root

第一列: 組名

第二列: 組密碼位

第三列: GID

第四列: 此組中支援的其他使用者.附加組是此組的使用者

初始組:每個使用者初始組只能有一個,初始組只能有一個,一般都是和使用者名稱相同的組作為初始組

附加組:每個使用者可以屬於多個附加組。要把使用者加入組,都是加入附加組、

14.2 使用者管理命令

14.2.1 新增使用者

1)手工刪除使用者 手工刪除使用者試驗:手工刪除,如果可以正常建立使用者,證明使用者刪除乾淨。

/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/user1
/var/spool/mail/user1 郵箱

2) useradd命令

[root@localhost ~]# useradd 選項 使用者名稱
選項:
-u 550 指定UID
-g 組名 指定初始組 不要手工指定
-G 組名 指定附加組,把使用者加入組,使用附加組
-c 說明 新增說明
-d 目錄 手工指定家目錄,目錄不需要事先建立
-s shell /bin/bash.

示例:

[root@localhost ~]# groupadd lamp1
#先手工新增lamp1使用者組,因為一會要把lamp1使用者的初始組指定過來,如果不事先建立,會報錯使用者組不存在

[root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 \ -c "test user" -s /bin/bash lamp1
#建立使用者lamp1的同時指定了UID(550),初始組(lamp1),附加組(root),家目錄(/home/lamp1),使用者說明(test user)和使用者登入shell(/bin/bash)

[root@localhost ~]# grep "lamp1" /etc/passwd /etc/shadow /etc/group
#同時檢視三個檔案
/etc/passwd:lamp1:x:550:502:test user:/home/lamp1:/bin/bash
#使用者的UID、初始組、使用者說明、家目錄和登入shell都和命令手工指定的一致
/etc/shadow:lamp1:!!:15710:0:99999:7:::
#lamp1使用者還沒有設定密碼
/etc/group:root:x:0:lamp1
#lamp1使用者加入了root組,root組是lamp1使用者的附加組
/etc/group:lamp1:x:502:
#GID502的組是lamp1組

[root@localhost ~]# ll -d /home/lamp1/
drwx------ 3 lamp1 lamp1 4096 1月 6 01:13 /home/lamp1/
#家目錄也建立了啊。不需要手工建立家目錄

3) useradd預設值

useradd新增使用者時參考的預設值檔案主要有兩個,分別是/etc/default/useradd和/etc/login.defs
  • /etc/default/useradd

[root@localhost ~]# vi /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

GROUP=100 這個選項是建立使用者的預設組,也就是說新增每個使用者時,使用者的初始組就是GID為100的這個使用者組。目前我們採用的機制私有使用者組機制。 HOME=/home 這個選項是使用者的家目錄的預設位置,所以所有的新建使用者的家目錄預設都在/home/下。 INACTIVE=-1 這個選項就是密碼過期後的寬限天數,也就是/etc/shadow檔案的第七個欄位。如果是天數,比如10代表密碼過期後10天后失效;如果是0,代表密碼過期後立即失效;如果是-1,則代表密碼永遠不會失效。這裡預設值是-1,所以所有新建立的使用者密碼都不會失效。 EXPIRE= 這個選項是密碼失效時間,也就是/etc/shadow檔案的第八個欄位。也就說使用者到達這個日期後就會直接失效。當然這裡也是使用時間戳來表示日期的。預設值是空,所以所有新建使用者沒有失效時間,永久有效。 SHELL=/bin/bash 這個選項是使用者的預設shell的。/bin/bash是Linux的標誌shell,所以所有新建立的使用者預設都具備shell賦予的許可權。 SKEL=/etc/skel 這個選項就是定義使用者的模板目錄的位置,/etc/skel/目錄中的檔案都會複製到新建使用者的家目錄當中。 CREATE_MAIL_SPOOL=yes 這個選項定義是否給新建使用者建立郵箱,預設是建立,也就是說所有的新建使用者系統都會新建一個郵箱,放在/var/spool/mail/下和使用者名稱相同。

  • /etc/login.defs

#這個檔案有些註釋,把註釋刪除掉,檔案內容就變成下面這個樣子了
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 500
UID_MAX 60000
GID_MIN 500
GID_MAX 60000
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

MAIL_DIR /var/spool/mail 這行指定了新建使用者的預設郵箱位置。比如user1使用者的郵箱是就是/var/spool/mail/user1。 PASS_MAX_DAYS 99999 這行指定的是密碼的有效期,也就是/etc/shadow檔案的第五欄位。代表多少天之後必須修改密碼,預設值是99999。

PASS_MIN_DAYS 0 這行指定的是兩次密碼的修改間隔時間,也就是/etc/shadow檔案的第四欄位。代表第一次修改密碼之後,幾天後才能再次修改密碼。預設值是0。

PASS_MIN_LEN 5 這行代表密碼的最小長度,預設不小於5位。但是我們現在使用者登入時驗證已經被PAM模組取代,所以這個選項並不生效。

PASS_WARN_AGE 7 這行代表密碼修改到期前的警告天數,也就是/etc/shadow檔案的第六欄位。代表密碼到底有效期前多少天開始進行警告提醒,預設值是7天。

UID_MIN 500 UID_MAX 60000 這兩行代表建立使用者時,最小UID和最大的UID的範圍。我們2.6.x核心開始,Linux使用者的UID最大可以支援232這麼多,但是真正使用時最大範圍是60000。還要注意如果我手工指定了一個使用者的UID是550,那麼下一個建立的使用者的UID就會從551開始,哪怕500-549之間的UID沒有使用(小於500的UID是給偽使用者預留的)。

GID_MIN 500 GID_MAX 60000 這兩行指定了GID的最小值和最大值之間的範圍。

CREATE_HOME yes 這行指定建立使用者時是否自動建立使用者的家目錄,預設是建立

UMASK 077 這行指定的是建立的使用者家目錄的預設許可權,因為umask值是077,所以新建的使用者家目錄的許可權是700,umask的具體作用和修改方法我們可以參考下一章許可權設定章節。

USERGROUPS_ENAB yes 這行指定的是使用命令userdel刪除使用者時,是否刪除使用者的初始組,預設是刪除。

ENCRYPT_METHOD SHA512 這行指定Linux使用者的密碼使用SHA512雜湊模式加密,這是新的密碼加密模式,原先的Linux只能用DES或MD5方式加密

14.2.2 設定密碼

[root@localhost ~]# passwd [選項] [使用者名稱]
選項:
-l: 暫時鎖定使用者。僅root使用者可用
-u: 解鎖使用者。僅root使用者可用
--stdin: 可以將通過管道符輸出的資料作為使用者的密碼。主要在批量新增使用者時使用
[root@localhost ~]# passwd
#passwd直接回車代表修改當前使用者的密碼

也可以使用字串作為密碼:

[root@localhost ~]# echo "123" | passwd --stdin user1
更改使用者 user1 的密碼為123。

可以通過命令,把密碼修改日期歸零(shadow第3欄位).這樣使用者一登陸就要修改密碼,例如:

[root@localhost ~]# chage -d 0 user1

14.2.3 使用者資訊修改

usermod命令是修改已經新增的使用者的資訊的,命令如下:

[root@localhost ~]# usermod [選項] 使用者名稱
選項:
-u UID: 修改使用者的UID
-d 家目錄: 修改使用者的家目錄。家目錄必須寫絕對路徑
-c 使用者說明: 修改使用者的說明資訊,就是/etc/passwd檔案的第五個欄位
-g 組名: 修改使用者的初始組,就是/etc/passwd檔案的第四個欄位
-G 組名: 修改使用者的附加組,其實就是把使用者加入其他使用者組
-s shell: 修改使用者的登入Shell。預設是/bin/bash
-e 日期: 修改使用者的失效日期,格式為“YYYY-MM-DD”。也就是/etc/shadow 檔案的第八個欄位
-L: 臨時鎖定使用者(Lock)
-U: 解鎖使用者(Unlock)

14.2.4 刪除使用者

[root@localhost ~]# userdel [-r] 使用者名稱
選項:
-r: 在刪除使用者的同時刪除使用者的家目錄

示例:

[root@localhost ~]# userdel -r zhangsan

14.2.5 切換使用者身份

su命令可以切換成不同的使用者身份,命令格式如下:

[root@localhost ~]# su [選項] [使用者名稱]
選項:
-: 選項只使用“-”代表連帶使用者的環境變數一起切換
-c 命令: 僅執行一次命令,而不切換使用者身份

“-”不能省略,它代表切換使用者身份時,使用者的環境變數也要切換成新使用者的環境變數。

14.3 組管理命令

14.3.1 新增使用者組:groupadd

新增使用者組的命令是groupadd,命令格式如下:

[root@localhost ~]# groupadd [選項] [組名]
選項:
-g GID: 指定組ID

示例:

[root@localhost ~]# groupadd group1
#新增group1組
[root@localhost ~]# grep "group1" /etc/group
group1:x:502:

14.3.2 刪除使用者組:groupdel

groupdel命令用於刪除使用者組,命令格式如下:

[root@localhost ~]# groupdel [組名]

示例:

[root@localhost ~]# groupdel testgrp
#刪除testgrp組

不過需要注意,要刪除的組不能是其他使用者的初始組,也就是說這個組中沒有初始使用者才可以刪除。如果組中有附加使用者,則刪除組時不受影響。

14.3.3 把使用者新增進組或從組中刪除:gpasswd

其實gpasswd命令是用來設定組密碼並指定組管理員的,不過我們在前面已經說了,組密碼和組管理員功能很少使用,而且完全可以被sudo命令取代,所以gpasswd命令現在主要用於把使用者新增進組或從組中刪除。命令格式如下:

[root@localhost ~]# gpasswd [選項] [組名]
選項:
-a 使用者名稱: 把使用者加入組
-d 使用者名稱: 把使用者從組中刪除

示例:

[root@localhost ~]# groupadd grouptest
#新增組grouptest

[root@localhost ~]# gpasswd -a user1 grouptest
Adding user user1 to group grouptest
#把使用者user1加入grouptest組

[root@localhost ~]# grep "user1" /etc/group
user1:x:501:
grouptest:x:505:user1
#檢視一下,user1使用者已經作為附加使用者加入grouptest組

[root@localhost ~]# gpasswd -d user1 grouptest
Removing user user1 from group grouptest
#把使用者user1從組中刪除

[root@localhost ~]# grep "grouptest" /etc/group
grouptest:x:505:
#組中沒有user1使用者了

14.3.4 改變有效組:newgrp

每個使用者可以屬於一個初始組(使用者是這個組的初始使用者),也可以屬於多個附加組(使用者是這個組的附加使用者)。既然使用者可以屬於這麼多使用者組,那麼使用者在建立檔案後,預設生效的組身份是哪個呢?當然是初始使用者組的組身份生效了,因為初始組是使用者一旦登入就直接獲得的組身份。

也就是說,使用者在建立檔案後,檔案的屬組是使用者的初始組,因為使用者的有效組預設是初始組。既然使用者屬於多個使用者組,那麼能不能改變使用者的有效組呢?使用命令newgrp就可以切換使用者的有效組。命令格式如下:

[root@localhost ~]# newgrp [組名]

舉個例子,我們已經有了普通使用者user1,預設會建立user1使用者組,user1組是user1使用者的初始組。我們再把user1使用者加入group1組,那麼group1組就是user1使用者的附加組。

user1使用者建立檔案test1時,test1檔案的屬組是user1組,因為user1組是user1使用者的有效組。通過newgrp命令就可以把user1使用者的有效組變成group1組,當user1使用者建立檔案test2時,就會發現test2檔案的屬組就是group1組。命令如下:

[root@localhost ~]# groupadd group1
#新增組group1

[root@localhost ~]# gpasswd -a user1 group1
Adding user user1 to group group1
#把user1使用者加入group1組

[root@localhost ~]# grep "user1" /etc/group
user1:x:501:
group1:x:503:user1
#user1使用者既屬於user1組,也屬於group1組

[root@localhost ~]# su – user1
#切換成user1身份,超級使用者切換成普通使用者不用密碼

[user1@localhost ~]$ touch test1
#建立檔案test1

[user1@localhost ~]$ ll test1
-rw-rw-r-- 1 user1 user1 0 6月 14 05:43 test1
#test1檔案的預設屬組是user1組

[user1@localhost ~]$ newgrp group1
#切換user1使用者的有效組為group1組

[user1@localhost ~]$ touch test2
#建立檔案test2

[user1@localhost ~]$ ll test2
-rw-r--r-- 1 user1 group1 0 6月 14 05:44 test2
#test2檔案的預設屬組是group1組

通過這個例子明白有效組的作用了,其實就是當用戶屬於多個組時,在建立檔案時哪個組身份生效。使用newgrp命令可以在多個組身份之間切換。