目录

简介

权限可以用来限制某些其他用户的行为,对于属主和 root 这俩账户来看想怎么操作怎么操作,不受限制!这点一定要清楚。在前面学习 ls -l 认识过权限位,2-4位:文件属主权限(owner 所有者)5-7位:文件属组权限(group 所属组),8-10 位:其他用户权限(other 其他非本群组用户)

在这里的关于文件 r 是指读取权限,可以用相关命令来查看文件的内容,w 指写权限,可修改文件内容(其他人没有删除此文件权限),x 指执行权限,这个文件能不能被当作可执行文件或脚本来运行。

目录中 r 是指可以查看目录中有哪些内容比如执行 ls 命令,w 可以修改目录中内容(文件或目录等),x 表示这个目录能不能进入,比如可以执行 cd 命令,读取/修改目录下文件内容必须先进入这个目录才能操作。

--- 这种符号表示没有权限,在系统中使用二进制(10进制也是000) 000 数字表示,如果有权限中二进制表示为 1(rwx=111),其十进制表示为 r=4、w=2、x=1。

ls-l.png

来试试分析下面着张图怎么表示权限,用前面介绍的十进制做加法,第一条文件属主 root 权限是 rw- 换算成二进制=110(十进制=6),属组和其他用户都没有权限。

来看第二行,rwxr-xr-x 属主权限是 rwx,换为二进制是 111(十进制=7),属组二进制是 101(十进制=5),其他用户二进制是 101(十进制=5)。

第三行 rwxrwxrwx 属主权限是 rwx 二进制为 111(十进制=7) 属组和其他用户都是 7,很简单吧。

Analysis.PNG

权限设置

更改属主与属组

chown username filename,chown 就是 change owner,用于改变文件的属主。

  • -R,递归更改文件属主和属组(连同文件夹和内容一起更改)
  • --reference,复制一个对象属主和属组的属性到目标文件或目录

Owner.png

这里的 --reference 选项会将一个对象的归属复制到另一个对象上,注意它不会复制权限只复制归属。

reference.png

要单独修改属组在组名前面添加点或冒号 chown .groupname filename
genusGroup02.png

要想同时修改属主和属组可以 chown username:groupname filename(使用.也可以),点前面留空。
chown.png

单独修改属组

chgrp groupname filename

  • -R,递归更改文件属组(连同文件夹和内容一起更改)
  • --reference,复制一个对象属组的属性到目标文件或目录

genusGroup01.png

修改文件或目录权限

chmod [augo] [+-=] [rwx] fileName

  • a,(所有用户)、u(文件属主)、g(文件属组)、o(其他用户)
  • +,(为用户添加权限)、-(为用户减少权限)、=(为用户赋予权限)
  • -R,递归更改文件属主和属组(连同文件夹和内容一起更改)

示例:chmod u=rwx,go= ./root/a.txt

为当前属主添加 wrx 权限,g 是属组,o 是其他用户,留空等于没有权限,多个选项添加用逗号隔开(同时对两个文件或目录请用空格隔开)。

chmod.png

知道了前面权限数字的转换现在就用起来,如果想把属主设置为 rwx 属组和其他用户没有权限我们可以用 chmod 700 a.txt,这样就当前属主就有了 rwx 权限,属组与其他用户没有权限读写执行(对于 root 用户普通权限限制对它无效)。

一个个手动设置太麻烦,可以用 -R 批量对某个目录包括下面所有文件设置权限,这里 -R 把 test 目录包括下面的文件的权限全部变成可读写。

chmod666.png

默认权限

图中目录默认权限是 755(具有执行权限比如用 cd 命令),文件默认权限是 644(没有执行权限),这个默认权限是由 umask(反掩码)来决定的,反掩码在 /etc/logoin.defs 文件中定义

# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077

umask.png

如果没有手工指定反掩码,权限掩码默认初始化为 022。我们在shell中输入 umask 就能查当前的反掩码啦。这里的 umask 后面跟上数值也可以更改 umask numeric 更改过后按照新的反掩码进行计算。

直接来看个实例。

新建文件它是这样计算的,默认权限掩码 666 减去默认反掩码 022 就是644(rw-r--r--)

-rw-r--r--. 1 root root    0 3月  24 21:04 mask.txt
[root@localhost ~]# umask
0022

目录的默认权限掩码是 777,减过反掩码后是 755(rwxr-xr-x)。

drwxr-xr-x. 2 root root    6 3月  24 21:05 mulu
[root@localhost ~]# umask
0022

关于默认权限还有个小问题需要注意,下面引用 csdn 一篇博文部分内容。

这样做减法对文件来说稍有纰漏,如果在 umask 中有奇数的话,计算完成后在对应奇数位后面加1。
假设umask值为:045(其他用户组位为奇数)
666 ==>文件的起始权限值
045 - ==> umask 的值
621 ==>计算出来的权限,由于 umask 最后一位数字是 5,所以在其他用户组位再加 1。
001 +
622 ==>真实文件权限
计算

隐藏权限

chattr 查看文件或目录的隐藏权限。

Usage: chattr [+-=] [Asaci] filename
Options:

  • a,只能向文件中追加数据
  • i,任何用户(包括root)不能删除文件、重命名、设定连接、写入数据、追加数据
  • A,不同步访问时间
  • +,添加相应权限
  • -,删除相应权限
  • =,设定相应权限(会清空以前写的权限,把新权限写入)

修改文件隐藏权限,在 //dev/tm/var/etc 不受保护

如果设置了隐藏权限 root 也不能操作。

权限中 s 和 t 作用

SUID=Set UID,只能出现在二进制程序属主执行位,有权限执行此程序的用户,会在执行过程中临时获得当前程序属主权限。

-rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd

SGID=Set GID,只能出现在目录/二进制程序属组执行位上。

-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate

在程序上,当此程序可执行时在执行过程中会临时获得该程序属组权限完成任务。在目录上,用户在此目录下新建文件/目录的属组将继承当前目录属组。

在为设置权限时,不能直接 +s,最终添加的结果是 S,这种权限在运行时将不会使用 sgid 权限来运行:

[root@iZ2ze3excf14rd7l4rsgn3Z ~]# ls -ld tmp
drwxr--r-- 2 root root 4096 Dec 18 19:36 tmp
[root@iZ2ze3excf14rd7l4rsgn3Z ~]# chmod g+s tmp
[root@iZ2ze3excf14rd7l4rsgn3Z ~]# ls -ld tmp
drwxr-Sr-- 2 root root 4096 Dec 18 19:36 tmp

使用 +xs 才是 s:

[root@iZ2ze3excf14rd7l4rsgn3Z ~]# chmod g+xs tmp
[root@iZ2ze3excf14rd7l4rsgn3Z ~]# ls -ld tmp
drwxr-sr-- 2 root root 4096 Dec 18 19:36 tmp

SBIT=Sticky Bit,只能出现在目录 other 权限执行位上。当目录拥有 SBIT 权限时,任何普通用户在该目录下建立的文件,只有该用户自己和 root 可以删除。

drwxrwxrwt. 8 root root 4096 5月   8 11:11 /tmp

总结:出现在程序 owner 上称作 SUID,在程序/目录 group 上叫 SGID,如果在目录 other 上称作 SBIT。

参考资料

最近更新:

发布时间:

摆哈儿龙门阵