命令篇
40.chmod-修改权限
能够修改权限的只有文件所有者和超级管理员。
(1)使用数值方式修改
chmod 755 file
(2)使用字符方式修改
文件权限附属在文件所有者 u,文件所属组 g 和其他用户o 上。使用字符修改权限需要指明操作谁的权限,另外还要使用" "或"-"指定增加权限还是删除权限,也可以使用"="。
chmod u rx file
,chmod g-x file
,chmod [a] rx file
,chmod o=g file
chmod -R g w,o w directory
选项
-R:递归修改
41.chgrp-更改文件(目录)所属组
更改文件所属组的前提:组需要已经存在。
对于链接文件,修改组的作用对象是链接源文件,而非链接文件本身。
chgrp group path/to/file
,chgrp -R group /path/to/folder
chgrp --reference=/path/to/refer_file /path/to/file
42.chown-修改文件所有者和所属组
对于链接文件而言,默认不会穿过链接修改源文件,而是修改链接文件本身。
修改文件属主:
chown user path/to/file
修改文件属主和属组:
chown user:group path/to/file
或 chown user.group path/to/file
修改文件属组:
chown :group path/to/file
或 chown .group path/to/file
引用某文件得所有者和属组得值作为新文件得所有者和属组
chown --reference=path/to/rfile path/to/file
修改目录和其中的文件所有者和属组
chown -R user path/to/folder
穿过链接文件修改源文件的所有者和属组
chown -H user.group paht/to/link
原理篇
文件的权限
对于文件(目录),其拥有所有者(u)、所属组(g)和其他人(o),具体分为读权限、写权限和执行权限。
对于文件:
- r:读权限,可以使用 `cat` 等命令查看文件内容。读权限是一个文件的基本权限,如果没有读权限,则文件的一切操作都受限
- w:写权限,可以编辑文件
- x:执行权限,文件可由特定的解释器解释并执行
对于目录:
- r:可以对目录执行`ls`命令列出目录中的内容。读权限是文件的基本权限,没有读权限,则目录的一切操作都会被限制
- w:可以对目录进行创建或删除文件和子目录
- x:可以进入目录,可以使用 `ls -l`查看文件的详细信息。没有执行权限仅能查看到目录中的文件类型和文件名。
普通文件的默认权限是644,没有执行权限。目录的默认权限755,必须有执行权限,不然无法进入目录。链接文件的默认权限是 777。默认文件的权限设置方法可以通过`umask`值修改。
权限的表示
权限可以使用数字或者字符表示。
权限 | 字符表示 | 数值表示(八进制) |
---|---|---|
读权限 | r | 4 |
写权限 | w | 2 |
执行权限 | x | 1 |
无权限 | - | 0 |
如:rwxrw-r--的数值表示是764;755的字符表示是 rwxr-xr-x
权限的本质(待更新)
umask
umask 值用于设置用户在创建文件时的默认权限,对于root(实际是 UID < 200 )用户,系统默认的 umask 值时022;对于普通用户和系统用户,系统默认的 umask 值时002。
用户 | umask |
---|---|
root(uid < 200) | 022 |
系统和普通用户 | 002 |
umask 默认写在`/etc/profile`和`/etc/bashrc`两个环境配置文件中
相关配置选项如下:
代码语言:javascript复制if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
使用`umask`命令可以查看当前用户的 umask 值:
使用`umask num`可以临时修改 umask 值,一般情况下不会永久修改 umask 的默认值,如果需要修改,则根据需求情况修改/etc/profile或/etc/bashrc或~/bashrc或~/.bash_profile文件。
当用户创建一个目录时,目录的默认权限是`777-umask`,如果普通用户就是777-002=775,root 用户就是777-022=755。
当用户创建一个文件时,默认情况下都不允许计算出现可执行的权限。
- 如果 umask 的三位数值都是偶数:666-umask,普通用户666-002=664,root 用户666-022=644
- 如果 umask 的某一位是奇数:666-umask 后在奇数位上加一,666-021=645 001=646
文件的扩展 ACL 权限
文件的 owner/group/others 的权限是文件的基本 ACL。
扩展 ACL 是一种特殊权限,它是文件系统上的功能,用于解决单个用户权限的问题。扩展 ACL 可以针对单一使用者、单一文件或目录里的默认权限进行设定。
扩展 ACL 是文件系统的功能,且工作在内核,默认在 ext4/xfs 上都已经默认开启。
(待更新)
文件的隐藏属性
chatter 用于设置文件的隐藏属性,lsattr 用户查看文件隐藏属性。
一般用法:chattr [ |-|=] i 文件或目录
参数 i:文件将被锁定,不能向其中增删改内容,也不能删除修改文件等各种动作。只有 root 才能设置。
参数 a:文件只能追加内容,不能删除数据以及打开文件后的任何编辑命令。
(1)对/etc/shadow 文件设置 i 属性,任何用户包括 root 将不能修改密码,也不能创建用户
代码语言:javascript复制chattr i /etc/shadow
lsattr /etc/shadow
(2)删除隐藏属性
代码语言:javascript复制chattr -i /etc/shadow
suid/sgid/sbit
suid 只针对可执行文件,即二进制文件。它的作用是对某个命令(可执行文件)授予所有者的权限,命令执行完成权限失效。一般提权为 root 权限。
例如/etc/shadow 文件所有人都没有权限(root 除外),其他用户连看都不允许。
但用户可以修改自己的登录密码,就是由 suid 控制的。
其中"s"权限就是 suid,它出现在所有者位置上,其他用户执行 passwd 命令时,会暂时拥有所有者位的 rwx 权限,也就是 root 的权限,所以能向/etc/shadows 写入数据。
suid 必须与 x 配合,如果没有 x 的配合,则该 suid 是空 suid,仍然没有执行命令的权限,空 suid权限使用大写"S
"表示。数字4代表 suid,如4755。
sgid针对二进制文件和目录。
- 针对二进制文件时,权限升级为命令的所属组权限。
- 针对目录时,目录中所建立的文件或子目录的组将继承默认父目录组,其本质还是提升为目录所属组的权限。此时目录应该要有rx权限,普通用户才能进入目录,如果普通用户有w权限,新建的文件和目录则以父目录组为默认组。
以2代表sgid,如2755,和suid组合如6755。
sbit只对目录有效。对目录设置sbit,将使得目录里的文件只有所有者能删除,即使其他用户在此目录上有rwx权限,即使是root用户。
以1代表sbit。
suid/sgid/sbit的标志位都作用在x位,当原来的x位有x权限时,这些权限位则为s/s/t,如果没有x权限,则变为S/S/T。例如,/tmp目录的权限有个t位,使得该目录里的文件只有其所有者本身能删除。
参考链接
http://www.cnblogs.com/f-ck-need-u/p/7011971.html