三、用戶管理
用戶和用戶組操作命令
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 ~]$ id
uid=500(beinan) gid=500(beinan) groups=500(beinan)
注解:
在沒有加任何參數的情況下,查詢的是當前操作用戶的用戶名、
UID
、
GID
和所處的主用戶組和附屬用戶組;在本例
中,用戶名是
beinan
,
UID
是
500,
所歸屬的主用戶組是
beinan
,
GID
是
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
)配置文件詳解》
一文;
2
、
finger
工具:用來查詢用戶信息,側重用戶家目錄、登錄
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 ftp
Login 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:27
linuxsir tty2 Nov 2 10:03
beinan pts/0 Nov 2 10:50 (:0.0)
3
、查詢登錄主機的用戶工具:
w
、
who
、
users
w
、
who
和
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 xmbnnbdl@linuxsir.org -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
4
、
groups
用戶所歸屬的用戶組查詢;
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
的縮寫,主要用於在提供傳統的
owner
、
group
、
others
的
read
、
write
、
execute
權限之外進行細部權限設置。
啟動
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
文件系統的權限控制是通過
user
、
group
、
other
與
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
:加了這個參數之后,就好像是重新登陸一樣,大部分環境變量
(
例如
HOME
、
SHELL
和
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 會自動改變。放在用戶目錄外的檔案則要自行手動更動。