文件属性和权限
文件属性和权限是什么?
- 属性指文件的信息,如大小、创建时间等
- 权限指对文件的操作,linux根据文件将用户的身份分为 owner/group/other,而每个身份对文件的操作又分为 read/write/execute
文件属性
通过命令 ls -al,可列出文件的属性,分为 文件类型和权限、链接数、owner、group、大小(单位为bytes)、最后修改时间、文件名( .表示当前目录,. .表示上一层目录)
上图红框为文件类型和权限,由10位组成
- 第1位为文件类型,目录为 d,文件为 -,链接为 l,存储设备为 b(硬盘),外设为c(鼠标键盘)
- 接下来每3个为一组表示owner/group/other的权限,- 表示无对应权限
修改文件属性
修改group
使用命令 chgrp groupname filename 修改文件的group,加上参数 -R 可递归修改目录下的文件,如下将1.txt的group改为root
修改owner
使用命令 chown ownername filename 修改文件的owner,加上参数 -R 可递归修改目录下的文件,如下将1.txt的owner改为root
chown命令可同时修改owner和group,如下将1.txt的owner和group改回song
修改权限
使用命令 chmod,可修改文件权限
- 方式一:对指定位设置1修改权限,如下全部修改为可读可写可执行
- 方式二:指定身份修改,如下改回原样,u表示onwer,g表示group,o表示other
- 方式三:统一添加权限,如为所有身份添加可执行权限,a表示所有身份
反之,去掉所有身份的可执行权限
修改时间
文件时间共有3种:
- mtime 指的是文件内容被更新的时间,ls -l默认显示此时间
- ctime 指的是文件状态被更新的时间,如权限、属性
- atime 指的是文件上一次被读取的时间
通过命令ls -l 及 参数 --time 可查看上述时间,如下/etc/hdparm.conf文件上一次内容更新是2018.2.22(该文件第一次创建),状态更新为2022.2.26(安装虚拟机时间),上一次访问为2022.3.2
使用命令 touch 修改文件时间,-a 修改atime,-c修改ctime,-m修改mtime,-d 修改日期,-t修改时间
如上可看到 -d -t 修改了 mtime和atime
权限对于文件和目录的区别
字母 | 对于文件 | 对于目录 |
---|---|---|
r | 读取文件内容 | 读取文件列表(ls) |
w | 编辑(添删改)文件内容 | 增、删文件,修改文件名及移动文件 |
x | 执行文件 | 进入目录(cd) |
可看到rwx 对于文件来说是对其内容的操作,对于目录是来说是对其组织结构的操作(x表示是否可进入目录)
umask和预设权限
- 一般文件不需要x权限,故最大权限为 -rw-rw-rw-
- 目录文件需要x权限才能进入,故最大权限为 drwxrwxrwx
命令 umask 查看权限预设值,0002对应为--------w-,说明需要去掉other的w权限
预设权限 = 最大权限 - 预设值
- 文件预设权限: (-rw-rw-rw-) - (--------w-) = -rw-rw-r–
- 目录预设权限:(drwxrwxrwx)- (--------w-) = drwxrwxr-x
如果要修改umask,直接在命令后面加上数字即可
隐藏属性——chattr
隐藏属性只在Ext2/Ext3/Ext4文件系统上存在,通过命令 chattr 设置隐藏属性,±= 表示添加删除设置参数
- A 表示存取文件时atime不会改变
- S 表示当对文件修改时,会同步到硬盘中
- a 表示只能添加文件内容,而不能删除和修改
- c 表示存储时自动压缩,读取时自动解压缩
- d 表示文件不会被dump备份
- i 表示只读,其他任何操作都无效
- s 表示文件删除后会直接移除,u表示删除后还在硬盘(应该是回收站)
如下为1.txt添加 i 属性后无法删除
查看隐藏属性使用命令 lsattr ,-a 表示将隐藏文件的属性也显示出来,-d 表示只显示目录属性,-R表示递归显示
特殊权限
SUID
当s在owner的x位置时是SUID,这个权限只用于文件(不可用于脚本),使用者执行该文件时可临时获得该文件owner的权限
- 用户密码存放于/etc/shadow,用户song要修改密码必然要修改shadow文件
- 而该文件权限为-rw-r-----,owner为root,group为shadow,并不对song开放
- 故用户song可通过命令passwd暂时获取root权限修改shadow文件从而实现修改密码
SGID
当s在group的x位置时是SGID
- 权限用于文件时,使用者执行该文件时可临时获得该文件group的权限
- 权限用于目录时,新建文件的group与此目录group相同
SBIT
当t在other的x位置时是SBIT,只对目录生效,当使用者在该目录下建立文件时,仅root和自己才有权力删除该文件
/tmp 存放临时文件,只有自身才能删除自己创建的临时文件
特殊权限设置
方式一:SUID/SGID/SBIT分别对应4/2/1,在设置rwx前再加一个数字,即可完成特殊权限的设置,大写S表示当前无x权限
方式二:通过符号设置,SUID为u+s,SGID为g+s,SBIT为o+t
或直接赋值设置
ACL
现有群组 group 权限为 rwxrwx—,现需要让用户 user 对群组可读
- 方法1:让user加入群组,但这样user会额外拥有w/x权限
- 方法2:让group修改权限为 rwxrwxr–,但这样其他用户会额外拥有 r 权限
ACL(Access Control List)就是为了解决上述问题,通过ACL可针对单一用户或文件设置权限
setfacl / getfacl
命令 setfacl / getfacl 设置 / 获取文件的ACL权限,-m 表示设置后续的acl参数给文件,-x 表示删除后续的acl参数,-b 移除所有的acl参数,-k 移除预设的acl参数,-R 递归设置,-d 预设acl参数(只对目录有效,目录下的所有新建文件都遵循预设值)
u:用户:权限
如上对用户 song 设置针对文件 test 的 rx 权限,如下未指定用户代表当前owner
如下红框部分即为上面所设置的权限
g:群组名:权限
如下对群组 test 设置针对文件 test 的 rx权限
m:权限
如下设置文件的有效权限,虽然用户 song 有 rx 权限,但实际只有 r 权限
d:[u|g]:[user|group]:权限
使用如上的命令针对目录,不能将ACL权限继承到目录中的新文件
如下对目录spaces设置ACL权限,使得新建的文件(或目录)也继承该权限