鸟哥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