1. 程式人生 > 實用技巧 >Linux使用者組和許可權管理

Linux使用者組和許可權管理

Linux使用者組和許可權管理

1、linux安全模型

1、使用者

Linux中每個使用者是通過UID(User Id)來標識的

​ 管理員: root, 0

​ 普通使用者: 1-60000自動分配

​ 系統使用者:1-499 (centos 6以前),1-999(centos 7以後)

​ 對守護程序獲取資源進行許可權分配

​ 登入使用者:500+ (centos6以前),1000+(centos7以後)

​ 給使用者進行互動式登入使用

2、使用者組

Linux中可以將一個或多個使用者加入使用者組中,使用者組是通過GID (Group ID)來標識的

​ 管理員組:root, 0

​ 普通組:

​ 系統組:1-499(centos6以前),1-999(centos7以後),對守護程序獲取資源進行許可權分配

​ 普通組:500+(centos6以前),1000+(centos7以後),給使用者使用

3、使用者和組的關係

使用者的主要組(primary group):使用者必須屬於一個主組,預設建立使用者時會自動建立和使用者名稱同名的組,做為使用者的主要組,由於此組中只有一個使用者,又稱為私有組

使用者的附加組(supplementary group):一個使用者可以屬於零個或多個輔助組,附屬組

範例:

[root@zhang ~]# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)

4、安全上下文

Linux安全上下文Context:執行中的程式,

比如:分別以root和zhang的身份執行 /bin/cat /etc/shadow,得到的結果是不同的,資源能否被訪問,是由執行者的身份決定,非程式本身

2、使用者和組的配置檔案

1、使用者和組的主要配置檔案

/etc/passwd;使用者及其屬性資訊(名稱、UID、主組ID等)

/etc/shadow:使用者密碼及其相關屬性

/etc/group: 組及其屬性資訊

/etc/gshadow: 組密碼及其相關屬性

2、passwd檔案格式

login name:登入用名 (zhang)

passwd:密碼(x)

UID:使用者身份(1000)

GID:登入預設所在組編號(1000)

GECOS:使用者全名或註釋

home directory:使用者主目錄(/home/zhang)

shell:使用者預設使用shell(/bin/bash)

3、shadow檔案格式

登陸用名

使用者密碼;一般用sha512加密

從1970年1月1日起到密碼最近一次被更改的時間

密碼再過幾天可以被變更(0表示隨時可以變更)

密碼再過幾天必須變更(99999表示永不過期)

密碼過期前幾天系統提醒使用者(預設為一週)

密碼過期幾天後賬號會被鎖定

從1970年1月1日算起,多少天后賬號失效

更改密碼加密演算法:

​ authconfig --passalgo=sha256 --update

密碼的安全策略

​ 足夠長

​ 使用數字、大小寫字母及他叔字元中至少3種

​ 使用隨機密碼

​ 定期更換,不要使用最近使用過的密碼

範例:生成隨機密碼

[root@zhang ~]# tr -dc '[alum:]' < /dev/urandom | head -c 12
uu[l]m]:u[ll[root@zhang ~]# openssl rand -base64 9
TbOiMDcmKgbB

4、group檔案格式

群組名稱:就是群組名稱

群組密碼:通常不需要設定,密碼式被記錄在 /etc/gshadow

GID:就是群組的ID

以當前組為附加組的使用者列表(分隔符為逗號)

5、gshow檔案格式

群組名稱:就是群的名稱

群組密碼:

組管理列表:組管理員的列表,更改組密碼和成員

以當前組為附加組的使用者列表:多個使用者間逗號分隔

6、檔案操作

vipw和vigr

pwc和grpck

3、使用者和組管理命令

3.1、使用者建立

​ useradd命令可以建立新的linux使用者

格式:

​ useradd [option] LOGIN

常見的選項:

-u:	UID
-o:	配合-u選項,不檢查UID的唯一性
-g:	GID   指明使用者所屬基本組,可為組名,也可以GID
-c:	"COMMENT"	使用者的註釋資訊
-d:	HOME_DIR    以指定的路徑(不存在)為家目錄
-s:	SHELL      指明使用者的預設shell的程式,可用列表在/etc/shells檔案中
-G:	GROUP1[,GROUP2,...]	為使用者指明附加組,組須事先存在
-N:	不建立私用組做主組,使用users組做主組
-r:	建立私用組做主組,使用user組做主組
-m:	建立家目錄,用於系統使用者
-M:	不建立家目錄,用於非系統使用者
-p:	指定加密的密碼

範例:

useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache

useradd 命令預設值設定由/etc/default/useradd定義

[root@zhang ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

​ 顯示或更改預設設定

useradd  -D
useradd  -D -s SHELL
useradd  -D -b BASE_DIR
useradd  -D -g  GROUP

新建使用者的相關檔案

/etc/default/useradd

​ /etc/skel/*

​ /etc/login.defs

批量建立使用者

newusers passwd 格式檔案

批量修改使用者口令

echo username : passwd | chapassswd

範例:CEntos 6建立並指定基於sha512的使用者密碼

範例:利用python程式在Centos 7生成sha512加密密碼

範例;Centos 8生成sha512加密密碼

[root@centos8 ~]# openssl passwd -6 magedu
$6$z0Hza3BjGAVbmS04$GaFvomXlcQ/.Td.ZEwArW4evQWsk73mA6MnR3zROmKJNmTgLTNU0giFC2su5w5UHUTl/U9zRw6l.9lLN7mguc0

3.2、使用者屬性修改

usermod命令可以修改使用者屬性

格式:

usermod [OPTION] login

常見選項:

-u  UID:新UID
-g  GID:	新主組
-G  GROUP1[,GROUP2,...[,GROUPN]]]:	新附加組,原來的附加組將會被覆蓋:若保留原有,則需要同時使用-a選項
-s	SHELL:新的預設SHELL
-c	'COMMENT':新的註釋資訊
-d	HOME:新家目錄不會自動建立,若要建立新家目錄並移動原來家資料,同時使用-m選項
-l		login_name:新的名字
-L:lock指定使用者,在/etc/shadow  密碼欄的增加  !
-U:	unlock指定使用者,將  /etc/shadow 密碼欄的 !拿掉
-e:YYY-MM-DD:指明使用者賬號過期日期
-f   INACYIVE:設定非活動期限,即寬限期

3.3、 刪除用使用者

userdel可刪除Linux使用者

格式:

userdel  [OPTION]... Login

常見選項:

-f,--force		強制
-r,--remove	刪除使用者家目錄和郵箱

3.4、檢視當前使用者相關的ID資訊

id命令可以檢視使用者的UID,GID等資訊

id  [OPTION]... [USER]

常見選項:

-u:    顯示UID
-g:   顯示GID
-G:   顯示使用者所屬組的ID
-n:   顯示名稱,需配合ugG使用

3.5、切換使用者或以其它使用者身份執行命令

su:即switch user,命令可以切換使用者身份,並以指定使用者的身份執行命令

格式:

su [option...] [-] [user [args...]]

常見選項:

-l --login su -l UserName 相當於 su - UserName

-c --command pass a single command to the shell with -c

切換使用者的方式:

​ su UserName:非登入式切換,即不會讀取使用者目標配置檔案,不改變當前工作目錄,即不完全切換

​ su - UserName:登入式切換,會讀取目標使用者的配置檔案,切換至家目錄,即完全切換

說明:root su至其他使用者無需密碼;非root使用者切換時需要密碼

注意:su 切換新使用者後,使用exit退回至舊的使用者,而不要再用su切換舊使用者,否則會生成很多的bash子程序,環境可能會混亂。

換個身份執行命令;

su [-] UserName -c 'COMMAND'

範例;

[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:ZHANG:/home/zhang:/bin/bash
[root@zhang ~]# usermod -s /bin/false zhang
[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:ZHANG:/home/zhang:/bin/false
[root@zhang ~]# su - zhang
Last login: Tue Dec  8 11:50:29 CST 2020 on pts/1
[root@zhang ~]# whoami
root

範例:

[root@zhang ~]# su -s /sbin/nologin zhang
This account is currently not available.
[root@zhang ~]# whoami
root
[root@zhang ~]# su -s /bin/false zhang
[root@zhang ~]# whoami
root

範例:

[root@zhang ~]# su - root -c "getent shadow"

範例;

[root@zhang ~]# su - zhang -c 'touch zhang.txt'
[root@zhang ~]# ll ~zhang/
total 0
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Desktop
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Documents
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Downloads
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Music
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Pictures
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Public
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Templates
drwxr-xr-x. 2 zhang zhang 6 Dec  1 12:42 Videos
-rw-rw-r--. 1 zhang zhang 0 Dec  8 11:50 zhang.txt

範例:

[root@zhang ~]# su bin
This account is currently not available.
[root@zhang ~]# su -s /bin/bash bin
bash-4.2$ whoami
bin

[root@zhang ~]# getent passwd tss
tss:x:59:59:Account used by the trousers package to sandbox the tcsd 	daemon:/dev/null:/sbin/nologin

root@zhang ~]# su - -s /bin/bash tss
Last login: Tue Dec  8 11:55:02 CST 2020 on pts/1
su: warning: cannot change directory to /dev/null: Not a directory
-bash: /dev/null/.bash_profile: Not a directory
-bash-4.2$ logout
-bash: /dev/null/.bash_logout: Not a directory

3.6、設定密碼

passwd可以修改使用者密碼

格式:

passwd [OPTIONS] UserName

常用選項:

-d:刪除指定使用者密碼
-l:鎖定指定使用者
-u:解鎖指定使用者
-e:強制使用者下次登入
-f:強制操作
-n   mindays:	指定最短使用期限
-x  maxdays:	最大使用期限
-w  warndays:	提前多少天開始警告
-i  inactivedays:非活動期限
--stdin:從標準輸入接受使用者密碼,Ubuntu五次選項

3.7、修改使用者密碼策略

chage 可以修改使用者密碼策略

格式:

chage [OPTION]...  LOGIN

常見選項:

-d:	LAST_DAY			#更改密碼的時間
-m:   --mindays  MIN_DAYS
-M     --maxdays   MAX_DAYS
-w     --warndays   WARN_DAYS
-I     --inactive    INACTIVE		   #密碼過期後的寬限期
-E     --expiredate   EXPIRE_DATE           #使用者的有效期
-l		顯示密碼策略

範例:

[root@zhang ~]# chage -m 3 -M 42 -W 14 -I 7 -E 2020-12-8 zhang
[root@zhang ~]# chage -l zhang
Last password change					: never
Password expires					: never
Password inactive					: never
Account expires						: Dec 08, 2020
Minimum number of days between password change		: 3
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14
[root@zhang ~]# getent shadow zhang
zhang:$6$NBi3RlGoX85VrzH6$Gh.EPK6zRQA01LGHUHvkphaPVquPKqP3u/Qx1m7M64Y9Jw3mWI21vfi6xpe4jMFU0egq6yZvSRQbK7xHBdKi91::3:42:14:7:18604:
[root@zhang ~]# chage -d 0 zhang
[root@zhang ~]# getent shadow zhang
zhang:$6$NBi3RlGoX85VrzH6$Gh.EPK6zRQA01LGHUHvkphaPVquPKqP3u/Qx1m7M64Y9Jw3mWI21vfi6xpe4jMFU0egq6yZvSRQbK7xHBdKi91:0:3:42:14:7:18604:
[root@zhang ~]# chage -d 0 zhang
[root@zhang ~]# getent shadow zhang
zhang:$6$NBi3RlGoX85VrzH6$Gh.EPK6zRQA01LGHUHvkphaPVquPKqP3u/Qx1m7M64Y9Jw3mWI21vfi6xpe4jMFU0egq6yZvSRQbK7xHBdKi91:0:3:42:14:7:18604:
[root@zhang ~]# chage -l zhang
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Dec 08, 2020
Minimum number of days between password change		: 3
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14
[root@zhang ~]# getent shadow zhang
zhang:$6$NBi3RlGoX85VrzH6$Gh.EPK6zRQA01LGHUHvkphaPVquPKqP3u/Qx1m7M64Y9Jw3mWI21vfi6xpe4jMFU0egq6yZvSRQbK7xHBdKi91:0:3:42:14:7:18604:

3.8、使用者相關的其他命令

cnfn 指定個人資訊

chsh 指定shell,相當於usermod -s

finger可看使用者個人資訊

範例:

[root@zhang ~]# chfn zhang
Changing finger information for zhang.
Name [ZHANG]: zhangshiqian
Office []: it
Office Phone []: 10000
Home Phone []: 11111

Finger information changed.
[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:zhangshiqian,it,10000,11111:/home/zhang:/bin/false

[root@zhang ~]# chsh -s /bin/csh zhang
Changing shell for zhang.
Shell changed.
[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:zhangshiqian,it,10000,11111:/home/zhang:/bin/csh
[root@zhang ~]# usermod -s /bin/bash zhang
[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:zhangshiqian,it,10000,11111:/home/zhang:/bin/bash

範例:修改使用者使用不可登入的shell型別

[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:zhangshiqian,it,10000,11111:/home/zhang:/bin/bash
[root@zhang ~]# chsh -s /sbin/nologin zhang
Changing shell for zhang.
chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
Shell changed.
[root@zhang ~]# su - zhang
Last login: Tue Dec  8 14:01:04 CST 2020 on pts/2
This account is currently not available.
[root@zhang ~]# chsh -s /bin/false zhang
Changing shell for zhang.
chsh: Warning: "/bin/false" is not listed in /etc/shells.
Shell changed.
[root@zhang ~]# su - zhang
Last login: Tue Dec  8 14:47:22 CST 2020 on pts/2
[root@zhang ~]# id
uid=0(root) gid=0(root) groups=0(root) 		context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@zhang ~]# chsh -s /bin/bash zhang
Changing shell for zhang.
Shell changed.
[root@zhang ~]# su - zhang
Last login: Tue Dec  8 14:48:06 CST 2020 on pts/2

3.9、建立組

groupadd實現建立組

格式

groupadd [OPTION]... group_name

常見選項:

-g GID 指明GID號;[GID_MIN,GID_MAX]

-r 建立系統組,Centos 6之前:ID<500,Centos 7以後:ID<1000

範例:

[zhang@zhang ~]$ groupadd -g 48 -r apache

3.10、修改組

groupmod組屬性修改

格式:

groupmod [OPTION]... group

常見的選項:

-n group_name:新名字
-g GID:新的GID

3.11、組刪除

groupdel可以刪除組

格式:

groupdel [options] GROUP

常見的選項:

-f,--force強制刪除,即使是使用者的主組也強制刪除組

3.12、更改組密碼

gpasswd命令,可以更改組密碼,也可以修改附加組的成員關係

格式:

gpasswd [OPTION] GROUP

常見的選項:

-a	user	將user新增至指定組中
-d	user	從指定附加組中移除使用者user
-A	user,user2,...設定由管理許可權的使用者列表

範例:

增加組成員

[root@zhang ~]# groupadd admins
[root@zhang ~]# id zhang
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang)
[root@zhang ~]# gpasswd -a zhang admins
Adding user zhang to group admins
[root@zhang ~]# id zhang
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang),1001(admins)
[root@zhang ~]# groups zhang
zhang : zhang admins
[root@zhang ~]# getent group admins
admins:x:1001:zhang

刪除組成員

[root@zhang ~]# gpasswd -d zhang admins
Removing user zhang from group admins
[root@zhang ~]# groups zhang
zhang : zhang
[root@zhang ~]# id zhang
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang)
[root@zhang ~]# getent group admins
admins:x:1001:

3.13、臨時切換主組

newgrp命令可以臨時切換主組,如果使用者本不屬於此組,則需要密碼

格式:

newgrp [-] [group]

如果使用-選項,可以初始化使用者環境

[root@zhang ~]# gpasswd root
Changing the password for group root
New Password: 
Re-enter new password: 
[root@zhang ~]# getent gshadow root
root:$6$BXQOMme8Hwc$1l1jWxYf5lxnSoqbgdQgnFmqzneXyWs/47WmTq1sHDJoRq9GZ4yV1obQJAYblT1gT3TOshFD45ga7X.EzDBkO0::
[root@zhang ~]# newgrp root
[root@zhang ~]# id
uid=0(root) gid=0(root) groups=0(root) 	context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@zhang ~]# getent passwd zhang
zhang:x:1000:1000:zhangshiqian,it,10000,11111:/home/zhang:/bin/bash
[root@zhang ~]# touch zhang1.txt
[root@zhang ~]# ll
total 12
-rw-r--r--. 1 root root    0 Dec  8 15:13 zhang1.txt
[root@zhang ~]# exit
exit
[root@zhang ~]# id
uid=0(root) gid=0(root) groups=0(root) 	context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@zhang ~]# touch zhang2.txt
[root@zhang ~]# ll
total 12
-rw-r--r--. 1 root root    0 Dec  8 15:13 zhang1.txt
-rw-r--r--. 1 root root    0 Dec  8 15:13 zhang2.txt

3.14、更改和檢視組成員

groupmems可以管理附加組的成員關係

格式:

groupmems [options] [action]

常見選項:

-g,	--group  groupname	#更改為指定組(只有root)
-a,	--add  username		#指定使用者加入組
-d,	--delete  username	#從組中清楚所有成員
-l,	--list			#顯示組成員列表 

groups可檢視使用者關係

格式

檢視使用者所屬組列表

group [OPTION],[USERNAME]...

範例:

4、檔案許可權管理

4.1、檔案所有者和組屬性操作

1、設定檔案的所有者chown

chown命令可以修改檔案的屬主,也可以修改檔案屬組

格式:

chown [OPTION]...  [OWNER][:[GEROUP]  FILE...
chown [OPTION]... --reference-RFILE FILE...

用法說明:

OWENR #只修改所有者
OWNR:GROUP #同時修改所有者和屬組
:GROUP #只修改屬組,冒號也可以使用 . 替換
--reference=RFILE #參考指定的屬性,來修改
-R #遞迴,此選項慎用,非常危險

範例:

[root@zhang data]# cp /etc/fstab fi.txt
[root@zhang data]# pwd
/data
[root@zhang data]# ll
total 12
-rw-r--r--. 1 root root 595 Dec  8 15:42 fi.txt
-rw-r--r--. 1 root root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root root   4 Dec  5 17:04 win.txt
[root@zhang data]# chown zhang fi.txt
[root@zhang data]# ll
total 12
-rw-r--r--. 1 zhang root 595 Dec  8 15:42 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt
2、設定檔案的屬組資訊chgrd

chgrp命令可以只修改檔案的屬組

格式

chgrp   [OPTION]...   GROUP FILE...

chgrp   [OPTION]...   --reference=RFILE  FILE...

-R遞迴

4.2、檔案許可權

1、檔案許可權說明

檔案的許可權主要針對三類物件進行定義

owner		屬主,u
group		屬組,g
other		其他,o

注意:

使用者的最終許可權,是從左到右進行順序匹配,即,所有者,所屬組,其他人,一旦匹配許可權立即生效,不再向右檢視其許可權
r和w許可權對root  使用者無效
只要所有者,所屬組或other三者之一有x許可權,root就可以執行

每個檔案針對每類訪問者都定義了三種常用許可權
每個檔案針對每類訪問者都定義了三種許可權

r	Readable
w	Writable
x	excutable

對檔案的許可權:

r	可使用檔案檢視類工具,比如:cat,可以獲取其內容
w	可修改其內容
x	可以把此類檔案提請核心啟動為一個程序,即可以執行(執行)此檔案(此檔案的內容必須是可執行)

對目錄的許可權:

r	可以使用ls 檢視此目錄中檔案列表
w	可在此目錄中建立檔案,也可以刪除目錄中的檔案,而和此被刪除的檔案的許可權無關
x	可以cd進入此目錄。可以使用ls -l檢視此類目錄中檔案元資料(須配合r許可權),屬於目錄的可訪問的最小許可權
x	只給目錄x許可權,不給無執行許可權的檔案x許可權

2、

格式

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]...  OCTAL -MODE FILE...
#引數RFILE檔案的許可權,將FILE的修改為同RFILE
chmod [OPTION]... --reference=RFIL FILE

說明:

MODE;who  opt  permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x

修改指定一類使用者的所有許可權
u=	g=	o=	ug=	a=	u=,g=

修改指定一類使用者某個或某個許可權
u+	u-	g+	g-	o+	o-	a+	a-	+	-

-R:遞迴修改許可權

範例:

chmod	u+wx,g-r,o=rx  file
chmod	-R	g+rwx	/testdir
chmod	600	file

4.3、新建檔案和目錄的預設許可權

umask值可以用來保留在建立檔案許可權

實現方式:

​ 新建檔案的預設許可權:666-umask,如果所得結果某位存在執行(奇數)許可權,則將其許可權+1,偶數不變
​ 新建目錄的預設許可權:777-umask
​ 非特權使用者umask預設是022
​ root的umask預設是022

檢視umask

umask
#模式方式顯示
umask -S
#輸出可被呼叫
umask -p

​ 修改umask
​ umask #

範例:

umask  002
umask u=rw,g=r,o=

持久儲存umask

​ 全域性設定:/etc/bashrc

​ 使用者設定:-/.bashrc

範例:

[root@zhang data]# umask
0022
[root@zhang data]# umask -S
u=rwx,g=rx,o=rx
[root@zhang data]# umask -p
umask 0022

範例:

[root@zhang data]# umask
0022
[root@zhang data]# ( umask 666; touch /data/fi.txt)
[root@zhang data]# umask
0022
[root@zhang data]# ll /data/fi.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 /data/fi.txt

4.4、Linux檔案系統上的特殊許可權

1、特殊許可權SUID

前提:程序有屬主和屬組;檔案有屬主和屬組

​ 1.任何一個可執行程式問件能不能啟動為程序,取決發起者對程式檔案是否擁有執行許可權
​ 2.啟動為程序之後,其程序的屬主為發起者,程序的屬組為發起者所屬的組
​ 3.程序訪問檔案時的許可權,卻決於程序的發起者

​ (a)程序的發起者,同文件的屬主:則應用檔案屬主許可權
​ (b)程序的發起者,屬於檔案屬組;則應用檔案屬組許可權
​ (c)應用檔案“其他”許可權

二進位制的可執行檔案上SUID許可權功能:

​ 任何一個可執行程式檔案能不能啟動為程序:取決發起者對程式檔案是否擁有執行許可權
​ 啟動為程序之後,其程序的屬主為原程式檔案的屬主
​ SUID只對二進位制可執行程式有效
​ SUID設定在目錄上無意義

SUID許可權設定:

chmod  u+s  FILE...
chmod  4xxx  FILE
chmod  u-s   FILE...

範例:

[root@zhang data]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr  1  2020 /usr/bin/passwd
2、特殊許可權SGID

​ 二進位制的可執行檔案上SGID許可權功能:

​ 任何一個可執行程式檔案能不能啟動為程序:取決發起者對程式檔案是否擁有執行許可權

​ 啟動為程序之後,其程序的屬組為原有程式檔案的屬組

SGID許可權設定:

chmod   g+s  FILE...
chmod   2xxx  FILE
chmod   g-s  FILE...

目錄上的SGID許可權功能:

預設情況下,使用者建立檔案時,其屬組為此使用者所屬的主組,一旦某目錄被設定了SGID,則對此目錄有寫許可權的使用者在次目錄中建立的檔案所屬組為此目錄的屬組,通常用於建立一個協作目錄

SGID許可權設定:

chmod  g+s  DIR...
chmod  2xxx   DIR
chmod   g-s   DIR...
3、特殊許可權 Stickv 位

具有寫許可權的目錄通常使用者可以刪除改目錄中的任何檔案,無論該檔案的許可權或擁有權

在目錄設定Sticky位,只有檔案的所有者或root可以刪除該檔案

sticky許可權設定:

chmod o+t   DIR...
chmod   1xxx   DIR
chmod  o-t	DIR...

範例:

[root@zhang data]# ll -d /tmp
drwxrwxrwt. 26 root root 4096 Dec  8 15:07 /tmp
4、特殊許可權數字法

SUID SGID STICKY

000	0
001	1
010	2
011	3
100	4
101	5
110	6
111	7

範例:

chmod  4777  /tmp/a.txt

許可權位對映

SGID:user,佔據屬主的執行許可權位

​ s: 屬主擁有x許可權
​ S:屬主沒有x許可權

SGID:group,佔據屬組的執行許可權位

​ s:group擁有x許可權
​ S: group沒有x許可權

Sticky:other,佔據other的執行許可權位

​ t: other擁有x許可權
​ T:other沒有x許可權

4.5、設定檔案特殊屬性

​ 設定檔案的特殊屬性,可以訪問root使用者誤操作刪除或修改檔案

​ 不能刪除,改名,更名

​ chattr +i

只能追加內特,不能刪除,改名

​ chattr +a

顯示特定屬性

​ lsattr

​ 4.6、訪問控制列表ACL

​ 1、ACL許可權功能

ACL:Access Control List,實現靈活的許可權管理

除了檔案的所有者,所屬組和其他人,可以對更多的使用者設定許可權

Centos 7預設建立的xfs和ext4檔案系統具有ACL功能

Centos 7之前版本,預設手工建立的ext4檔案系統無ACL功能,需手動增加

tune2fs  -o  acl  /dev/sdb1
mount  -o  acl  /dev/sdb1    /mnt/test

ACL生效順序:

所有者,自定義使用者,所屬組 | 自定義組,其他人

​ 2、ACL相關命令

setfacl 可設定ACL許可權

getfacl 可檢視設定的ACL許可權

範例:

[root@zhang data]# ll f1.txt
-rw-r--r--. 1 root root 0 Dec  8 19:27 f1.txt
[root@zhang data]# setfacl -m u:zhang:- f1.txt
[root@zhang data]# ll
total 12
-rw-r--r--. 1 root  root   0 Dec  8 17:46 dir
-rw-r--r--+ 1 root  root   0 Dec  8 19:27 f1.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt
[root@zhang data]# su zhang
[zhang@zhang data]$ cat f1.txt
cat: f1.txt: Permission denied
[zhang@zhang data]$ echo xx >> f1.txt
bash: f1.txt: Permission denied

範例:

[root@zhang data]# ll f1.txt
-rw-r--r--+ 1 root root 0 Dec  8 19:27 f1.txt
[root@zhang data]# setfacl -m u:zhang:- f1.txt
[root@zhang data]# ll
total 12
-rw-r--r--. 1 root  root   0 Dec  8 17:46 dir
-rw-r--r--+ 1 root  root   0 Dec  8 19:27 f1.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt
[root@zhang data]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--
mask::r--
other::r--

[root@zhang data]# su zhang
[zhang@zhang data]$ cat f1.txt
cat: f1.txt: Permission denied
[zhang@zhang data]$ echo xx >> f1.txt
bash: f1.txt: Permission denied

​ mask許可權

​ mask隻影響除所有者和other的之外的人和組的最大許可權

​ mask需要與使用者的許可權進行邏輯與運算後,才能變成有限的許可權(Effective Permission)

​ 使用者或組的設定必須存在於mask許可權設定範圍內才會生效

範例:

setfacl -m mask::rx file

範例:

[root@zhang data]# ll f1.txt
-rw-rw-r--+ 1 root root 0 Dec  8 19:27 f1.txt
[root@zhang data]# chmod g-r f1.txt
[root@zhang data]# ll f1.txt
-rw--w-r--+ 1 root root 0 Dec  8 19:27 f1.txt
[root@zhang data]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--			#effective:---
group:admins:-w-
mask::-w-
other::r--

[root@zhang data]# setfacl -m mask::rw f1.txt
[root@zhang data]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--
group:admins:-w-
mask::rw-
other::r--

[root@zhang data]# setfacl -m u:zhang:rwx f1.txt
[root@zhang data]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx
group::r--
group:admins:-w-
mask::rwx
other::r--

[root@zhang data]# setfacl -m mask::rw f1.txt
[root@zhang data]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx			#effective:rw-
group::r--
group:admins:-w-
mask::rw-
other::r--

set選項會把原有的ACl都刪除,用新的替代,需要注意的時一定要包含UGO的設定,不能像-m一樣只是新增ACl就可以

範例:

setfacl --set u::rw,u:zhang:rw,g::r,o::- faile1

​ 3、備份和還原ACL

主要檔案操作命令cp和mv都支援ACl,只是cp命令需要加上-p引數,但是tar等常見的備份工具是不會保留目錄和檔案的ACl資訊

範例:

#備份ACL
getfac1 -R /tmp/dir > ac1. txt
#消除ACL許可權
setfac1 -R -b /tmp/dir
#還,原ACL許可權
setfacl -R --set-file=acl.txt / tmp/dir
#還原ACL許可權
setfac1 --restore ac1. txt
#檢視ACL許可權
getfac1 -R / tmp/dir

範例:

[root@zhang data]# getfacl *
# file: dir
# owner: root
# group: root
user::rw-
group::r--
other::r--

# file: f1.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx			#effective:rw-
group::r--
group:admins:-w-
mask::rw-
other::r--

# file: fi.txt
# owner: zhang
# group: root
user::rw-
group::r--
other::r--

# file: linux.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

# file: win.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@zhang data]# cd
[root@zhang ~]# tar cvf data.tar /data/
tar: Removing leading `/' from member names
/data/
/data/linux.txt
/data/win.txt
/data/fi.txt
/data/dir
/data/f1.txt
[root@zhang ~]# tar xvf data.tar -C /opt
data/
data/linux.txt
data/win.txt
data/fi.txt
data/dir
data/f1.txt
[root@zhang ~]# ls /opt
data  rh
[root@zhang ~]# cd /opt/data
[root@zhang data]# ll
total 12
-rw-r--r--. 1 root  root   0 Dec  8 17:46 dir
-rw-rw-r--. 1 root  root   0 Dec  8 19:27 f1.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt
[root@zhang data]# getfacl -R /data > /root/acl.txt
getfacl: Removing leading '/' from absolute path names
[root@zhang data]# cat /root/acl.txt
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

# file: data/linux.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

# file: data/win.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

# file: data/fi.txt
# owner: zhang
# group: root
user::rw-
group::r--
other::r--

# file: data/dir
# owner: root
# group: root
user::rw-
group::r--
other::r--

# file: data/f1.txt
# owner: root
# group: root
user::rw-
user:zhang:rwx	#effective:rw-
group::r--
group:admins:-w-
mask::rw-
other::r--

[root@zhang data]# ll /opt/data
total 12
-rw-r--r--. 1 root  root   0 Dec  8 17:46 dir
-rw-rw-r--. 1 root  root   0 Dec  8 19:27 f1.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt
[root@zhang data]# cd
[root@zhang ~]# setfacl -R --set-file=/root/acl.txt /opt
[root@zhang ~]# ll /opt/data/
total 12
-rw-rw-r--+ 1 root  root   0 Dec  8 17:46 dir
-rw-rw-r--+ 1 root  root   0 Dec  8 19:27 f1.txt
-rw-rw-r--+ 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-rw-r--+ 1 root  root   6 Dec  5 17:04 linux.txt
-rw-rw-r--+ 1 root  root   4 Dec  5 17:04 win.txt
[root@zhang ~]# setfacl -b -R /opt/data
[root@zhang ~]# ll /opt/data
total 12
-rw-r--r--. 1 root  root   0 Dec  8 17:46 dir
-rw-r--r--. 1 root  root   0 Dec  8 19:27 f1.txt
-rw-r--r--. 1 zhang root 595 Dec  8 16:55 fi.txt
-rw-r--r--. 1 root  root   6 Dec  5 17:04 linux.txt
-rw-r--r--. 1 root  root   4 Dec  5 17:04 win.txt