1、文件的属性
(1)文件属性
在Linux系统上,普通权限分为三类:读(r)、写(w)、执行(x)
文件的从属关系也分为三类:
属主(u):标明这个文件是谁的
属组(g):标明该文件属于哪个用户组
other(o):除开文件属主和属组之外的所有
- chown 修改文件属主
语法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]…–reference=RFILE FILE…参照RFILE赋予FILE同样的属主、属组
选项:
-R:表示递归修改
例如:chown -R u+r dir1
chown wang dir1
chown wang:g1 dir1
- chgrp 修改文件属组 (语法同chown,但只能修改文件及目录属组)
(2)文件权限
- 对文件而言:
r:表示可获取文件的数据;cat、nano等查看类工具获取文件内容
w:表示可修改文件的数据;可修改内容,不能删除文件本身,但文件内容可以删
x:表示可将此文件发起运行为进程(针对可执行程序文件或脚本,一般的文件不需要加x权限)
- 对目录而言:
r:表示可使用ls命令获取其下的所有文件列表信息,但是获取不到ls -l的详细信息
w:表示可修改此目录下的文件列表,即创建或删除文件
x:表示可cd至目录中,且可使用ls -l来获取所有文件的详细属性信息
- 除了以上三种常见的权限表示外,还有一个权限表示:
X:功能是递归赋权时,只给目录加上x权限,但如果文件之前有x权限就+x权限,文件之前没有x权限,就不加。
(3)文件权限表示法
针对各个权限的表示,除了常规的r、w、x之外,还有另外数字方法进行表示
例如:常见的权限:
644 rw-r–r–
600 rw——-
755 rwxr-xr-x
750 rwxr-x—
775 rwxrwxr-x
(4)新建文件和目录的默认权限:umask值
在我们创建文件或目录时,系统会根据umask值自动为我们分配一些权限
umask:文件的权限反向掩码
- 在创建文件时的默认权限为:666-umask(之所以文件用666去减,表示文件默认不能拥有执行权限,如果得到的结果中,仍然有执行权限,这需要将其+1)
- 在创建目录时的默认权限为:777-umask
- 系统上默认的umask值为:
- root:默认umask是022
- 普通用户:默认umask是002
- 查看umask值: umask
- umask # : 来指定umask值,值只能是3位数字,不大于777
- umask -S :模式方式显示,结果类似这种格式:u=rwx,g=rx,o=rx
- umask -p :显示uamsk本身和其值,显示结果类似这种格式:umask 0022
- 注意:在命令行里设置的umask只对当前shell有效,退出登录后失效
- 永久生效,用户设置: ~/.bashrc 全局设置: /etc/bashrc
(5)文件权限操作命令
普通用户仅能够修改属主为自己的文件的权限
方法一:chmod [OPTION]… MODE[,MODE]… FILE…模式法
- 赋权表示法(直接操作一类用户的所有权限位):u=、g=、o=、a=、ug=、uo=、…..
如:chmod u=rwx /data/file
- 授权表示法:直接操作一类用户的一个权限位:u+、u-、g+…..
如:chmod u-x /data/file
方法二:chmod [OPTION]… OCTAL-MODE FILE…八进制数字法
例如:chmod 660 /data/file
方法三:chmod [OPTION]… –reference=RFILE FILE…(参考RFILE文件权限,给FILE文件赋权)
例如:chmod –reference=/etc/issue /data/file
2、特殊权限:SUID、SGID、Sticky
(1)SUID
- 功能:设置了SUID权限后,当用户运行某二进制程序文件时,暂时拥有文件属主权限。
- 作用对象:二进制可执行程序文件
- 前提条件:该文件属主原本具有执行权限
- 展示位置:属主的x位,如果属主有x,则显示为s,如果属主没有x,则显示为S
设置方法:
chmod u+s FILE
chmod 4XXX FILE
取消方法:
chmod u-s FLIE
(2)SGID
- 功能:( 针对二进制可执行程序文件)设置了SGID权限,当用户运行某二进制程序文件时,暂时拥有文件属组权限。
- 常用(针对目录而言) 当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组的用户,在此目录中新建文件或目录时,新文件的属组自动归为此目录的属组;
(可理解为:一般是一个小组协同工作时,创建一个协作目录,让这个目录拥有SGID权限,然后小组内的用户都在同一个属组内,让此属组对该目录有写w权限,这样,小组内的人在这个目录下创建文件时,文件的属组就变成了该目录的属组,这样组内的其他人就对文件具有写权限了,实现了小组工作的协同,但此时组内的人也能删出其他人创建的文件,为了防止这种情况发生,就有了STICKY权限)
- 作用对象:二进制程序文件和目录
- 前提条件:对二进制程序文件有x权限,对目录而言有w和x权限
- 展示位置:文件或目录的属组的执行权限位,如果属组有x,则显示为s,如果属组没有x,则显示为S
设置方法:
chmod g+s FILE|DIR
chmod 2XXX FILE|DIR
取消方法:
chmod g-s FILE|DIR
(3)Sticky
- 功能:对目录设置Sticky权限,每个用户能创建新文件,但只能删除自己的文件,无法删除组内其他用户创建的文件(对于属组或全局可写的目录,组内的所有用户或系统上的所有用户,在此目录中都能创建新文件或删除所有的已有文件)
- 作用对象:目录
- 前提条件:属组或全局可写的目录,目录有执行权限
- 展示位置:other的执行权限位,如果other原本有执行权限,显示为小写t,否则,显示为大写T
设置方法:
chmod o+t DIR
chmod 1XXX DIR
取消方法:
chmod o-t DIR
3、设定文件特定属性
chatter
chattr +A FILE 可以禁止访问时更改访问时间atime
chattr +i FILE 只读,不能删除,修改内容,改名
chattr +a FILE 只读,能修改内容(echo aaa >> file追加,不能nano),不能删除,改名,移动
取消对应的权限可以将+改为-
lsattr
lsattr file 查看文件的特定属性
lsattr /data/* 查看目录/data/下所有文件的特定属性
4、访问控制列表ACL
ACL:Access Control List,实现灵活的权限管理,除了文件的属主、属组和其他人,可以对更多的用户设置权限(CentOS7之前的版本无ACL功能,需手动增加 tune2fs -o acl /dev/sdb1 或者mount -o acl /dev/sdb1 /mnt/data)
ACL生效顺序:所有者,自定义用户,自定义组,其他人。(按顺序匹配,点到即止)
mask起到限定设置acl的最高权限的作用,只影响除了所有者和other的之外的人和组,类似于“马路限高杆”,
setfacl
- 语法:setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
选项:
-b FILE|DIR 删除所有自定义的acl规则,基本的acl规则(所有者,群组,其他)将被保留
-k DIR 删除默认的acl规则
-R –recursive:递归的对所有文件及目录进行操作
-m 表示设置ACL规则
-x 表示取消ACL规则
-M acl.txt FILE 表示从指定的文件中读取规则,并以此为模板,设置指定文件FILE中的规则( acl.txt格式为:u:username:rx或g:groupname:rw等)
-X acl2.txt FILE 表示从指定的文件中读取规则,并以此为模板,删除指定文件FILE上的规则(acl.txt格式为:u:username 或 g:groupname 等)
-n –no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。
–mask 重新计算有效权限,即使ACL mask被明确指定
–set 表示清空原ACL的权限,用新的代替,需要注意的是,新的ACL规则中必须要包含文件自身的权限(UGO)定义,也就是类似:( 如 setfacl –set u::rwx,g::r,o::,u:bican:rwx – FILE
–set-file 以文件为模板,创建指定文件的ACL。如:(getfacl FILE1 | setfacl –set-file=- FILE2表示复制FILE1的ACL权限给FILE2)
加上d:设置了默认规则之后,表示在此之后在该目录下新建的文件或目录都默认具有的ACL权限,但现有文件和目录本身还是要另外单独设置ACL规则
权限表达式:
[d:] u:username:mode 指定用户的权限,如果username为空,表示设置文件所有者的权限。加d:表示设置的是默认规则
[d:] g:groupname:mode 指定群组的权限,如果groupname为空,表示设置文件所有群组的权限。加d:表示设置的是默认规则
[d:] m: :mode 指定mask权限, 加d:表示设置的是默认规则
示例:setacl -m u:bican:0 f1 设置用户bican对文件f1权限为0
setfacl -m u::rw f1 设置文件f1属主权限为读写
setfacl -x g:g2 f1 删除文件f1的g2附属组
setfacl -m mask::r f1 设置文件f1属主和other之外的用户或组最高权限为r
getfacl
getfacl FILENAME 查看文件或目录ACL权限的详细信息
备份和恢复ACL
getfacl -R /tmp/dir1 > acl.txt 保存/tmp/dir1目录的ACL设置
setfacl -R -b/tmp/dir1 递归删除dir1的ACL
setfacl -R –set-file=acl.txt /tmp/dir1 或者 setfacl –restore acl.txt 恢复dir1的ACL设置
getfacl -R /tmp/dir1 查看dir1的ACL,完成
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96151