2011年7月7日 星期四

有關帳號二、三事

1. id 指令 -> 告訴我們目前帳號的資訊,包括 uid, gid 以及 groups,舉例來說,某個使用者的 id 輸出如下:

uid=1000(herman) gid=1000(herman) groups=1000(herman),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),112(netdev)

上述輸出告訴我們,此使用的 uid 為 1000,使用者帳號為 herman,gid 為 1000,群組亦為 herman,至於 groups 是此使用者所屬群組,主群組為 herman,次群組為 cdrom, floopy, auido, dip, video, plugdev, netdev。

uid -> User ID,建帳號時,系統會自動指定一個未使用的 uid 給你要建的帳號
gid -> Group ID,群組 ID,建帳號時,若未指定,系統會自動指定一個未使用的 gid 給你要建的帳號
groups -> 所屬群組,有主群組及次群組

id 帳號 -> 將某帳號的資訊列出來


2. 使用者帳號設定檔

/etc/passwd     -> 帳號
/etc/shadow     -> 密碼
/etc/group      -> 群組

其權限如下:

-rw-r--r-- 1 root root 1546 2011-07-07 19:12 passwd
-rw-r----- 1 root root 1090 2011-07-07 19:14 shadow
 ^^^^^^*^^

我們可以發現 shadow 的讀取權限受到限制,如上述 * 處,其原因在於防止暴力猜測法以求出密碼。

0000 - 9999

0 - 9

根據離散數學的推導,有一密碼的排列組合為 n 的話,要猜出此密碼的平均次數為 n/2。

PC 上的密碼可能的文字如下所示:

0~9, a~z, A~Z, ~!@#$%^&*()_+{}:"<>?

所謂的暴力猜測法是以電腦幫我們排列組合,來猜測是否與編碼完之密碼一致。

所謂的編碼,是指把 abc123 -> $1$BrhU5/2V$CwKqbD,編碼有一個特性是單向編碼,破解的方式是使用電腦作排列組合再去比對。


3. 新增帳號:

useradd -m 帳號名稱

useradd -m eecs -> 花生省魔術 ?

a. /etc/passwd 加了一行 eecs
b. /etc/shadow 加了一行 eecs
c. /etc/group  加了一行 eecs
d. 系統新增一個 /home/eecs 目錄

Q: 如何手動刪除帳號 ?

4. 給新帳號密碼:

作法一、

root@pc-29:~# passwd eecs
輸入新的 UNIX 密碼:abc123
再次輸入新的 UNIX 密碼:abc123
passwd:密碼已成功地變更


 作法二、

# echo 帳號:密碼 | chpasswd

例如:

# echo eecs:password | chpasswd


5. 刪除帳號

userdel eecs

刪除帳號作了那些動作 ?

a. /etc/passwd 刪除一行 eecs
b. /etc/shadow 刪除一行 eecs
c. /etc/group  刪除一行 eecs
d. 系統新增之 /home/eecs 目錄 *** 沒有 *** 刪除,請至 /home 目錄,執行:
   rm -rf eecs
   手動刪除目錄(要十分確定再作這個動作!!)

5.1 如何「暫時」將帳號鎖起來 ?
假設我們管帳號時發現有某位使用者「疑似」有濫用系統的傾向,例如亂放檔案或是大量傳輸資料導致頻寬不足,這個時候我們可以「暫時」將使用者帳號鎖定。方式如下:在 /etc/shadow 檔中找出該位使用者,在其密碼欄位加上一個星號即可將此帳號鎖起來不讓他登入。



6. 如何新增大量帳號

假設你現在要新增 50 個學生帳號,其學號為:s100a001 ~ s100a050,每個人的群組都是 eecs,家目錄為 /home/s100a001 ~ s100a050,shell 要為 /bin/bash,密碼要為亂數產生,請問要怎麼辦 ?

6.0 新增大量帳號的思維:

a. 新增 001 帳號 (此時無密碼),提示:useradd
b. 修改 001 帳號之密碼,提示:echo 帳號:密碼 | chapasswd
c. 看看我們帳號是否建立完畢,否則帳號編號往上加 1,並回到步驟 a.,提示:for 迴圈


6.1 先從一個帳號開始:s100a001

groupadd eecs -> 新增 eecs 群組

useradd -m -g eecs -s /bin/bash s100a001

-m              -> 強制建家目錄
-g eecs         -> 設定主群為 eecs
-s /bin/bash    -> 設定 shell 為 /bin/bash

6.2 讓系統自動產序號

請將以下片段另存新檔名為 for.sh

for i in `seq 1 50`
do
 echo $i

done

然後執行 sh for.sh

我們可以發現此程式列印出 1 ~ 50 的字串

6.3 改善此程式,讓它印出學號

for i in `seq 1 9`
do
 echo s100a00$i
done

for i in `seq 10 50`
do
 echo s100a0$i
done


7. 如何給亂數密碼
最簡單的亂數密數:date +%N


8. 整個程式:

for i in `seq 1 9`
do
  echo "echo Creating user account: s100a00$i"
 echo useradd -m -s /bin/bash -g s100 s100a00$i
 a=`date +%N`
 echo "echo s100a00$i:$a | chpasswd"
done

for i in `seq 10 50`
do
 echo "echo Creating user account: s100a0$i"
 echo useradd -m -s /bin/bash -g s100 s100a0$i
 a=`date +%N`
 echo "echo s100a0$i:$a | chpasswd"
done


9. 如何進行上述程式:

sh for.sh > createusr.sh
將大量建帳號之指令轉成 createusr.sh 這個 shell script.

# sh createusr.sh
以 root 權限來新增帳號

10. 如何大量刪除帳號 ?

a. /etc/passwd
b. /etc/shadow
c. 在 /home 目錄下執行 rm -rf s100*

沒有留言:

張貼留言