Centos文件、目录权限管理
Centos文件、目录权限管理
在linux中设置文件权限非常重要,也是最基本的。linux文件的权限分为读(r-4)写(w-2)执行(x-1),和windows一样设置权限需要针对用户,用户所属的组,还有其它用户。只有设置了正确的权限,相应的用户才能根据权限执行相应的操作,很多时候我们配置WEB服务,FTP服务等都需要对相应的文件或文件夹赋与相应的权限才能正常跑起来,有时遇到问题通过查看错误日志会发现很多情况下是由于权限不当引起的。
文件权限分一般权限和特殊权限
一般权限主要指的是:文件所有者的权限,所属组的权限,其它用户权限
特殊权限主要指的是:权限中带s或S(SUID,SGID),t或T标志位
和文件权限有关的工具命令
ls –l 查看文件或目录的权限
umask 查看或设置权限遮罩(即实际权限=最大权限-遮罩值)
chmod 改变文件或目录的权限
chown 更改文件或目录的所有者
chgrp 更改文件或目录的所属组
getfacl 获取文件或目录权限访问控制列表
setfacl 设置文件或目录权限访问控制列表
先来看一下文件权限的查看方式,使用ll命令就可以查看长格式的文件权限等信息
[root@ha1 test]# ll -rw-r--r--. 1 root root 67 Mar 29 20:07 README.md drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
[root@ha1 test]# ll /bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
权限有3段组成,rwxrwxrwx代表最高权限,修改权限时也可以用777表示,-表示没有此项权限,本该出现x的位置出现s表示拥有SUID权限。
SUID对应4,SGID对应2,SBIT对应1
SUID只对二进制程序有效,执行者对于程序需要有X权限,在程序运行过程中,执行者(普通用户)将临时拥有程序所有者的权限
SGID对于文件来说只对二进制程序有效,普通用户将会临时拥有所属组的权限,对于目录来说,用户对此目录有RX权限可以进入目录,用户进入目录后,有效用户组会变成该目录的用户组,若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同
umask说明
umask共4位:uid/gid,属主,组,其它权限。可以使用umask命令查看 默认是0022,不过一般用到的是后3位。
默认情况下,创建文件的权限是644(6-0,6-2,6-2),创建目录的权限是755(7-0,7-2,7-2)
[root@ha1 test]# touch a [root@ha1 test]# umask 0022 [root@ha1 test]# mkdir b [root@ha1 test]# ll total 8 -rw-r--r--. 1 root root 0 Aug 10 19:01 a drwxr-xr-x. 2 root root 6 Aug 10 19:05 b -rwSr--r-T. 1 root root 65 Mar 29 21:02 index.html -rw-r--r--. 1 root root 67 Mar 29 20:07 README.md drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
修改文件权限 chmod
例:将 a 文件权限修改为:所有者有rwx,所属组:rx,其它用户:无权限
[root@ha1 test]# chmod u+x,g+x,o-r a [root@ha1 test]# ll total 8 -rwxr-x---. 1 root root 0 Aug 10 19:01 a
修改文件所有者或所有组 chown chgrp
例:将a文件所属组改为natasha,将b目录的所有者改为natasha
[root@ha1 test]# chgrp natasha a [root@ha1 test]# chown -R natasha:root b [root@ha1 test]# ll total 8 -rwxr-x---. 1 root natasha 0 Aug 10 19:01 a drwxr-xr-x. 2 natasha root 6 Aug 10 19:05 b
设置更详细的权限 getfacl setfacl
例:查看a文件的详细权限信息
[root@ha1 test]# getfacl a # file: a # owner: root # group: natasha user::rwx group::r-x other::---
setfacl用法:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl –-restore=file
参数:
-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。
-n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 --mask:重新计算有效权限,即使ACL mask被明确指定。
-d,--default:设定默认的acl规则。
--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。
--test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-R,--recursive:递归的对所有文件及目录进行操作。
-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
-P,--physical:跳过所有符号链接,包括符号链接文件。
--version:输出setfacl的版本号并退出。
--help:输出帮助信息。
--:标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。
例:将a文件权限设置为,test1用户拥有rw权限,test2用户拥有x权限,其它用户拥有rx权限
[root@ha1 test]# setfacl -m u:test1:rw,u:test2:x,o::rx a [root@ha1 test]# getfacl a # file: a # owner: root # group: natasha user::rwx user:test1:rw- user:test2:--x group::r-x mask::rwx other::r-x
发表回复