Linux03-本地賬戶和組

管理賬戶和組的文件有4個:

  1.  /etc/passwd    存儲本地賬戶信息
  2.  /etc/shadow    存儲密碼   存儲賬戶和密碼的屬性  賬戶要激活,就要設置密碼
  3.  /etc/group      賬戶組信息 主要記錄附加組
  4.  /etc/login.defs     創建賬戶的時候會去讀取的模板 

一、本地賬戶/etc/passwd

Linux系統中每個進程(運行程序)都作爲一個特定賬戶運行。每個文件歸一個特定賬戶所有。對文件和目錄的訪問收到賬戶的限制。與運行進程相關聯的賬戶可確定該進程可訪問的文件和目錄。id命令用於顯示賬戶信息。

[root@server0 ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)

每個賬戶有一個id號也就是uid來作爲賬戶的唯一標識,系統用/etc/passwd文件來存儲有關本地賬戶的信息。用冒號分隔7列信息。

username:password:uid:gid:gecos:home_dir:shell

  • username是賬戶名,是uid到名稱的一種映射,方便用戶使用;
  • password,以前用來放加密存儲的密碼,現在沒啥用了,加密的密碼存在/etc/shadow;
  • uid是賬戶id;
  • gid是賬戶主要組的id;
  • gecos是賬戶的真實姓名;
  • home_dir是賬戶的家目錄;
  • shell是賬戶的登錄shell;
[root@server0 ~]# head -n 5 /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/group

與用戶一樣,組也有名稱和編號gid。系統用/etc/group文件來存儲本地組信息。用冒號分隔4列信息。

groupname:password:gid:list,of,users,in,this,group

  • groupname組名,是gid到名稱的一種映射,方便用戶使用;
  • password組密碼,不常用;
  • gid是組的id;
  • list,of,users,in,this,group是屬於這個組的用戶列表,用逗號分隔;
[root@server0 ~]# head -n 5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

主要組

  • 每個賬戶只有一個主要組;
  • 對本地賬戶,主要組通過/etc/passwd文件第4個字段gid來定義;
  • 通常,賬戶創建的文件歸主要組所有;
  • 通常,新建賬戶的主要組是名稱與賬戶相同的新建組;

補充組

  • 賬戶可以有0個或任意個補充組;
  • 補充組用/etc/group文件的第4列來記錄
  • 補充組成員身份用於幫助確保賬戶對系統文件和目錄的訪問

三、切換賬戶su - <username>

su命令可以切換賬戶。未指定賬戶名,意味着切換爲root賬戶。用法是 su - <username>。

注意“-”的使用。

  • su - <username>啓動登錄shell,會將shell環境設置爲username登錄一樣;
  • su  <username>啓動非登錄shell,只以username身份使用當前shell環境設置;忘記這條吧

大多數情況下,都是希望獲得用戶的常規設置,所以一定要加上“-”!

[student@server0 ~]$ su - root
Password: 
Last login: Sun Mar 29 16:44:19 CST 2020 on pts/0
[root@server0 ~]# 

四、增刪改本地賬戶useradd、userdel、usermod

增刪改分別用useradd、userdel、usermod命令。

useradd命令可以在添加賬戶時,設置/etc/passwd文件的7列值,也可以用選項指定這7列的值。除了這7列值以外,還有一些默認值,比如家目錄下的.bash_profile等文件,這些默認值在/etc/login.defs文件中定義。

usermod命令可以修改賬戶的信息。useradd和usermod的大多數常用選項是可以通用的。

useradd和usermod常用選項
選項 用途
-c 爲賬戶指定全名,也就是指定/etc/passwd的gecos字段。
-g 爲賬戶指定主要組,也就是指定/etc/passwd的gid字段。
-G

爲賬戶指定補充組。單獨使用-G指定一個補充組,賬戶就不再屬於原來的補充組。

會修改/etc/group文件list,of,users,in,this,group

-a

與-G搭配使用,爲賬戶添加補充組。-aG爲賬戶添加一個補充組,賬戶仍屬於原來的補充組。

會修改/etc/group文件list,of,users,in,this,group

-s

指定賬戶使用的登錄shell,也就是指定/etc/passwd的shell字段。

-L 鎖定賬戶,也就是修改/etc/shadow的內容,使賬戶不能再登錄。
-U

解鎖賬戶,也就是修改/etc/shadow的內容,使賬戶可以繼續登錄。

userdel命令刪除賬戶。userdel <username>從/etc/passwd中刪除,但不刪除賬戶的家目錄。userdel -r <username>既從/etc/passwd中刪除,也刪除賬戶的家目錄。如果刪除賬戶時沒有用-r,那麼可能造成信息的泄露。比如添加了prince賬戶,再刪除prince賬戶,再添加bob賬戶,這時原來prince的家目錄已經變成了bob所有。prince的uid被認爲是可以再分配給bob的,那麼分配之後,沒有被刪除的prince的家目錄就歸bob所有。

這種情況,只能是刪除時用-r,或者手動爲不同賬戶分配“無人擁有”的文件,查找方式是 find / -nouser -o -nogroup 2>/dev/null

[root@server0 ~]# useradd prince
[root@server0 ~]# ll /home/
total 4
drwx------.  4 prince  prince    88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student
[root@server0 ~]# id prince
uid=1001(prince) gid=1001(prince) groups=1001(prince)


[root@server0 ~]# userdel prince
[root@server0 ~]# ll /home/
total 4
drwx------.  4    1001    1001   88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student


[root@server0 ~]# useradd bob
[root@server0 ~]# ll /home/
total 4
drwx------.  4 bob     bob       88 Apr  1 23:50 bob
drwx------.  4 bob     bob       88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student
[root@server0 ~]# id bob
uid=1001(bob) gid=1001(bob) groups=1001(bob)

五、賬戶默認配置文件/etc/login.defs

UID特定的號段在Redhat裏面有特殊的意義。

  • UID 0 始終給root;
  • UID 1-200給“系統用戶”,分配個Redhat的系統進程;
  • UID 201-999是一系列“系統用戶”,給沒有自己文件的系統進程使用;
  • UID 1000+可分配給普通用戶

六、設置密碼passwd(5)命令

passwd給當前賬戶設置密碼。passwd <username>給指定賬戶設置密碼

passwd輸入密碼沒有回顯,爲了看清指定的密碼可以用--stdin選項,用法是。echo passwordstring | passwd --stdin <username>

七、增刪改組groupadd、groupdel和groupmod

使用類似的groupadd、groupdel和groupmod,具體使用可以man一下

下面實驗

  • 創建賬戶user1、user2,密碼分別爲qwe123、1qazxsw2;
  • 創建賬戶組 sys1 、sys2;
  • user1的shell是/sbin/nologin;
  • user1附屬組是sys1  sys2 ;
  • user2的主要組是sys2 , 附屬組是sys1  user1;
  • passwd 設置密碼,賬戶才被激活;
  • 創建賬戶zhangsf,全名ZhangSanFeng,uid爲2333,shell爲/sbin/nologin,創建完成後增加補充組user1、sys1和sys2;

雖然user1被激活,但是shell是/sbin/nologin還是不能登錄。

[root@server0 ~]# groupadd sys1
[root@server0 ~]# groupadd sys2
[root@server0 ~]# useradd -s /sbin/nologin -G sys1,sys2 user1
[root@server0 ~]# useradd -g sys2 -G sys1,user1 user2

[root@server0 ~]# id user1
uid=1001(user1) gid=1003(user1) groups=1003(user1),1001(sys1),1002(sys2)
[root@server0 ~]# id user2
uid=1002(user2) gid=1002(sys2) groups=1002(sys2),1001(sys1),1003(user1)

[root@server0 ~]# echo qwe123 | passwd --stdin user1
[root@server0 ~]# echo 1qazxsw2 | passwd --stdin user2

[root@server0 ~]# useradd -s /sbin/nologin -u 2333 -c ZhangSanFeng zhangsf
[root@server0 ~]# usermod -aG user1,sys1,sys2 zhangsf
[root@server0 ~]# id zhangsf
uid=2333(zhangsf) gid=2333(zhangsf) groups=2333(zhangsf),1001(sys1),1002(sys2),1003(user1)

[root@server0 ~]# tail -n 5 /etc/passwd
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
user1:x:1001:1003::/home/user1:/sbin/nologin
user2:x:1002:1002::/home/user2:/bin/bash
zhangsf:x:2333:2333:ZhangSanFeng:/home/zhangsf:/sbin/nologin

[root@server0 ~]# tail -n 5 /etc/group
slocate:x:21:
sys1:x:1001:user1,user2,zhangsf
sys2:x:1002:user1,zhangsf
user1:x:1003:user2,zhangsf
zhangsf:x:2333:

[root@server0 ~]# tail -n 5 /etc/shadow
gnome-initial-setup:!!:16442::::::
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:99999:7:::
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::

八、通過sudo以root身份運行命令

sudo命令可以使賬戶根據/etc/sudoers文件中的設置,以root或其他賬戶身份運行命令。sudo要求輸入自己的密碼來進行身份驗證,而不是輸入他們要以什麼賬戶(root)的密碼。編輯/etc/sudoers文件用命令visudo。

這樣的好處是,可以把一部分命令交給非root賬戶去做,而不是像su - <username>那樣真的變成root,也不用告知root密碼。所有sudo運行的命令都會記錄到/var/log/secure日誌中。

比如,添加賬戶useradd是root身份執行的命令,現在用user2身份添加賬戶user3。

[root@server0 ~]# su - user2
[user2@server0 ~]$ sudo useradd user3

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for user2: 
user2 is not in the sudoers file.  This incident will be reported.

[root@server0 ~]# tail -n 2 /var/log/secure
Apr  2 00:40:39 localhost sudo: user2 : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/user2 ; USER=root ; COMMAND=/sbin/useradd user3
Apr  2 00:40:56 localhost su: pam_unix(su-l:session): session closed for user user2

我們在/etc/sudoers裏面增加user2以後再嘗試一下。可以看到,user2也能添加user3,而且/var/log/secure裏面記錄了是user2添加的用戶。

[root@server0 ~]# visudo
[root@server0 ~]# cat /etc/sudoers | grep user2
user2	ALL=/usr/sbin/useradd

[root@server0 ~]# su - user2
Last login: Thu Apr  2 00:40:08 CST 2020 on pts/1

[user2@server0 ~]$ sudo useradd user3
[sudo] password for user2: 
[user2@server0 ~]$ id user3
uid=2334(user3) gid=2334(user3) groups=2334(user3)
[user2@server0 ~]$ exit
logout

[root@server0 ~]# tail -n 4 /var/log/secure
Apr  2 00:47:15 localhost sudo: user2 : TTY=pts/1 ; PWD=/home/user2 ; USER=root ; COMMAND=/sbin/useradd user3
Apr  2 00:47:15 localhost useradd[5576]: new group: name=user3, GID=2334
Apr  2 00:47:15 localhost useradd[5576]: new user: name=user3, UID=2334, GID=2334, home=/home/user3, shell=/bin/bash
Apr  2 00:49:30 localhost su: pam_unix(su-l:session): session closed for user user2

九、管理用戶密碼/etc/shadow

/etc/shadow用於存儲用戶的加密密碼和密碼策略。其格式是用冒號分隔9列信息

name:password:lastchange:minage:maxage:warning:inactive:expire:blank

  • name是用戶名;
  • password是經過加密的密碼,如果密碼開頭是感嘆號,表示密碼被鎖定;
  • lastchange最後一次更改密碼的日期,距離1970.01.01的天數;
  • minage表示lastchange後最少經過minage才能更改密碼,0表示沒有最短期限要求;
  • maxage表示lastchange後最多經過maxage必須更改密碼;
  • warning表示密碼即將到期的警告期,0表示不提供警告;
  • inactive密碼到期後保持活動的天數,在此期限內用戶仍可以登錄系統並更改密碼,在指定天數過後,賬戶被鎖定,變爲不活動;
  • expire賬戶到期日期,距離1970.01.01的天數,與前面密碼的期限不同,這個expire指的是賬戶的期限;
  • blank爲預留字段,供未來使用;

/etc/shadow裏面很多字段都是用距離1970.01.01的天數來作爲值的,怎麼才能計算出這個天數是多少呢?那就是使用date命令,可以用來計算距離某天多少天的日期,或者某天距離某天多少天。date -d加上簡單的描述字符就知道這個天數是多少了。

[root@server0 ~]# date -d "19700101+18376days"
Fri Apr 24 00:00:00 CST 2020

通過chage命令可以修改某個賬戶的密碼有效期設置。

chage -l user1 查看用戶user1的密碼設置。

chage -m 0 -M 90 -W 8 -I 14 -E 2021-01-01 user1 將用戶user1的密碼設置更改爲最後一次更改密碼(2020-April-01)後最少0天可以改密碼,最多90天(2020-June-30)就必須改密碼,到期前8天開始提示改密碼,到期後寬限到14天(2020-July-14),賬戶有效期到2021-January-01。

[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:99999:7:::
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# chage -l user1
Last password change					: Apr 01, 2020
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

[root@server0 ~]# chage -m 0 -M 90 -W 8 -I 14 -E 2021-01-01 user1
[root@server0 ~]# 
[root@server0 ~]# chage -l user1
Last password change					: Apr 01, 2020
Password expires					: Jun 30, 2020
Password inactive					: Jul 14, 2020
Account expires						: Jan 01, 2021
Minimum number of days between password change		: 0
Maximum number of days between password change		: 90
Number of days of warning before password expires	: 8
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

chage -d 0 user1 設置user1必須改祕密。

[root@server0 ~]# chage -d 0 user1
[root@server0 ~]# chage -l user1
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Jan 01, 2021
Minimum number of days between password change		: 0
Maximum number of days between password change		: 90
Number of days of warning before password expires	: 8
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

usermod -L user1 可以用來鎖定賬戶。被鎖定的賬戶的密碼前面會多一個感嘆號 !,注意觀察。usermod -U user1可以用來解鎖賬戶。

[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# 
[root@server0 ~]# usermod -L user1
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:!$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# usermod -U user1
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

 

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