Linux文件權限與屬性詳解 之 通常權限
Linux文件權限與屬性詳解 之 ACL
Linux文件權限與屬性詳解 之 SUID、SGID & SBIT
Linux文件權限與屬性詳解 之 chattr & lsattr
Linux文件權限與屬性詳解 之 su & sudohtml
ACL權限
1. 什麼是ACL
ACL(Access Control List),訪問控制列表。
那麼這玩意有啥用處呢?下面咱們考慮一種場景:node
假設我Jimmy建立了一個項目文件夾,我和個人開發團隊Rocket對該目錄均具有
rwx
的權限,由於我該文件夾下有源碼等,不能對外開放,因此對其餘用戶的權限爲0,即個人文件夾目錄爲drwxrwx---
;
然而有一天,個人一個灰常好的盆友Sherry想要看一下個人項目,看看我寫的代碼有多流弊,然而我很差意思拒絕,這個時候我有三種選擇:linux
- 讓其成爲全部者(這個固然不可能)
- 讓其成爲項目組成員(然而她並無參與開發,再說她也基本看不懂代碼,萬一不當心刪掉了部分代碼咋弄?)
- 給其它人賦以
r-x
的權限(然而,other用戶太多了吧,萬一我代碼沒發佈就被競爭對手給copy了呢?)
看來,以上三種手段都不靠譜啊,怪就怪other的用戶全太大了,唉,這可咋整?
那麼,咱們爲何不爲Sherry開小竈呢?就是讓其不屬於任何一個組,只是以單用戶的身份被賦予特定權限。
這種「開小竈」的方式,其實就是ACL權限!
ACL能夠針對單一用戶、單一文件或目錄來進行r、w、x的權限設置,對於須要特殊權限的使用情況很是有幫助vim
2. ACL的操做
0). 查看系統是否支持ACL
首先,咱們看一下本身的Linux系統存在着那些硬盤:centos
[niesh@niesh ~]$ df -Th 文件系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/centos_niesh-root xfs 18G 8.5G 9.1G 49% / devtmpfs devtmpfs 348M 0 348M 0% /dev tmpfs tmpfs 363M 84K 363M 1% /dev/shm tmpfs tmpfs 363M 5.5M 358M 2% /run tmpfs tmpfs 363M 0 363M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 158M 339M 32% /boot .host:/ vmhgfs 271G 42G 229G 16% /mnt/hgfs tmpfs tmpfs 73M 16K 73M 1% /run/user/42 tmpfs tmpfs 73M 0 73M 0% /run/user/1000
根目錄(/)的掛載點此處爲/dev/mapper/centos_niesh-root
,咱們能夠查看其是否支持ACL權限ruby
[root@niesh ~]# dumpe2fs -h /dev/centos_niesh/root dumpe2fs 1.42.9 (28-Dec-2013) dumpe2fs: Bad magic number in super-block 當嘗試打開 /dev/centos_niesh/root 時 找不到有效的文件系統超級塊.
很鬱悶,竟然報這個錯誤,查了不少資料,發現dumpe2fs
命令爲ext文件系統家族的命令,個人系統爲CentOS7,文件系統爲XFS,XFS默認支持ACL:bash
[root@niesh ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.2.1511 (Core) Release: 7.2.1511 Codename: Core [root@niesh ~]# df -Th 文件系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/centos_niesh-root xfs 18G 8.5G 9.1G 49% /
可使用 xfs_info /dev/xxx
查看'XFS`文件系統信息:markdown
[root@niesh ~]# xfs_info /dev/centos_niesh/root meta-data=/dev/mapper/centos_niesh-root isize=256 agcount=4, agsize=1144832 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=4579328, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
可是,貌似看不到是否支持ACL權限,我也只能這樣了 (誰知道怎麼查看請留言告訴我,不勝感激) !app
1). 安裝ACL
系統默認的是不會安裝ACL權限的,所以須要咱們本身動手:post
- RPM 包:
前提:可以獲取到系統安裝包
命令:rpm -ivh libacl-x.x.xx-x.x acl-x.x.xx-x.x.rpm- yum:
前提:主機已經聯網,且yum可用
命令:yum -y insatll libacl acl
2). 開啓ACL
首先,咱們查看一下咱們Linux系統的ACL權限有沒有開啓:
使用 mount
命令:
[root@niesh ~]# mount
/dev/mapper/centos_niesh-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=34,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
很明顯,/dev/mapper/centos_nie-root沒有ACL權限,咱們須要本身手動開啓。
開啓的方式有兩種:
- 命令開啓
命令: mount -o remount,acl /
特色:臨時性,重啓失效- 文件開啓
命令: vim /etc/fstab
特色:永久開啓
完成修改後,須要重啓或者從新掛載你設置的分區,此處我須要從新掛載根分區:
- 掛載: mount -o remount /
- 重啓: restart
3). ACL文件設置
最經常使用的有如下2個命令:
getfacl: 獲取文件或目錄的ACL設置信息
命令: getfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
參數:-a , --access:顯示文件或目錄的訪問控制列表
-d , --default:顯示文件或目錄的默認(缺省)的訪問控制列表
-c , --omit-header:不顯示默認的訪問控制列表
-R , --recursive:操做遞歸到子目錄setfacl: 設置文件或目錄的ACL設置信息
命令:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
參數:-m, --modify=acl:修改文件或目錄的擴展ACL設置信息
-x, --remove=acl:從文件或目錄刪除一個擴展的ACL設置信息
-b, --remove-all:刪除全部的擴展的ACL設置信息
-k, --remove-default:刪除缺省的acl設置信息
-n, --no-mask:不要從新計算有效權限。setfacl默認會從新計算ACL mask,除非mask被明確的制定
-d, --default:設置默認的ACL設置信息(只對目錄有效)
-R, --recursive:操做遞歸到全部子目錄和 文件
針對咱們最開始討論問題,此處咱們進行實戰練習。
首先,我創建一個目錄Project:
[niesh@niesh tmp]$ mkdir -m 770 Project [niesh@niesh tmp]$ ll 總用量 0 drwxrwx---. 2 niesh niesh 6 7月 28 15:44 Project
其次,我增長一個新用戶叫作Sherry:
[root@niesh ~]# useradd Sherry [root@niesh ~]# passwd Sherry [root@niesh ~]#
再次,查看我和Sherry分別屬於哪個組:
[root@niesh ~]# groups Sherry Sherry : Sherry [root@niesh ~]# groups niesh niesh : niesh wheel
很明顯我倆不屬於同一個組,所以Sherry對我創建的 Project 目錄不具有任何權限:
[Sherry@niesh tmp]$ cd Project/ bash: cd: Project/: 權限不夠 [Sherry@niesh tmp]$ ^C [Sherry@niesh tmp]$ ll Project/ ls: 沒法打開目錄Project/: 權限不夠
而後,我增長Sherry的ACL權限:
[niesh@niesh tmp]$ setfacl -m u:Sherry:rx Project/ [niesh@niesh tmp]$ ll 總用量 4 drwxrwx---+ 2 niesh niesh 6 7月 28 15:44 Project
看到了吧,以上權限第11位有一個 +
號,表明的就是ACL權限
4). 查看ACL權限
咱們可使用 getfacl
命令查看剛纔設置好的權限:
設置以前:
[niesh@niesh tmp]$ getfacl Project/
# file: Project/ # owner: niesh # group: niesh user::rwx group::rwx other::---
設置以後:
[niesh@niesh tmp]$ getfacl Project/
# file: Project/ # owner: niesh # group: niesh user::rwx user:Sherry:r-x group::rwx mask::rwx other::---
多了幾行:
- user:Sherry:r-x: 表示Sherry具有的ACL權限爲 r-x
- mask::rwx: 表示ACL的最大權限,用你分配給用戶的權限與mask相與(相似於子網掩碼)
5). 刪除ACL
採用 setfacl -d <dir>
命令:
[niesh@niesh tmp]$ setfacl -b Project/
[niesh@niesh tmp]$ ll
總用量 0 drwxrwx---. 2 niesh niesh 6 7月 28 15:44 Project [niesh@niesh tmp]$ getfacl Project/ # file: Project/ # owner: niesh # group: niesh user::rwx group::rwx other::---
刪除我剛纔創建的Sherry用戶:
[root@niesh ~]# userdel -r Sherry [root@niesh ~]# cat /etc/passwd