Linux 系统中为什么需要设定不同的权限,为什么所有用户不可以直接使用管理员(root)身份。若是个人计算机,使用者一般都是被信任的人。在这种情况下,大家都可以使用管理员身份直接登录。但在服务器上就不是这种情况了,往往运行的数据越重要,价值越高,则服务器中对权限的设定就要越详细,用户的分级也要越明确。
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的
用户访问同一文件(包括目录文件)的权限做了不同的规定。
和 Windows 系统不同,Linux 系统为每个文件都添加了很多的属性,最大的作用就是维护数据的安全。举个简单的例子,在你的 Linux 系统中,和系统服务相关的文件通常只有 root 用户才能读或写,就拿 /etc/shadow 这个文件来说,此文件记录了系统中所有用户的密码数据,非常重要,因此绝不能让任何人读取(否则密码数据会被窃取),只有 root 才可以有读取权限。
若一个软件开发团队,让团队中的每个人都可以使用某一些目录下的文件,而非团队的其他人则不予以开放。通过前面章节的学习我们知道,只需要将团队中的所有人加入新的群组,并赋予此群组读写目录的权限,即可实现要求。反之,如果你的目录权限没有做好,就很难防止其他人在你的系统中乱搞。
比如说,本来 root 用户才能做的开关机、ADSL 拨接程序,新增或删除用户等命令,一旦允许任何人拥有这些权限,系统很可能会经常莫名其妙的挂掉。而且,万一 root 用户的密码被其他人获取,他们就可以登录你的系统,从事一些只有 root 用户才能执行的操作,这是绝对不允许发生的。因此,在服务器上,绝对不是所有的用户都使用 root 身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级。对于 root 用户来说,一般情况下,文件的权限对其不起作用。
Linux 系统中,文件或目录的权限信息,可以使用 ls 命令查看,
[root@CncLucZK ~]# ll -al /home/u1-test
total 36
drwx------ 5 u1-test group1-test 4096 Oct 15 13:50 .
drwxr-xr-x. 7 root root 4096 Oct 15 13:44 ..
-rw------- 1 u1-test group1-test 495 Oct 15 13:58 .bash_history
drwxr-xr-x 2 u1-test group1-test 4096 Oct 15 13:49 utxt1
drwxr-xr-x 2 u1-test group2-test 4096 Oct 15 13:50 utxt2
drwxr-xr-x 2 u1-test group3-test 4096 Oct 15 13:50 utxt3
[root@CncLucZK ~]# chgrp [-R] 所属组 文件名(目录名)
-R(注意是大写)选项长作用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。
注意的一点是,要被改变的群组名必须是真实存在的,否则命令无法正确执行,会提示 “invaild group name”。
#查看utxt2文件的所属组
[root@CncLucZK u1-test]# ll -l
total 12
drwxr-xr-x 2 u1-test group1-test 4096 Oct 15 13:49 utxt1
drwxr-xr-x 2 u1-test group2-test 4096 Oct 15 13:50 utxt2
drwxr-xr-x 2 u1-test group3-test 4096 Oct 15 13:50 utxt3
#修改utxt2文件的所属组为group1-test
[root@CncLucZK u1-test]# chgrp group1-test utxt2
#查看utxt2文件的所属组
[root@CncLucZK u1-test]# ll -l
total 12
drwxr-xr-x 2 u1-test group1-test 4096 Oct 15 13:49 utxt1
drwxr-xr-x 2 u1-test group1-test 4096 Oct 15 13:50 utxt2
drwxr-xr-x 2 u1-test group3-test 4096 Oct 15 13:50 utxt3
#修改生效
[root@CncLucZK u1-test]# chgrp group4-test utxt2
chgrp: invalid group: ‘group4-test’
可以看到,在具有 group1-test群组的前提下,我们成功修改了utxt2 文件的所属组,但我们再次试图将所属组修改为 group4-test时,命令执行失败,就是因为系统的 /etc/group 文件中,没有group4-test 群组。
[root@CncLucZK ~]# chown [-R] 所有者 文件或目录
-R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。
[root@CncLucZK ~]# chown [-R] 所有者:所属组 文件或目录
注意,在 chown 命令中,所有者和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如 zk.u1),就会造成系统误判。因此,建议大家使用冒号连接所有者和所属组。
注意:使用 chown 命令修改文件或目录的所有者(或所属者)时,要保证使用者用户(或用户组)存在,否则该命令无法正确执行,会提示 “invalid user” 或者 “invaild group”。
当然,chown 命令也支持单纯的修改文件或目录的所属组,例如 chown :group demo.txt
就表示修改 demo.txt 文件的所属组,但修改所属组通常使用 chgrp 命令,因此并不推荐大家使用 chown 命令。
修改文件的所有者,更多时候是为了得到更高的权限,举实例:
#root用户查看demo.txt的信息
[root@CncLucZK test]# ll -d demo.txt
-rw-r--r-- 1 root root 2612 Oct 12 23:10 demo.txt
#文件的所有者是root,普通用户zk对这个文件拥有只读权限
[root@CncLucZK test]# chown zk demo.txt
#修改文件的所有者
[root@CncLucZK test]# ll -d demo.txt
-rw-r--r-- 1 zk root 2612 Oct 12 23:10 demo.txt
#所有者变成了zk用户,这时zk用户对这个文件就拥有了读、写权限
#若是修改编辑一个对当前只读权限的文件则会提示这是只读文件
-- INSERT -- W10: Warning: Changing a readonly file
可以看到,通过修改 demo.txt文件的所有者,zk用户从其他人身份(只对此文件有读取权限)转变成了所有者身份,对此文件拥有读和写权限。
Linux 系统中,用户等级权限的划分是非常清楚的,root 用户拥有最高权限,可以修改任何文件的权限,而普通用户只能修改自己文件的权限(所有者是自己的文件)
#切换到普通用户
[root@CncLucZK test]# su - zk
#查看txt目录下的文件权限
[zk@CncLucZK test]$ ll -d *.txt
-rw-r--r-- 1 root root 90 Oct 13 18:56 demo2.txt
-rw-r--r-- 1 root root 90 Oct 13 20:06 demonew.txt
-rw-r--r-- 1 root root 90 Oct 14 00:53 demoold.txt
-rw-r--r-- 1 root root 2612 Oct 12 23:10 demotmo.txt
-rw-r--r-- 1 zk root 2612 Oct 15 23:01 demo.txt
-rw-r--r-- 1 root root 0 Oct 13 19:03 differ.txt
-rw-r--r-- 3 root root 95 Oct 12 23:10 hardlink.txt
-rw-r--r-- 1 root root 37 Oct 12 23:10 replace.txt
lrwxrwxrwx 1 root root 7 Oct 12 23:10 tmp_s.txt -> tmp.txt
-rw-r--r-- 1 root root 6 Oct 12 23:10 tmp.txt
#修改所属用户是root的demo2.txt文件的所属组
[zk@CncLucZK test]$ chown zk demo2.txt
chown: changing ownership of 'demo2.txt': Operation not permitted
[zk@CncLucZK test]$ chmod 755 demo2.txt
chmod: changing permissions of 'demo2.txt': Operation not permitted
chmod:更改"demo2.txt"的权限:不允许的操作 #zk用户不能修改demo2.txt文件的权限,且只能读取,不能编辑修改
#退回到root身份
[zk@CncLucZK test]$ exit
logout
#由root用户把demo2.txt文件的所有者改为zk用户
[root@CncLucZK test]# chown zk demo2.txt
[root@CncLucZK test]# ll -d *.txt
-rw-r--r-- 1 zk root 90 Oct 13 18:56 demo2.txt
-rw-r--r-- 1 root root 90 Oct 13 20:06 demonew.txt
-rw-r--r-- 1 root root 90 Oct 14 00:53 demoold.txt
-rw-r--r-- 1 root root 2612 Oct 12 23:10 demotmo.txt
-rw-r--r-- 1 zk root 2612 Oct 15 23:01 demo.txt
-rw-r--r-- 1 root root 0 Oct 13 19:03 differ.txt
-rw-r--r-- 3 root root 95 Oct 12 23:10 hardlink.txt
-rw-r--r-- 1 root root 37 Oct 12 23:10 replace.txt
lrwxrwxrwx 1 root root 7 Oct 12 23:10 tmp_s.txt -> tmp.txt
-rw-r--r-- 1 root root 6 Oct 12 23:10 tmp.txt
#切换为user用户
[root@CncLucZK test]# su - zk
[zk@CncLucZK test]$ ll -d *.txt
-rw-r--r-- 1 zk root 90 Oct 13 18:56 demo2.txt
#zk用户由于是demo2.txt文件的所有者,所以可以修改文件的权限
[zk@CncLucZK test]$ chmod 755 demo2.txt
#查看权限
[zk@CncLucZK test]$ ll -d demo2.txt
-rwxr-xr-x 1 zk root 90 Oct 13 18:56 demo2.txt
[root@CncLucZK test]# ll -d demo2.txt
-rwxr-xr-x 1 zk root 90 Oct 13 18:56 demo2.txt
[root@CncLucZK test]# chown zk:zk demo2.txt
[root@CncLucZK test]# ll -d demo2.txt
-rwxr-xr-x 1 zk zk 90 Oct 13 18:56 demo2.txt
参考文献:
Linux 文件基本属性
Linux chgrp命令:修改文件和目录的所属组