2011年10月28日 星期五

LINUX 使用者帳戶與群組管理

LINUX 使用者帳戶與群組管理

轉載至 http://tw.myblog.yahoo.com/jw!9skfwiSAHxQ7c8D8luphjfve/article?mid=-2&prev=37&l=a&fid=12


使用者帳戶與群組管理
Linux 是一套多人多工的分時系統,提供使用者在同一時間或不同時間以及不同連線方式來登入系統使用資源。為了達到有效管理,系統管理人員必須針對不同的使用者給予不同的帳戶與密碼,同時也賦予不同的使用者有不同的資源使用權限。
使用者帳號(Account)與群組(Group)管理,是系統管理與系統安全中一項相當重要的工作。管理者可透過使用者帳號與群組管理,有效的將網路資源分配給適當的使用者與群組。本單元帶您來了解Linux系統中,使用者帳號與群組的管理。

使用者帳戶管理 基本上,Linux 系統中的使用者帳號是存放在 /etc/passwd 文字檔案中,此檔案因必須提供使用者在登入時的認證,故其權限為 644,由於所有的使用者皆可讀取此檔案,其安全性備受威脅。因此,系統採用了 Shadow 密碼映射的方式,將使用者帳戶密碼映射到 /etc/shadow 檔案內(權限為 400 ),並將密碼欄位加密存放在該檔案中。
/etc/passwd 帳戶密碼檔如下圖,共有七個欄位,每個欄位以":"隔開:

  • 欄位一:使用者帳戶名稱
  • 欄位二:密碼(因此啟用 shadow 故此欄位自動填入 x )
  • 欄位三:使用者辨識碼(UID)500號以前為系統各項服務所使用
  • 欄位四:群組辨識碼(GID)
  • 欄位五:使用者帳戶全名或註解(可不填寫)
  • 欄位六:使用者家目錄名稱及路徑
  • 欄位七:使用者登入後所使用的 shell
/etc/shadow 檔案則共有九個欄位,主要記載使用者帳戶密碼和帳戶相關的日期設定,如帳戶到期日設定。關於此檔案內的日期設定是引用 UNIX 系統慣例,以 1970/01/01 為基準日相減的天數設定。
  • 欄位一:使用者帳戶名稱
  • 欄位二:密碼(系統加密過的字串)
  • 欄位三:上次變更密碼的日期
  • 欄位四:密碼兩次變更之間所需間隔的天數(0為不限制)
  • 欄位五:密碼須每隔幾天強制要求使用者變更一次(99999為不限制)
  • 欄位六:密碼需要變更前幾天發出警告訊息通知使用者(欄位五未設定則此欄位無效)
  • 欄位七:密碼逾期未變更後幾日停用此帳號
  • 欄位八:帳戶密碼有效日期
  • 欄位九:保留未使用
使用者帳戶管理指令
基本上使用者帳戶管理主要分成四個種類:新增使用者帳戶、修改使用者帳戶、刪除使用者帳戶、變更使用者帳戶密碼,其使用的指令為 useradd、usermod、userdel 和 passwd。
新增使用者帳戶
新增帳戶(Account)是使用 useradd 或是 adduser 指令,adduser 指令其實就是指向 useradd 指令的連結。以下是指令與參數的使用:
useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time]
        [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M]
        [-p passwd] [-s shell] [-u uid [ -o]] [-n] [-r]
帳戶名稱

參數說明:
-c <comment>        全名或註解
-d <
home_dir>       指定使用者家目錄
-e <
expire_date>    指定帳戶到期日
-f <
inactive_time>  逾期未變更密碼後帳戶停用日期(緩衝天數)
-g <
initial_group>  指定帳戶主要的隸屬群組
-G <
group>          指定帳戶其它的隸屬群組
-m                  自動建立使用者家目錄(系統預設)
-M                  不讓系統自動建立家目錄
-p <
passwd>         指定帳戶密碼
-s <
shell>          指定登入後所使用的 shell
-u <
uid>            指定帳戶辨識碼 UID
-r                  建立系統帳戶
-k   指定 SKEL 目錄
實際示範:
[root@Linux root]# useradd user01    <= 建立 user01 帳戶
[root@Linux root]# passwd user01    
<= 設定密碼
Changing password for user user01.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@Linux root]# useradd -g root -u 600 admin  <= 建立同時指令為 root 群組及 UID
[root@Linux root]# passwd admin                 
<= 設定密碼
Changing password for user admin.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
在建立使用者帳戶時,除了要建立帳戶外,另外還得為帳戶設定一組適當的密碼。然而以一般的操作習慣,通常不會在建立帳戶時以 -p 參數來直接指定密碼,而是在建立帳戶後,以 passwd 指令來建立帳戶的密碼。
在建立帳戶時,若不指定任何參數,則帳戶建立的指令會自動的處理以下的事項:
  1. 使用者辨識碼 UID
  2. 使用者家目錄
  3. 所屬主要群組
  4. 複製家目錄下的預設檔案與子目錄(複製 /etc/skel 範本目錄)
  5. 指定登入後所使用的 Shell
使用者辨識碼↓
某些 Linux 發佈套件在建立一般使用這帳戶時,UID 會從 500 以後開始自動依序賦予,如 Red Hat Linux 即是如此,有些發佈套件則是從 1000 以後的號碼為一般使用者帳戶 UID。而不管是 500 或是 1000,在這些特定的號碼之前的 UID,都是所謂的系統帳戶,如 root、apache...等。這個預設的 UID 起始號碼是可以設定的。
使用者家目錄↓
Linux 系統在建立帳戶時,通常都會為使用者建立一個在 Linux 系統本機上,建立一個使用者個人的工作目錄,這個目錄就稱為使用者家目錄(Home Directory)。部分系統不會自動建立家目錄,管理者在建立帳戶時可以使用 -m 參數,在建立帳戶的同時讓指令自動來建立家目錄。
所屬主要群組↓
每一個帳戶都會歸屬到一個主要群組,以 Red Hat Linux 系統來說,通常是自動的位使用者建立另一個以帳戶名稱為群組名稱的群組,而以 OpenLinux 而言,則是將先建立而為指定群組的帳戶,自動歸屬於 users 群組(GID 為 100)。
SKEL 範本目錄
在建立使用者家目錄的同時,帳戶建立指令會從 /etc/skel 目錄中,複製所有的檔案及子目錄到使用者的家目錄。這一個 skeleton dir 可以稱為是範本目錄,一般管理者可以把要給使用者的檔案或子目錄,先安置於此目錄,在建立使用者檔案時,就會自動的複製到使用者家目錄。
指定 Shell
使用者在登入系統後必須有一個適合的 Shell 來使用,通常 Linux 系統預設使用的 Shell 為 Bash Shell,而這個預設的項目在 Red Hat Linux 會為建立的帳戶來自動指定。
上述的幾個項目預設值是可以調整的,管理者可以透過 useradd -D 指令參數來檢視目前這些設定的預設值:
[root@Linux root]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
當然,要修改這些預設值,也可以使用 useradd -D 再加上其他參數來修改預設值:
useradd -D [-g default_group] [-b default_home] [-f default_inactive]
           [-e default_expire_date] [-s default_shell]

參數說明:
-g <default_group>        設定預設的群組
-b <
default_home>         使用者家目錄上層管理目錄(如 /home)
-f <
default_inactive>     設定逾期未變更密碼後幾日停用帳戶
-e <
default_expire_date>  設定預設的帳戶到期日
-s <
default_shell>        設定預設的 shell
以上的預設值,寫入到 /etc/default/useradd 檔案中。以下做預設值設定示範:
[root@Linux root]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
                <= 帳戶到期日的預設值
SHELL=/bin/bash
SKEL=/etc/skel
[root@Linux root]# useradd -D -e 2003/12/31  <= 設定帳戶到期日的預設值
[root@Linux root]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=2003/12/31     
<= 帳戶到期日的預設值
SHELL=/bin/bash
SKEL=/etc/skel
密碼設定- passwd
建立好帳戶後,管理者必須為使用者設定一組預設的密碼,而設立密碼使用的指令為 passwd。
[root@Linux root]# useradd user01    <= 建立 user01 帳戶
[root@Linux root]# passwd user01    
<= 設定密碼
Changing password for user user01.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
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  設定帳戶到期後的緩衝天數
以上 passwd 指令除了是讓管理者為建立的使用者帳戶設立密碼外,使用者也可以在登入系統後,以 passwd 指令來變更自己的密碼,使用者只要輸入 passwd 即可變更自己帳戶的密碼。
[user01@Linux user01]$ passwd        <= 下達指令
Changing password for user user01.
Changing password for user01
(current) UNIX password:            
<= 輸入原本舊密碼
New password:                       
<= 輸入第一次新密碼
Retype new password:                
<= 再輸入新密碼確認
passwd: all authentication tokens updated successfully.
修改使用者帳戶
使用者帳戶建立後,可以使用 usermod 指令來修改帳戶相關內容,如帳戶名稱、家目錄位置、隸屬群組、註解、UID...等,幾乎與建立帳戶可設立的內容相同。以下先將 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                  解除鎖定帳戶
以下做一示範:
[root@Linux root]# usermod -l usr_new user01       <= 變更帳戶名稱 [root@Linux root]# usermod -u 555 usr_new          <= 變更帳戶 UID
[root@Linux root]# usermod -G root,katana usr_new  <= 變更帳戶次要隸屬群組
[root@Linux root]# usermod -e 2003/12/31 usr_new   <= 變更帳戶使用到期日
刪除使用者帳戶
刪除使用者帳戶使用 userdel 指令,參數只有一個 -r。
[root@Linux root]# userdel usr_new    <= 只刪除帳戶 [root@Linux root]# userdel -r user02  <= 刪除帳戶同時刪除相關的目錄與檔案
使用 userdel -r 參數指令,是除了將帳戶刪除外,還將帳號相關的目錄與檔案(如使用者家目錄)一併刪除。相反的,若不使用 -r 參數則刪除帳戶時,這些因為帳戶建立或帳戶使用過程所建立的檔案目錄,仍舊會留在系統中。
Password Shadow 的啟用
密碼映射功能(Shadow)是一項安全性的政策,主要是因為 /etc/passwd 檔案是一般的使用者都可以讀取,若是密碼經過編碼後存放在該檔案,變成密碼容易被取得,同時也就容易被破解!因此,透過密碼映射的功能,將密碼編碼後轉存放到 /etc/shadow 檔案中,而此檔案只有 root 帳戶才有權限讀取,其它或同群組的帳戶仍然無法讀取,可以加強帳戶密碼的安全。
啟用密碼映射功能可以使用 pwconv 指令,一般系統預設值為啟用,故在系統安裝完成後不需要再啟用,如果要停用映射功能則可使用 pwunconv 指令。您可以先將密碼映射功能關閉後,看看密碼是不是放回了 /etc/passwd 檔案?如果是,請使用 pwconv 指令將密碼映射功能啟用,看看密碼是不是又移轉到 /etc/shadow 檔案中?

沒有留言:

張貼留言