文件属性
文件权限属性
主要针对三类对象进行定义:
owner 属主, u
group 属组, g
other 其他, o
每个文件针对每类访问者都定义了三种权限
r Readable,可读
w Writable,可写
x eXcutable,可执行
文件与文件夹中权限功能不相同:
文件: r 可使用文件查看类工具获取其内容
w 可修改其内容
X 可以把此文件提请内核启动为一个进程
目录: r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件
X 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
X 只给目录x权限,不给文件x权限
文件权限可以使用八进制数字表示
--- 000 没有任何权限
--x 001 有执行权限,1\
-w- 010 有写权限,2
-wx 011 有写、执行权限,3
r-- 100 有读权限,4
r-x 101 有读、执行权限,5
rw- 110 有读、写权限,6
rwx 111 有读、写、执行权限,7
权限项 文件类型 读 写 执行 读 写 执行 读 写 执行
字符表示 (d;l;c;s;p) r w x r w x r w x
数字表示 4 2 1 4 2 4 4 2 1
权限分配 文件所有者 文件所属组用户 其他用户
例如:
640 rw-r----- 所有者有读、写仅限,所属组有读权限,其他用户没有权限
755 rwxr-xr-x 所有者读、写、执行,所属组有读、执行权限,其他用户有读、执行权限权限
权限属性操作
chown:修改文件的所有者,所属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
OWNER:用户名
:GROUP,冒号也可用 . 替换,用户组
-R: 递归
chown [OPTION]... --reference=RFILE FILE...
示例:
chown test file.txt 修改文件所有者
chown :webs file.txt 修改文件所属组
chown .webs file.txt 修改文件所属组
chown test:webs file.txt 修改所有者和所属组
chown -R test testdir 递归修改文件夹本身及其目录下的所有文件及目录的所有者
chgrp:设置文件的属组信息
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 递归
文件权限操作命令:chmod(rwx|X)
chmod [OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:修改一类用户的所有权限
u= g= o= ug= a=,u=,g=
如:chmod u=rwx,g=rx,o=x file.sh
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + -
如:chmod u+x,g-w,o-x file.sh
chmod [OPTION]... --reference=RFILE FILE...
考RFILE文件的权限,将FILE的修改为同RFILE
示例:
chown root:admins testfile
chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir
chmod 600 file
chown mage testfile
新建文件和目录的默认权限
umask值 可以用来保留在创建文件权限
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建目录的默认权限: 777-umask
非特权用户umask是 002
root的umask 是 022
umask: 查看
umask # 设定
示例: umask 002
umask u=rw,g=r,o=
umask –S 模式方式显示
umask –p 输出可被调用
全局设置: /etc/bashrc 用户设置:~/.bashrc
练习
1、当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?
答:执行权限为目录的基础权限,没有执行权限则无法进入到目录,无法查看目录内容,无法在目录中创建、修改、删除里面的文件,就是什么也做不了
2、当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?
答:无法查看目录中的文件列表
3、当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?
答:修改文件内容需要对文件有写权限才可以,而删除文件则需要对文件父目录有写权限才可以,所以redis对文件file1不可修改也不可删除
4、当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
答:对目录有写、执行权限,则可以进入到目录,可以在目录中创建、删除文件,因此zabbix可以删除file1文件,修改文件需要文件本身有写权限方可,所以zabbix不能修改file1文件
5、复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限
答: chown tomcat:apps /var/tmp/fstab
chmod g=rw,o= /var/tmp/fstab
6、误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性
答: cp /etc/skel/. /home/git 注:复制时必须留意隐藏与非隐藏文件,用这个命令可以把隐藏的及非隐藏的全复制过去
chown -R git:git git 修改所有者及所属组
Linux文件系统上的特殊权限
SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
SUID权限:只对在二进制可执行文件有效
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定: chmod u+s FILE...
chmod u-s FILE...
SGID权限:可应用于文件,也可应用于目录
作用于文件上的SGID权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
权限设定: chmod g+s FILE...
chmod g-s FILE...
作用于目录上的SGID权限
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则用户在此目录中所创建的文件及目录的所属组将继承此目录的所属组
通常用于创建一个协作目录
权限设定: chmod g+s DIR...
chmod g-s DIR...
sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定: chmod o+t DIR...
chmod o-t DIR...
查看Sticky 位,如下,权限最后一位t表示Sticky 位
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
SUID, SGID, Sticky特殊权限数字表示法
SUID SGID STICKY
000 0
001:1
010:2
011:3
100:4
101:5
110:6
111:7
示例: chmod 4777 /tmp/a.txt
权限位映射
SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
访问控制列表ACL
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
base ACL 不能删除
mask设置最大权限,只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl -m mask::rx file
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
如:setfacl --set u::rw,u:wang:rw,g::r,o::- file1
ACL操作命令:
getfacl 查看特殊权限:flags
setfacl 设置权限
为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl –M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory
setfacl -k dir 删除默认ACL权限
setfacl –b file1清除所有ACL权限
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
练习
1、在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
答: chmod g+s /testdir/dir
setfacl -m g:tomcat:rw /testdir/dir
setfacl -m g:dbs:0 /testdir/dir
setfacl -x u:mysql:r /testdir/dir
2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限
答: getfacl -R /testdir/dir > /root/acl.txt 备份
setfacl –R –b /testdir/dir 清除ACL权限
setfacl –restore acl.txt 还原
设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能追加内容
lsattr 显示特定属性