文件权限

| 用户权限(**user**) | 组权限(group) | 其他用户 | ||||||
|---|---|---|---|---|---|---|---|---|
| r | w | x | r | w | x | r | w | x |
| 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
- 每一类用户都有3个权限
- r:读取权限, 只读
- w: 写入权限 , 可以编辑文件
- x: 执行权限, 由于某些文件是可以执行的,如有有执行权限才可以执行
- 操作权限
| -c | 若该文件权限确实已经更改,才显示其更改动作 |
|---|---|
| -f | 若该文件权限无法被更改也不显示错误讯息 |
| -v | 显示权限变更的详细资料 |
| -R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
chgrp-更改文件的用户组
语法格式: chgrp [参数] [目录]
常用参数:
| -c | 效果类似”-v”参数,但仅回报更改的部分 |
|---|---|
| -f | 不显示错误信息 |
| -h | 对符号连接的文件作修改,而不更动其他任何相关文件 |
| -R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
chown-更改文件或目录的用户和用户组
语法格式:chown [参数]
常用参数:
| -R | 对目前目录下的所有文件与子目录进行相同的拥有者变更 |
|---|---|
| -c | 若该文件拥有者确实已经更改,才显示其更改动作 |
| -f | 若该文件拥有者无法被更改也不要显示错误讯息 |
| -h | 只对于连结(link)进行变更,而非该 link 真正指向的文件 |
| -v | 显示拥有者变更的详细资料 |
常见的权限操作
授权
$ chmod 777 file/dir
添加可执行权限
$ chmod +x file
导出以及恢复文件的权限
导出文件的权限
$ getfacl -R ./ > chmod.txt
从导出的权限文件中恢复文件的权限
$ setfacl --restore=chmod.txt
Linux下的s、t、i、a权限
s:文件属主和组设置SUID和GUID
文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(chmod命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当ls -l时看到rwS,大写S说明s权限未生效)。Linux修改密码的passwd便是一个设置了SUID的程序,普通用户无读写/etc/shadow文件的权限但是却可以修改自己的密码。
ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd
可以通过字符模式设置s权限:chmod a+s filename,也可以使用绝对模式进行设置:
设置suid:将相应的权限位之前的那一位设置为4; 设置guid:将相应的权限位之前的那一位设置为2; 两者都置位:将相应的权限位之前的那一位设置为4+2=6。
如:
chmod 4764 filename //设置SUID
t :设置粘着位
一个文件可读写的用户并一定想让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。
i:不可修改权限
例:chattr +i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename命令。
a:只追加权限
对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。
