Linux中的檔案訪問控制
在Unix系統家族里,檔案或目錄權限的控制分別以讀取、寫入、執行3種一般權限來區分,另有3種特殊權限可供運用【SUID,SGID,SBIT】,再搭配擁有者與所屬群組管理權限范圍,
SUID:
1、只對二進制可執行程式有效,不能為普通檔案;
2、對程式檔案必須擁有執行權限;
3、啟動為行程之后,其行程的宿主為原程式檔案的宿主;
4、SUID設定在目錄上無意義,
權限設定:
chmodu +s FILE...
chmodu -s FILE...
SGID:
可以應用在二進制檔案和作用在檔案夾下,當作用在二進制檔案下時,作用和SUID相似,只不過SUID是把發起者臨時變為檔案的所有者,
??而SGID是把行程的發起者變成源程式檔案的屬組
??默認情況下,用戶創建檔案時,其屬組為此用戶所屬的主組,當SGID作用在目錄下時,則對此目錄有寫權限的用戶在此目錄中創建的檔案所屬的組
??為此目錄的屬組,通常用于創建一個協作目錄,
權限設定:
chmodg +s FILE...
chmodg -s FILE...
Sticky【SBIT】:
默認情況下用戶可以洗掉具有寫權限的目錄中的任何檔案,無論該檔案的權限或擁有權,如果在目錄設定Sticky位,只有檔案的所有者或root可以洗掉該檔案,Sticky位是作用在檔案夾的,設定在檔案上毫無意義,
權限設定:
chmodo +t DIR...
chmodo -t DIR...
可以使用chmod命令、setfacl命令變更檔案或目錄的權限,設定時采用文字或數字代號皆可,
可以使用chown命令變更檔案或目錄的擁有者及所屬群組,
注意:符號鏈接的權限無法變更,如果對符號鏈接修改權限,其改變會作用在被鏈接的原始檔案
權限位映射
SUID: user,占據屬主的執行權限位
??s:屬主擁有x權限
??S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
??s: group擁有x權限
??S:group沒有x權限
Sticky: other,占據other的執行權限位
??t:other擁有x權限
??T:other沒有x權限
用戶user
| 令牌 | token,identity |
| Linux用戶 | Username/UID |
| 管理員 | root / 0 |
| 普通用戶 | 1-60000 自動分配 |
| 系統用戶 | 1-499, 1-999 (CentOS7) |
| 對守護行程獲取資源進行權限分配 | |
| 登錄用戶 | 500+, 1000+(CentOS7) |
組group
Linux組:Groupname/GID
管理員組:root, 0
普通組:
系統組:1-499, 1-999(CENTOS7)
普通組:500+, 1000+(CENTOS7)
Linux安全背景關系
??運行中的程式:行程 (process)
??以行程發起者的身份運行:
??root: /bin/cat
??mage: /bin/cat
??行程所能夠訪問資源的權限取決于行程的運行者的身份
用戶和組的組態檔
??Linux用戶和組的主要組態檔:
????/etc/passwd:用戶及其屬性資訊(名稱、UID、主組ID等)
????/etc/group:組及其屬性資訊
????/etc/shadow:用戶密碼及其相關屬性
????/etc/gshadow:組密碼及其相關屬性
passwd檔案格式

login name:登錄用名(wang)
passwd:密碼 (x)
UID:用戶身份編號 (1000)
GID:登錄默認所在組編號 (1000)
GECOS:用戶全名或注釋
home directory:用戶主目錄 (/home/wang)
shell:用戶默認使用shell (/bin/bash)
shadow檔案格式

??登錄用名
??用戶密碼:一般用sha512加密
??從1970年1月1日起到密碼最近一次被更改的時間
??密碼再過幾天可以被變更(0表示隨時可被變更)
??密碼再過幾天必須被變更(99999表示永不過期)
??密碼過期前幾天系統提醒用戶(默認為一周)
??密碼過期幾天后帳號會被鎖定
??從1970年1月1日算起,多少天后帳號失效
【更改加密演算法: authconfig --passalgo=sha256 --update】
group檔案格式
??群組名稱:就是群組名稱
??群組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow
??GID:就是群組的 ID
??以當前組為附加組的用戶串列(分隔符為逗號)
gshadow檔案格式
??群組名稱:就是群組名稱
??群組密碼:xxxxx
??組管理員串列:組管理員的串列,更改組密碼和成員
??以當前組為附加組的用戶串列:(分隔符為逗號)
用戶和組管理命令
用戶管理命令
useradd
useradd [options] 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: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 創建家目錄,用于系統用戶
-M 不創建家目錄,用于非系統用戶
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 YYYY-MM-DD: 指明用戶賬號過期日期
-f INACTIVE: 設定非活動期限
userdel
userdel [OPTION]... login
-r: 洗掉用戶家目錄
-f:強制洗掉用戶
組帳號維護命令
groupadd
groupadd [OPTION]... group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
-r: 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000
groupmod
組屬性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
groupdel
?組洗掉:groupdel
groupdel GROUP
查看用戶相關的ID資訊
id [OPTION]... [USER]
-u: 顯示UID
-g: 顯示GID
-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用
切換用戶或以其他用戶身份執行命令
?su [options...] [-] [user [args...]]
?切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的組態檔,不改變當前作業目錄
su - UserName:登錄式切換,會讀取目標用戶的組態檔,切換至家目錄,完全切換
?root su至其他用戶無須密碼;非root用戶切換時需要密碼
?換個身份執行命令:
su [-] UserName -c 'COMMAND'
?選項:-l --login
su -l UserName 相當于 su - UserName
設定密碼
?passwd [OPTIONS] UserName: 修改指定用戶的密碼
?常用選項:
-d:洗掉指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f:強制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限
--stdin:從標準輸入接收用戶密碼
echo "PASSWORD" | passwd --stdin USERNAME
修改用戶密碼策略
chage [OPTION]... LOGIN
-d LAST_DAY 上一次更改的日期
-E --expiredate EXPIRE_DATE 賬號到期的日期
-I --inactive INACTIVE 停滯時期
-m --mindays MIN_DAYS 密碼可更改的最小天數
-M --maxdays MAX_DAYS 密碼保持有效期的最大天數
-W --warndays WARN_DAYS
–l 顯示密碼策略
##示例:
chage -d 0 tom # 下一次登錄強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
更改組密碼
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,... 設定有管理權限的用戶串列
newgrp命令:臨時切換主組
如果用戶本不屬于此組,則需要組密碼
更改和查看組成員
groupmems [options] [action]
options:
-g, --group groupname 更改為指定組 (只有root)
Actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中洗掉用戶
-p, --purge 從組中清除所有成員
-l, --list 顯示組成員串列
groups [OPTION].[USERNAME]... 查看用戶所屬組串列
檔案權限

檔案屬性操作
chown 設定檔案的所有者
chgrp 設定檔案的屬組資訊
修改檔案的屬主和屬組
修改檔案的屬主【所屬用戶】:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒號可用.替換
·-R: 遞回
·chown [OPTION]... --reference=RFILE FILE...
?修改檔案的屬組:chgrp
·chgrp [OPTION]... GROUP FILE...
·chgrp [OPTION]... --reference=RFILE FILE...
-R 遞回
檔案權限
?檔案的權限主要針對三類物件進行定義
·owner: 屬主, u
·group: 屬組, g
·other: 其他, o
每個檔案針對每類訪問者都定義了三種權限
r:-->Readable
w:--> Writable
x: -->eXcutable
檔案:
r: 可使用檔案查看類工具獲取其內容
w: 可修改其內容
x: 可以把此檔案提請內核啟動為一個行程
目錄:
r: 可以使用ls查看此目錄中檔案串列
w: 可在此目錄中創建檔案,也可洗掉此目錄中的檔案
x: 可以使用ls -l查看此目錄中檔案元資料(須配合r),可以cd進入此目錄
X:只給目錄x權限,不給檔案x權限
檔案權限操作

八進制數字
--- 000 ===0
--x 001 ===1
-w- 010 ===2
-wx 011 ===3
r-- 100 ===4
r-x 101 ===5
rw- 110 ===6
rwx 111 === 7
例如:
640: rw-r-----
755: rwxr-xr-x
修改檔案權限
`chmod` [OPTION]... OCTAL-MODE FILE...
-R: 遞回修改權限
?chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + -
chmod [OPTION]... --reference=RFILE FILE...
參考RFILE檔案的權限,將FILE的修改為同RFILE
權限設定示例
chgrp sales testfile # chgrp:變更用戶或目錄的所屬組群 這里是將testfile目錄的屬主改為sales
chown root:admins testfile # chown:修改檔案權限 這里是將testfile檔案屬主改為root 組改為 admin
chmod u+wx,g-r,o=rx file # chmod 該權限,這里將屬主【+wx】權限,組【-r】權限,其他【rx】權限
chmod -R g+rwX /testdir
chmod 600 file
chown mage testfile
權限位映射
SUID: user,占據屬主的執行權限位
- s:屬主擁有x權限
- S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
- s: group擁有x權限
- S:group沒有x權限
Sticky: other,占據other的執行權限位
- t:other擁有x權限
- T:other沒有x權限
設定檔案特定屬性
chattr +i # 不能洗掉,改名,更改
chattr +a # 只能追加內容
lsattr # 顯示特定屬性
訪問控制串列ACL
ACL:Access Control List,實作靈活的權限管理
??除了檔案的所有者,所屬組和其它人,可以對更多的用戶設定權限
??CentOS7 默認創建的xfs和ext4檔案系統具有ACL功能
??CentOS7 之前版本,默認手工創建的ext4檔案系統無ACL功能,需手動增加
??tune2fs –o acl /dev/sdb1
??mount –o acl /dev/sdb1 /mnt/test
ACL生效順序:所有者,自定義用戶,自定義組,其他人
為多用戶或者組的檔案和目錄賦予訪問權限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory
mount:掛載Linux系統之外的檔案
??-v:顯示版本
getfacl:查看檔案的訪問控制串列
- setfacl:設定檔案的訪問控制串列
- etfacl u:用戶名:權限 指定目錄或檔案
取消制定用戶的acl權限
- setfacl -x u:用戶名 制定目錄或檔案
移除指定目錄全部的acl權限
- setfacl -b test/
ACL檔案上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl 可看到特殊權限:flags
通過ACL賦予目錄默認x權限,目錄內檔案也不會繼承x權限
base ACL 不能洗掉
setfacl -k dir 洗掉默認ACL權限
setfacl –b file1清除所有ACL權限
getfacl file1 | setfacl --set-file=- file2 復制file1的acl權限給file2
mask只影響除所有者和other的之外的人和組的最大權限
Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)用戶或組的設定必須存在于mask權限設定范圍內才會生效 setfacl -m mask::rx file
--set選項會把原有的ACL項都洗掉,用新的替代,需要注意的是一定要包含UGO的設定,不能象-m一樣只是添加ACL就可以
備份和恢復ACL
主要的檔案操作命令cp和mv都支持ACL,只是cp命令需要加上-p 引數,但是tar等常見的備份工具是不會保留目錄和檔案的ACL資訊
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
本文來自博客園,作者:link-零,轉載請注明原文鏈接:https://www.cnblogs.com/e-link/p/16803241.html???
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517478.html
標籤:其他
上一篇:vsftpd服務
