Ubuntu 上的帳號和群組管理

May 8, 2016

帳號命名原則

管理者總是讓帳號有一定的統一規則。如:

這些都是為了維護和管理阿!!

Account 帳號

在 ubuntu 中,每個使用者都有獨立的 UID(ID Number),系統對帳號的識別以 UID 為準,帳號的名稱僅用在登錄系統上。UID 就像身分證一樣必須唯一(UID 0 以外),有著一對一關係。

# 系統的設定
$ grep UID /etc/login.defs
UID_MIN                  1000
UID_MAX                 60000
#SYS_UID_MIN              100
#SYS_UID_MAX              999

Group 群組

帳號與群組類似,簡稱 GID(Group ID)。

$ cat /etc/passwd | tail -n 5
cch:x:1000:1000:cch,,,:/home/cch:/bin/bash
naruto:x:1001:1001:Test Account:/home/naruto:/bin/bash
itahi:x:1002:1002:Test Account:/home/itahi:/bin/bash
madara:x:1003:1004::/home/madara:/sbin/nologin
brouto:x:1004:1006::/home/brouto:/sbin/nologin
$ cat /etc/group | tail -n 5
itahi:x:1002:
ftpgroup:x:1003:naruto,madara
madara:x:1004:
ftpgroup2:x:1005:brouto
brouto:x:1006:naruto

root

一定是存在系統的,權限為最高的帳號。在 ubuntu 不允許預設 root 登入,須以一般帳號登入再提權。rootUID0,帳號 UID 改為 0,則權限與 root 是畫上等號的。

$ id root
uid=0(root) gid=0(root) groups=0(root)

帳號管理相關目錄與介紹

$ /etc/passwd # 紀錄系統帳號資訊
$ /etc/group # 紀錄群組帳號的資訊檔
$ /etc/shadow # 記錄密碼相關的資訊紀錄

passwd 檔案

格式為 帳號:密碼:UID:GID:註解:家目錄:shell

group 檔案

格式 群組名稱:密碼:GID:帳號列表。可用 groupaddgpasswdgroupdel 處裡該檔案,並不會直接修改。

shadow 檔案

帳號和群組相關指令

# 範例
$ sudo useradd -d /home/roof -u 5000 -s /bin/bash roof
$ id roof
uid=5000(roof) gid=5000(roof) groups=5000(roof)
$ sudo userdel roof # 加上 -r 參數表示連同家目錄一並刪除
$ id roof
id: ‘roof’: no such user
$ sudo useradd student100
$ sudo useradd student101
$ sudo useradd student102
$ sudo groupadd -g 800 stustaff # -g 給予 GID
$ sudo groupadd -g 900 ta
$ sudo gpasswd -a student100 stustaff # -a 附加要新增的帳號到群組 stustaff;-d 則表示刪除
Adding user student100 to group stustaff
 sudo gpasswd -a student101 ta
Adding user student101 to group ta
$ sudo gpasswd -a student102 ta
Adding user student102 to group ta
$ sudo cat /etc/group | grep -E "(stustaff)|(ta)"
tape:x:26:
www-data:x:33:
staff:x:50:
crontab:x:107:
itahi:x:1002:
stustaff:x:800:student100 ##
ta:x:900:student101,student102 ##
$ id student101
uid=1006(student101) gid=1008(student101) groups=1008(student101),900(ta)
$ sudo groupdel ta # 刪除群組
$ id student101
uid=1006(student101) gid=1008(student101) groups=1008(student101)
$ sudo groupdel stustaff

帳號預設設定

useradd 檔案基本的設定值

GROUP=500 # 帳號預設 GID
HOME=/home # 目錄位置
INACTIVE=-1 # 是否停用,-1 表啟用
EXPIRE= # 失效日期
SHELL=/bin/sh # 使用 shell
SKEL=/etc/skel # 套用 SKEL 設定值

login.defs 帳號詳細資訊

MAIL_DIR                /var/main # 帳號郵件存放目錄
MAIL_FILE               .mail   
FAILLOG_ENAB            yes # 紀錄和顯示 /var/log/faillog 紀錄資訊
LOG_UNKFAIL_ENAB        no # 登入錯誤被記錄時,允許顯示不知名帳戶
LOG_OK_LOGINS           no # 開啟正確登入紀錄
SYSLOG_SU_ENAB          yes # 開啟切換用戶紀錄
SYSLOG_SG_ENAB          yes # 開啟切換用戶紀錄
...
PASS_MAX_DAYS           99999 # 密碼可使用天數
PASS_MIN_DAYS           0   # 密碼多少日不得變更
PASS_WARN_AGE           7   # 密碼失效前多少日提供警告
...

結論

透過 useradd 新增使用者,透過 grouadd 新增使用者至某個群組,這樣算是可以較清楚的管理系統的使用者了。當然這樣還不夠,適當地將這些 UID、GID 應用在不論是檔案權限的劃分或者服務使用的權限這才是最好的配置。

以上是從學校學到的資訊。如有問題可留言回覆。