Linux用戶和組管理

Linux安全上下文:進程所能夠訪問資源的權限取決於進程運行者的身份

Tips:想要阻止一個用戶登錄的方法有很多種

a)passwd -l user / usermod -L user 這種方法是在/etc/shadow的密碼字段的最前面加!!或!,使用戶不能登錄

b)只有在7上纔可以,可以創建/run/nologin文件(原理參見Centos7中shutdown man手冊)或/etc/nologin(誤打誤撞出來的,記錯了前面nologin的路徑)

If the time argument is used, 5 minutes before the system goes down the /run/nologin file is created to

        ensure that further logins shall not be allowed.

        

        如果使用了時間參數,那麼在系統關閉前的5min,系統會創建/run/nologin文件來確保禁止更多的登錄活動

        

1.Linux用戶

Linux用戶有兩個名字,一個是Username,便於人類記憶的,另一個是UID,是系統辨識用戶的唯一編號。

Linux用戶分爲:管理員和普通用戶,普通用戶又分爲系統用戶和登錄用戶

管理員:username是root,uid=0

普通用戶:1-65535

系統用戶:1-499(Centos6),1-999(Centos7) 用於標識守護進程可以獲取的資源

登錄用戶:500+(Centos6),1000+(Centos7) 用於交互式登錄

  

  Attention:多個用戶可以使用同一個UID,但系統識別用戶只是看uid,遇到uid相同的,系統就認爲是同一用戶

  登錄後,現在提示符前顯示用戶的username,對於同一個uid系統該採用哪個username呢?系統會去查詢/etc/passwd中username和uid的映射關係,找到第一個和當前用戶uid相同的條目就退出,此時這個條目中對應的username就是要顯示的username。因此,排在文件前面的映射會生效。

  


2.Linux組

Linux組跟用於一樣也有兩個名字,groupname和gid 系統辨識組是用gid

Linux組分爲:管理員組和普通組,普通組又分爲系統組和普通組

管理員組:groupname=root gid=0

普通組:

系統組:1-499(CentOS6),1-999(CentOS7)

普通組:500+(Centos6),1000+(Centos7)


3.Linux用戶和組之間的關係

  1)按照用戶的角度將Linux組進行劃分:

 a)主要組 primary group:

  用戶必須有且只屬於一個主要組

   

 b)私有組

  組名和用戶名相同,且僅包含一個用戶:稱爲私有組

   

 c)輔助組 secondary group

    一個用戶可以屬於0個或多個輔助組

2)一個組可以有多個成員,也可以有多個組管理員,組管理員可以改變組密碼,添加或刪除組成員


4.跟用戶相關的兩個文件/etc/passwd和/etc/shadow


Attention:1)這兩個文件一個是存儲用戶信息,一個是存儲密碼的,早期是放在一起的,不過現在也可以將這兩個文件進行合併

#pwunconv 將密碼填入/etc/passwd的x位置,並重命名/etc/shadow文件爲/etc/shadow-,相關的密碼策略不會顯示在/etc/passwd中

#pwconv 恢復成兩個文件

2)查看/etc/passwd和/etc/shadow中某個特定用戶的信息,有專門的工具

getent passwd 用戶名

getent shadow 用戶名

也可以用來查詢組和組的密碼,後面說

/etc/passwd 用於存儲用戶的相關信息,格式如下:

這個文件以:分隔的多個字段

(1)login name:登錄用戶名

(2)passwd:密碼(有的是X,是佔位符)

(3)UID:用戶ID

(4)GID:基本組ID

(5)Comment:用戶全名或註釋

(6)home directory:用戶家目錄

(7)shell:用戶默認shell

/etc/shadow 用於存儲用戶的密碼信息,格式如下:

以冒號分隔的多個字段

(1)用戶名

(2)用戶密碼:現在一般用sha512加密

以!或!!或*,表示系統用戶

以!或!!後面跟$開頭的字符串:表示被鎖定的用戶,$開頭的字符串表示加密過的字符串

Attention:passwd -l user 在密碼前加!!

usermod -L user 在密碼前加一個!

usermod -U user 執行一次在密碼前減去一個!

$開頭的字符串表示加密過的字符串,表示用戶密碼,如:

$6$7thv7bZB$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81

以上字符串可以看作是$分隔的三個字符串,其中

$6代表加密算法 sha512 $1代表md5(128位的)

Attention:#authconfig --passalgo=md5 --update,此後使用passwd加密過的密碼,此處都顯示$1

同時會修改/etc/login.defs文件

# Use SHA512 to encrypt password.

ENCRYPT_METHOD MD5

MD5_CRYPT_ENAB yes

$7thv7bZB 代表salt,是系統自動加的隨機數,會影響加密結果。在沒有salt的情況下,通過比對加密結果,如果一樣,那麼密碼就是相同的,這樣可以破解密碼。爲了避免這種情況,系統會自己加一個salt

如果是$1,可以通過這樣的方式生成帶salt的密碼加密之後的結果,

openssl passwd -1 -salt 12345678 code

$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81

是對salt和密碼執行加密算法後的結果

sha1,md5,sha512都是單向加密算法,稱爲哈希算法,有這樣的特點:

sha1: secure has algorithm 160bits

md5:message digest, 128bits

1)明文不同,密文必然不同,反之亦然

2)相同算法定長輸出,理論上,密文不可逆推出原始數據,但有例外 Md5、SHA1算法,據說被山東大學教授王小云(女)破解

3)雪崩效應:

  初始條件的微小改變,必然引起結果的巨大變化

  

(3)上次修改時間:從1970年1月1日起到密碼最近一次被更改的時間

(4)最小使用時間:密碼再過幾天纔可以變更(0表示隨時可以變更)

(5)最大使用時間:密碼再過幾天必須變更(99999表示永不過期)

(6)密碼警告時間:密碼過期前幾天系統提醒用戶(默認爲一週)

(7)密碼失效時間:密碼過期幾天後賬號會被鎖定

(8)賬號過期時間:從1970年1月1日起,多少天后賬號失效

(9)保留(reserved field)

5.跟組相關的兩個文件/etc/group和/etc/gshadow

  Attention:1)groups user1 user2 .. usern 列出指定一個或多個用戶的組關係,格式:primary group:secondary group1 secondary group

  groups 如果沒有指定用戶,那麼打印當前進程的組關係,通常是沒有基本組和附加組的概念

 

  2)getent group groupname 在/etc/group中查看groupname的相關信息

  getent gshadow groupname  在/etc/gshadow中查看groupname的相關信息

/etc/group存儲的是組相關信息

也是以:分隔的多個字段

(1)組名

(2)組密碼 通常不需要設定,密碼是被記錄在/etc/gshadow

(3)GID:組ID

(4)以當前組爲附加組(輔助組)的用戶列表(以逗號分隔)

/etc/gshadow存儲的是與組密碼的相關信息

(1)組名

(2)組密碼:跟/etc/shadow的密碼構造一樣

當一個不隸屬於這個組的成員想獲取這個組的權限時,就需要輸入這個密碼

如果組密碼爲空,那麼只有組成員才能獲取組的權限

Attention:newgrp可將當前用戶的基本組切換成設定的組group,成功後,再創建出的文件的的屬組都是group

1)如果group是當前用戶的附加組,即當前用戶隸屬於group,這樣,依據上面的說明,有沒有設置密碼都可以進行切換

#/$ newgrp group //不會提示輸入密碼的

2)如果group不是當前用戶的附加組,即當前用戶不隸屬於group,那麼在鍵入

 newgrp group

 之後,會提示要求輸入密碼,這個密碼是組密碼,當前沒有密碼就一定不能切換成功嘍,所以要這樣切換,就必須設置密碼

另外,設置之後,立即有效,登出時就失效,並且只在設置的那個終端有效,而非對其他終端的同一用戶有效

redhat:newgrp gentoo

groups redhat

redhat : redhat 發現用戶的屬組沒變

但 id redhat 

uid=1000(redhat) gid=1009(gentoo) groups=1000(redhat),1009(gentoo) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

在其他終端上同樣也是redhat用戶執行 id redhat

uid=1000(redhat) gid=1000(redhat) groups=1000(redhat)

在原有終端上退出再登入,發現加入的組改回原來了。

 

(3)組管理員:逗號分隔的用戶列表,這些用戶都是組管理員

組管理員可以修改密碼,增刪組成員

組管理員可以不隸屬於這個組,但他依然擁有和組成員一樣的權限

   Attention:#gpasswd -A redhat gentoo 將redhat用戶設爲gentoo的組的管理員

    redhat可以不是gentoo組的成員

   

(4)組成員:逗號分隔的用戶列表,這些用戶都是組成員

Attention:#gpasswd -a redhat gentoo 將redhat用戶加入gentoo組

Attention:有時這些命令雖然設置成功了,但是需要登入登出在能生效

6.專業用來修改/etc/passwd和/etc/group的工具

修改且帶有語法檢查:vipw和vigr

只有語法檢查功能:pwck和grpck

7.用戶管理命令

1)創建用戶

useradd [options] username

-u UID  UID的範圍在/etc/login.defs中定義

-u -o 不檢查UID的唯一性

-g GID  指明要加入的基本組,如果不指定,則創建一個與用戶名相同的組,並將其作爲用戶的基本組

-c "Comment" 用戶的註釋信息

-d HOME_DIR 以指定的路徑爲家目錄 此處指定的路徑必須不能是個已存在的目錄

-s SHELL 指明用戶的默認shell

-G GP1[,GP2,...] 爲用戶指明附加組,組必須事先存在

-N 不創建私有組作爲基本組,使用users組(Gid=100)作爲基本組

   Attention:在/etc/default/useadd中規定了這一項

    GROUP=100  //如果不創建私有組,就將GID爲100的組(即users組)作爲基本組

-r 創建系統用戶

-M 不創建家目錄

  -D 顯示默認配置

  -D -s /path/to/shell 修改默認配置中的shell類型

   Attention:使用useradd命令創建用戶,一般遵循的默認配置在/etc/default/useradd

    GROUP=100   //如果不創建私有組,就將GID爲100的組(即users組)作爲基本組

HOME=/home  //普通用戶家目錄的父目錄,系統用戶一般不創建家目錄

INACTIVE=-1  //用戶永不失效

EXPIRE=      //用戶永不過期

SHELL=/bin/bash  //默認shell

SKEL=/etc/skel    //用戶家目錄的基本框架(skeleton),通常是隱藏文件

CREATE_MAIL_SPOOL=yes //是否創建郵箱,其實就是在/var/spool/mail下創建一個以用戶名的名字的目錄

在/etc/default/下還有一個跟useradd相關的文件是useradd-,這個文件是存儲上一次的默認配置(修改之前的)

看到-就可以想到上一次的含義,比如 cd - 就是回到上一次的工作目錄

/etc/skel下存放的文件:.bash_logout  .bash_profile  .bashrc  .gnome2(跟安裝的圖形模塊有關,不安裝則沒有)  .mozilla

2)創建用戶口令

passwd可以用於創建用於口令但不至於創建用戶口令

passwd:權限-rwsr-xr-x. 其中s代表,任何運行此程序用戶都是以屬主也就是root身份來運行

passwd [options] username

-l 鎖定用戶   

Attention:passwd -l user 在密碼前加!!

usermod -L user 在密碼前加一個!

usermod -U user 執行一次在密碼前減去一個!

-U 解鎖用戶

-e 使用戶的密碼立即過期,強制用戶下次登錄時修改密碼

此命令的應用場景:root創建了一些賬號,並賦予了一些簡單密碼,使用這個命令可以讓密碼立即失效,這樣在用戶第一次登錄時,就必須修改密碼,我在實驗時,登錄時,確實提示需要設置密碼,但密碼總也設置不成功,這是因爲Linux對於普通用戶設置的密碼要求比較嚴苛,並非不能實現這個需求。

-n mindays    指定最短使用期限 對應/etc/shadow 第4個字段

-x maxdays 指定最大使用期限 對應/etc/shadow 第5個字段

-w warndays       密碼失效前多少天開始警告 對應/etc/shadow 第6個字段

-i inactivedays   密碼過期幾天後會鎖定賬戶 對應/etc/shadow 第7個字段

--stdin 從標準輸入接收用戶密碼

    e.g. echo "passwd" | passwd --stdin username

Attention:在爲賬號設置密碼時,不會指定密碼的各種期限,但系統會幫助我們來設置,這些期限稱之爲密碼策略

在windows中查看密碼策略的命令是 net account

在Linux中查看密碼策略的命令是 chage(change age) -l

其中,默認的密碼策略存儲在/etc/login.defs,當然不只是有密碼策略

以下是省去了註釋信息的/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     //用戶和組 ID的限制

UID_MAX 60000

GID_MIN  500

GID_MAX 60000

CREATE_HOME yes       //是否創建家目錄

 

UMASK           077    //UMASK ,具體參加有註釋信息的此文件

USERGROUPS_ENAB yes    //如果用戶組中沒有成員了,userdel可以刪除用戶組

ENCRYPT_METHOD SHA512  //密碼使用的加密算法 使用authconfig --passalgo=Md5 --update可以修改這裏

MD5_CRYPT_ENAB no

3)批量創建用戶和修改用戶口令

(1)newusers file 批量創建用戶

file是滿足/etc/passwd格式的文件

(2)chpasswd 從標準輸出讀入user:passwd的格式的多行文本,以此來批量修改用戶口令

vim batchpasswd

user1:明文口令

user2:明文口令

...

cat batchpasswd | chpasswd

4)用戶屬性修改

usermod [option] username

-u UID: 指定用戶新的UID

-g GID:指明用戶新的基本組

-G GP1[,gp2,..gpm] 指明新的附加組,原來的附加組會被覆蓋

Attenton:若要保留原有附加組,則要使用-aG(-Ga 不可) GP1[,gp2,..gpm]

若要清空附加組,-G "" 即可

 

-s SHELL 新的默認SHELL

-c 'COMMENT' 新的註釋信息

-d HOME 新家目錄不會自動創建,原家目錄中的文件不會同時移動至新的家目錄;若要創建新家目錄並移動原家數據,必須使用-md /path/to/newhome或-m -d /path/to/newhome,總之m選項要在前面

 

-l login_name 新用戶名

-L 鎖定用戶 在/etc/shadow密碼前加一個!

  -U 解鎖用戶 執行一次在密碼前減去一個! 直到沒有爲止

  -e yyyy-MM-DD 指明用戶賬號的過期日期

  -f INACTIVE:設定非活動期限

  -r 刪除用戶家目錄

5)查看用戶相關信息

(1) id [options]  [user]   查看用戶相關的信息 不指明用戶查看的是當前用戶

-u:UID

-g:GID

-G:groups 附加組

 -n:顯示id對應的名字,通常和-u和-g連用

   id -un  或 id -gn

(2) finger 打印登錄到Linux系統的所有用戶的信息

finger user 查看跟user相關的一些信息,比如家目錄 shell類型、郵件等

  

  6)在/etc/passwd中家目錄字段必須不能爲空

  如果爲空,則登錄這個用戶時,鍵入用戶和密碼之後,會不出現提示符,不能輸入任何命令,等待超時之後(提示:/usr/bin/xauth:  timeout in locking authority file /.Xauthority),進入/

  若su - user完全切換或不完全切換 su user, 則會顯示su: user user does not exist

   

  如果不空,但目錄不存在,則登錄這個用戶時,會直接進入/,

  若su - user完全切換 會直接進入/

  若不完全切換 su user 會進入執行 su user的目錄

  

  7) 切換用戶或以其它用戶身份執行命令

  su [options] [-] [user [args...]]

  切換用戶的方式:

  su user:非登錄式切換,不會讀取目標用戶的配置文件,不改變當前工作目錄,也稱之爲不完全切換

  su - user 登錄式切換,會讀取目標用戶的配置文件,切換至其家目錄,也稱之爲完全切換

  Attention:root執行su至其他用戶無需密碼,非root用戶切換時需要密碼

 

  切換身份執行命令

  su [-] user -c 'cmd'

  選項 -l --login

  su -l user 相當於 su - user

  

  8)修改用戶相關信息的其他命令

  chfn 指定個人信息

  chsh 指定shell

  

  9)修改用戶密碼策略

  chage [option]  user

  -d last_day 修改最後修改時間 對應於/etc/shadow的第3個字段

  -m --mindays Min_days 修改最小使用時間 對應於/etc/shadow的第4個字段 過多少時間可以修改

  -M --maxdays Max_days 修改最大使用時間 對應於/etc/shadow的第5個字段

  -W --warndays Warn_days 修改警告時間 對應於/etc/shadow的第6個字段

-I --inactive Inactive 修改賬戶失效時間 對應於/etc/shadow的第7個字段    

-E --expiredate Expire_Date 修改賬戶過期時間 對應於/etc/shadow的第8個字段

-l 顯示密碼策略

下次登錄強制重設密碼

chage -d 0 tom 等價於 passwd -e tom

e.g. chage -m 0 -M 42 -W 14   -I 7 tom

chage -E 2016-09-10 tom 

10)刪除用戶

userdel user 不會刪除用戶家目錄

 -r user 纔會刪除用戶的同時刪除家目錄

在/etc/login.defs中,有這樣的描述

# This enables userdel to remove user groups if no members exist.

#

USERGROUPS_ENAB yes


8. 組管理命令

  1)創建組

  groupadd [option] groupname

  -g gid 指明GID 範圍在/etc/login.defs中指定

  -r 創建系統組

   

  2)修改組

  groupmod [OPTION] group

  -n groupname :組的新名字

  -g GID :新的GID

  

  3)組刪除

  groupdel group

  

  4)更改組密碼

    gpasswd [option] group

            -a user 將user加入到指定組中

            -M user1,user2...指定組成員列表

            -d user 從指定組中刪除user

            -A user1,user2,... 設置有管理權限的用戶列表,即設置組管理員

    

    newgrp命令:臨時切換基本組

    如果用戶不屬於此組,則需要組密碼

    Attention:具體參見本文檔/etc/gshadow部分

   

   5)更改組成員

    groupmems [options] [action]

    options:

    -g /--group groupname 更改爲指定組(只有root可用)

   

    action:

       -a /--add username 指定加入組的用戶

       -d / --delete username 指定從組刪除的用戶

       -p / --purge 從組中清除所有成員

       -l / --list 顯示組中成員

   

    e.g. groupmems -g bin -a wang 將wang用戶加入bin組

    groupmems -g bin -l 查看bin組中的所有成員,似乎是查看以bin組爲附加組的成員列表

    groupmems -g bin -p 清除所有bin組中的成員

   

    6)查看組成員

      groups user1 user2 .. usern 列出指定一個或多個用戶的組關係,格式:primary group:secondary group1 secondary group

  groups 如果沒有指定用戶,那麼打印當前進程的組關係,通常是沒有基本組和附加組的概念

      

      

      

       


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章