Linux权限认识及修改

一、认识权限

1、使用文件权限符

$ ls –l
total 68
-rw-rw-r-- 1 rich rich 50 2010-09-13 07:49 file1.gz
-rw-rw-r-- 1 rich rich 23 2010-09-13 07:50 file2
-rw-rw-r-- 1 rich rich 48 2010-09-13 07:56 file3
-rw-rw-r-- 1 rich rich 34 2010-09-13 08:59 file4
-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
-rw-rw-r-- 1 rich rich 237 2010-09-18 13:58 myprog.c
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test1
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test2
$

输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:

-代表文件
d代表目录
l代表链接
c代表字符型设备
b代表块设备
n代表网络设备

之后有3组三字符的编码。每一组定义了3种访问权限:

 r代表对象是可读的
 w代表对象是可写的
 x代表对象是可执行的

若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:

 对象的属主
 对象的属组
 系统其他用户

如图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WC149zYP-1607606582548)(/Users/libin/Library/Application Support/typora-user-images/image-20201210204712600.png)]

讨论这个问题的最简单的办法就是找个例子,然后逐个分析文件权限。

文件myprog有下面3组权限。

rwx:文件的属主(设为登录名rich)。
rwx:文件的属组(设为组名rich)。
r-x:系统上其他人。

这些权限说明登录名为rich的用户可以读取、写入以及执行这个文件(可以看作有全部权限)。类似地,rich组的成员也可以读取、写入和执行这个文件。然而不属于rich组的其他用户只能读取和执行这个文件:w被单破折线取代了,说明这个安全级别没有写入权限。

2、默认文件权限

你可能会问这些文件权限从何而来,答案是umask。umask命令用来设置所创建文件和目录的默认权限。umask命令可以显示和设置这个默认权限。

$ umask
0022
$

​ 第一位代表了一项特别的安全特性,叫作粘着位(sticky bit)。后面的3位表示文件或目录对应的umask八进制值。要理解umask是怎么工作的,得先理解八进制模式的安全性设置。
​ 八进制模式的安全性设置先获取这3个rwx权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。因此,如果读权限是唯一置位的权限,权限值就是r–,转换成二进制值就是100,代表的八进制值是4。下表列出了可能会遇到的组合。

权限二进制值八进制值描述
0000没有任何权限
–x0011只有执行权限
-w-0102只有写入权限
-wx0113有写入和执行权限
r–1004只有读取权限
r-x1015有读取和执行权限
rw-1106有读取和写入权限
rwx1117有全部权限

​ 八进制模式先取得权限的八进制值,然后再把这三组安全级别(属主、属组和其他用户)的八进制值顺序列出。因此,八进制模式的值664代表属主和属组成员都有读取和写入的权限,而其他用户都只有读取权限。
​ 了解八进制模式权限是怎么工作的之后,umask值反而更叫人困惑了。我的Linux系统上默认的八进制的umask值是0022,而我所创建的文件的八进制权限却是644,这是如何得来的呢?
​ umask值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。接下来我们还得再多进行一些八进制运算才能搞明白来龙去脉。要把umask值从对象的全权限值中减掉。对文件来说,全权限的值是666(所有用户都有读和写的权限);而对目录来说,则是777(所有用户都有读、写、执行权限)。
​ 所以在上例中,文件一开始的权限是666,减去umask值022之后,剩下的文件权限就成了644。在大多数Linux发行版中,umask值通常会设置在/etc/profile启动文件中,不过有一些是设置在/etc/login.defs文件中的(如Ubuntu)。可以用umask命令为默认umask设置指定一个新值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NtWBaso-1607606582550)(/Users/libin/Library/Application Support/typora-user-images/image-20201210210300808.png)]

二、改变权限

1、chmod

chmod命令用来改变文件和目录的安全性设置。该命令的格式如下:

chmod options mode file

mode参数可以使用八进制模式或符号模式进行安全性设置。八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。

$ chmod 760 newfile
$ ls -l newfile
-rwxrw---- 1 rich rich 0 Sep 20 19:16 newfile
$

八进制文件权限会自动应用到指定的文件上。符号模式的权限就没这么简单了。
与通常用到的3组三字符权限字符不同,chmod命令采用了另一种方法。下面是在符号模式下指定权限的格式。

[ugoa…][[+-=][rwxXstugo…]

第一组字符定义了权限作用的对象:

u代表用户
g代表组
o代表其他
a代表上述所有

下一步,后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础上移除权限(-),或是将权限设置成后面的值(=)。
最后,第三个符号代表作用到设置上的权限。你会发现,这个值要比通常的rwx多。额外的设置有以下几项。

X:如果对象是目录或者它已有执行权限,赋予执行权限。
s:运行时重新设置UID或GID。
t:保留文件或目录。
u:将权限设置为跟属主一样。
g:将权限设置为跟属组一样。
o:将权限设置为跟其他用户一样。

像这样使用这些权限。

# 不管其他用户在这一安全级别之前都有什么权限,o+r都给这一级别添加读取权限。
$ chmod o+r newfile
$ ls -lF newfile
-rwxrw-r-- 1 rich rich 0 Sep 20 19:16 newfile*
$
# u-x移除了属主已有的执行权限
$ chmod u-x newfile
$ ls -lF newfile
-rw-rw-r-- 1 rich rich 0 Sep 20 19:16 newfile
$

options为chmod命令提供了另外一些功能。-R选项可以让权限的改变递归地作用到文件和子目录。你可以使用通配符指定多个文件,然后利用一条命令将权限更改应用到这些文件上。

2、chown和chgrp

chown命令用来改变文件的属主,chgrp命令用来改变文件的默认属组。
chown命令的格式如下:

chown options owner[.group] file
# 登录名或UID来指定文件的新属主。
$ chown dan newfile
$ ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
$ 

# chown命令也支持同时改变文件的属主和属组
$ chown dan.shared newfile
$ ls -l newfile
-rw-rw-r-- 1 dan shared 0 Sep 20 19:16 newfile
$ 

# 只改变一个目录的默认属组。
$ chown .rich newfile
$ ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
$

# 只用一个条目就改变二者。
$ chown test. newfile
$ ls -l newfile
-rw-rw-r-- 1 test test 0 Sep 20 19:16 newfile
$

chown命令采用一些不同的选项参数。-R选项配合通配符可以递归地改变子目录和文件的所属关系。-h选项可以改变该文件的所有符号链接文件的所属关系。

chgrp命令可以更改文件或目录的默认属组。

$ chgrp shared newfile
$ ls -l newfile
-rw-rw-r-- 1 rich shared 0 Sep 20 19:16 newfile
$

内容参考《Linux命令行与shell脚本编程大全.第3版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值