centos7 ACL

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

 

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

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

那麼,咱們爲何不爲Sherry開小竈呢?就是讓其不屬於任何一個組,只是以單用戶的身份被賦予特定權限。
這種「開小竈」的方式,其實就是ACL權限!
mark
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,文件系統爲XFSXFS默認支持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

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
相關文章
相關標籤/搜索