文件或目录的一般权限
使用ll命令可以查看linux系统里文件及目录的详情,如下图:
第一列10位字符
第一位:d表示是目录,‘-’横线表示是文件
后9位字符中:第一个三位表示文件所有者的权限
第二个三位表示文件所属组中的成员的权限
第三个三位表示其它用户的权限
权限的表示方法:r :可读 二进制表示 100 十进制:4
w:可写 二进制表示 010 十进制:2
x:可执行 二进制表示 001 十进制:1
根据十进制之间的组合,衍生出了一些赋权的方法:
0表示没权限
1表示可执行(x)
3表示2+1 可写,可执行(-wx)
5表示4+1 可读,可执行 (r-x)
6表示4+2 可读,可写(rw-)
7表示4+2+1 可读可写可执行(rwx)
例如:
chmod 644 a.txt
chmod 777 xxx
等。
特殊权限 setuid, setgid, Sticky BIT(粘着位)
setuid
setuid只针对可执行的文件。
setuid在所有者权限的x位上,用s表示,如下图所示:
它的意义是其它的用户在执行这个文件的时候,身份会改变为该文件的所有者。 从图中可以看出passwd命令最后一位是x,表示其它的用户都可以执行,其所有者权限的第三位为s,表示其它用户执行该命令的时候变为root身份,该身份只在命令执行的会后有效,执行完毕后就失效了。 一般用在执行某个文件需要其它的较高级别的权限的时候使用,这里passwd命令要修改某个只有root有权限修改的文件:/etc/passwd
setuid权限设置方法:
数字表示:在所有者权限前加4即可,例如: chmod 4755 a.sh
取消:chmod 755 a.sh
字母表示:u+s 例如:chomd u+s a.sh
取消: chmod u-s a.sh
setgid
setgid如果是作用在文件上与setuid类似,只能作用在可执行文件上,用户执行该文件的时候身份升级为该文件所属组。权限显示在所属组权限的x位上,用s表示。
setgid如果是作用的目录上,用户在该目录下的组就会变为该目录所属组:比如用户如果此时有在目录下创建文件的权限,则该文件的所属组就是该目录的所属组(如果不设置setgid权限,该文件所属组是该用户的默认组),如:
setgid权限设置方法:
数字表示:在所有者权限前加2即可,例如: chmod 2755 test 取消 :chmod 755 test
字母表示:chmod g+s test 取消:chmod g-s test
Sticky BIT(粘着位)
粘着位只能针对目录来设置。设置的目录是为了让不同的用户在该目录下只能操作(写,删除)自己创建的文件或者目录。这些用户需要对这个目录有写的权限。权限显示在其他用户的权限的x位上,用t表示。
最常见的就是tmp目录:
设置权限的方法:
设置粘着位 :chmod 1777 dirname 或 chmod o+t dirname
取消粘着位 :chmod 777 dirname 或 chmod o-t dirname
例如test目录未设置t时:testuser用户可以删除该目录下root用户建的文件:
设置了t权限之后就删除,修改操作都不允许了:
umask介绍
umask用来设置用户创建文件或者目录的时候的默认权限。umask设置权限的方式与chmod不一样,chmod是“添加”的权限,umask是“去掉”的权限。
Linux里面设置umask值是在/etc/profile文件里:
002值得意义是在777的权限上减去002,就是775 ;
022 值的意义是在777的权限上减去022,就是755 ;
如果是文件则是在666的基础上减,如果是目录则在777的基础上减,因为linux不允许创建的文件默认就具有x(执行)的权限。