引言html
前面的内容中,咱们讲到传统的权限仅有三种身份(owner,group,others)搭配三种权限(r,w,x)以及三种特殊的权限(SUID,SGID,SBIT),随着应用的发展,这些权限组合已不能适应如今复杂的文件系统权限控制要求。linux
例如,目录data的权限为:drwxr-x—,全部者与所属组均为root,在不改变全部者和所属组的前提下,要求用户yufei对该目录有彻底访问权限(rwx),但又不能让其余有用彻底权限(rwx)。这个要求看似不能实现,这就看出来传统的权限管理设置有时候也会力不从心。为了解决这样的问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表ACL(Access Control Lists)。这时候,咱们就可能经过ACL来实现。windows
什么是ACL安全
ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限以外的局部权限设定。ACL能够针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于须要特殊权限的使用状况。ide
ACL主要针对用户(user)、用户组(group)、以及掩码(mask)方面来控制权限。ui
简单地来讲,ACL就是能够设置特定用户或用户组对于一个文件/目录的操做权限。操作系统
而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操做系统权限的额外支持项目,所以要使用ACL必需要有文件系统的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系统。翻译
查看系统是否支持ACL日志
要查看你的系统是否是支持ACL,咱们能够经过下面的方法来查看。code
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2442140 11908588 18% /
[root@yufei ~]# dumpe2fs /dev/sda1 |grep acl
dumpe2fs 1.41.12 (17-May-2010)+`-
Default mount options: user_xattr acl
咱们看到,默认的挂载选项就已经有了ACL了,若是你的系统挂载时候没有这个选项,你能够经过
mount -o remount,acl /dev/sda1
来从新挂载。你也能够把这个挂载选项加入到开机启动,也就是写入到/etc/fatab文件里面。
ACL权限的查看与设置(getfacl, setfacl)
知道了ACL的意义了,也知道了系统是否支持ACL,那么下面就是如何来设定/使用这个ACL呢?
getfacl:查看文件/目录的ACL设定内容
setfacl:设置文件/目录的ACL内容
相关参数说明
先来看看setfacl这个命令的相关参数说明
语法:setfacl [-bkRd] [{-m|-x} acl参数] 文件名
-m :设置后续的acl参数
-x :删除后续的acl参数
-b :删除全部的ACL设定参数
-R :递归设置acl参数
-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)
-k :删除预设的ACL参数
设置格式以下
[d[efault]:] u[ser]:uid [:perms]
[d[efault]:] g[roup]:gid [:perms]
[d[efault]:] m[ask][:] [:perms]
[d[efault]:] o[ther][:] [:perms]
以上的参数和设置格式说明,能够在MAN中查看到
针对其余人的ACL设置
下面咱们就用例子来演示一下ACL的设置与查看
咱们在/root目录下进行操做
先查看install.log文件的ACL设置值是什么
[root@yufei ~]# getfacl install.log
# file: install.log
# owner: root
# group: yufei
user::rwx
group::r–
other::r–
[root@yufei ~]# ls -l install.log
-rwxr–r–. 1 root yufei 31537 Jan 20 05:09 install.log
我想经过上面的对比,你们应该能看明白getfacl所显示出来的内容吧!OK,这里我就很少说了,下面咱们来看看给这个文件设置ACL值后的效果。
[root@yufei ~]# setfacl -m o:rwx install.log
[root@yufei ~]# getfacl install.log
# file: install.log
# owner: root
# group: yufei
user::rwx
group::r–
other::rwx
[root@yufei ~]# ls -l install.log
-rwxr–rwx. 1 root yufei 31537 Jan 20 05:09 install.log
这时候,我对other赋予了rwx权限了,咱们切换到其余用户,就能够对此文件进行写操做了。你们可能也发现了,经过setfacl设置的other权限,和经过chmod设置的效果是同样的。没错,是这样的。
针对用户的ACL设置
把install.log拷贝到根目录,
[root@yufei ~]# cp install.log /
[root@yufei ~]# ls -l /install.log
-rwxr-xr– 1 root root 31537 Feb 9 16:27 /install.log
咱们经过ACL给yufei用户赋予rwx权限
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
[root@yufei ~]# ls -l /install.log
-rwxrwxr–+ 1 root root 31537 Feb 9 16:27 /install.log
这时候,经过ls -l查看的文件权限后面多了一个“+”号,这就表示了文件存在ACL权限。咱们切换到yufei用户,来对此文件进行一下编辑操做是彻底没有问题,这里面就不演示了,本身动手吧。
注:
一、上面的用户能够换成用户列表,中间用英文的“,”分隔就OK了。
二、针对用户组的ACL设置与用户的设置差很少,这里就不演示了。
删除ACL的设置
要是删除咱们设置的ACL权限的话,要怎么作呢?有两种方法
一、用-x删除后面接着的ACL权限
[root@yufei ~]# setfacl -x u:yufei /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r–
这时候发现还有个mask的权限没有去掉,
[root@yufei ~]# setfacl -x m:: /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
other::r–
通过了上面的操做才算把权限还原了,实在有点不方便,并且在使用-x的时候,不能单独删除某个权限。不然会出现错误提示。如setfacl -x u:yufei:rwx /install.log,这们的命令是不能够的,不知道是我哪里用错了,仍是这个命令就是这样。仍是用下面这种方法来提直接。
二、用-b删除全部的ACL权限
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
[root@yufei ~]# setfacl -b /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
other::r–
这个-b参数,一次性把全部的ACL权限所有清空,还原成文件的原来权限。我推荐你们用这个参数。
ACL的mask设置
关于group的设置与user的设置相似,这里也就不作演示了,下面咱们来看看mask,他的做用就是让用户/组对某个文件只有某些权限。mask只对其余用户和组的权限有影响,而对owner和other的权限是没有任何影响的。咱们仍是以/install.log为例来实验。
[root@yufei ~]# ls -l /install.log
-rwxr-xr– 1 root root 31537 Feb 9 17:03 /install.log
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
这时候咱们看到mask::rwx是所有的权限,因此,切换到yufei这个账户的时候,可能对/install.log文件进行写操做的。下面咱们让yufei用户对其只有读取的权限。
[root@yufei ~]# setfacl -m m::r /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx #effective:r–
group::r-x #effective:r–
mask::r–
other::r–
咱们能够看到,user:yufei:rwx的后面多了一个提示#effective:r–,也就是说,如今yufei用户只拥有r权限了。切换到yufei用户对/install.log文件进行一下写操做,会有“–INSERT —W10: Warning: Changing a readonly file ”这样的提示。
1.ACL 权限简介 与 开启
2.查看分区ACL权限是否开启
命令:dumpe2fs -h /dev/sda3
内容 default mount options: user_xattr acl
df -h 查看分区使用状况
3.临时开启分区ACL 权限
mount -o remount,acl 从新挂载根分区,并挂载加入acl权限
4.永久开启分区acl权限
vi /etc/fstab
uuid=c2 ..... / ext4 defaults,acl 1 1 #加入acl
mount -o remount / #从新挂载文件系统或重启,修改为功
5.查看acl权限
getfacl 文件名
6.设置acl权限
setfacl 选项 文件名
-m 设定acl权限
-x 删除指定acl权限
-b 删除全部的acl权限
-d 设定默认的acl权限
-k 删除默认的acl权限
-r 递归的设定acl权限
setfacl -m u:st:rx /project
setfacl -m g:group2:x /project
----------------------------
语法:setfacl [-bkRd] [{-m|-x} acl参数] 文件名
-m :设置后续的acl参数
-x :删除后续的acl参数
-b :删除全部的ACL设定参数
-R :递归设置acl参数
-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)
-k :删除预设的ACL参数
-------------------------------------------------------
7.设置最大有效权限mask
setfacl -m m:rw /project
8.删除acl权限
setfacl -x u:用户 filename
setfacl -x g:gname filename #删除指定用户用户组的acl权限
setfacl -b filename #删除文件的全部acl权限
9.递归acl权限
setfacl -m u:username:rx -R filename
setfacl -m d:u:用户:权限 文件名 将来新建的文件也必须遵照acl,只对将来的新建文件
一、setuid、setgid
先看个实例,查看你的/usr/bin/passwd 与/etc/passwd文件的权限
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
众所周知,/etc/passwd文件存放的各个用户的帐号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看,/etc/passwd仅有root权限的写(w)权,可实际上每一个用户均可以经过/usr/bin/passwd命令去修改这个文件,因而这里就涉及了linux里的特殊权限setuid,正如-rwsr-xr-x中的s
setuid就是:让普通用户拥有能够执行“只有root权限才能执行”的特殊权限,setgid同理指”组“
做为普通用户是没有权限修改/etc/passwd文件的,但给/usr/bin/passwd以setuid权限后,普通用户就能够经过执行passwd命令,临时的拥有root权限,去修改/etc/passwd文件了
二、stick bit (粘贴位)
再看个实例,查看你的/tmp目录的权限
tmp目录是全部用户共有的临时文件夹,全部用户都拥有读写权限,这就必然出现一个问题,A用户在/tmp里建立了文件a.file,此时B用户看了不爽,在/tmp里把它给删了(由于拥有读写权限),那确定是不行的。其实是不会发生这种状况,由于有特殊权限stick bit(粘贴位)权限,正如drwxrwxrwt中的最后一个t
stick bit (粘贴位)就是:除非目录的属主和root用户有权限删除它,除此以外其它用户不能删除和修改这个目录。
也就是说,在/tmp目录中,只有文件的拥有者和root才能对其进行修改和删除,其余用户则不行,避免了上面所说的问题产生。用途通常是把一个文件夹的的权限都打开,而后来共享文件,象/tmp目录同样。
三、如何设置以上特殊权限
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
或者使用八进制方式,在原先的数字前加一个数字,三个权限所表明的进制数与通常权限的方式相似,以下:
suid guid stick bit
1 1 1
因此:suid的二进制串为:100,换算十进制为:4
guid的二进制串为:010,换算:2
stick bit 二进制串:001,换算:1
因而也能够这样设:setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
最后,在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那表明此文件的特殊权限没有生效,是由于你还没有给它对应用户的x权限
10.SetUID(4)
只有二进制可执行程序才能设定SUID权限[S权限],命令执行者需对该文件有X权限
s权限是指当命令执行时给予运行文件以读写修改权限
例如:passwd 普通用户可修改/etc/shadow 文件
而cat 普通用户却不能够
设定suid : chmod 4755 filename
chmod u+s filename
11.setGID(2)
chmod 2755 filename 给组设定s权限
chomod g+s dir
11.1 针对可执行二进制文件
只有二进制可执行程序才能设定SGID权限[S权限],命令执行者需对该文件有X权限
例子:locate
whereis locate
ll /usr/bin/locate #查看文件权限
-rwx--s--x
解说上述列子:/usr/bin/locate 可执行的二进制程序 可赋予GUID,命令结束恢复自身的组权限
11.2 针对目录的做用
@ 普通用户需对该目录有rx权限
@ 由root切换成普通用户在该目录下新建文件的组默认属性应该是该目录的属性
12.sticky bit(1)
chmod 1755 dir 给其余设定s权限
chmod o+t dir
chmod o-t dir
sbit粘着位做用:
@只对有wx权限的目录起做用 :普通用户能够在此目录下拥有写入权限
@ 无粘着位,普通用户有W权限,能够删除目录下的全部文件,包括其余用户建的文件,一旦有粘着位,只有root用户能够删除全部文件,普通用户即便有W权限也没法删除文件,只能删除本身创建的文件
//chmod 7755 filename 给用户用户组其余都设定s权限(无任何意义)
chattr +j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfilechattr -j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#
lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile
chattr -j /mnt/gfs2/gfs2_dir
[root@roth-01 ~]#
lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2_dir [root@roth-01 ~]#
touch /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#
lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile
http://docs.redhat.com/docs/zh-CN/Red_Hat_Enterprise_Linux/5/html/Global_File_System_2/s1-manage-data-journal.html四、更改下列文件权限,使任何人没有更改帐户权限:
1.chattr [+-=] 选项 文件/目录
+增长权限
-删除权限
=赋予权限
选项:
i:对文件:不能添加修改内容,更名和删除
对目录: 可修改目录下文件数据,可是不能新建和删除文件
a: 对文件:只能新增内容,可是不能删除和修改数据,只能用追加的方式 echo "hua " >> /hua
对目录: 可修改和新增文件,但不容许删除
2.lsattr 查看文件系统属性
lsattr 选项 文件名
-a 全部文件和目录
-d 目录