帳號管理結構
最後更新:2006/12/02
帳號檔: /etc/passwd
檔案結構說明 (範例)
aaa:x:100:200:aaa200:/aaa:/bin/bash
aaa:user name
x:password 帳號密碼,基於安全性考量以MD5加密後的密碼存放於/etc/shadow,這裡只用x標示,另一種附加功能是標示該帳號為有效帳號(空值視為無效帳號)
100:user id
200:group id
aaa200: 說明
/aaa: 家目錄
/bin/bash: 權限(shell路徑位置) -->對應到 /etc/shells
密碼檔:/etc/shadow
檔案結構說明 (範例)
aaa:!!:13222:0:99999:7:100:200:300
aaa:帳號
!!:經過編碼的密碼
13222:最後變動密碼的天數
0:可以更改密碼的剩餘天數
99999:必須更改密碼的剩餘天數
7:必須變更的幾天前送出警告訊息
100:更期限後的幾天還沒修改自動關閉帳號
200:帳號被關閉的天數
300:保留的欄位
群組檔:/etc/group
檔案結構說明 (範例)
disk:x:6:root
disk:群組名稱
x:密碼(x=無密碼,另一種附加功能是標示該群組為有效群組)
6:group id (群組ID)
root:群組成員,以分號標記
新增帳號預設檔: /etc/default/useradd
GROUP=100 #預設群組
HOME=/home #使用者預設家目錄
INACTIVE=-1
EXPIRE= # 預設帳號過期日
SHELL=/bin/bash #預設權限
SKEL=/etc/skel #複製家目錄下的預設檔案與子目錄(複製 /etc/skel 範本目錄)
shell權限檔: /etc/shells
您可以在這裡新增或刪除您自訂的權限項目
也就是這裡是您的
預設的權限有下列幾個
/bin/sh
/bin/bash
/sbin/nologin
/bin/ash
/bin/bsh
/bin/ksh
/usr/bin/ksh
/usr/bin/pdksh
/bin/tcsh
/bin/csh
/bin/zsh
那上面這些shell是做啥用的呢?
有修芳昌老師的shell script的人應該在撰寫程式時會在程式上key上#!/usr/bin/perl
來引用perl 的函式庫及權限
沒錯...在linux中使用者的權限也是以引用的方式的方式來取得權限及函式庫....
一般預設的權限是/bin/bash 但是如果你所創的帳號使用來收信則通常會給/sbin/nologin
意思是說...可以使用系統服務但不能登入主機....
===========愛的分格線===========愛的分格線===========愛的分格線===========愛的分格線===========
帳號管理指令
新增帳號:useradd
useradd -D [-g default_group] [-b default_home] [-f default_inactive]
[-e default_expire_date] [-s default_shell]
參數說明:
-g <default_group> 設定預設的群組
-d <default_home> 使用者家目錄上層管理目錄(如 /home)
-f <default_inactive> 設定逾期未變更密碼後幾日停用帳戶
-e <default_expire_date> 設定預設的帳戶到期日
-s <default_shell> 設定預設的 shell
-p <set_password> 設定預設密碼,這個指令其實是無效的,因為沒有經過編碼直接塞進去
範例
useradd -u 500 -g 100 -d /home/danny -s /bin/bash -e 20061121 danny
新增一個帳號名稱為danny , 指定uid為500, 指定gid為100, 家目錄的路徑為/home/danny , 權限shell指定為/bin/bash , 有效日期到2006年11月21日
設定或更改密碼:passwd
語法:passwd [-k] [-l] [-u [-f]] [-d] [-S] username
參數說明:
-k 設定密碼逾期失效後才可變更
-l 鎖住帳戶(會在 /etc/shadow 檔案密碼欄位前加上 !! 或 ! 符號)
-u 解開鎖定的帳戶
-f 強制執行(配合 -u 參數使用)
-d 刪除帳戶密碼
-S 列出密碼相關資訊
-n minday 設定不可變更密碼的天數
-x maxday 設定最常需要變更密碼的天數
-w warnday 設定密碼到期前幾日發出警訊
-i inactiveday 設定帳戶到期後的緩衝天數
修改使用者:usermod
語法:usermod [-c comment] [-d home_dir [-m]] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group [,...]] [-l login_name] [-p passwd]
[-s shell] [-u uid [-o]] [-L|-U] username
參數說明:
-c <comment> 全名或註解
-d <home_dir> 指定使用者家目錄
-e <expire_date> 指定帳戶到期日
-f <inactive_time> 逾期未變更密碼後帳戶停用日期(緩衝天數)
-g <initial_group> 指定帳戶主要的隸屬群組
-G <group> 指定帳戶其它的隸屬群組
-l <login_name> 自動建立使用者家目錄(系統預設)
-p <passwd> 指定帳戶密碼
-s <shell> 指定登入後所使用的 shell
-u <uid> 指定帳戶辨識碼 UID
-L 鎖定帳戶
-U 解除鎖定帳戶
刪除使用者:userdel
語法:
userdel [-r] username
參數說明:
-r <del all setting> 刪除相關設定
範例
userdel danny
刪除danny這個帳號...
注意,有參數跟沒參數有很大的差別
userdel danny
(1)只會刪掉 /etc/passwd /etc/shadow及 /etc/group 中的danny 資料
(2)uid 及 gid 值將會被保留,不會沿用給下一個新建的user
userdel -r danny
(1)刪除danny這個帳號,含家目錄及裡面所有檔案
(2)如果被刪除的uid 及 gid 值是最後一個數值,則該uid 及 gid 值將會給下一個user
顯示使用者執行過的指令:lastcomm
需啟動 psacct 服務: /etc/init.d/psacct start
資料檔案: /var/account/pacct
參數說明:
S -- command executed by super-user
F -- command executed after a fork but without a following exec
C -- command run in PDP-11 compatibility mode (VAX only)
D -- command terminated with the generation of a core file
X -- command was terminated with the signal SIGTERM (usually Ctrl + C)
執行者帳號
終端機名稱
CPU 執行時間
常用參數: 在 lastcomm 後面加上: 指令名稱、帳號、終端機名稱
ex. lastcomm rm; lastcomm root; lastcomm pts/1
顯示最近系統登入/登出主機的用戶及時間:last
這個指令預設只會紀錄最近的登入紀錄
統計執行過的程序:sa
需啟動 psacct 服務: /etc/init.d/psacct start
資料檔案: /var/account/pacct
顯示格式:
該程序執行次數
已執行時間 (單位: 分鐘)
CPU 處理時間 (單位: 分鐘)
以 CPU 時間平均計算的記憶體使用量
程序名稱
sa -a 顯示所有程序記錄
sa -m 依使用者統計
切換使用者帳號:su
參數說明:
- 如果執行 su - 時,表示該使用者想要變換身份成為 root ,且使用 root 的
環境設定參數檔,如 /root/.bash_profile 等等。
-l 後面可以接使用者,例如 su -l dmtsai ,這個 -l 好處是,可使用欲變換身份者
他的所有相關環境設定檔。
-m 使用目前的環境設定,而不重新讀取新使用者的設定檔
-p 同上
-c 僅進行一次指令,所以 -c 後面可以加上指令
取得權限:sudo
設定檔位置:/etc/sudoers
設定方法請參照另一個網頁:
http://www.ihao.org/dz5/viewthread.php?tid=137&extra=page%3D1
===========愛的分格線===========愛的分格線===========愛的分格線===========愛的分格線===========
安全性控管方法
Linux伺服器的安全控管重要嗎?不用說當然很重要,所以正確的概念對管理者來說是非常重要的
在設定權限時要先搞清楚要給使用者何種服務,這裡的服務指的是要做什麼用?
例如如果是Mail帳號可以使用 /bin/nologin 的空shell權限或乾脆不建實體帳號以虛擬帳號的方式建立
因為:並不是所有的user或使用者都必須親自進到伺服器內使用服務,減少非管理者進到主機才是王道,
在預設的linux中有給八個左右的shell權限,這些shell很重要...可惜的是老師沒有說明權限的用意
再來提到log (紀錄檔)
講義上的兩個大問題
(1) Log是有分的,並不是只看/var/log/messages
mail log跟system log是不會在同一個檔案中!!
詳情可請參照 /etc/syslog設定檔跟/var/log下的檔案
(2)在我的經驗中,當你被入侵的時候通常log檔是無效的,為什麼這麼說呢?
因為沒有一個白癡入侵者會笨笨的把紀錄留給你看,通常會下一個crontab 把log 丟到 /dev/null 中
俗稱毀屍滅跡...
那log的真正用途是做啥用?
這個答案很簡單,就是給管理者除錯跟分析使用狀況...
事前防備
事先防備其實是個很廣義的名詞,不然就不會有所謂的資安專家
那在帳號管理的事先防備有哪些呢
其實就只有一個...那就是創建帳號時要給予帳號適當的權限
例如:
帳號的shell 、 目錄鎖定、是否可以登入主機、特定使用者給予特定的登入方式等等
事後追查
好啦...那是不是就無法偵測或了解被入侵的狀況呢?
當然不是囉
可以從幾個方向下手
1.檢查有沒有人動過執行檔
檢查/sbin/ 及 /bin/ 或者重要系統指令目錄下的執行檔有沒有被動過手腳,駭客通常會引用內建執行指令進行攻擊,所以會去竊改系統指令
這時候 lsattr 這個指令就很重要了,不懂的人翻一下書或者等下次補齊
2.檢查網頁檔
網頁檔跟系統有何關係呢?其實在這個網路化時代中,傳統的攻擊手法已經漸漸式微了,目前比較常見的是以apache或nobody的權限入侵網頁,
藉由竄改程式語言(如PHP或PERL)的方式入侵到主機內取得攻擊或入侵權限