鸟哥linux阅读摘要——第十三章linux账号管理与acl权限设定

groups: 查看组群及有效组群

newgrp: 有效组群切换

useradd: 新增账号

 1 [root@study ~]# useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM]\
 2 >  [-c 說明欄] [-d 家目錄絕對路徑] [-s shell] 使用者帳號名
 3 選項與參數:
 4 -u  :後面接的是 UID ,是一組數字。直接指定一個特定的 UID 給這個帳號;
 5 -g  :後面接的那個群組名稱就是我們上面提到的 initial group 啦~
 6       該群組的 GID 會被放置到 /etc/passwd 的第四個欄位內。
 7 -G  :後面接的群組名稱則是這個帳號還可以加入的群組。
 8       這個選項與參數會修改 /etc/group 內的相關資料喔!
 9 -M  :強制!不要建立使用者家目錄!(系統帳號預設值)
10 -m  :強制!要建立使用者家目錄!(一般帳號預設值)
11 -c  :這個就是 /etc/passwd 的第五欄的說明內容啦~可以隨便我們設定的啦~
12 -d  :指定某個目錄成為家目錄,而不要使用預設值。務必使用絕對路徑!
13 -r  :建立一個系統的帳號,這個帳號的 UID 會有限制 (參考 /etc/login.defs)
14 -s  :後面接一個 shell ,若沒有指定則預設是 /bin/bash 的啦~
15 -e  :後面接一個日期,格式為『YYYY-MM-DD』此項目可寫入 shadow 第八欄位,
16       亦即帳號失效日的設定項目囉;
17 -f  :後面接 shadow 的第七欄位項目,指定密碼是否會失效。0為立刻失效,
18       -1 為永遠不失效(密碼只會過期而強制於登入時重新設定而已。)
19 
20 範例一:完全參考預設值建立一個使用者,名稱為 vbird1
21 [root@study ~]# useradd vbird1
22 [root@study ~]# ll -d /home/vbird1
23 drwx------. 3 vbird1 vbird1 74 Jul 20 21:50 /home/vbird1
24 # 預設會建立使用者家目錄,且權限為 700 !這是重點!
25 
26 [root@study ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
27 /etc/passwd:vbird1:x:1003:1004::/home/vbird1:/bin/bash
28 /etc/shadow:vbird1:!!:16636:0:99999:7:::
29 /etc/group:vbird1:x:1004:     <==預設會建立一個與帳號一模一樣的群組名
 1 範例二:假設我已知道我的系統當中有個群組名稱為 users ,且 UID 1500 並不存在,
 2         請用 users 為初始群組,以及 uid 為 1500 來建立一個名為 vbird2 的帳號
 3 [root@study ~]# useradd -u 1500 -g users vbird2
 4 [root@study ~]# ll -d /home/vbird2
 5 drwx------. 3 vbird2 users 74 Jul 20 21:52 /home/vbird2
 6 
 7 [root@study ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
 8 /etc/passwd:vbird2:x:1500:100::/home/vbird2:/bin/bash
 9 /etc/shadow:vbird2:!!:16636:0:99999:7:::
10 # 看一下,UID 與 initial group 確實改變成我們需要的了!

使用useradd增加账号时,参考一下文件作为默认设置

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel/*

passwd: 修改密码

 1 [root@study ~]# passwd [--stdin] [帳號名稱]  <==所有人均可使用來改自己的密碼
 2 [root@study ~]# passwd [-l] [-u] [--stdin] [-S] \
 3 >  [-n 日數] [-x 日數] [-w 日數] [-i 日數] 帳號 <==root 功能
 4 選項與參數:
 5 --stdin :可以透過來自前一個管線的資料,作為密碼輸入,對 shell script 有幫助!
 6 -l  :是 Lock 的意思,會將 /etc/shadow 第二欄最前面加上 ! 使密碼失效;
 7 -u  :與 -l 相對,是 Unlock 的意思!
 8 -S  :列出密碼相關參數,亦即 shadow 檔案內的大部分資訊。
 9 -n  :後面接天數,shadow 的第 4 欄位,多久不可修改密碼天數
10 -x  :後面接天數,shadow 的第 5 欄位,多久內必須要更動密碼
11 -w  :後面接天數,shadow 的第 6 欄位,密碼過期前的警告天數
12 -i  :後面接天數,shadow 的第 7 欄位,密碼失效天數
13 
14 範例一:請 root 給予 vbird2 密碼
15 [root@study ~]# passwd vbird2
16 Changing password for user vbird2.
17 New UNIX password: <==這裡直接輸入新的密碼,螢幕不會有任何反應
18 BAD PASSWORD: The password is shorter than 8 characters <==密碼太簡單或過短的錯誤!
19 Retype new UNIX password:  <==再輸入一次同樣的密碼
20 passwd: all authentication tokens updated successfully.  <==竟然還是成功修改了!

 

 1 範例二:用 vbird2 登入後,修改 vbird2 自己的密碼
 2 [vbird2@study ~]$ passwd   <==後面沒有加帳號,就是改自己的密碼!
 3 Changing password for user vbird2.
 4 Changing password for vbird2
 5 (current) UNIX password: <==這裡輸入『原有的舊密碼』
 6 New UNIX password: <==這裡輸入新密碼
 7 BAD PASSWORD: The password is shorter than 8 characters <==密碼太短!不可以設定!重新想
 8 New password:  <==這裡輸入新想的密碼
 9 BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
10 # 同樣的,密碼設定在字典裡面找的到該字串,所以也是不建議!無法通過,再想新的!
11 New UNIX password: <==這裡再想個新的密碼來輸入吧
12 Retype new UNIX password: <==通過密碼驗證!所以重複這個密碼的輸入
13 passwd: all authentication tokens updated successfully. <==有無成功看關鍵字
1 範例三:使用 standard input 建立用戶的密碼
2 [root@study ~]# echo "abc543CC" | passwd --stdin vbird2
3 Changing password for user vbird2.
4 passwd: all authentication tokens updated successfully.



本人注:在debian版本中,--stdio不被支持,通过script批量改密码的工作由chpasswd来完成。

 這個動作會直接更新使用者的密碼而不用再次的手動輸入!好處是方便處理,缺點是這個密碼會保留在指令中, 未來若系統被攻破,人家可以在 /root/.bash_history 找到這個密碼呢!所以這個動作通常僅用在 shell script 的大量建立使用者帳號當中!要注意的是,這個選項並不存在所有 distributions 版本中, 請使用 man passwd 確認你的 distribution 是否有支援此選項喔!

 

chage: 显示修改密码日期参数(比passwd -S更易懂)

[root@study ~]# chage [-ldEImMW] 帳號名
選項與參數:
-l :列出該帳號的詳細密碼參數;
-d :後面接日期,修改 shadow 第三欄位(最近一次更改密碼的日期),格式 YYYY-MM-DD
-E :後面接日期,修改 shadow 第八欄位(帳號失效日),格式 YYYY-MM-DD
-I :後面接天數,修改 shadow 第七欄位(密碼失效日期)
-m :後面接天數,修改 shadow 第四欄位(密碼最短保留天數)
-M :後面接天數,修改 shadow 第五欄位(密碼多久需要進行變更)
-W :後面接天數,修改 shadow 第六欄位(密碼過期前警告日期)

範例一:列出 vbird2 的詳細密碼參數
[root@study ~]# chage -l vbird2
Last password change                                    : Jul 20, 2015
Password expires                                        : Sep 18, 2015
Password inactive                                       : Sep 28, 2015
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 60
Number of days of warning before password expires       : 7

 

範例二:建立一個名為 agetest 的帳號,該帳號第一次登入後使用預設密碼,但必須要更改過密碼後,
        使用新密碼才能夠登入系統使用 bash 環境
[root@study ~]# useradd agetest
[root@study ~]# echo "agetest" | passwd --stdin agetest
[root@study ~]# chage -d 0 agetest
[root@study ~]# chage -l agetest | head -n 3
Last password change                : password must be changed
Password expires                    : password must be changed
Password inactive                   : password must be changed
# 此時此帳號的密碼建立時間會被改為 1970/1/1 ,所以會有問題!

範例三:嘗試以 agetest 登入的情況
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user agetest.
Changing password for agetest
(current) UNIX password:  <==這個帳號被強制要求必須要改密碼!

 

usermod: 修改账号(user modify)

[root@study ~]# usermod [-cdegGlsuLU] username
選項與參數:
-c  :後面接帳號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些帳號的說明。
-d  :後面接帳號的家目錄,即修改 /etc/passwd 的第六欄;
-e  :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內的第八個欄位資料啦!
-f  :後面接天數,為 shadow 的第七欄位。
-g  :後面接初始群組,修改 /etc/passwd 的第四個欄位,亦即是 GID 的欄位!
-G  :後面接次要群組,修改這個使用者能夠支援的群組,修改的是 /etc/group 囉~
-a  :與 -G 合用,可『增加次要群組的支援』而非『設定』喔!
-l  :後面接帳號名稱。亦即是修改帳號名稱, /etc/passwd 的第一欄!
-s  :後面接 Shell 的實際檔案,例如 /bin/bash 或 /bin/csh 等等。
-u  :後面接 UID 數字啦!即 /etc/passwd 第三欄的資料;
-L  :暫時將使用者的密碼凍結,讓他無法登入。其實僅改 /etc/shadow 的密碼欄。
-U  :將 /etc/shadow 密碼欄的 ! 拿掉,解凍啦!

 

範例一:修改使用者 vbird2 的說明欄,加上『VBird's test』的說明。
[root@study ~]# usermod -c "VBird's test" vbird2
[root@study ~]# grep vbird2 /etc/passwd
vbird2:x:1500:100:VBird's test:/home/vbird2:/bin/bash

範例二:使用者 vbird2 這個帳號在 2015/12/31 失效。
[root@study ~]# usermod -e "2015-12-31" vbird2
[root@study ~]# chage -l vbird2 | grep 'Account expires'
Account expires                     : Dec 31, 2015

範例三:我們建立 vbird3 這個系統帳號時並沒有給予家目錄,請建立他的家目錄
[root@study ~]# ll -d ~vbird3
ls: cannot access /home/vbird3: No such file or directory  <==確認一下,確實沒有家目錄的存在!
[root@study ~]# cp -a /etc/skel /home/vbird3
[root@study ~]# chown -R vbird3:vbird3 /home/vbird3
[root@study ~]# chmod 700 /home/vbird3
[root@study ~]# ll -a ~vbird3
drwx------.  3 vbird3 vbird3   74 May  4 17:51 .   <==使用者家目錄權限
drwxr-xr-x. 10 root   root   4096 Jul 20 22:51 ..
-rw-r--r--.  1 vbird3 vbird3   18 Mar  6 06:06 .bash_logout
-rw-r--r--.  1 vbird3 vbird3  193 Mar  6 06:06 .bash_profile
-rw-r--r--.  1 vbird3 vbird3  231 Mar  6 06:06 .bashrc
drwxr-xr-x.  4 vbird3 vbird3   37 May  4 17:51 .mozilla
# 使用 chown -R 是為了連同家目錄底下的使用者/群組屬性都一起變更的意思;
# 使用 chmod 沒有 -R ,是因為我們僅要修改目錄的權限而非內部檔案的權限!

 

userdel: 删除账号

[root@study ~]# userdel [-r] username
選項與參數:
-r  :連同使用者的家目錄也一起刪除

範例一:刪除 vbird2 ,連同家目錄一起刪除
[root@study ~]# userdel -r vbird2

 


 

 

以上useradd/usermod/userdel都是root才能使用的命令,一般账号查阅自己的账号信息,可以用以下命令。

id/finger

 

chfn: 修改账户描述信息(change finger)

[root@study ~]# chfn [-foph] [帳號名]
選項與參數:
-f  :後面接完整的大名;
-o  :您辦公室的房間號碼;
-p  :辦公室的電話號碼;
-h  :家裡的電話號碼!

範例一:vbird1 自己更改一下自己的相關資訊!
[vbird1@study ~]$ chfn
Changing finger information for vbird1.
Name []: VBird Tsai test         <==輸入你想要呈現的全名
Office []: DIC in KSU            <==辦公室號碼
Office Phone []: 06-2727175#356  <==辦公室電話
Home Phone []: 06-1234567        <==家裡電話號碼

Password:  <==確認身份,所以輸入自己的密碼
Finger information changed.

[vbird1@study ~]$ grep vbird1 /etc/passwd
vbird1:x:1003:1004:VBird Tsai test,DIC in KSU,06-2727175#356,06-1234567:/home/vbird1:/bin/bash
# 其實就是改到第五個欄位,該欄位裡面用多個『 , 』分隔就是了!

[vbird1@study ~]$ finger vbird1
Login: vbird1                           Name: VBird Tsai test
Directory: /home/vbird1                 Shell: /bin/bash
Office: DIC in KSU, 06-2727175#356      Home Phone: 06-1234567
Last login Mon Jul 20 23:12 (CST) on pts/0
No mail.
Plan:
I will study Linux during this year.
# 就是上面特殊字體呈現的那些地方是由 chfn 所修改出來的!

 

chsh: change shell

 1 [vbird1@study ~]$ chsh [-ls]
 2 選項與參數:
 3 -l  :列出目前系統上面可用的 shell ,其實就是 /etc/shells 的內容!
 4 -s  :設定修改自己的 Shell 囉
 5 
 6 範例一:用 vbird1 的身份列出系統上所有合法的 shell,並且指定 csh 為自己的 shell
 7 [vbird1@study ~]$ chsh -l
 8 /bin/sh
 9 /bin/bash
10 /sbin/nologin   <==所謂:合法不可登入的 Shell 就是這玩意!
11 /usr/bin/sh
12 /usr/bin/bash
13 /usr/sbin/nologin
14 /bin/tcsh
15 /bin/csh        <==這就是 C shell 啦!
16 # 其實上面的資訊就是我們在 bash 中談到的 /etc/shells 啦!
17 
18 [vbird1@study ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd
19 Changing shell for vbird1.
20 Password:  <==確認身份,請輸入 vbird1 的密碼
21 Shell changed.
22 vbird1:x:1003:1004:VBird Tsai test,DIC in KSU,06-2727175#356,06-1234567:/home/vbird1:/bin/csh
23 
24 [vbird1@study ~]$ chsh -s /bin/bash
25 # 測試完畢後,立刻改回來!
26 
27 [vbird1@study ~]$ ll $(which chsh)
28 -rws--x--x. 1 root root 23856 Mar  6 13:59 /bin/chsh

 

groupadd: 新增组群

 1 [root@study ~]# groupadd [-g gid] [-r] 群組名稱
 2 選項與參數:
 3 -g  :後面接某個特定的 GID ,用來直接給予某個 GID ~
 4 -r  :建立系統群組啦!與 /etc/login.defs 內的 GID_MIN 有關。
 5 
 6 範例一:新建一個群組,名稱為 group1
 7 [root@study ~]# groupadd group1
 8 [root@study ~]# grep group1 /etc/group /etc/gshadow
 9 /etc/group:group1:x:1503:
10 /etc/gshadow:group1:!::
11 # 群組的 GID 也是會由 1000 以上最大 GID+1 來決定!

 

groupmod: group modify

 1 [root@study ~]# groupmod [-g gid] [-n group_name] 群組名
 2 選項與參數:
 3 -g  :修改既有的 GID 數字;
 4 -n  :修改既有的群組名稱
 5 
 6 範例一:將剛剛上個指令建立的 group1 名稱改為 mygroup , GID 為 201
 7 [root@study ~]# groupmod -g 201 -n mygroup group1
 8 [root@study ~]# grep mygroup /etc/group /etc/gshadow
 9 /etc/group:mygroup:x:201:
10 /etc/gshadow:mygroup:!::

 

groupdel: 删除组群

1 [root@study ~]# groupdel [groupname]
2 
3 範例一:將剛剛的 mygroup 刪除!
4 [root@study ~]# groupdel mygroup
5 
6 範例二:若要刪除 vbird1 這個群組的話?
7 [root@study ~]# groupdel vbird1
8 groupdel: cannot remove the primary group of user 'vbird1'

 

gpasswd: 组群管理员功能

 1 # 關於系統管理員(root)做的動作:
 2 [root@study ~]# gpasswd groupname
 3 [root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname
 4 [root@study ~]# gpasswd [-rR] groupname
 5 選項與參數:
 6     :若沒有任何參數時,表示給予 groupname 一個密碼(/etc/gshadow)
 7 -A  :將 groupname 的主控權交由後面的使用者管理(該群組的管理員)
 8 -M  :將某些帳號加入這個群組當中!
 9 -r  :將 groupname 的密碼移除
10 -R  :讓 groupname 的密碼欄失效
11 
12 # 關於群組管理員(Group administrator)做的動作:
13 [someone@study ~]$ gpasswd [-ad] user groupname
14 選項與參數:
15 -a  :將某位使用者加入到 groupname 這個群組當中!
16 -d  :將某位使用者移除出 groupname 這個群組當中。
17 
18 範例一:建立一個新群組,名稱為 testgroup 且群組交由 vbird1 管理:
19 [root@study ~]# groupadd testgroup  <==先建立群組
20 [root@study ~]# gpasswd testgroup   <==給這個群組一個密碼吧!
21 Changing the password for group testgroup
22 New Password:
23 Re-enter new password:
24 # 輸入兩次密碼就對了!
25 [root@study ~]# gpasswd -A vbird1 testgroup  <==加入群組管理員為 vbird1
26 [root@study ~]# grep testgroup /etc/group /etc/gshadow
27 /etc/group:testgroup:x:1503:
28 /etc/gshadow:testgroup:$6$MnmChP3D$mrUn.Vo.buDjObMm8F2emTkvGSeuWikhRzaKHxpJ...:vbird1:
29 # 很有趣吧!此時 vbird1 則擁有 testgroup 的主控權喔!身份有點像板主啦!
30 
31 範例二:以 vbird1 登入系統,並且讓他加入 vbird1, vbird3 成為 testgroup 成員
32 [vbird1@study ~]$ id
33 uid=1003(vbird1) gid=1004(vbird1) groups=1004(vbird1) ...
34 # 看得出來,vbird1 尚未加入 testgroup 群組喔!
35 
36 [vbird1@study ~]$ gpasswd -a vbird1 testgroup
37 [vbird1@study ~]$ gpasswd -a vbird3 testgroup
38 [vbird1@study ~]$ grep testgroup /etc/group
39 testgroup:x:1503:vbird1,vbird3

 

posted @ 2019-06-06 16:29  memphise  阅读(451)  评论(0编辑  收藏  举报