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权限!



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

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

Linux文件权限与属性详解 之 ACL的更多相关文章

  1. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  2. Linux文件权限与属性详解 之 一般权限

    目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...

  3. Linux文件权限与属性详解 之 chattr & lsattr

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  4. Linux文件权限与属性详解 之 su & sudo

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. Linux文件权限与属性详解 之 SUID、SGID&SBIT

    一.SetUID 1.Linux普通用户可以修改自己的密码,这个是一个合情合理的设置; 修改密码其实修改的是/etc/shadow这个文件,这个文件的属性: ----------. 1 root ro ...

  6. 轻松学习Linux之Shell文件和目录属性详解

    轻松学习Linux之Shell文件和目录属性详解 轻松学习Linux之理解Sitcky 轻松学习Linux之理解umask 轻松学习Linux之理解SUID&SGUID 本系列多媒体教程已完成 ...

  7. Linux文件查找命令 find 详解

    关于find命令 由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权 ...

  8. linux学习7 Linux文件系统功能和作用详解

    一.终端 1.用户界面 GUI: GNome KDE CLI: bash,zsh,sh,csh,tcsh,ksh 2.远程连接 a.ssh协议. 查看系统是否监听于tcp协议的22号端口: ss  - ...

  9. Linux文件处理命令 ls 详解

    Linux系统的应用场景最多的就是用作服务器的系统了,简洁,安全,高效,一般我们服务器端不会安装Linux的图形化界面,虽然现在一些Linux发行版的图形界面也很漂亮,但是,服务器最主要的是高效.所以 ...

随机推荐

  1. Unity3D编辑器扩展(二)——定义自己的窗口

    上一篇我们讲了如何定义菜单按钮 https://www.cnblogs.com/xiaoyulong/p/10115053.html 这一篇我们讲如何定义自己的窗口. 定义窗口我们需要继承 Edito ...

  2. Mongo学习笔记

    安装和开始 下载 MongoDB 参考:+MongoDB安装配置(Windows) +Mongo手册

  3. 7 week work

    Dom和Bom的起源.方法.内容.应用. Dom:起源:首先听到Virtual DOM这个概念应该来自于React,并且在不了解时觉得这个概念是一个逼格特别高的词.其实任何技术的诞生都是有相应的历史的 ...

  4. [转] Java 的泛型擦除和运行时泛型信息获取

    原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...

  5. scrapy 中 xpath 用string方法提取带有空格符解决方法

    注释掉的是刚开始的代码,匹配的全是带空格的,replace替换不了空格 后面加上了normalize-space()  匹配到的文本内容变成了可replace 问题解决

  6. Centos6.5安装中文支持和中文输入法---VIM编辑器中文支持

    Centos6.5安装中文支持和中文输入法 第一步:中文支持:    在shell命令下输入: # vi  /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8 ...

  7. unigui+fastreport报表打印

    unigui+fastreport报表打印   unigui+fastreport报表打印 FASTREPORT导出成PDF报表,UNIGUI的TUniURLFrame显示PDF报表并打印. func ...

  8. 腾讯技术分享:微信小程序音视频技术背后的故事

    1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...

  9. 4.TableLayout、回调接口

    会话详情页 listview条目布局 列,当第0列的内容过多时,不至于将其他列的内容,挤出屏幕 --> <TableLayout android:id="@+id/tl_rece ...

  10. Java学习图