1.文件一般权限修改命令(r w x)
* chown 命令(更改所属者、所属组)
-R: 递归 用于目录
示例1:
[root@centos7 app]# ll f1
-rw-r--r--. 1 root root 0 Jul 24 12:44 f1
[root@centos7 app]# chown zab:zab f1
[root@centos7 app]# ll f1
-rw-r--r--. 1 zab zab 0 Jul 24 12:44 f1
示例2:
[root@zab home]# ll -a wangwu
total 32
drwx------. 5 wangwu wangwu 4096 Jul 24 11:41 .
drwxr-xr-x. 6 root root 4096 Jul 24 11:18 ..
-rw-r--r--. 1 root root 18 Mar 23 08:15 .bash_logout
-rw-r--r--. 1 root root 176 Mar 23 08:15 .bash_profile
-rw-r--r--. 1 root root 124 Mar 23 08:15 .bashrc
drwxr-xr-x. 2 root root 4096 Nov 12 2010 .gnome2
drwxr-xr-x. 4 root root 4096 Jul 11 21:49 .mozilla
drwxr-xr-x. 4 root root 4096 Jul 24 11:37 skel
[root@zab home]# chown -R wangwu:wangwu wangwu ----修改wangwu目录权限属性 递归
[root@zab home]# ll -a wangwu
total 32
drwx------. 5 wangwu wangwu 4096 Jul 24 11:41 .
drwxr-xr-x. 6 root root 4096 Jul 24 11:18 ..
-rw-r--r--. 1 wangwu wangwu 18 Mar 23 08:15 .bash_logout
-rw-r--r--. 1 wangwu wangwu 176 Mar 23 08:15 .bash_profile
-rw-r--r--. 1 wangwu wangwu 124 Mar 23 08:15 .bashrc
drwxr-xr-x. 2 wangwu wangwu 4096 Nov 12 2010 .gnome2
drwxr-xr-x. 4 wangwu wangwu 4096 Jul 11 21:49 .mozilla
drwxr-xr-x. 4 wangwu wangwu 4096 Jul 24 11:37 skel
* chgrp更改所属组
* umask影响新建文件目录的默认权限
新文件(666)目录设置权限(777)
目录 (777) — umask值 =权限值
文件 (666) — umask值=偶数 权限值 奇数对位加1
666-137=53-1 ------> 640
umask 生效配置文件.bashrc
* chmod 修改文件权限
r=4 w=2 x=1 chmod Ayyy[权限值] 文件或者目录名
u=user g=group o= ather a=all
目录权限 r:意味着具有读取目录结构列表的权限。即能够使用ls命令
w:意味这具有更改目录结构列表的权限。即可以:
新建(touch/vim)文件与目录;
删除(rm)文件与目录(且不论该文件与目录权限是什么);
重命名(mv)文件与目录;
移动(cp)文件与目录;
x:意味着具有能够进入该目录成为工作目录的权限。即可以使用cd命令,查看文件的元数据
文件权限 r:意味着具有读取该文件内容的权限
w:意味着具有编辑、新增、修改文件内容的权限
x:如果是脚本文件意味这可以被系统执行
注意:对于文件而言,其r、m、x权限都针对的是该“文件的内容”而言的,而对于“文件名”本身的操作(例如删除、重命名等)权限是没有意义的。这个结合上面权限对于目录而言的意义就很好理解了
2.文件系统特殊权限(针对普通用户)
SUID 所有者(user)执行权限(x-->s) 作用在可执行的二进制程序上,将当前运行者的身份切换为该程序文件所有者,拥有其执行权限 SUID设置在目录上无意义 权限数值为4
例:
-rwsr-xr-x. 1 root root 48568 Sep 10 14:24 /tmp/cat
任何用户运行cat时,具有的是root权限,所以可以查看一切文件的内容!
SGID 作用在可执行的二进制程序文件上,将当前运行者的身份切换为该程序文件的所属组 ,拥有其执行权限
一般使用中,该权限位设置在目录文件上。具有sgid的目录,用户在此目录下创建文件时,新建文件的属组不再是用户所属的基本组,而是目录的属组。 权限数值为2
例:
drwxrwsr-x. 2 root cloud 4096 Sep 10 14:35 test
在test目录下新建文件的所属组为cloud
Sticky粘滞位 该权限位也设置在目录文件上。对于具有粘滞位的目录,如果一个普通用户对该目录有写权限,则,该用户可以在该目录下创建、删除文件属主是自己的文件,不能删除文件属主不是自己的文件。显然,这就是设置了粘滞位后的效果。否则,该用户是可以删除目录任意文件的!权限数值为1
chmod o+s DIR…
chmod o-s DIR..
例:
drwxrwxrwt. 14 root root 4096 Sep 10 14:26 /tmp
注:在文件显示的权限占位符中,它们分别从左到右替换掉了属主的x位,属组的x位,其它类的x位。对于suid和sgid,若对应的x位具有执行权限,则显示为小写的’s’;若对应的x位不具有执行权限(即x位为空),则显示为大写的’S’。对于sticky,若对应的x位具有执行权限,则显示为小写的’t’;若对应的x位不具有执行权限,则显示为大写的’T’。
特殊权限位的设置:
假定要设置的目录或文件FILE原来的正常权限值是755
1. suid
chmod u+s FILE
chmod 4755 FILE
2. sgid
chmod g+s FILE
chmod 2755 FILE
3. sticky
chmod o+s FILE
chmod 1755 FILE
隐藏权限chattr
i:可以让文件不能被删除、重命名;不能写入、添加数据;不能创建硬链接;注意只有root用户有权设置此权限
# touch attrtest
# chattr +i attrtest ------>#给文件添加隐藏权限i
# lsattr attrtest ------>#查看文件的隐藏权限
----i--------e- attrtest
# whoami
root
# rm attrtest -f
rm: 无法删除"attrtest": 不允许的操作 ------>#哪怕root用户都不能删除
# echo "hello" > attrtest ------>#不能写入/修改
-bash: attrtest: 权限不够
# mv attrtest attrtest2 ------>#不能重命名
mv: 无法将"attrtest" 移动至"attrtest2": 不允许的操作
# ln attrtest 2 ------>#不能创建硬链接
ln: 创建硬链接"2" => "attrtest": 不允许的操作
# ln -s attrtest 1.txt
# cat attrtest ------>查看和创建软链接倒是可以
a:让这个文件只能增加数据,不能删除、修改数据;注意只有root用户有权设置此权限
# chattr +a attrtest
# lsattr attrtest
-----a-------e- attrtest
# echo "hello" > attrtest
-bash: attrtest: 不允许的操作
# echo "hello" >>attrtest ------>#注意体会 > 和 >> 的不同
# cat attrtest
hello
# rm attrtest -f
rm: 无法删除"attrtest": 不允许的操作
X 的作用 针对目录增加x权限 目录下的文件,如果文件无执行的权限,不会增加x权限 如果文件有x权限 都增加x权限
3.访问控制列表实现灵活的权限管理
(1)ACL:Access Control List,实现灵活的权限管理
(2)除了文件的所有者,所属组和其它人,可以对特定的用户设置权限
(3)CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
(4)CentOS7.x之前的版本,默认手工创建的ext4文件系统无acl功能,需要手动添加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt
假如分区不支持ACL 权限,那么可以手工开启
重新挂载分区: mount -o remount,ACL /home :临时生效
修改/etc/fastab: fasttab 是系统启动时,加载需要挂载的分区的文件,千万不能写错,修改只需在default后添 加,ACL即可,修改之后需要重启或者重新挂载分区
(5)ACL生效顺序:所有者,自定义用户,自定义组,其它人
(6)为多用户或者组文件和目录赋予访问权限rwx
setfacl命令格式: setfacl 选项 文件目录名
-m 设定ACL权限
-x 删除指定用户,用户组的ACL权限,针对用户,用户组
-b 删除文件所有的ACL权限,针对文件
-k 删除默认ACL权限
-R 递归设置ACL权限
常见acl设置;(getfacl setfacl支持递归-R 目录)
mount -o acl /DIR 使挂载在该目录下的文件系统拥有acl功能
getfacl file|DIR 查看文件或目录的acl信息
setfacl -m u/g:wang:rwx file|dir 设置文件或目录的对wang用户的权限位读写执行
setfacl -Rm g/u:sales:rwX DIR 递归设置组对目录的访问权限,目录下已存在文件件,之后创建的文件不会新增此ACL权限
setfacl -M file.acl file|dir 以文件的形式批量修改文件或目录对多个用户的访问权限
setfacl -m g/u:salesgroup:rw file|dir 设置salegroup组对文件或目录的访问权限
setfacl -m d:u/g:wang:rw dir 指对之后此目录下新建的文件默认进行此ACL权限设置,无论是此目录的子文件,子子文件,新建后都会拥有此ACL权限
setfacl -x u/g:wang file|dir 删除文件或目录的acl设置
eg.1 setfacl -x g:group2 /project/ : 删除/project 的group2 组ACL权限
eg.2 setfacl -x u:user1 /project/ : 删除/project 的user1 用户ACL权限
setfacl -X file.acl dir 批量删除acl设置
setfacl -b file 清除file文件所有acl权限
eg.1 setfacl -b /project : 删除/project的所有ACL权限
setfacl -k file|dir 删除默认ACL权限
(7)ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
(8)默认ACL权限给了x,文件也不会继承x权限,base ACL不能删除
(9)setfacl -k dir 删除默认ACL权限,setfacl -b file1 清除所有ACL权限
(10)getfacl file1|setfacl --set-file=- file2 复制file1的acl权限给file2
(11)mask只影响所有者和other之外的人和组的最大权限,MASK需要和用户的权限进行逻辑与运算后,才能编程有限的权限(Effective Permission) 用户或组的设置必须存在与mask权限设定范围内才能生效
setfacl -m mask::rw file
所以用户具体拥有的权限并不一定是设置acl时指定的权限,和设置的最大默认权限进行与操作后得到的权限为用户实际拥有的权限
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的位置,和-m选项添加ACL有一定区别
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
(12)访问列表的备份和还原:
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数,但是tar等常见的备份工具是不会保留目录
和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt 备份dir1目录下 文件的ACL信息到acl.txt中
setfacl -R -b /tmp/dir1 删除dir1目录下文件的acl列表
setfacl -R --set-file=acl.txt /tmp/dir1 恢复dir下的acl列表
getfacl -R /tmp/dir1 递归显示dir1下文件的acl列表
示例1:
[root@zab /]# getfacl -R /app > /root/f2
getfacl: Removing leading '/' from absolute path names
[root@zab /]# setfacl -Rb /app
[root@zab /]# ll /app
total 24
-rw-r--r--. 1 root root 12 Jul 23 23:02 f1
-rw-r--r--. 1 root root 21 Jul 24 09:22 f2.acl
[root@zab /]# setfacl --restore /root/f2
[root@zab /]# ll /app
total 28
-rw-rwxr--+ 1 root root 12 Jul 23 23:02 f1
-rw-r--r--. 1 root root 21 Jul 24 09:22 f2.acl
[root@zab /]# getfacl app/f1
# file: app/f1
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--
mask::rwx
other::r--
示例2:
[root@zab app]# id zhang
uid=502(zhang) gid=505(zhang) groups=505(zhang)
[root@zab app]# ll f1
-rw-r--r--. 1 root root 0 Jul 23 22:09 f1 ----zhang对于f1文件属于ather组 只有r读的权限
[root@zab app]# setfacl -m u:zhang:--- f1 ----=setfacl -m u:zhang:0 f1 setfacl 对用户(u)zhang设置为---权限
[root@zab app]# su zhang
[zhang@zab app]$ cat f1
cat: f1: Permission denied ----所以zhang不能读取f1
[root@zab app]# id zhao
uid=503(zhao) gid=506(zhao) groups=506(zhao)
[root@zab app]# su zhao
[zhao@zab app]$ ll f1
-rw-r--r--+ 1 root root 0 Jul 23 22:09 f1 ----zhao对于f1也属于ather组
[zhao@zab app]$ cat f1 ----能读取
[zhao@zab app]$ getfacl f1 ---- 查看acl权限
# file: f1 ----文件名
# owner: root ----所有者
# group: root ----所属组
user::rw-
user:zhang:--- ----zhang无权限
group::r--
mask::r--
other::r--
[root@zab app]# id wang
uid=500(wang) gid=504(wang) groups=504(wang)
[root@zab app]# setfacl -m g:wang:rw f1 ----给wang这个组对文件f1读写权限
[root@zab app]# getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--
group:wang:rw-
mask::rw-
other::r--
[root@zab app]# id li
uid=501(li) gid=503(li) groups=503(li),504(wang) ----li对f1属于ather wang为li附加组
[root@zab app]# su li ----wang组能读写 li也能读写
[li@zab app]$ cat > f1
Dada
[root@zab app]# ll f1
-rw-rw-r--+ 1 root root 12 Jul 23 23:02 f1
[root@zab app]# id li
uid=501(li) gid=503(li) groups=503(li),504(wang)
[root@zab app]# setfacl -m u:li:0 f1 ----li对没文件无权限
[root@zab app]# su li
[li@zab app]$ getfacl f1
# file: f1http://13157015.blog.51cto.com/13147015/1955889
# owner: root
# group: root
user::rw-
user:li:--- ----li无权限
user:zhang:---
group::r--
group:wang:rw- -----li在wang组 有读写权限
mask::rw-
other::r--
[li@zab app]$ cat f1 ---- 生效为user:li:--- 无权限
cat: f1: Permission denied
acl生效顺序:所有者,自定义用户,自定义组(权限最大不过mask),其他人
示例3:
• setfacl -M file.acl file|directory 批量设置
[root@zab app]# cat > f2.acl<<eof
> u:wang:rw
> g:zhao:rwx
> eof
[root@zab app]# setfacl -M f2.acl f1
[root@zab app]# getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:wang:rw-
group:zhao:rwx
mask::rwx
other::r--
练习
复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限
[root@zab ~]# cp /etc/fstab /var/tmp
[root@zab ~]# ll /var/tmp
total 4
-rw-r--r--. 1 root root 899 Jul 24 16:31 fstab
[root@zab ~]# chown wangcai /var/tmp/fstab
[root@zab ~]# chgrp sysadmins /var/tmp/fstab
[root@zab ~]# chmod 660 /var/tmp/fstab
[root@zab ~]# ll /var/tmp/fstab
-rw-rw----. 1 wangcai sysadmins 899 Jul 24 16:31 /var/tmp/fstab
在/tesdir/dir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。
[root@centos7 app]# mkdir -p tesdir/dir
[root@centos7 app]# ll tesdir
total 0
drwxr-xr-x. 2 root root 6 Jul 25 16:42 dir
[root@centos7 app]# chgrp g1 tesdir/dir
[root@centos7 app]# chmod g+s tesdir/dir ---sgid作用在目录上,新建立的文件所属组自动继承父目录的所属组
[root@centos7 app]# ll tesdir
total 0
drwxr-sr-x. 2 root g1 6 Jul 25 16:42 dir
[root@centos7 dir]# setfacl -m d:g:g2:rw dir
[root@centos7 dir]# setfacl -m d:g:g3:r dir
[root@centos7 tesdir]# chmod o=--- dir
[root@centos7 tesdir]# ll
total 0
drwxr-s---. 2 root g1 24 Jul 25 16:58 dir
备份/app里所有文件的ACL权限到/root/f2中,清除/app中所有ACL权限,最后还原ACL权限
[root@zab /]# getfacl -R /app > /root/f2
getfacl: Removing leading '/' from absolute path names
[root@zab /]# setfacl -Rb /app ----递归删除app下所有acl权限
[root@zab /]# ll /app
total 24
-rw-r--r--. 1 root root 12 Jul 23 23:02 f1
-rw-r--r--. 1 root root 21 Jul 24 09:22 f2.acl
[root@zab /]# setfacl --restore /root/f2
[root@zab /]# ll /app
total 28
-rw-rwxr--+ 1 root root 12 Jul 23 23:02 f1
-rw-r--r--. 1 root root 21 Jul 24 09:22 f2.acl
[root@zab /]# getfacl app/f1
# file: app/f1
# owner: root
# group: root
user::rw-
user:zhang:---
group::r--
mask::rwx
other::r--