外观
基本权限管理
权限介绍
使用ls命令时,长格式显示的第一列就是文件的权限,例如:
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 28425 11月 30 18:50 install.log第一列的权限位(-rw-r--r--.)如果不计最后的 "." (这个点代表受SELinux安全上下文保护,这里暂时忽略不做介绍),则共10位,这10位权限位的含义如下图所示:
- 第1位:代表文件类型。Linux不像Windows使用扩展名表示文件类型,而是使用权限位的第一位表示文件类型。虽然Linux文件的种类不像Windows中那么多,但是分类也不少,详细情况可以使用“
info ls” 命令查看。这里列出一些常见的文件类型:-: 普通文件d: 目录文件。Linux中一切皆文件,所以目录也是文件的一种l: 软链接文件b: 块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1就是这种文件c: 字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等p: 管道符文件。这是一种非常少见的特殊设备文件。s: 套接字文件。这也是一种特殊设备文件,一些服务支持socket访问就会产生这样的文件
- 第2~4位:代表文件所有者的权限
r: 代表read,是读取权限w: 代表write,是写权限x: 代表execute,是执行权限
- 第5~7位:代表文件所属组的权限,同样拥有“rwx”权限
- 第8~10位:代表文件其他人的权限,同样拥有“rwx”权限
权限含义的解释: 读、写、执行权限对文件和目录的作用是不同的。
- 权限对文件的作用
- 读(r):对文件有读权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读权限,就可以对文件执行
cat、more、less、head、tail等文件查看命令 - 写(w):对文件有写权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写权限,就可以对文件执行
vim、echo等修改文件数据的命令。注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据,如果想要删除文件,则需要对文件的上级目录拥有写权限。 - 执行(x):对文件有执行权限,代表文件可以运行。在Linux中,只要文件有执行权限,这个文件就是执行文件了,只是这个文件到底能不能正确执行,不仅需要看执行权限,还要看文件的代码是不是正确的语言代码。对文件来说,执行权限是最高权限
- 读(r):对文件有读权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读权限,就可以对文件执行
- 权限对目录的作用
- 读(r):对目录有读权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些文件和子目录。如果包权限对应到命令上,那么一旦对目录拥有了读权限,就可以在目录下执行
ls命令查看目录下的内容了 - 写(w):对目录有写权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪贴子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写权限,就可以在目录下执行
touch、rm、cp、mv等命令。对目录来说,写权限是最高权限 - 执行(x):目录是不能运行的,那么对目录拥有执行权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行权限,就可以对目录执行
cd命令进入目录
- 读(r):对目录有读权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些文件和子目录。如果包权限对应到命令上,那么一旦对目录拥有了读权限,就可以在目录下执行
chmod 命令
chmod用来修改文件的权限,基本信息如下:
- 命令名称:chmod
- 英文原意:change file mode bits
- 所在路径:/bin/chmod
- 执行权限:所有用户
- 功能描述:修改文件的权限模式
命令格式:chmod [选项] 权限模式 文件或目录
- 选项:
-R: 递归设置权限,也就是给予目录中的所有文件设定权限--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
chmod命令的权限模式分为符号组合和八进制数组合 符号组合的格式是
[ugoa][[+-=][permission]],也就是[用户身份][[赋予方式][权限]]的格式。
- 用户身份
u:代表所有者(user)g:代表所属组(group)o:代表其他人(other)a:代表全部身份(all)- 赋予方式
+:加入权限-:减去权限=:设置权限- 权限
r: 读取权限(read)w: 写权限(write)x: 执行权限(execute)八进制数组合的格式是
[0-7][0-7][0-7]三位数字组成(每一位数字都是权限之和),第一位是所有者权限,第二位是所属组权限,第三位其他人权限
r读取权限对应的数字是4w写权限对应的数字是2x执行权限对应的数字是1- 例如读写权限
rw八进制数表示6
示例:
# 添加组用户的写权限。
chmod g+w ./test.log
# 删除其他用户的所有权限。
chmod o= ./test.log
# 使得所有用户都没有写权限。
chmod a-w ./test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log (等价的八进制数表示:chmod 754 ./test.log )
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw ./testdir/
# 根据其他文件的权限设置文件权限。
chmod --reference=./1.log ./test.logchown 命令
chown 命令用来修改文件和目录的所有者和所属组,基本信息如下:
- 命令名称:chown
- 英文原意:change file owner and group
- 所在路径:/bin/chown
- 执行权限:所有用户
- 功能描述:修改文件和目录的所有者和所属组
命令格式:chown [选项] 所有者[:所属组] 文件或目录
- 选项:
-R:递归设置权限,也就是给予子目录的所有文件设置权限
- 当省略 “:所属组” ,仅改变文件所有者
注意:普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行。普通用户可以修改所有者是自己的文件权限。
umask 命令
umask命令用来显示或设置创建文件或目录的权限掩码。
我们需要先了解一下新建文件和目录的默认最大权限,对于文件来讲,新建文件的默认最大权限是666,没有执行权限,只是因为执行权限对文件来讲比较危险,不能再新建文件的时候默认赋予,而必须通过用户手工赋予;对于目录来讲,新建目录的默认最大权限是777,这是因为对目录而言,执行权限仅仅代表进入目录,所以即使新建目录时直接默认赋予也没有什么危险。
按照官方的标准算法,umask默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限,这种方法既不好计算也不好理解,不推荐。我们这里按照权限字母来讲解umask权限的计算方。我们就按照默认的umask值是0022(等效于022)分别来计算一下新建文件和目录的默认权限,
- 文件的默认权限最大只能是
666,而umask的值是022,则rw-rw-rw-减去----w--w-等于rw-r--r--,所以新建文件的默认权限是rw-r--r-- - 目录的默认权限最大是
777,而umask的值是022,则rwxrwxrwx减去----w--w-等于rwxr-xr-x,所以新建目录的默认权限是rwxr-xr-x - 同理,如果
umask的值是033,新建文件的默认权限为rw-rw-rw-减去----wx-wx等于rw-r--r--
命令格式:umask [选项] [模式]
- 选项:
-p:输出的权限掩码可直接作为指令来执行-S:以符号组合的方式输出权限掩码,不使用该选项时以八进制数的形式输出
示例:
# 以八进制数的形式输出权限掩码
[root@localhost tmp]# umask
0022
# 以八进制数的形式输出权限掩码,并作为指令来执行
[root@localhost tmp]# umask -p
umask 0022
# 以符号组合的方式输出权限掩码。
[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
#上条命令以符号组合的方式输出权限掩码,输出的结果u=rwx,g=rx,o=rx转化为八进制数等于0755,
#用八进制数来设置同样的权限,umask需要额外的执行减法"0777 - 0755"即0022
[root@localhost tmp]# umask 0022
# 为组用户添加写权限
[root@localhost tmp]# umask g+w
# 删除其他用户的写、执行权限
[root@localhost tmp]# umask o-wx
# 赋值全部用户所有权限,等价于umask u=rwx,g=rwx,o=rwx
[root@localhost tmp]# umask a=rwx
#清除其他用户的读、写、执行权限
[root@localhost tmp]# umask o=