1. 程式人生 > 實用技巧 >Linux 命令大全(三)——使用者管理

Linux 命令大全(三)——使用者管理

三、使用者管理

使用者和使用者組操作命令

Id、Finger、Pwck   檢查/etc/passwd 配置檔案內的資訊與實際主資料夾是否存在,還可比較/etc/passwd /etc/shadow 的信息是否一致,另外如果/etc/passwd 中的資料欄位錯誤也會提示。 Grpck   和 pwck 功能相近,這是檢查使用者組的。 Groups newgrp useradd usermod   usermod 不僅能改使用者的 SHELL 型別,所歸屬的使用者組,也能改使用者密碼的有效期,還能改登入名。   usermod 最好不要用它來改使用者的密碼,因為他在/etc/shadow 中顯示的是明口令;修改使用者的口令最好用 passwd ;   usermod 如此看來就是能做到使用者帳號大轉移;比如我把使用者 A 改為新使用者 B;
usermod [-u uid [-o]] [-g group] [-G group,...] [-d 主目錄 [-m]] [-s shell] [-c 註釋] [-l 新名稱] [-f 失效日] [-e 過期日] [-p 密碼] [-L|-U] 使用者名稱
usermod 命令會參照命令列上指定的部份修改系統帳號檔。下列為 usermod 可選用的引數。
  • -c comment:更新使用者帳號 password 檔中的註解欄,一般是使用 chfn(1)來修改。
  • -d home_dir:更新使用者新的登入目錄。如果給定-m 選項,使用者舊目錄會搬到新的目錄去,如舊目錄不存在則建個新的。
  • -e expire_date:加上使用者帳號停止日期。日期格式為 MM/DD/YY.
  • -f inactive_days:帳號過期幾日後永久停權。當值為 0 時帳號則立刻被停權。而當值為-1 時則關閉此功能。預設值為-1。
  • -g initial_group:更新使用者新的起始登入使用者組。使用者組名須已存在。使用者組 ID 必須參照既有的的使用者組。使用者組 ID 預設值為 1。
  • -G group,[...]:定義使用者為一堆 groups 的成員。每個使用者組使用","區格開來,不可以夾雜空白字元。使用者組名同-g 選項的限制。如果使用者現在的使用者組不再此列,則將使用者由該使用者組中移除。
  • -l login_name:變更使用者 login 時的名稱為 login_name。其它不變。特別是,使用者目錄名應該也會跟著更動成新的登入名。
  • -s shell: 指定新登入 shell。如此欄留白,系統將選用系統預設 shell。
  • -u uid :使用者 ID 值。必須為唯一的 ID 值,除非用-o 選項。數字不可為負值。預設為最小不得小於/etc/login.defs 中定義的UID_MIN 值。0 到 UID_MIN 值之間是傳統上保留給系統帳號使用。使用者目錄樹下所有的檔案目錄其 userID 會自動改變。放在使用者目錄外的檔案則要自行手動更動。
警告:usermod 不允許你改變正在線上的使用者帳號名稱。當 usermod 用來改變 userID,必須確認這名 user 沒在電腦上執行任何程式。你需手動更改使用者的 crontab 檔。也需手動更改使用者的 at 工作檔。採用 NISserver 須在 server 上更動相關的 NIS 設定。   舉個簡單的例子,我們在前面說了關於 useradd 的工具,而 usermod 工具和 useradd 的引數差不多;兩者不同之處在於useradd 是新增,usermod 是修改;
# 把 linuxfish 使用者名稱改為 fishlinux ,並且把其家目錄轉移到 /opt/linuxfish ;
usermod -d /opt/linuxfish -m -l fishlinux -U linuxfish

# 檢視使用者 fishlinux 的家目錄下的檔案及屬主;
ls -la /opt/linuxfish/ 
'''
drwxr-xr-x 3 fishlinux linuxfish 4096 11 月 5 16:46 .
drwxrwxrwx 29 root root 4096 11 月 5 16:48 ..
-rw-r--r-- 1 fishlinux linuxfish 24 11 月 5 16:46 .bash_logout
-rw-r--r-- 1 fishlinux linuxfish 191 11 月 5 16:46 .bash_profile
-rw-r--r-- 1 fishlinux linuxfish 124 11 月 5 16:46 .bashrc
-rw-r--r-- 1 fishlinux linuxfish 5619 11 月 5 16:46 .canna
-rw-r--r-- 1 fishlinux linuxfish 438 11 月 5 16:46 .emacs-rw-r--r-- 1 fishlinux linuxfish 120 11 月 5 16:46 .gtkrc
drwxr-xr-x 3 fishlinux linuxfish 4096 11 月 5 16:46 .kde
-rw-r--r-- 1 fishlinux linuxfish 0 11 月 5 16:46 mydoc.txt
-rw-r--r-- 1 fishlinux linuxfish 658 11 月 5 16:46 .zshrc
'''
# 檢視有關 fishlinux 的記錄
more /etc/passwd |grep fishlinux # fishlinux:x:512:512::/opt/linuxfish:/bin/bash

  通過上面的例子,我們發現檔案的使用者組還沒有變,如果您想改變為 fishlinux 使用者組,如果想用通過 usermod 來修改,就要 先新增 fishlinux 使用者組;然後用 usermod -g 來修改 ,也可以用 chown -R fishlinux:fishlinux /opt/finshlinux 來改;

userdel   userdel 很簡單,只有一個引數可選 -r ;如果加引數-r ,表示在刪除使用者的同時,一併把使用者的家目錄及本地郵件儲存的目錄或檔案也一同刪除; 警告: 請不要輕易用-r 引數;他會刪除使用者的同時刪除使用者所有的檔案和目錄,切記;如果使用者目錄下有重要的檔案,在刪除前請備份; 其實也有最簡單的辦法,但這種辦法有點不安全,也就是直接在/etc/passwd 中刪除您想要刪除使用者的記錄;但最好不要這樣 做,/etc/passwd 是極為重要的檔案,可能您一不小心會操作失誤; Groupadd groupmod groupdel   刪除使用者組,語法格式:groupdel 使用者組 passwd   passwd 作為普通使用者和超級許可權使用者都可以執行,但作為普通使用者只能更改自己的使用者密碼,但前提是沒有被 root 使用者鎖 定;   如果 root 使用者執行 passwd ,可以設定或修改任何使用者的密碼; passwd 命令後面不接任何引數或使用者名稱,則表示修改當前使用者的密碼 passwd 幾個比較重要的引數
  • -k, --keep-tokens:保留即將過期的使用者在期滿後能仍能使用;
  • -d, --delete:刪除使用者密碼,僅能以 root 許可權操作;
  • -l, --lock:鎖住使用者無權更改其密碼,僅能通過 root 許可權操作;
  • -u, --unlock:解除鎖定;
  • -f, --force:強制操作;僅 root 許可權才能操作;
  • -x, --maximum=DAYS:兩次密碼修正的最大天數,後面接數字;僅能root 許可權操作;
  • -n, --minimum=DAYS:兩次密碼修改的最小天數,後面接數字,僅能root 許可權操作;
  • -w, --warning=DAYS:在距多少天提醒使用者修改密碼;僅能root 許可權操作;
  • -i, --inactive=DAYS:在密碼過期後多少天,使用者被禁掉,僅能以 root 操作;
  • -S, --status:查詢使用者的密碼狀態,僅能 root使用者操作;
  • --stdin read new tokens from stdin (root only)
chage   修改使用者密碼有效期限的命令; chage 用語法格式: chage [-l] [-m 最小天數] [-M 最大天數] [-W 警告] [-I 失效日] [-E 過期日] [-d 最後日] 使用者 id 工具:   查詢使用者所對應的UID 和GID 及GID所對應的使用者組; id 工具是用來查詢使用者資訊,比如使用者所歸屬的使用者組,UID GID 等;id 用法極為簡單;我們舉個例子說明一下; 語法格式: id [引數] [使用者名稱] 至於有哪些引數,自己查一下 id --help man id ;如果 id 後面不接任何引數和任何使用者,預設顯示當前操作使用者的使用者名稱、 所歸屬的使用者組、UID GID 等; 例項一:不加任何引數和使用者名稱; [beinan@localhost ~]$ iduid=500(beinan) gid=500(beinan) groups=500(beinan) 註解:在沒有加任何引數的情況下,查詢的是當前操作使用者的使用者名稱、UID GID 和所處的主使用者組和附屬使用者組;在本例 中,使用者名稱是 beinanUID 500,所歸屬的主使用者組是 beinanGID 500 例項二: id 後面接使用者名稱; 如果我們想查詢系統中使用者的 UID GID 相應的內容,可以直接接使用者名稱,但使用者名稱必須是真實的 ,能在/etc/passwd 中查 到的; [beinan@localhost ~]$ id linuxsir uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan) 註解:查詢使用者 linuxsir 的資訊,使用者 linuxsir UID 505,所歸屬的主使用者組是 linuxsir,主使用者組的 GID 502;同時 linuxsir 使用者也是 GID 0 root 使用者組成員,也是 GID 500 使用者組 beinan 的成員; 這個例子和例項一在使用者組方面有所不同,我們在 Linux 使用者(user)和使用者組(group)管理概述》 中有提到;使用者和 使用者組的對應關係,可以是一對一、一對多、多對一、或多對多的交叉關係,請參考之;另外您還需要掌握《使用者(user 和使用者組(group)配置檔案詳解》一文; 2finger 工具:用來查詢使用者資訊,側重使用者家目錄、登入 SHELL 等; finger 工具側重於使用者資訊的查詢;查詢的內容包括使用者名稱(也被稱為登入名 Login),家目錄,使用者真實的名字(Name... ... 辦公地址、辦公電話;也包括登入終端、寫狀態、空閉時間等; 我們最常用 finger 來查詢使用者家目錄、使用者真實名、所用 SHELL 型別、以及辦公地址和電話,這是以引數 -l 長格式輸出的; 而修改使用者的家目錄、真實名字、辦公地址及辦公電話,我們一般要能過 chfn 命令進行; 語法格式: finger [引數選項] [使用者名稱] -l 採用長格式(預設),顯示由-s 選項所包含的所有資訊,以及主目錄、辦公地址、辦公電話、登入 SHELL、郵件狀 態、.plan.project .forward -m 禁止對使用者真實名字進行匹配; -p .plan .project 檔案中的內容省略; -s 顯示短格式,使用者名稱(也被稱為登入名 Login)、真實名字(NAME)、在哪個終端登入(Tty)、寫狀態、空閒時間(Idle)、 登入時間(Login Time)、辦公地點、辦公電話等; 至於 finger 有哪些引數,您可以通過 finger --help man finger 來獲取,我們在本文中以例項講述最常用的引數; 例項一:不接任何引數,也不指定查詢使用者名稱;預設為加了-s 引數; [beinan@localhost ~]$ finger Login Name Tty Idle Login Time Office Office Phone beinan beinan sun tty1 1:39 Nov 2 08:27 linuxsir linuxsir open tty2 2 Nov 2 10:03 linuxsir o +1-389-866-771 等價命令 [beinan@localhost ~]$ finger -s 註解:不加任何引數,也沒有指定查詢哪個使用者,finger 會以預設以短格-s 來輸出登入本機的所有使用者的使用者名稱(也被稱為 登入名 Login)、真實名字(NAME)、在哪個終端登入(Tty)、寫狀態、空閒時間(Idle)、登入時間(Login Time)、辦公地 點、辦公電話等; 在這個例子中,有 beinan 使用者登入,真實名字是 beinan sun (這個名字是使用者的真實名字,如果在新增使用者時沒有設定, 是不會顯示的),在 tty1 終端登入,空閉時間是 1 39 秒,登入時間是 Nov /2/08:27 ,沒有辦公室名稱,沒有辦公電話; 請對照本例中 beinan 使用者記錄的解說,我們來看看本例中的 linuxsir 使用者資訊;應該不難。 關於寫狀態,如果在 Tty 後面 沒有任何輸出,表示正在寫入,如果有*出現,表示沒有寫入或被禁止,比如下面的例子,ftp 使用者沒有通過終端登入系統,因為 Tty *,同時 Tty 後面還有一個* ,表示禁止寫入或沒有寫入狀態(當用戶沒有登入時); [beinan@localhost ~]$ finger -s ftpLogin Name Tty Idle Login Time Office Office Phone ftp FTP User * * No logins 我們可以以短格式的來查詢某個使用者資訊以短格式輸出,比如下面的例子; [beinan@localhost ~]$ finger -s beinan 例項二:關於長格式的使用者資訊的輸出 -l 引數的例項; finger -l 如果不加使用者名稱的情況下,可以列出所有通過 tty 登入的使用者資訊;如果您想查詢某個使用者,就直接指定使用者,可以 指定一個或多個;什麼是 tty 登入?如果您在全屏文字介面操作的話,您可以通過按 CTRL+F2 CTRL+F3 CTRL+F4 等, 以幾個不同的使用者登入到主機上,您就會看到,每個使用者都有不同的 tty [beinan@localhost ~]$ finger -l [beinan@localhost ~]$ finger -l beinan linuxsir 注:可以同時查詢幾個使用者資訊,以長格式輸出; [beinan@localhost ~]$ finger beinan Login: beinan Name: beinan sun Directory: /home/beinan Shell: /bin/bash On since Wed Nov 2 08:27 (CST) on tty1 2 hours 29 minutes idle On since Wed Nov 2 10:50 (CST) on pts/0 from :0.0 No mail. No Plan. 在本例中,所查詢的使用者是 beinan,真實名字是 beinan sun ,家目錄位於 /home/beinan ,所用 SHELL 型別是 bash ;然 後就是通過哪個終端登入的,登入時間,是不是有 mail ,有 Plan 等; 例項三:引數組合的例子; [beinan@localhost ~]$ finger -lp beinan Login: beinan Name: beinan sun Directory: /home/beinan Shell: /bin/bash On since Wed Nov 2 08:27 (CST) on tty1 2 hours 36 minutes idle On since Wed Nov 2 10:50 (CST) on pts/0 from :0.0 No mail. 註解:查詢 beinan 使用者資訊,以長格式輸出,並且不輸出.Plan .Project 的內容; 例項四: finger -s w who 的比較; 對於 finger 就說這麼多吧,極為簡單的工具,當用到-s 引數時,您最好和 w who 工具對照,看看 finger -s w who 的輸出有什麼異同,w who 是查詢哪些使用者登入主機的;而 finger -s 呢,無論是登入還是不登入的使用者都可以查;但所查 到的內容側重有所不同;自己看看例子; [beinan@localhost ~]$ finger -s Login Name Tty Idle Login Time Office Office Phone beinan beinan sun tty1 3:03 Nov 2 08:27 beinan beinan sun pts/0 Nov 2 10:50 (:0.0) linuxsir linuxsir open tty2 1:26 Nov 2 10:03 linuxsir o +1-389-866-771 [beinan@localhost ~]$ w 11:30:36 up 3:04, 3 users, load average: 0.30, 0.15, 0.10 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT beinan tty1 - 08:27 3:03m 2:52 0.00s /bin/sh /usr/X11R6/bin/startx linuxsir tty2 - 10:03 1:26m 0.01s 0.01s -bash beinan pts/0 :0.0 10:50 0.00s 0.16s 0.00s w [beinan@localhost ~]$ who beinan tty1 Nov 2 08:27linuxsir tty2 Nov 2 10:03 beinan pts/0 Nov 2 10:50 (:0.0) 3、查詢登入主機的使用者工具:w who users wwho users 工具,是查詢已登入當前主機的使用者;另外 finger -s 也同樣能查詢;側重點不一樣;請自己對比著看;畢 竟簡單,這裡只是介紹 ; [beinan@localhost ~]$ w 12:09:56 up 3:43, 7 users, load average: 0.16, 0.10, 0.04 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT beinan tty1 - 08:27 3:42m 3:09 0.00s /bin/sh /usr/X11R6/bin/startx linuxsir tty2 - 10:03 2:06m 0.01s 0.01s -bash beinan pts/0 :0.0 11:36 1:09 0.15s 0.15s bash beinan pts/1 :0.0 11:37 1:12 0.21s 0.21s bash beinan pts/2 :0.0 12:02 6:52 0.09s 0.09s bash beinan pts/3 :0.0 12:05 12.00s 0.11s 0.06s ssh [email protected] -p 17007 beinan pts/4 :0.0 12:06 0.00s 0.21s 0.00s w [beinan@localhost ~]$ who beinan tty1 Nov 2 08:27 linuxsir tty2 Nov 2 10:03 beinan pts/0 Nov 2 11:36 (:0.0) beinan pts/1 Nov 2 11:37 (:0.0) beinan pts/2 Nov 2 12:02 (:0.0) beinan pts/3 Nov 2 12:05 (:0.0) beinan pts/4 Nov 2 12:06 (:0.0) [beinan@localhost ~]$ users beinan beinan beinan beinan beinan beinan linuxsir 4groups 使用者所歸屬的使用者組查詢; groups 用法很簡單,就是查詢使用者所歸屬哪個或哪些使用者組; 語法格式: groups 使用者名稱 例項: [beinan@localhost ~]$ groups beinan 注:查詢 beinan 所歸屬的使用者組; beinan : beinan 注:beinan 是 beinan 使用者組下的成員; [beinan@localhost ~]$ groups linuxsir 注:查詢 linuxsir 使用者所歸屬的使用者組; linuxsir : linuxsir root beinan 注:linuxsir 使用者是 linuxsir 使用者組、beinan 使用者組、root 使用者組成員; groups 主要是查詢使用者所歸屬的使用者組名,最好和 id 命令相對比;這樣對這兩個工具都有所瞭解 相關配置檔案 /etc/passwd /etc/shadow /etc/gshadow /etc/group Linux使用者密碼策略 Linux 使用者密碼的有效期,是否可以修改密碼可以通過 login.defs 檔案控制.login.defs 檔案修隻影響後續 建立的使用者,如果要改變以前建立的使用者的有效期等可以使用 chage 命令.Linux 使用者密碼的複雜度可以通過 pam pam_cracklib module pam_passwdqc module 控制,兩者不能同時 使用. 個人感覺 pam_passwdqc 更好用. /etc/login.defs 密碼策略 PASS_MAX_DAYS 99999 #密碼的最大有效期, 99999:永久有期 PASS_MIN_DAYS 0 #是否可修改密碼,0 可修改,0 多少天后可修改 PASS_MIN_LEN 5 #密碼最小長度,使用 pam_cracklib module,該引數不再有效 PASS_WARN_AGE 7 #密碼失效前多少天在使用者登入時通知使用者修改密碼 pam_cracklib 主要引數說明: tretry=N:重試多少次後返回密碼修改錯誤 difok=N:新密碼必需與舊密碼不同的位數 dcredit=N: N >= 0:密碼中最多有多少個數字;N < 0 密碼中最少有多少個數字. lcredit=N:小寶字母的個數 ucredit=N 大寶字母的個數 credit=N:特殊字母的個數 minclass=N:密碼組成(/小字母,數字,特殊字元) pam_passwdqc 主要引數說明: mix:設定口令字最小長度,預設值是 mix=disabled max:設定口令字的最大長度,預設值是 max=40 passphrase:設定口令短語中單詞的最少個數,預設值是 passphrase=3,如果為 0 則禁用口令短語。 atch:設定密碼串的常見程式,預設值是 match=4 similar:設定當我們重設口令時,重新設定的新口令能否與舊口令相似,它可以是 similar=permit 許相似或 similar=deny 不允許相似。 random:設定隨機生成口令字的預設長度。預設值是 random=42。設為 0 則禁止該功能。 enforce:設定約束範圍,enforce=none 表示只警告弱口令字,但不禁止它們使用;enforce=users 對系統上的全體非根使用者實行這一限制;enforce=everyone 將對包括根使用者在內的全體使用者實行這 一限制。 non-unix:它告訴這個模組不要使用傳統的 getpwnam 函式呼叫獲得使用者資訊, retry:設定使用者輸入口令字時允許重試的次數,預設值是 retry=3 密碼複雜度通過/etc/pam.d/system-auth 實施 : 要使用 pam_cracklib 將註釋去掉,pam_passwdqc.so 註釋掉即可. #password requisite /lib/security/$ISA/pam_cracklib.so retry=3 difok=1 password requisite /lib/security/$ISA/pam_passwdqc.so min=disabled,24,12,8,7 passphrase=3 password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow #password requisite /lib/security/$ISA/pam_cracklib.so retry=3 difok=1 新密碼至少有一位與原來的不同 PASS_MIN_DAYS 引數則設定了在本次密碼修改後,下次允許更改密碼之前所需的最少天數。 PASS_WARN_AGE 的設定則指明瞭在口令失效前多少天開始通知使用者更改密碼(一般在使用者剛剛登陸系統時 就會收到警告通知)。 你也會編輯/etc/default/useradd 檔案,尋找 INACTIVE EXPIRE 兩個關鍵詞: INACTIVE=14 EXPIRE=這會指明在口令失效後多久時間內,如果口令沒有進行更改,則將賬戶更改為失效狀態。在本例中, 這個時間是 14 天。而 EXPIRE 的設定則用於為所有新使用者設定一個密碼失效的明確時間(具體格式為年份- 月份-日期)。 顯然,上述這些設定更改之後,只能影響到新建立的使用者。要想修改目前已存在的使用者具體設定, 需要使用 chage 工具。 # chage -M 60 joe 這條命令將設定使用者 joe PASS_MAX_DAYS 60,並修改對應的 shadow 檔案。 你可以使用 chage -l 的選項,列出當前的賬戶時效情況,而使用-m 選項是設定 PASS_MIN_DAYS,用-W 則是設定 PASS_WARN_AGE,等等。chage 工具可以讓你修改特定賬戶的所有密碼時效狀態。 注意,chage 僅僅適用於本地系統的賬戶,如果你在使用一個類似 LDAP 這樣的認證系統時,該工具 會失效。如果你在使用 LDAP 作為認證,而你又打算使用 chage,那麼,哪怕僅僅是試圖列出使用者密碼的時 效資訊,你也會發現 chage 根本不起作用。 制定一項策略,定義多長時間一個密碼必須進行更改,然後強制執行該策略,是非常不錯的一個做 法。在解僱了某個僱員後,口令時效策略會保證該僱員不可能在被解僱 3 個月後發現他的口令依然可用。即 使系統管理員忽略了刪除他的帳號,該帳號也會因密碼時效策略而被自動鎖定。當然,這一點並不能成為不 及時刪除該僱員帳號的理由,但是這個策略的確提供了一層額外的安全防護,尤其是在過去常常忽視及時清 理帳號的情況下。 ACL許可權設定 ACL Access Control List 的縮寫,主要用於在提供傳統的 ownergroupothers readwriteexecute 許可權之外進行細部許可權設定。 啟動ACL /目錄支援 ACL #mount –o remount ,acl / #mount |grep / //檢視是否有掛載 開機啟動 ACL 將要啟動 ACL 的分割槽寫入/etc/fstab 中: #vi /etc/fstab /dev/hda5 / ext3 default,acl 1 2 ACL相關命令 Getfacl :取得某個檔案/目錄的 ACL 許可權; Setfacl :設定某個檔案/目錄的 ACL 許可權; setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ... setfacl --restore=file 描述 setfacl 用來在命令列裡設定 ACL。在命令列裡,一系列的命令跟隨以一系列的檔名。 選項-m -x 後邊跟以 acl 規則。多條 acl 規則以逗號(,)隔開。選項-M -X 用來從檔案或標準輸入讀取 acl 規則。 選項--set --set-file 用來設定檔案或目錄的 acl 規則,先前的設定將被覆蓋。 選項-m(--modify)-M(--modify-file)選項修改檔案或目錄的 acl 規則。 選項-x(--remove)-X(--remove-file)選項刪除 acl 規則。 當使用-M-X 選項從檔案中讀取規則時,setfacl 接受 getfacl 命令輸出的格式。每行至少一條規則,以# 開始的行將被視為註釋。當在不支援 ACLs 的檔案系統上使用 setfacl 命令時,setfacl 將修改檔案許可權位。如果 acl 規則並不完全匹 配檔案許可權位,setfacl 將會修改檔案許可權位使其儘可能的反應 acl 規則,並會向 standard error 傳送錯誤訊息, 以大於 0 的狀態返回。 許可權 檔案的所有者以及有 CAP_FOWNER 的使用者程序可以設定一個檔案的 acl。(在目前的 linux 系統上,root 使用者是唯一有 CAP_FOWNER 能力的使用者) 選項 -b,--remove-all 刪除所有擴充套件的 acl 規則,基本的 acl 規則(所有者,群組,其他)將被保留。 -k,--remove-default 刪除預設的 acl 規則。如果沒有預設規則,將不提示。 -n--no-mask 不要重新計算有效許可權。setfacl 預設會重新計算 ACL mask,除非 mask 被明確的制定。 --mask 重新計算有效許可權,即使 ACL mask 被明確指定。 -d--default 設定預設的 acl 規則。 --restore=file 從檔案恢復備份的 acl 規則(這些檔案可由 getfacl -R 產生)。通過這種機制可以恢復整個目錄樹的 acl 規則。此引數不能和除--test 以外的任何引數一同執行。 --test 測試模式,不會改變任何檔案的 acl 規則,操作後的 acl 規格將被列出。 -R--recursive 遞迴的對所有檔案及目錄進行操作。 -L--logical 跟蹤符號連結,預設情況下只跟蹤符號連結檔案,跳過符號連結目錄。 -P--physical 跳過所有符號連結,包括符號連結檔案。 --version 輸出 setfacl 的版本號並退出。 --help 輸出幫助資訊。 -- 標識命令列引數結束,其後的所有引數都將被認為是檔名 - 如果檔名是-,則 setfacl 將從標準輸入讀取檔名。 ACL 規則 setfacl 命令可以識別以下的規則格式。 [d[efault]:] [u[ser]:]uid [:perms] 指定使用者的許可權,檔案所有者的許可權(如果 uid 沒有指定)。 [d[efault]:] g[roup]:gid [:perms] 指定群組的許可權,檔案所有群組的許可權(如果 gid 未指定) [d[efault]:] m[ask][:] [:perms] 有效許可權掩碼[d[efault]:] o[ther] [:perms] 其他的許可權 恰當的 acl 規則被用在修改和設定的操作中。 對於 uid gid,可以指定一個數字,也可指定一個名字。 perms 域是一個代表各種許可權的字母的組合:讀-r -w 執行-x,執行只適合目錄和一些可執行的檔案。 pers 域也可設定為八進位制格式。 自動建立的規則 最初的,檔案目錄僅包含 3 個基本的 acl 規則。為了使規則能正常執行,需要滿足以下規則。 *3 個基本規則不能被刪除。 *任何一條包含指定的使用者名稱或群組名的規則必須包含有效的許可權組合。 *任何一條包含預設規則的規則在使用時,預設規則必須存在。 用法舉例如下: acl 全稱 Access Control Lists 翻譯成中文叫"訪問控制列表", 傳統的 Linux 檔案系統的許可權控制是通過 usergroupother r()w()x(執行) 的不同組合來 實現的。隨著應用的發展,這些許可權組合已不能適應現時複雜的檔案系統許可權控制要求。 例如,目錄 /data 的許可權為:drwxr-x---,所有者與所屬組均為 root,在不改變所有者的前提下,要求使用者 tom 對該目錄有完 全訪問許可權 (rwx).考慮以下 2 種辦法 (這裡假設 tom 不屬於 root group) (1) /data other 類別增加 rwx permission,這樣由於 tom 會被歸為 other 類別,那麼他也將擁 rwx 許可權。 (2) tom 加入到 root group,為 root group 分配 rwx 許可權,那麼他也將擁有 rwx 許可權。 以上 2 種方法其實都不合適,所以傳統的許可權管理設定起來就力不從心了。 為了解決這些問題,Linux 開發出了一套新的檔案系統許可權管理方法,叫檔案訪問控制列表 (Access Control Lists, ACL)。簡單地來說,ACL 就是可以設定特定使用者或者使用者組對於一個檔案的操作許可權。 ACL 有兩種,一種是存取 ACL (access ACLs),針對檔案和目錄設定訪問控制列表。一種是預設 ACL (default ACLs),只能針對目錄設定。如果目錄中的檔案沒有設定 ACL,它就會使用該目錄的預設 ACL. 首先我來講一下 getfacl ( 顯示檔案或目錄的 ACL) 在我的電腦裡首先有一個使用者叫 NEU.我們學校的簡稱.同時還有一個使用者,software,我的專業名稱. 我以 neu 使用者進行操作,在其目錄下建立一個檔案 fileofneu. 可以看到它的初始許可權為-rw-rw-r--然後我把這個檔案許可權進行下修改.使用的命令為 chmod,修改後的文 件許可權為-rw-rw----現在這個檔案的許可權就不允許其它使用者訪問了. 然後切換到 sofeware 使用者,來證實這個檔案的不可訪問性. 下面我們就通過 getfacl 命令來檢視.這時候得進入 neu 使用者下操作了.其命令格式很簡單:getfacl fileofneu 許可權一目瞭然.不多介紹了,下面就要用 Setfacl 來進行修改了.使其在對於其它使用者的許可權裡,只對 software 使用者只讀只寫. setfacl -m u:softeware:rw- fileofneu setfacl -R -m u:softeware:rw- fileofneu (-R 一定要在-m 前面,表示目錄下所有檔案) setfacl -x u:softeware fileofneu (去掉單個許可權) setfacl -b (去掉所有 acl 許可權) 如果我們希望在一個目錄中新建的檔案和目錄都使用同一個預定的 ACL,那麼我們可以使用預設(Default) ACL。在對一個目錄設定了預設的 ACL 以後,每個在目錄中建立的檔案都會自動繼承目錄的預設 ACL 作為自 己的 ACL。用 setfacl -d 選項就可以做到這一點: [root@FC3-vm mnt]# setfacl -d --set g:testg1:rwx dir1 [root@FC3-vm mnt]# getfacl dir1然後用 getfacl 命令來進行檢視.我們就可以看到多了一行 user:software:rw- 這說明其對使用者 software 放了讀寫的許可權. 為了證實其可用性,再切換到 software 使用者下訪問這個檔案,發現與前面不同的是,這回可以讀寫了. 今天就講這一個吧,講多了,大家也記不住. 對了,剛才我進行了一下這個操作,發現進不去,原來是我沒有給 software 使用者授與訪問/home/neu 這個目 錄的進入的權力,所以,我們還得應用 setfacl 命令來使得 software 使用者擁有進入這個目錄的權力.其操作與上 面基本一致。 使用者身份切換 Su 命令作用 su 的作用是變更為其它使用者的身份,超級使用者除外,需要鍵入該使用者的密碼。 使用方式 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 引數說明 -f , –fast:不必讀啟動檔案(如 csh.cshrc 等),僅用於 csh tcsh 兩種 Shell -l , –login:加了這個引數之後,就好像是重新登陸一樣,大部分環境變數(例如 HOMESHELL USER )都是以該使用者(USER)為主,並且工作目錄也會改變。如果沒有指定 USER,預設情況是 root -m-p ,–preserve-environment:執行 su 時不改變環境變數。 -c command:變更賬號為 USER 的使用者,並執行指令(command)後再變回原來使用者。 help 顯示說明檔案 version 顯示版本資訊 USER:欲變更的使用者賬號, ARG: 傳入新的 Shell 引數。 例子 su -c ls root 變更帳號為 root 並在執行 ls 指令後退出變回原使用者。 [user1@centos6 ~]$ su - root -c "head -n 3 /etc/passwd" 對於命令引數要加上引號 su [使用者名稱] a>root 使用者下, 輸入 su 普通使用者. 則切換至普通使用者, root 切換到變通使用者不需要密碼 b>在普通使用者下, 輸入 su [使用者名稱] 提示 password: 輸入使用者的 PASSWORD, 則切換至該使用者 Sudo /etc/sudoers 誰能作什麼的一個列表,Sudo 能用需要在這個檔案中定義 #visudo 增加如下,加%代表使用者組,ALL=(ALL)表示登入者的來源主機名,最後的 ALL 代表可執行 的命令。NOPASSWD 代表不需要密碼直接可執行 Sudo,限制多命令一定要寫絕對路徑,用逗號分開,多行用 \’,用!代表不能執行 %aixi ALL=(ALL) NOPASSWD: ALL %aixi ALL=(ALL) NOPASSWD: /bin/ls,/bin/mkdir,/bin/rmdir,\ /usr/bin/who,!/usr/bin/passwd root查詢使用者命令 W 可顯示開機多久,當前登入的所有使用者,平均負載 Who 顯示當前登入的所有使用者 Last 顯示每個使用者最後的登入時間 Lastlog 顯示每個使用者最後的登入時間

usermod 命令會參照命令列上指定的部份修改系統帳號檔。下列為 usermod 可選用的引數。 -c comment:更新使用者帳號 password 檔中的註解欄,一般是使用 chfn(1)來修改。 -d home_dir:更新使用者新的登入目錄。如果給定-m 選項,使用者舊目錄會搬到新的目錄去,如舊目錄不存在則建個新的。 -e expire_date:加上使用者帳號停止日期。日期格式為 MM/DD/YY. -f inactive_days:帳號過期幾日後永久停權。當值為 0 時帳號則立刻被停權。而當值為-1 時則關閉此功能。預設值為-1。 -g initial_group:更新使用者新的起始登入使用者組。使用者組名須已存在。使用者組 ID 必須參照既有的的使用者組。使用者組 ID 預設值為 1。 -G group,[...]:定義使用者為一堆 groups 的成員。每個使用者組使用","區格開來,不可以夾雜空白字元。使用者組名同-g 選項的限制。如果使用者現在的使用者組不再此列,則將使用者由該使用者組中移除。 -l login_name:變更使用者 login 時的名稱為 login_name。其它不變。特別是,使用者目錄名應該也會跟著更動成新的登入名。 -s shell: 指定新登入 shell。如此欄留白,系統將選用系統預設 shell。 -u uid :使用者 ID 值。必須為唯一的 ID 值,除非用-o 選項。數字不可為負值。預設為最小不得小於/etc/login.defs 中定義的UID_MIN 值。0 到 UID_MIN 值之間是傳統上保留給系統帳號使用。使用者目錄樹下所有的檔案目錄其 userID 會自動改變。放在使用者目錄外的檔案則要自行手動更動。