資安筆記 - Linux 使用者與群主

文章目標
- 了解帳號與群組類型與關係
- 了解帳號與群組相關檔案
- 帳號的建立、變更、刪除
- 群組的建立、變更、刪除
- 帳號與群組與權限的應用
- 帳號與群組的查詢
- 帳號於系統的登入狀況、歷史紀錄查詢
- 身分切換與切換方式
- 權力授權與建立授權機制
Linux中的帳號與群主
上一篇文章有講到權限的部分,我們有提到兩個詞 - 使用者和群主,這個東西聽起來簡單但是要複雜也可以很複雜,開始深入討論前我們要先了解一下最基本的帳號分類
帳號分類與類型
帳號分類
Linux總共分為兩種帳號,本機帳號和網域帳號
本機帳號 ( Local Account )
帳號特色
- 在電腦主機內的帳號
- 無法跨越不同主機驗證進行登入
- 可遠端連線至本機,使用不同帳號 ( 相同亦可, Linux ) 登入
- 使用範圍通常限於本機
- 最簡單的帳號管理方式
網域帳號 ( Domain Account)
帳號特色
- 多台主機上的各式服務,各有不同的帳號
- 所有帳號由一台電腦統一管理
- 可以跨越不同主機 ( 或統一網路上的主機 ) 驗證登入後,進行服務管理、應用…
- 使用範圍小從區域網路,大致廣域網路
- 較複雜的帳號管理方式…
帳號類型
除了有兩種不同的帳號,每個種類的帳號也有不同的類型…
超級使用者 ( Super User )
其實他就是root的意思,就是權限最高的帳號,名稱通常是 avatar, root, admin 等,稍微整理一下
- 系統中擁有最高權限的帳號
- 帳號 ( 名稱 ) 通常都為 root、avatar、toor…
- 任何的行為與動作,均通行無阻,應設定一複雜密碼,並妥善保存,盡量不以此帳號做管理應用…
- 有一專屬空間配置:/root/
- UID 為 0 (電腦查看你權限是看這個,權限最高是0)
系統使用者 ( System user )
這個帳號是可以管理伺服器用的帳號,可以查看系統中運行的資源等
- 系統服務的管理者
- 網頁伺服器、郵件伺服器、FTP伺服器…
- 不具備帳號登入功能
- 有管理該服務之權
- UID 為 201 ~ 999
一般使用者 ( Normal user )
這個就是一般的帳號,沒有甚麼好講的
- 一般使用主機的帳號
- 通常沒有管理、設定、變更系統主機之能
- 執行權限、可進入的地方 ( 目錄 ) 會有所限制…
- 有一專屬空間配置:/home/使用者帳號/
- UID 為 1000 ~ 60000
身分識別
那我們要如何判斷使用者在使用哪個帳號呢,你可能在打script有發現表示起來了東西
1 | xxx@xxxxxxx: "~#" |
這個就是可以去判斷管理者和使用者的差別,如果是 #
就代表他是管理者;$
就代表他是一般使用者
1 | #超級使用者、系統使用者命令提示符號 |
群主類型
群主並沒有類型,但是如果是以使用者的角度去看,那就有不同的類型了
群主類型
主要群組 ( Primary group )
也被稱為初始群組(Initial group)
- 每個帳號都必須有一個主要群組
- 作為檔案目錄建立時預設權限使用…
次要群組 ( Secondary group )
也被稱為有效群組(Effective group)
- 主要群組之外增加的群組
- 一個帳號可以加入很多次要群組
使用者私人群組 ( User private group )
- 指群組名稱與使用者名稱相同的群組稱呼
- 通常於建立帳號時,也會建立此群組並設為主要群組
群主資訊查詢
查詢群主的指令是 id
,這個指令會顯示群主的相關資訊
語法:id [選項] [帳號]
- 可用選項 (較常使用)
- -u | 列出帳號 UID
- -g | 列出帳號所屬主要群組 GID
- -G | 列出帳號所屬群組 GID ( 主要群組、次要群組 )
帳號相關檔與結構
使用者和帳號都會需要有一個地方存使用者和群主相關的資料,我們提出兩個比較重要的
我們說一下結構的部分,還有每個點點的意思,用我最愛的表格看一下吧
root | x | 0 | 0 | root | /root | /bin/bash |
---|---|---|---|---|---|---|
帳號名稱 | 密碼 | UID | GID | 說明 | 家目錄 | Shell |
不過一個需要特別注意的地方
Shadow 是比較新的東西,他的出現是為了提升帳號密碼安全所新增的發明,Shadow 增加了要求密碼變更的要求、密碼時效、更新提醒等,所有帳號與資訊都記錄於此
- 功能:紀錄帳號的密碼,但是使用加密技術提升安全性
- 路徑:/etc/shadow
- 結構:root:$6$NdCKA…:17999:0:99999:7:::
我們一樣直接進入結構介紹
root | $6$NdCKA… | 17999 | 0 | 99999 | 7 | |||
---|---|---|---|---|---|---|---|---|
帳號名稱 | 加密密碼 | 密碼變更日期 | 密碼維持日期 | 密碼變更日數 | 密碼變更提醒日數 | 密碼失效寬限日 | 帳號失效寬限日 | 保留 |
東西開始變得複雜了,所以再來看看變了什麼吧
加密密碼:
空
=> 如果是空的就表示沒有設定密碼,可以不用輸入密碼就登入*
=> 沒有設定密碼,但是就不能登入了!
=> 無效的密碼,可能是因為密碼過期、帳號鎖定等$String$
=> 被編碼的訊息密碼維持日期:
這個表示密碼被更改後需要多久才能再次更改,單位是以天計算
如果設為0表示不啟用功能密碼失效寬限日:
空
=> 與0一樣,失效後立即無法使用帳號0
=> 過期立即無法登入-1
=> 關閉功能n
=> 表示n天還可以登入
群主相關與結構
與使用者一樣,也會有一個地方記錄所有群主相關的資訊
群主資訊
- 功能:主要記錄群組所有相關資訊
- 路徑:/etc/group
- 結構範例:root:x:0::
這個結構比使用者簡單了,只有四個資訊
root | x | 0 | |
---|---|---|---|
群主 | 密碼 | GID | 成員 |
群主密碼 Shadow
- 功能:主要記錄群組的密碼
- 路徑:/etc/gshadow
- 結構範例:root:*::
root | * | ||
---|---|---|---|
群主 | 密碼 | 管理帳號 | 成員 |
帳號與群主的管理
帳號相關
建立使用者帳號
非常值觀,就是 useradd / adduser
兩個指令有不同?
有,adduser
是Ubuntu系統專有的指令,與 useradd
不同的是他會一個一個你創建帳號的設定,不會直接創建一個帳號,類似於一個創建帳號的script
- 使用語法:
useradd <option> <name>
可以使用的選項有
- m:建立使用者家目錄
- d:指定家目錄位置 ( 自行建立 )
- u:指定 UID ( 預設系統指定 )
- p:指定帳號密碼 ( 已編碼過 )
- g:指定主要群組 ( 預設為帳號同名 )
- G:指定次要群組
- e:指定帳號有效期 ( MM/DD/YY )
- f:密碼過期寬限日 ( 0 立即無法使用,-1關閉功能 )
- s:指定使用的 shell
- r:建立為管理者帳號
- D:顯示 useradd 建立預設屬性
設定帳號
使用 usermod
可以設定這個帳號的權限、時間等
- 使用語法:
usermod <option> <name>
可以使用的選項有
- l:修改登入名稱
- d:指定家目錄位置 ( 指已存在的目錄 )
- m:移動家目錄 ( 通常搭配 -d 使用 )
- u:修改 UID
- p:修改帳號密碼
- g:修改主要群組 ( 預設為帳號同名 )
- G:修改次要群組
- e:指定帳號有效期 ( MM/DD/YY )
- f:密碼過期寬限日 ( 0 立即無法使用,-1關閉功能 )
- s:指定使用的 shell
- L:鎖定帳號 ( 無法登入 )
- U:解除帳號鎖定
設定帳號密碼
這個應該很熟悉了,就是所謂的 passwd
- 使用語法:
passwd <option> <name>
但其實這個指令不是只有改密碼,我們只是比較常用改密碼,它可以做的密碼設定還很多
可用選項
- d:刪除帳號的密碼
- e:強制密碼過期
- i:密碼失效寬限日數
- w:密碼到期前提醒日數
- x:密碼有效日數
- l:鎖定帳號
- u:解除帳號鎖定
刪除帳號
也很值觀,就是 userdel
- 使用語法:
userdel <option> <name>
可以使用的常用選項只有 -r
,表示把家目錄也刪除,這個使用者的資料會完全清空
群主相關指令
建立群主
使用 groupadd
指令來建立群組。
- 使用語法:
groupadd <option> <name>
可用選項:
f
:指定 GID 重複時,自動建立新 GIDg
:指定 GID (預設系統指定)p
:指定群組密碼r
:建立為管理者群組
編輯群主
若群組設置錯誤,可使用 groupmod
編輯群組。
- 使用語法:
groupmod <option> <name>
可用選項:
n
:修改群組名稱g
:修改 GIDp
:修改群組密碼
管理群主成員
使用 groupmems
管理群組成員。
- 使用語法:
groupmems <option1> <member> <option2> <group>
可用選項:
- Option1:
a
:新增帳號到群組d
:移除群組中的帳號l
:列出群組成員
- Option2:
g
:群組名稱
編輯群主密碼
若需要設置群組密碼,可以使用 gpasswd
。
- 使用語法:
gpasswd <option> <password>
可用選項:
r
:刪除群組密碼a
:將帳號增加到群組d
:移除群組中的帳號M
:指定群組成員 (例如:user1,user2,user3)A
:指定管理帳號
刪除群主
要刪除群組使用 groupdel
。
- 使用語法:
groupdel <groupname>
可用選項:
f
:強制刪除群組 (即使是某帳號的主要群組)
群主切換
群主切換時,可以依照需要提升或下降權限。切換群組有可能是因為以下情況:
- 共享資料:加入分享群組,僅分享特定資料
- 共用資料:加入專案群組,共同管理資料檔案
- 管理需要:加入管理群組,擁有系統管理、網路管理、帳密管理等能力
群主查詢
要查詢目前使用者所屬的群組,可使用 groups
。
- 使用語法:
groups <UserName>
- 如果沒有指定
UserName
,則會查詢當前使用者的群組。
群主登入
若要切換到指定的群組,可以使用 newgrp
。
- 使用語法:
newgrp <groupName>
查詢指令
查詢自己
whoami
:查詢當前使用的帳號id
:顯示更多關於當前使用者的資訊
帳號綜合查詢
finger
:查詢當前帳號的詳細資訊
線上使用者查詢
users
:查詢當前線上的使用者w
:查詢當前線上的使用者,並顯示詳細資訊who
:列出線上使用者的相關資訊 (包括用戶、登錄時間等)b
:顯示系統啟動時間d
:列出已關閉的程序u
:顯示帳號的詳細信息 (包括 PID)q
:僅列出帳號並計算帳號數
顯示最近登入退出帳號
last
:顯示最近登入的帳號和時間- 用法:
last <option> <cmd|user>
- 用法:
lastlog
:顯示每個帳號的最後登入時間和其他重要資訊- 用法:
lastlog <option>
b
:列出 N 天前的登入帳號C
:清除登入記錄 (不建議)u
:列出指定帳號的最後登入資訊t
:列出 N 天後的登入帳號
- 用法:
lastb
:顯示最近登入失敗的帳號- 用法:
lastb <option> <cmd|user>
- 用法:
切換使用者
身分切換
切換使用者是基於安全考量或測試便利性。常見原因包括:
- 降低權限:轉換為權限較低的帳號,減少系統影響
- 啟動服務:以特定帳號啟動服務,避免使用 root 帳號
- 系統維護:使用專屬帳號進行備份、升級等維護工作
基礎指令
切換使用者
su
:切換使用者- 使用語法:
su <option> <UserName>
- 使用語法:
可用選項:
m
:僅變更身分,環境不變更-
:完全切換l
:切換為 root 或指定帳號c
:執行指定命令s
:使用指定的 shell
以使用者執行
sudo
:以授權的使用者身分執行指令,預設為 root- 使用語法:
sudo <option> <command>
- 使用語法:
可用選項:
l
:顯示被授權的內容e
:編輯授權清單 (等同於sudoedit
或visudo
)b
:在背景執行授權指令u
:使用指定授權者的授權g
:使用指定授權群組的授權s
:使用指定的 shell 執行授權內容
sudo 權限授權
使用 visudo
編輯 sudo
設定檔來授權使用者執行特定指令。
- 格式:
root ALL=(ALL:ALL) ALL
- 表格格式:
被授權對象 | 要求來源 | 授權帳號 | 授權內容 |
---|---|---|---|
root | ALL= | (ALL:ALL) | 內容 |
列出所有帳號及群主
- 列出所有帳號:
cat /etc/passwd | cut -d ":" -f 1
- 列出所有使用者帳號:
compgen -u
- 列出所有群組:
compgen -g