目录
一.所有者和所属组
张老板是某公司老板,买了一套房作为员工宿舍给A部门员工居住。张老板是房主,所以他对房子具有很多权限,A部门员工只有使用权而不能私自装修等,除张老板和A部门员工外,其他所有人都没 有任何权限。那么,这套房子对三组人设置的权限如表9-1所示。
同理,在Linux系统中对文件的授权也是通过这样的分组来进行的,如图9-2所示
1 的位置是所有者,这里/opt/hosts的所有者为root。2 的位置是所属组,这里/opt/hosts的所属组为root。
如果想改变所有者,可以使用chown命令来实现,chown的用法如下。
chown user1 file
这里的意思是把file的所有者改为user1(理解为过户)。例如,把/opt/hosts的所有者改为bdqn,如下所示
[root@RHEL8 opt]# ls -lh
总用量 4.0K
-rw-r--r--. 1 root root 158 11月 30 11:29 hosts
[root@RHEL8 opt]# chown bdqn /opt/hosts
[root@RHEL8 opt]# ls -lh /opt/hosts
-rw-r--r--. 1 bdqn root 158 11月 30 11:29 /opt/hosts
[root@RHEL8 opt]#
chown也可以用于修改组,用法如下。
chown .group1 file 或 chown :group1 file
把file的所属组改成 group1,这里组前面有一个点或冒号。例如,把/opt/hosts 的所属组改成users,如下所示。
[root@RHEL8 opt]# chown .users /opt/hosts
[root@RHEL8 opt]# ls -lh
总用量 4.0K
-rw-r--r--. 1 bdqn users 158 11月 30 11:29 hosts
[root@RHEL8 opt]#
需要注意的是,这里的点或冒号一定不要忘记了,否则就是修改所有者了。
也可以同时修改所有者和所属组,用法为“chown user1.group1 file”。例如,把/opt/hosts的所有者改成root。所属组改成bdqn,如下所示。
[root@RHEL8 opt]# chown root.bdqn /opt/hosts
[root@RHEL8 opt]# ls -lh
总用量 4.0K
-rw-r--r--. 1 root bdqn 158 11月 30 11:29 hosts
创建目录/opt/xx,把/opt/hosts拷贝到/opt/xx中,然后查看/opt/xx和 /opt/xx/hosts的权限,如下所示。
[root@RHEL8 opt]# mkdir /opt/xx
[root@RHEL8 opt]# cp /opt/hosts /opt/xx
[root@RHEL8 opt]# ls -ld /opt/xx
drwxr-xr-x. 2 root root 19 11月 30 11:46 /opt/xx
[root@RHEL8 opt]# ls -l /opt/xx/hosts
-rw-r--r--. 1 root root 158 11月 30 11:46 /opt/xx/hosts
[root@RHEL8 opt]#
可以看到,所有者都是root。
现在修改/opt/xx的所有者为bdqn,如下所示。
[root@RHEL8 opt]# chown bdqn /opt/xx/
[root@RHEL8 opt]# ls -ld /opt/xx
drwxr-xr-x. 2 bdqn root 19 11月 30 11:46 /opt/xx
[root@RHEL8 opt]# ls -l /opt/xx/hosts
-rw-r--r--. 1 root root 158 11月 30 11:46 /opt/xx/hosts
[root@RHEL8 opt]#
可以看到, /opt'xx的所有者变为了lduan,但是/opt/xx 中文件hosts的所有者并没有修改,这就意味着,当修改目录的所有者或所属组时,并不会影响目录中文件的属性。如果在改变目录属主/组时,想把里面内容的属主/组一起改掉,需要加上-R选项(表示递归),如下所示。
[root@RHEL8 opt]# chown -R bdqn /opt/xx/
[root@RHEL8 opt]# ls -ld /opt/xx
drwxr-xr-x. 2 bdqn root 19 11月 30 11:46 /opt/xx
[root@RHEL8 opt]# ls -l /opt/xx/hosts
-rw-r--r--. 1 bdqn root 158 11月 30 11:46 /opt/xx/hosts
[root@RHEL8 opt]#
可以看到,不仅把/opt/xx的属主改了,同时把/opt/xx里面内容的属主也改了。如果想单独修改所属组,还可以使用chgrp命令,用法如下。
[root@RHEL8 opt]# ls -l /opt/hosts
-rw-r--r--. 1 root bdqn 158 11月 30 11:29 /opt/hosts
[root@RHEL8 opt]# chgrp users /opt/hosts
[root@RHEL8 opt]# ls -l
总用量 4
-rw-r--r--. 1 root users 158 11月 30 11:29 hosts
drwxr-xr-x. 2 bdqn root 19 11月 30 11:46 xx
[root@RHEL8 opt]#
当然,chgrp也可以使用-R选项(表示递归),大家自行练习即可。
再次把/opt/hosts的所有者和所属组改为root,如下所示。
[root@RHEL8 opt]# chown root.root /opt/hosts
[root@RHEL8 opt]# ls -l /opt/hosts
-rw-r--r--. 1 root root 158 11月 30 11:29 /opt/hosts
[root@RHEL8 opt]#
二.查看及修改权限
对于一个文件来说,我们可以设置某用户对它具有什么操作权限,例如,是否可以看这个文件中的内容,是否可以往这个文件中写内容等。具体的权限包括以下三种。
(1). r:读权限
(2). w: 写权限
(3). x: 可执行权限
r 权限和 w 权限比较好理解,x 权限如何理解呢?
对于一个目录 dir1来说,如果用户 user1 对目录 dir1 有x权限,则 user1 是可以用 cd命令进入到dir1 中的,反之则不能用 cd 命令进人到此目录对于文件file1来说,如果用户user1对file1具有x权限,则用户可以把 file1当成一个命令来执行,当然运行的结果就要看file1的内容写的是什么了在 Linux系统中,文件或目录的权限是通过u、g、o授权的,看下面的例子,如图9-3所示。
1 是所有者的权限,这里的权限为rw(读写权限)。2 是所属组的权限,这里的权限为r(只有读权限)。3 是其他人的权限,这里的权限为r(也是只有读权限)。
查看bdqn所属组,命令如下
[root@RHEL8 ~]# groups bdqn
bdqn : bdqn
[root@RHEL8 ~]#
bdqn 用户只属于 bdqn 组,所以 bdqn 用户对/opt/hosts文件只能使用 o 的权限,即只读r。
修改权限使用的是 chmod 命令,用法如图9-4所示。
设置 o 不允许读 /opt/hosts。
[root@RHEL8 opt]# chmod o-r /opt/hosts
[root@RHEL8 opt]# ls -l /opt/hosts
-rw-r-----. 1 root root 158 11月 30 11:29 /opt/hosts
[root@RHEL8 opt]#
新开一个终端,使用bdqn账户登录,读取此文件。
[bdqn@RHEL8 ~]$ cat /opt/hosts
cat: /opt/hosts: 权限不够
[bdqn@RHEL8 ~]$
可以看到,bdqn 用户没有读取 /opt/hosts 的权限。
现在把所有者的写权限去掉,同时给 o 加上读和写权限。
[root@RHEL8 opt]# chmod u-w,o+rw /opt/hosts
[root@RHEL8 opt]# ls -l /opt/hosts
-r--r--rw-. 1 root root 158 11月 30 11:29 /opt/hosts
[root@RHEL8 opt]#
测试 bdqn 是否对此文件可读可写。
[bdqn@RHEL8 ~]$ cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[bdqn@RHEL8 ~]$ echo 111 >> /opt/hosts
[bdqn@RHEL8 ~]$ cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
111
[bdqn@RHEL8 ~]$
可以看到,bdqn用户对 /opt/hosts/ 已经具有读和写的权限了。
然后使用root用户来对 /opt/hosts/ 进行写测试。
[root@RHEL8 opt]# echo 222 >> /opt/hosts
[root@RHEL8 opt]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
111
222
[root@RHEL8 opt]#
从权限来看,root对此文件是只读权限,应该是写不进去的,但是实际却写进去了,这是
因为很多时候这些权限设置对root是不生效的。