预备知识
用户、组、权限 :Linux是多用户多任务系统,linux中的目录和文件对不同的用户设有不同的权限,具有相同权限的多个用户为了方便可以放在一个新建的组中,对组设置权限即可。
文件类型 | 权限 | 所属 |
---|---|---|
- : 二进制文件 | r 4 读 | u : 所有者,也叫(用户或拥有者) |
d : 目录 | w 2 写 | g : 所属组 |
l : 软连接 | x 1 执行 | o : 其他人 ;a : 所有人 |
权限对文件和目录的概念如下 :
权限 | for 文件 | for 目录 |
---|---|---|
r | 可以查看文件内容 | 缺少该权限,只能进入该目录,但是不能查看该目录下的内容 |
w | 可以修改文件内容 | 缺少该权限,可以进入目录,查看修改目录下的内容,但不可以在目录下创建删除其他文件或者目录 |
x | 可以执行文件 | 缺少该权限,不能进入该目录,也不能查看该目录下的内容 |
Linux的目录和文件对用户、组和其他人的权限的查看用命令: ls -l :
硬链接数 : 有多少种方式可以访问到目录或者文件。 例如,目录a下有 目录b和目录c 。则有如下4种方式可以访问目录a :
- cd xx/xx/a #在任意位置用绝对路径访问
- cd . #在a目录下访问当前目录
- cd … # 分别在b目录和c目录下访问上一级目录
一般 文件的硬链接数为 1 ,目录的硬链接数为 2+子目录数
linux drwxr-xr-x
第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道
第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行。
第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。
第8-10位表示其他用户所具有的权限。
如:
$ ls -al
total 16
drwxr-xr-x 8 bin bin 256 Dec 06 11:09 .
drwxr-xr-x 25 root system 4096 Feb 23 11:21 …
drwxr-xr-x 2 develop others 256 Oct 12 2012 develop
drwxr-xr-x 2 guest usr 256 Aug 31 2010 guest
drwxr-xr-x 12 ibm staff 4096 May 29 11:14 ibm
drwx------ 2 root system 256 Dec 06 10:36 lost+found
drwxr-xr-x 3 oracle staff 256 Feb 05 16:31 oracle
drwxr-xr-x 2 202 201 256 Dec 06 2011 sshd
用ibm登录,则不能在oracle用户下进行写入操作,oracle与ibm在同一个组下面(staff).只有xr权限,只能读和执行。
linux ls -al 的各段含义
第1字段: 文件属性字段
文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号”-”,则说明该文件是一个普通文件.字母”d”表示该文件是一个目录,字母”d”,是dirtectory(目录)的缩写.
请注意,一个目录或者说一个文件夹是一个特殊文件,这个特殊文件存放的是其他文件和文件夹的相关信息.
第2字段
文件硬链接数或目录子目录数
第3字段:
文件拥有者
第4字段:
文件拥有者所在的组
第5字段:
文件文件大小(以字节为单位)
第6字段:
文件创建月份
第7字段:
文件创建日期
第8字段:
文件创建时间
第9字段:
文件名 (如果是一个符号链接,那么会有一个 “->” 箭头符号,后面根一个它指向的文件)
chmod 755
chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。
一般是三个数字:
第一个数字表示文件所有者的权限
第二个数字表示与文件所有者同属一个用户组的其他用户的权限
第三个数字表示其它用户组的权限。
权限分为三种:读(r=4),写(w=2),执行(x=1) 。 综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。
所以,chmod 755 设置用户的权限为:
1.文件所有者可读可写可执行 --7
2.与文件所有者同属一个用户组的其他用户可读可执行 --5
3.其它用户组可读可执行 --5
修改文件|目录的拥有者和所属组 chown chgrp
chown [选项] 用户名 文件名|目录 #将文件或目录的拥有者(用户)修改为指定的用户名
chgrp [选项] 组名 文件名|目录 #将文件或目录的所属组修改为指定的组
选项:
-R 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
修改文件|目录的权限 chmod
三种对象(拥有者、所属组和其他人)对同一个文件和目录都有属于自己的权限。
修改权限的方式有两种:
chmod [选项] .. {对象-操作-权限} 文件名|目录
选项:-R 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
对象:a 表示所有人;u 表示拥有者;g 表示所属组 ; o 表示其他人
操作:+ 表示增加权限 ; - 表示减少权限
权限 : r 读; w 写 ; x 执行
例: sudo chmod a-w 目录a #对所有对象减少目录a的写权限
chmod [选项] 八进制权限 文件名| 目录
选项:
-R 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
八进制权限:
是用三个数字分别是拥有者、组、其他人的权限。
常用权限:
777 表示u=rwx,g=rwx,o=rwx
755 表示 u=rwx,g=rx,o=rx
644 表示 u=rw,g=r,o=r
例: sudo chmod -R 755 目录a #对目录a的权限设置是拥有者rwx,组rx,其他人rx。
权限控制 ACL
ACL 是访问控制列表,是一种权限分配之外的普遍范式。为了应对复杂多变的权限设置。
ACL 权限是否被支持与系统根目录所在分区有关。(可用df -h 查询根目录所在分区),通过dumpe2fs -h /dev/sda3 #查询指定分区详细文件系统信息 查看字段Default mount options:,出现acl字样说明被支持。在当前绝大多数为文件系统是默认支持ACL权限的,并且在被支持的前提下,ACL是默认已经开启的,如果没有开启,开启方法请自行搜索。
setfacl [选项] 文件名 #对文件为设置对象设置ACl权限
选项:
-m 被设置对象 : 设置ACL权限
-x {u:user|g:group} : 删除指定的ACL权限
-b : 删除所有ACL权限,后不用加被设置对象。 会把用户和组权限都删除
-R : 针对目录递归设置ACL权限, 如setfacl -m u:xiaoting:rx -R ./c
被设置对象:
u:用户名:{r|x|w} : 指定用户设置权限,如u:zhagnsan:rx 。
g:组名:{r|w|x} : 指定组设置权限
m:{r|w|x} : 指定mask权限(最大权限)
提示: 添加的ACL权限和mask权限相与得到的权限才是真正能执行的权限,默认情况下mask的权限为rwx,可以通过修改mask的权限来控制添加了ACL权限之后的真正最大有效权限 。
某一目录被递归设置权限后,该目录下的所有子目录与子文件都被设置了权限,假如此时在该目录下又新建了新的目录或文件,则该文件或目录是没有权限的,所以,需要设置默认ACL权限 (即设置为默认ACL权限的目录,针对该目录下新添加的子文件或目录都默认继承该目录的权限,以前已经存在的权限并不会变,但目录变了),方法是在被设置对象前加d:。
getfacle 文件名 # 查看ACL权限
提示: 添加了ACL权限的目录或者文件,用ls -l命令后,文件或目录末尾会显示+图标。
ACL演练:
# 对当前目录下的c目录,递归添加ACL权限:用户xiaoting具有rw权限。但是以后目录c下新建的文件或目录并没有该权限。
$setfacl -m u:xiaoting:rw -R c
# 对当前目录下的c目录,递归的添加ACL权限:用户xiaoting具有rx权限。以后目录c下新建的文件或目录自动对该用户添加该权限 。而目录c下以前就存在的文件的权限依然没有变,但是以前就存在的目录的权限却变化了。原因是-R选项本身就是递归的改变。
$ setfacl -m d:u:xiaoting:rx -R c
#对当前目录下的c目录,递归的取消所有ACL权限,包含目录c下的所有子文件和子目录
$setfacl -b -R c