Linux修改用户和目录权限详细讲解

很难想像没有权限的世界会变成什么样,随便某人进来增删改查,也真的很可怕的

针对用户的权限设置

Linux为3种人准备了权限——文件所有者(属主)、文件属组用户和其他人

文件所有者通常是文件的创建者,但这也不一定,中途可以改变一个文件的属主用户,这必须由root用户来实施。也可以将一个文件交给一个用户组。

需要设置那些权限

文件和目录享有3种权限:读取(R)、写入(W)和执行(X)

要让一个文件可执行,必须设置其执行权限,可执行文件有两类,一类是直接由CPU执行的二进制代码,一类是Shell脚本程序

查看文件和目录的属性

使用带选项的-l的ls命令可以查看一个文件的属性,包括权限等,首先来个示例

$ ls -l /bin/login
-rwxr-xr-x   1   root   root   28096   2016-11-20   10:20   /bin/login

这条命令列出了/bin/login文件主要信息

  • 第1段的第1个字符表示文件类型,在上例中是“-”,表示这是一个普通文件

  • 接下来的rwxr-xr-x就是3组权限位,这9个字符应该被这样断句:rwx、r-x、r-x,表示属主、属组和其他人所拥有的权限。r表示可读取,w表示可写,x表示可执行,如果某个权限被经用,那么就用一个短划线“-”代替。在这个例子中,属主拥有读、写和执行权限,属组和其他人拥有读和执行权限。

  • 第3个和第4个字段分别表示文件的属主和属组、在这个例子中,login文件的属主是root,而属组是root组

  • 紧跟着3组权限位的数字表示该文件的链接数目,这里是1,表示该文件只有一个硬链接

  • 最后的4个字段分别表示文件大小(38096字节)、最后修改的是日期和时间,以及这个文件的完整路径

要查看一个目录的属性,应该使用-ld选项

$ ls -ld /etc/
drwxr-xr-x   135   root   root   12288   2016-11-20   10:20   /etc

最后,不带文件名作为参数的ls -l命令,列出当前目录下所有文件(不包括隐藏文件)的属性

改变文件所有权:chown和chgrp

chown命令用于改变文件的所有权,基本语法如下:

chown [ OPTION ]  ... [ OWNER ] [ : [ GROUP] ] FILE ...

这条命令将文件FILE的属主改变为OWNER,属组改变为GROUP,下面这条命令,将文件days属性更改为lewis,属组为root组

$ ls -l days                                ## 查看当前days的所有权
-rw-r--r--   1   guest   guest   57   2016-11-20   10:20   days     
$ ls -chown lewis: root days                ## 修改days的所有权
$ ls -l days                                ## 查看修改后的days的所有权
-rw-r--r--   1   lewis   root    57   2016-11-20   10:21   days

如果只需要更改文件的属主,那么可以省略参数“:GROUP”,下面这条命令把days文件的属主更改为guest用户,而保留其属组设置

$ sudo chown guest days

相应的,可以省略参数OWNER,而只改变文件的属组,注意,不能省略组名GROUP前面的这个“:”。下面这条命令把days文件夹的属组更改为nogroup组,而保留其属主设置

$ sudo chown :nogroup days

chown命令提供了-R选项,用于改变一个目录及其下所有文件(和子目录)的所有权设置,下面这条命令将 iso/ 和其下所有的文件交给用户lewis

$ sudo chown -R lewis iso/

查看这个目录的属性可以看到,所有文件和子目录的属主已经变成lewis用户了,如果想属主和属组同时更改,就用-R lewis:lewis命令

Linux单独提供了另一个命令chgrp用于设置文件的属组,下面这条命令将文件days的属组设置为nogroup组

$ sudo chgrp nogroup days

和chown一样,chgrp也可以使用-R选项递归一个目录实施这只,下面这条命令将iso/ 和其下所有文件(和子目录)的属组设置为root组

$ sudo chgrp -R root iso/

chgrp命令实际上只是实现了chown的一部分功能,但这个命令至少在名字上更直观告诉人们它要干什么,实际使用中,也仅仅只是习惯问题

改变文件权限:chmod

chmod用于改变一个文件权限,这个命令使用“用户组+/-权限”的表达方式来增加删除响应的权限,具体来说,用户组包括了文件属主(u)、文件属组(g)、其他人(o)和所有人(a),而权限则包括了读取(r)、写入(w)和执行(x),例如,下面这条命令增加了属主对文件days的执行权限

$ chomd u+x days

chomd可以用 a 同时指定所有的3种人,下面这条命令删除所有人(属主、属组和其他人)对days的执行权限

$ chomd a-x days

还可以通过“用户组=权限”的规则直接设置文件权限,同样应用于文件 days,下面这条命令赋予属主和属组的读取/写入权限,而仅赋予其他用户读取权限

$ chomd ug=rw,o=r days

最后一条常用规则是“用户组 1=用户组 2”,用于将用户组1的权限和用户组2的权限设置为完全相同,应用于文件days中,下面这条命令讲其他人的权限设置为和属主的权限一样

$ chomd o=u days

提示:牢记只有文件的属主和root用户才有权修改文件的权限

文件权限的八进制表示

chomd的助记符尽管意义明确,但有些时候显得太罗嗦了,系统管理员更喜欢用chomd的八进制语法来修改文件权限——这样就可以不用麻烦左右手的小指了,为此管理员至少应该熟练掌握8以内的加法运算。

首先介绍一下八进制记法的来历,每一组权限 rwx 在计算机中实际上占用了3位,每一位都有两种情况,例如对于写入位,只有“设置(r)”和没有设置(-)两种情况。这样计算机就可以使用二进制 0 和 1 来表示每一个权限位,其中 0 表示没有设置,1表示设置,例如 rwx 就被表示为111,“-w-”表示为 010 等。

由于 3 位的二进制数对应 1 位八进制数,因此可以进一步用一个八进制数字表示一组权限,下面表格显示了对应的关系

八进制 二进制 权限
八进制 二进制 权限
0 000 --- 5 101 r-w
1 001 --x 6 110 rw-
2 010 -w- 7 111 rwx
3 011 -wx


4 100 r--


不必记住上面这些数字的排列组合,在实际中,只要记住 1代表x、2代表w、4代表r、、然后简单的做加法就可以了,距离来说:rwx=4+2+1=7,r-w=4+0+1=5。

这样依赖,完整的9位权限就可以用3个八进制数来表示了,例如“rwxr-x--r”就对应于“751”,下面这条命令将文件prog的所有权限赋予属主,而属组用户和其他人仅有执行权限

$ chomd 711 prog
$ ls -l prog
-rwx--x--x   1   lewis   nogroup   57   2016-11-20 17:00   prog


赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏