8.1 ACL權(quán)限
8.1.1 ACL權(quán)限簡(jiǎn)介與開啟(一般系統(tǒng)都默認(rèn)開啟了)
參考博文:http://c.biancheng.net/view/863.html
ACL 是 Access Control List 的
縮寫,主要的目的是在提供傳統(tǒng)的 owner,group,others 的 read,write,execute 權(quán)限之外的細(xì)部權(quán)限設(shè)定椅邓。ACL 可以針對(duì)單一使用者役耕,單一文件或目錄來進(jìn)行 r,w,x 的權(quán)限規(guī)范,對(duì)于需要特殊權(quán)限的使用狀況非常有幫助堡纬。身份不夠用的情況下,使用的蒿秦。
1烤镐、ACL權(quán)限簡(jiǎn)介
2、查看分區(qū)ACL權(quán)限是否開啟
[root@localhost ~]# dumpe2fs -h /dev/sda5
#dumpe2fs命令是查詢指定分區(qū)詳細(xì)文件系統(tǒng)信息的命令
選項(xiàng):? -h 僅顯示超級(jí)塊中信息渤早,而不顯示磁盤塊組的詳細(xì)信息
default mount options: user_xattr acl
說明這個(gè)分區(qū)支持acl
tips:先用 df -h命令查看當(dāng)前系統(tǒng)有哪些分區(qū)职车,以及使用狀況,占用容量鹊杖,結(jié)果如下。
[root@localhost ~]# df -h
Filesystem? ? ? Size? Used Avail Use% Mounted on
/dev/sda5? ? ? ? 16G? 2.5G? 13G? 17% ????/
tmpfs? ? ? ? ? ???? 498M? ? 0? 498M? 0%? ? ? /dev/shm
/dev/sda1? ? ? ?190M? 65M? 116M? 36%???? /boot
/dev/sda2? ? ? ? ?1.9G? 3.1M? 1.8G? 1% ????/home
說明我的根目錄是在 /dev/sda5 這個(gè)分區(qū)
3扛芽、臨時(shí)開啟分區(qū)ACL權(quán)限
[root@localhost ~]# mount -o remount,acl /
#重新掛載根分區(qū)骂蓖,并掛載加入acl權(quán)限?
4、永久開啟分區(qū)ACL權(quán)限
注意:fstab是系統(tǒng)開機(jī)自動(dòng)掛載的系統(tǒng)文件
[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2? /? ext4? ? defaults,acl? ? ? ? 1? 1
#加入acl?
[root@localhost ~]# mount -o remount /
#重新掛載文件系統(tǒng)或重啟動(dòng)系統(tǒng)川尖,使修改生效
8.1.2 查看與設(shè)定ACL權(quán)限
1登下、 查看ACL命令
[root@localhost ~]# getfacl 文件名
#查看acl權(quán)限
2、 設(shè)定ACL權(quán)限的命令
[root@localhost ~]# setfacl 選項(xiàng) 文件名
選項(xiàng):
-m? 設(shè)定ACL權(quán)限?
-x? 刪除指定的ACL權(quán)限?
-b? 刪除所有的ACL權(quán)限?
-d? 設(shè)定默認(rèn)ACL權(quán)限。
-k? 刪除默認(rèn)ACL權(quán)限?
-R? 遞歸設(shè)定ACL權(quán)限被芳。
3缰贝、給用戶設(shè)定ACL權(quán)限(圖190)
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# useradd st
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# mkdir /project
[root@localhost ~]# chown root:tgroup /project/
#把/project/這個(gè)目錄的所屬組改為tgroup
[root@localhost ~]# chmod 770 /project/
[root@localhost ~]# setfacl -m u:st:rx /project/
#給用戶st賦予r-x權(quán)限,使用“u:用戶名:權(quán)限”格式
4畔濒、給用戶組設(shè)定ACL權(quán)限
[root@localhost /]# groupadd tgroup2
[root@localhost /]# setfacl -m g:tgroup2:rwx? /project/
#為組tgroup2分配ACl權(quán)限剩晴。使用“g:組名:權(quán)限”格式
[root@local1 ~]# mkdir /lol
[root@local1 ~]# useradd jie
[root@local1 ~]# useradd gailun
[root@local1 ~]# groupadd zuan
[root@local1 ~]# gpasswd -a jie zuan
正在將用戶“jie”加入到“zuan”組中
[root@local1 ~]# gpasswd -a gailun zuan
正在將用戶“gailun”加入到“zuan”組中
[root@local1 ~]# chown root:zuan /lol
注釋:把目錄/lol/的權(quán)限所有者為root,所屬組為tgroup
[root@local1 ~]# chmod 770 /lol/
[root@local1 ~]# useradd luban
[root@local1 ~]# passwd luban
更改用戶 luban 的密碼 侵状。
新的 密碼:
無效的密碼: 密碼少于 8 個(gè)字符
重新輸入新的 密碼:
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新赞弥。
[root@local1 ~]# setfacl -m u:luban:rx /lol/
setfacl [選項(xiàng)]? [u:用戶名:權(quán)限]? [文件名]
注釋:將用戶(u)luban對(duì)目錄/lol/的權(quán)限改為rx
([root@localhost tmp]# ll -d /tmp/project/
drwxrwx---+ 2 root tgroup 4096 5月? 7 20:33 /tmp/project/
目錄后面有一個(gè)加號(hào),表示有acl權(quán)限趣兄,也可以用 getfacl /tmp/project 查看詳細(xì)信息)
測(cè)試:
[root@localhost tmp]# su st
[st@localhost tmp]$ cd /tmp/project
[st@localhost project]$ ls -l
總用量 0
[st@localhost project]$ touch abc
touch: 無法創(chuàng)建"abc": 權(quán)限不夠(因?yàn)闆]有寫的權(quán)限)
[root@local1 ~]# groupadd wzry
[root@local1 ~]# setfacl -m g:wzry:rwx /lol/
#為一個(gè)組wzry對(duì)這個(gè)目錄/lol分配acl權(quán)限绽左。
使用 setfacl [選項(xiàng)] [g:組名:權(quán)限] [文件名]? 格式
8.1.3 最大有效權(quán)限與刪除ACL權(quán)限
1、 最大有效權(quán)限mask
? mask是用來指定最大有效權(quán)限的艇潭。如果我給用戶賦予了ACL權(quán)限拼窥,是需要和mask的權(quán)限“相與”才能得到用戶的真正權(quán)限
A B and
r r r
r - -
- r -
- - -
修改最大有效權(quán)限
[root@localhost /]# setfacl -m m:rx 文件名
#設(shè)定mask權(quán)限為r-x。? 不影響所有者user的權(quán)限,但會(huì)影響st的權(quán)限
使用格式: setfacl [選項(xiàng)] [m:權(quán)限] [文件名]?
[root@localhost tmp]# setfacl -m m:rx /tmp/project/
[root@localhost tmp]# getfacl /tmp/project/
getfacl: Removing leading '/' from absolute path names
# file: tmp/project/
# owner: root
# group: tgroup
user::rwx
user:st:rwx? ? ? ? ? ? ? ? ? ? #effective:r-x
group::rwx? ? ? ? ? ? ? ? ? ? ? #effective:r-x
group:tgroup2:rwx? ? ? ? ? ? ? #effective:r-x
mask::r-x
other::---
2蹋凝、刪除ACL權(quán)限
[root@localhost /]# setfacl -x u:用戶名 文件名
#刪除指定用戶的ACL權(quán)限?
[root@localhost /]# setfacl -x g:組名 文件名
#刪除指定用戶組的ACL權(quán)限
[root@localhost /]# setfacl -b 文件名
#會(huì)刪除文件的所有的ACL權(quán)限
如:
[root@localhost tmp]# setfacl -x u:st /tmp/project
[root@localhost tmp]# getfacl /tmp/project/
getfacl: Removing leading '/' from absolute path names
# file: tmp/project/
# owner: root
# group: tgroup
user::rwx
user:aclUser4:rwx
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
可以看到?jīng)]有用戶 user::st了闯团,已經(jīng)刪除它的acl權(quán)限
[root@localhost tmp]# setfacl -b /tmp/project/
[root@localhost tmp]# getfacl /tmp/project/
getfacl: Removing leading '/' from absolute path names
# file: tmp/project/
# owner: root
# group: tgroup
user::rwx
group::rwx
other::---
可以看到已經(jīng)沒有ACL用戶和組了
8.1.4 默認(rèn)ACL權(quán)限和遞歸ACL權(quán)限(只能對(duì)目錄)
1、遞歸ACL權(quán)限 (遞歸是對(duì)現(xiàn)有文件進(jìn)行操作)
遞歸是父目錄在設(shè)定ACL權(quán)限時(shí)仙粱,所有的子文件和子目錄也會(huì)擁有相同的ACL權(quán)限房交。
setfacl -m u:用戶名:權(quán)限 -R 文件名? ?
tips:只對(duì)當(dāng)前現(xiàn)有目錄有作用 ,例如新touch的文件沒有設(shè)定的權(quán)限伐割。
2候味、默認(rèn)ACL權(quán)限 (針對(duì)未來要新建的文件進(jìn)行操作)
默認(rèn)ACL權(quán)限的作用是如果給父目錄設(shè)定了默認(rèn)ACL權(quán)限,那么父目錄中所有新建的子文件(目錄)都會(huì)繼承父目錄的ACL權(quán)限隔心。
setfacl -m d:u:用戶名:權(quán)限 -R 文件名
(d是default的意思)
$ setfacl -m -d:u:timo:rx -R /lol
8.2 文件特殊權(quán)限
8.2.1 SetUID(對(duì)文件的所有者而言,且只能對(duì)文件)
1白群、SetUID的功能
?只有可以執(zhí)行的二進(jìn)制程序才能設(shè)定SUID權(quán)限
?命令執(zhí)行者要對(duì)該程序擁有x(執(zhí)行)權(quán)限
?命令執(zhí)行者(一般指普通用戶)在執(zhí)行該程序時(shí)獲得該程序文件屬主的身份(在執(zhí)行程序的過程中靈魂附體為文件的屬主)
?SetUID權(quán)限只在該程序執(zhí)行過程中有效,也就是說身份改變只在程序執(zhí)行過程中有效?
passwd命令擁有SetUID權(quán)限硬霍,所以普通可以修改自己的密碼
[root@localhost ~]# ll /usr/bin/passwd?
-rwsr-xr-x. 1 root root 25980 2月? 22 2012 /usr/bin/passwd?
cat命令沒有SetUID權(quán)限帜慢,所以普通用戶不能查看/etc/shadow文件內(nèi)容?
[root@localhost ~]# ll /bin/cat?
-rwxr-xr-x 1 root root 47976 6月? 22 2012 /bin/cat
2、 設(shè)定SetUID的方法
? 4代表SUID
? chmod 4755 文件名
? chmod u+s 文件名
3唯卖、 取消SetUID的方法
? chmod 755 文件名
? chmod u-s 文件名
4粱玲、 危險(xiǎn)的SetUID
? 關(guān)鍵目錄應(yīng)嚴(yán)格控制寫權(quán)限。比如“/”拜轨、“/usr”等
? 用戶的密碼設(shè)置要嚴(yán)格遵守密碼三原則
? 對(duì)系統(tǒng)中默認(rèn)應(yīng)該具有SetUID權(quán)限的文件作一列表抽减,定時(shí)檢查有沒有這之外的文件被設(shè)置了SetUID權(quán)限
tips:
1.新建gailun(蓋倫)文件,賦予s權(quán)限:chmod 4775 /tmp/gailun
``` -rwsr-xr-x. 1 root root 0 4月? 1 17:22 gailun
2.然后去掉s,x權(quán)限橄碾。只保留rw權(quán)限卵沉。: chmod 644 /tmp/gailun
-rw-r--r--. 1 root root 0 4月? 1 17:22 gailun
3.添加s權(quán)限(此處發(fā)現(xiàn)S為大寫颠锉,這是報(bào)錯(cuò),因?yàn)間ailun文件沒有x權(quán)限史汗,對(duì)應(yīng)命令執(zhí)行者要對(duì)該程序擁有x(執(zhí)行)權(quán)限 ): chmod u+s /tmp/gailun
-rwSr--r--. 1 root root 0 4月? 1 17:22 gailun
8.2.2 SetGID(對(duì)文件或者目錄的所屬組而言)
1琼掠、SetGID針對(duì)文件的作用
?只有可執(zhí)行的二進(jìn)制程序才能設(shè)置SGID權(quán)限
?命令執(zhí)行者要對(duì)該程序擁有x(執(zhí)行)權(quán)限
?命令執(zhí)行在執(zhí)行程序的時(shí)候,組身份升級(jí)為該程序文件的屬組
?SetGID權(quán)限同樣只在該程序執(zhí)行過程中有效停撞,也就是說組身份改變只在程序執(zhí)行過程中有效
[root@localhost ~]# ll /usr/bin/locate?
-rwx--s--x 1 root slocate 35612 8月? 24 2010 /usr/bin/locate?
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db?
-rw-r----- 1 root slocate 1838850 1月? 20 04:29 /var/lib/mlocate/mlocate.db
解釋:
◆ /usr/bin/locate是可執(zhí)行二進(jìn)制程序瓷蛙,可以賦予SGID
◆執(zhí)行用戶lamp對(duì)/usr/bin/locate命令擁有執(zhí)行權(quán)限組,
◆執(zhí)行/usr/bin/locate命令時(shí)怜森,組身份會(huì)升級(jí)為slocate組速挑,而slocate組對(duì)/var/lib/mlocate.db數(shù)據(jù)庫(kù)擁有r權(quán)限,所以普通用戶可以使用 locate命令查詢 mlocate. db數(shù)據(jù)庫(kù)
◆命令結(jié)束副硅,lamp用戶的組身份返回為lamp組
2姥宝、SetGID針對(duì)目錄的作用
?普通用戶必須對(duì)此目錄擁有r(ls)和x(cd)權(quán)限,才能進(jìn)入此目錄
?普通用戶在此目錄中的有效組會(huì)變成此目錄的屬組
?若普通用戶對(duì)此目錄擁有w權(quán)限時(shí)恐疲,新建的文件的默認(rèn)屬組是這個(gè)目錄
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir dtest
[root@localhost tmp]# chmod g+s dtest
[root@localhost tmp]# ll -d dtest/
[root@localhost tmp]# chmod 777 dtest/
[root@localhost tmp]# su – lamp
[lamp@localhost ~]$ cd /tmp/dtest/
[lamp@localhost dtest]$ touch abc
[lamp@localhost dtest]$ ll
(此時(shí)新建的文件 abc 的所屬組不是lamp腊满,而是root)
3、設(shè)定SetGID
? 2代表SGID
? 命令:chmod 2755 文件名
? 或? ? ? chmod g+s 文件名?
4培己、取消SetGID
?chmod 755 文件名
?chmod g-s 文件名(用這個(gè))
8.2.3 Sticky BIT
1碳蛋、SBIT粘著位作用
? 粘著位目前只對(duì)目錄有效
? 普通用戶對(duì)該目錄擁有w和x權(quán)限,即普通用戶可以在此目錄擁有寫入權(quán)限
? 如果沒有粘著位省咨,因?yàn)槠胀ㄓ脩魮碛衱權(quán)限肃弟,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件零蓉。一但賦予了粘著位笤受,除了root可以刪除所有文件,普通用戶就算擁有w權(quán)限敌蜂,也只能刪除自己建立的文件箩兽,但是不能刪除其他用戶建立的文件?
tips:只用root和文件擁有者可以修改刪除某文件。其他用戶無法操作章喉。
[root@localhost ~]# ll -d /tmp/
drwxrwxrwt. 3 root root 4096 12月 13 11:22 /tmp/
2汗贫、 設(shè)置與取消粘著位
? 設(shè)置粘著位
? chmod 1755 目錄名
? chmod o+t 目錄名
? 取消粘著位
? chmod 777 目錄名
? chmod o-t 目錄名
8.3 文件系統(tǒng)屬性chattr權(quán)限
chattr - change file attributes on a Linux file system
1、 chattr命令格式
[root@localhost ~]# chattr [+-=] [選項(xiàng)] 文件或目錄名?
+: 增加權(quán)限?
-: 刪除權(quán)限?
=: 等于某權(quán)限?
? 選項(xiàng)
?i:如果對(duì)文件設(shè)置i屬性秸脱,那么不允許對(duì)文件進(jìn)行刪除落包、改名,也不能添加和修改數(shù)據(jù)撞反;如果對(duì)目錄設(shè)置i屬性妥色,那么只能修改目錄下文件的數(shù)據(jù),但不允許建立和刪除文件遏片。
(簡(jiǎn)單的說嘹害,i屬性:如果對(duì)某個(gè)文件賦予了i屬性,那么相當(dāng)于鎖了這個(gè)文件吮便,只能看笔呀,不能進(jìn)行任何修改
i屬性:對(duì)目錄來說,可以對(duì)其目錄下的文件進(jìn)行修改髓需,但不能新建和刪除
tip:可以限制root)
?a:如果對(duì)文件設(shè)置a屬性许师,那么只能在文件中增加數(shù)據(jù)(只能通過echo 往里追加數(shù)據(jù),vim命令不能使用)僚匆,但是不能刪除也不能修改數(shù)據(jù)微渠;如果對(duì)目錄設(shè)置a屬性,那么只允許在目錄中建立和修改文件內(nèi)容咧擂,但是不允許刪除
如:
[root@localhost tmp]# touch chattrFile
[root@localhost tmp]# echo 12 >> chattrFile
[root@localhost tmp]# cat chattrFile
12
[root@localhost tmp]# chattr +i chattrFile
[root@localhost tmp]# lsattr -a chattrFile
----i--------e- ./chattrFile
[root@localhost tmp]# echo 23>>chattrFile
-bash: chattrFile: 權(quán)限不夠
[root@localhost tmp]# chattr -i chattrFile
[root@localhost tmp]# echo 23 >> chattrFile
[root@localhost tmp]# cat chattrFile
12
23
例2:
[root@localhost tmp]# mkdir chattrDire
[root@localhost tmp]# touch chattrDire/abc
[root@localhost tmp]# echo 123 >> chattrDire/abc
[root@localhost tmp]# cat chattrDire/abc
123
[root@localhost tmp]# chattr +a chattrDire
[root@localhost tmp]# lsattr -a chattrDire/
-------------e- chattrDire/abc
-------------e- chattrDire/..
-----a-------e- chattrDire/.
[root@localhost tmp]# mkdir ./chattrDire/def
[root@localhost tmp]# lsattr -a chattrDire/
-------------e- chattrDire/abc
-------------e- chattrDire/def
-------------e- chattrDire/..
-----a-------e- chattrDire/.
[root@localhost tmp]# echo 2342525 >>? chattrDire/abc
[root@localhost tmp]# cat chattrDire/abc
123
2342525
2逞盆、 查看文件系統(tǒng)屬性
[root@localhost ~]# lsattr 選項(xiàng) 文件名
選項(xiàng):?
-a? 顯示所有文件和目錄?
-d 若目標(biāo)是目錄,僅列出目錄本身的屬 性松申,而不是子文件的
8.4 系統(tǒng)命令sudo權(quán)限
1云芦、 sudo權(quán)限
? root把本來只能超級(jí)用戶執(zhí)行的命令賦予普通用戶執(zhí)行。
? sudo的操作對(duì)象是系統(tǒng)命令
2贸桶、 sudo使用 (注意區(qū)分用戶 和 組)
[root@localhost ~]# visudo
#實(shí)際修改的是/etc/sudoers文件?
root? ? ALL=(ALL)? ? ? ALL
#用戶名? 被管理主機(jī)的地址=(可使用的身份) 授權(quán)命令(絕對(duì)路徑)
允許某個(gè)用戶舅逸,在這個(gè)IP地址段,執(zhí)行某些命令皇筛。這個(gè)IP地址要嘛是ALL要嘛是本機(jī)的IP地址
%wheel? ? ? ? ALL=(ALL)? ? ? ALL
#%組名? 被管理主機(jī)的地址=(可使用的身份) 授權(quán)命令(絕對(duì)路徑)
例如:
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root? ? ALL=(ALL)? ? ? ALL
lisi? ? ALL= /sbin/shutdown -r now
#給lisi用戶賦予重啟權(quán)限
然后保存退出
切換到lisi用戶琉历,執(zhí)行該權(quán)限
3、 授權(quán)sc用戶可以重啟服務(wù)器
[root@localhost ~]# visudo
sc? ALL= /sbin/shutdown –r now?
4水醋、 普通用戶執(zhí)行sudo賦予的命令
[root@localhost ~]# su – sc
[sc@localhost ~]$ sudo -l
#查看可用的sudo命令 旗笔,結(jié)果如下
用戶 lisi 可以在該主機(jī)上運(yùn)行以下命令:
? ? (root) /sbin/shutdown -r now
[lamp@localhost ~]$ sudo /sbin/shutdown -r now
#普通用戶執(zhí)行sudo賦予的命令,加上絕對(duì)路徑