centos7 ACL


Linux文件權限與屬性詳解 之 ACL

 

Linux文件權限與屬性詳解 之 一般權限
Linux文件權限與屬性詳解 之 ACL
Linux文件權限與屬性詳解 之 SUID、SGID & SBIT
Linux文件權限與屬性詳解 之 chattr & lsattr
Linux文件權限與屬性詳解 之 su & sudo

ACL權限

1. 什么是ACL

ACL(Access Control List),訪問控制列表。
那么這玩意有啥用處呢?下面我們考慮一種場景:

假設我Jimmy創建了一個項目文件夾,我和我的開發團隊Rocket對該目錄均具備 rwx 的權限,因為我該文件夾下有源碼等,不能對外開放,所以對其他用戶的權限為0,即我的文件夾目錄為 drwxrwx---;
然而有一天,我的一個灰常好的盆友Sherry想要看一下我的項目,看看我寫的代碼有多流弊,然而我不好意思拒絕,這個時候我有三種選擇:

  1. 讓其成為所有者(這個當然不可能)
  2. 讓其成為項目組成員(然而她並沒有參與開發,再說她也基本看不懂代碼,萬一不小心刪掉了部分代碼咋弄?)
  3. 給其它人賦以 r-x 的權限(然而,other用戶太多了吧,萬一我代碼沒發布就被競爭對手給copy了呢?)
    看來,以上三種手段都不靠譜啊,怪就怪other的用戶全太大了,唉,這可咋整?

那么,我們為什么不為Sherry開小灶呢?就是讓其不屬於任何一個組,只是以單用戶的身份被賦予特定權限。
這種“開小灶”的方式,其實就是ACL權限!
mark
ACL可以針對單一用戶、單一文件或目錄來進行r、w、x的權限設置,對於需要特殊權限的使用狀況非常有幫助

2. ACL的操作

0). 查看系統是否支持ACL

首先,我們看一下自己的Linux系統存在着那些硬盤:

[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權限

[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,文件系統為XFSXFS默認支持ACL:

[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`文件系統信息:

[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權限,我也只能這樣了 (誰知道怎么查看請留言告訴我,不勝感激) 

1). 安裝ACL

系統默認的是不會安裝ACL權限的,因此需要我們自己動手:

  • RPM 包
    前提:能夠獲取到系統安裝包
    命令:rpm -ivh libacl-x.x.xx-x.x acl-x.x.xx-x.x.rpm
  • yum:
    前提:主機已經聯網,且yum可用
    命令:yum -y insatll libacl acl

mark

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
    特點:永久開啟

mark

完成修改后,需要重啟或者重新掛載你設置的分區,此處我需要重新掛載根分區:

  • 掛載: 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM