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


Linux 用戶管理
https://austin72905.github.io/2023/08/03/linux-user-management/
作者
Austin Lin
發布於
2023年8月3日
許可協議