Linux 用戶管理
前言
Linux是多用戶的操作系統,針對用戶的角色給予相對應的權限,對於維護系統的安全是非常重要的。在Linux中能夠以 分組
或是 針對個別用戶
的方式給予系統的使用權限,也能對密碼進行相關設定,包含要求 定期更換密碼
或是 密碼的有效期限
,減少用戶遭到盜用的風險。
關於用戶相關的設定檔
/etc/passwd
/etc/group
/etc/shadow
/etc/login.defs
/etc/passwd
管理用戶資訊的地方,包含以下資訊
name、passwd、uid、groupid 、description 、家目錄、shell
密碼的部分因為是加密過所以會顯示x
/etc/group
可以查看所有的群組,同時標註每個用戶是屬於哪個群組,包含以下資訊
groupname、grouppassword、groupid ..
/etc/shadow
這個檔案存放加密過後密碼、密碼過期日、長度限制等等
可以使用 grep 用戶名 /etc/shadow
查看,會發現一串數字,最後幾個數字,沒有修改過的情況下預設大概會長這樣0:99999:7:::
這幾個數字分別為 多少天不能改密碼、密碼多久時間內有效,時間到就需要修改密碼、修改密碼前的警告天數…
以下就整理/etc/shadow
檔案中 會顯示的資訊,這些資訊以:
分隔,每一列代表一個使用者帳戶
列 1:用戶名
列 2:經過加密過後的使用者密碼
列 3:上次修改密碼的日期
列 4:密碼過期期限,過期後,使用者需要修改密碼才能繼續使用帳戶。
列 5:密碼需要修改前的警告天數
列 6:密碼過期後帳戶的有效天數。
列 7:帳戶失效日期
列 8:保留欄位,這些欄位在一些系統中可能用於儲存其他額外的資訊。
/etc/login.defs
用戶建立時預設使用的設置,如UID、密碼期限…,非常重要的檔案,關係到了整個系統的安全
用戶管理
新增用戶 (useradd)
useradd 用戶名
新增後會發現/home
多出了一個用戶的目錄
創建之後也會用戶預設會創建一個跟用戶名一樣的群組,用戶會在該群組內
刪除用戶 (userdel)
僅刪除用戶userdel 用戶名
-r
: 刪除用戶,同時也刪除家目錄userdel -r 用戶名
修改用戶 (usermod)
-l
: 修改用戶名-d
: 修改用戶家目錄。(登陸後所在的目錄)-g
: 修改用戶所屬的群組。 (會讓家目錄的擁有群組改變)-G
: 修改用戶所屬的附加群組。-s
: 修改用戶登入後所使用的shell。-m
: 如果修改了家目錄,同時移動用戶的家目錄內容。
新增用戶到群組
只是讓用戶多加入一個群組,不會影響到原本用戶所在的群組
usermod -G 群組名 用戶名
會修改到用戶原本所在的群組
usermod -g 群組名 用戶名
修改用戶名稱
只會修改用戶名,其他如家目錄、群組都不會動到
sudo usermod -l 新用戶名 舊用戶名
例如 :sudo usermod -l allynn ally
修改家目錄
sudo usermod -d 新目錄名稱 -m 用戶名
例如 :sudo usermod -d /home/kiki -m ally
目錄名稱儘量用絕對路徑
使用
-m
會將原本內容換過去,如果想要新目錄是空的就不用加-m
自己的測試結果
-m
比較像是給家目錄改名,原檔名會直接被變成新檔名有加
-m
新目錄名不能存在不加
-m
則目錄必須存在如果只是用
-d
,就什麼都沒差,只是修改用戶登陸後所在的目錄該檔案如果一開始是由root 建立 也沒關係,使用 -d 後不會改變檔案擁有者, -d 很單純的是修改用戶登陸後所在的目錄
同時使用多個參數
useradd -g student -s /bin/bash -c “smart guy” -d /home/jerry -m jerry
群組管理
新增群組 (groupadd)
groupadd 群組名
刪除群組 (groupdel)
groupdel 群組名
密碼管理 (chage)
chage
是針對個別用戶進行設定
如果想要對所有的用戶進行修改,可以修改/etc/login.defs
的內容
範例
chage -m 3 -M 90 -W 5 -I 3 用戶名
-m
: 設定變更密碼後,多少天以後才能再改密碼-M
: 密碼的最大有效天數,時間到會請使用者改密碼-W
: 密碼到期前幾天會提醒用戶-I
: 密碼到期多少天 後,帳戶會禁用-E
: 可以直接設定用戶帳戶的過期日期 ,格式為YYYY-MM-DD
只會影響本地帳戶(非LDAP等遠程帳戶)的設置
切換用戶 (su -)
切換到其他用戶
su - 用戶名
切換到root 帳號
su -
切換到root 之後,如果想換到其他用戶,不用再輸入密碼
切換過去後可以使用 exit
登出
root 權限 (su - 、 sudo)
root是整個操作系統中的超級用戶,擁有最高級的權限,說它系統內的神也不為過,神可以選擇要給哪個用戶自己部份的權力
定義那些用戶可以使用sudo (/etc/sudoers)
用戶是否可以使用sudo,都配置在 /etc/sudoers
修改用戶到 wheel群組
找到 wheel 那行,會看到只要在wheel 這個群組內的用戶,都有root 權限 (可以使用 sudo 指令)
usermod -G wheel 用戶名
定義個別用戶
找到root ALL(ALL)=ALL 那行,在下一行新增個用戶名
用戶名 ALL(ALL)=ALL
用戶監控 (who、last、w、id 指令)
who
last
w
pinky
id
users
who
查看那些人正在登錄中
- 列 1:用戶名
- 列 2:終端(tty)名
- 列 3:登錄時間
- 列 4:來源 IP 地址或主機名
last
可以查看所有登錄過系統的歷史紀錄
只看登陸名
last | awk '{print $1}'
只看登陸名、排序
last | awk '{print $1}' | sort
只看登陸名、排序、去重複
last | awk '{print $1}' | sort | uniq
w
比 who
更詳細一點的資訊,包含用戶正在使用的程序
- 列 1:用戶名
- 列 2:TTY(終端)名
- 列 3:登錄時間
- 列 4:運行的命令或活動
- 列 5:JCPU(用戶和系統的 CPU 時間)
- 列 6:PCPU(僅用戶 CPU 時間)
- 列 7:用戶的活動狀態
- 列 8:登錄的來源 IP 地址或主機名
pinky
顯示有關用戶的一些基本信息,包括用戶名、真實姓名、登錄時間、空閒時間等。,較早版本可能使用finger
指令 (centos 7 以前)
指令pinky 用戶名
以下是一些可能顯示的列信息:
- 列 1:用戶名
- 列 2:真實姓名
- 列 3:終端(tty)名
- 列 4:登錄時間
- 列 5:空閒時間
- 列 6:登錄 IP 地址或主機名
如果未指定用戶名,它將默將當前登錄中的用戶顯示出來
id
查看自己的資訊 (UID、組別….)
id
查看特定用戶資訊 (UID、組別….)
id 用戶名
users
查看當前登陸的用戶名
與用戶對話
wall
write
wall
跟所有當前登錄中的用戶廣播
wall
輸入指令後可以開始輸入要廣播的訊息,打完按 ctrl+D 送出
或是可以直接在後面接要廣播的訊息wall your message
write
跟指定用戶傳遞訊息
write 用戶名
打完按 ctrl+D 送出
或是可以直接在後面接要廣播的訊息write 用戶名 your message