Linux下有两种用户,即超级用户和普通用户,超级用户享有很高的权限,可以在Linux系统下做任何事情,而普通用户有些方面则受限制。
通过指令useradd [新用户名]可以创建普通用户,通过指令passwd [新用户名]可以给新用户设置密码。
要切换用户时可以通过su指令来实现切换:
从上图中也可以看到,超级用户的命令提示符是#,而普通用户的命令提示符是$。
在了解这些信息后,详细讲解一下权限管理方面的内容。
先看一下当前路径下的文件的详细信息:
我们知道,蓝色的是目录,白色的是普通文件,再往前看,是创建的时间以及所占用的大小,那么前边的内容又是什么呢?
对于文件和目录来讲,有三种权限类别,即拥有者(owner)、所属组(group)和其他用户(others),上图中的两行root其实就代表这些文件和目录是由root即超级用户创建的,所属组也是root。
在这些信息的开头,有一串字符,共10个,这些表示文件的类型和访问权限。
第一个字符是文件类型,d表示是目录,-表示是普通文件。后边9个字符三三为一组,分别代表拥有者、所属组和其他用户的权限。
在一组这样的权限中,第一个是r,表示可读,如果没有可读权限则-;第二个是w,表示写权限,如果没有写权限,对应的第二个字符则为-;第三个是x,表示可执行权限,如果没有可执行权限,则相应的为-。
以第一个empty目录为例,表示拥有者具有读、写以及可执行权限,所属组具有读和执行的权限,没有写的权限,其他用户也只具有读和执行的权限,没有写的权限。
例如,我们切换到普通用户,然后在test.txt中写入东西,会发现提示写不了,因为没有权限:
如果我们想改变文件或目录的拥有者或所属组可以用指令chown和chgrp来改变,使用格式形如chown/chgrp [改变后的拥有者/所属组] [文件/目录]。
例如,我们在root账户下改变hello.c的拥有者为xyt,输入命令“chown xyt hello.c”就可以直接将文件给普通用户了。
我们再切换到普通账户下,并创建新文件test.txt,当我们尝试将文件给超级用户时,会提示没有权限。
这个例子也可以看到超级用户的权限很大,联系到实际现实,我们给别人东西时,别人不一定会接受,需要征得别人的同意,这里同样也是,而超级用户比较特殊,由于权限大,可以直接给普通用户(改变所属组同样如此)。
下面演示改变所属组的例子,与上边改变拥有者类似:
敲黑板:接下来主要讲解可读、可写和可执行权限对目录的影响,以及如何改变权限
为了便于演示,我们删除一些文件。
当前目录empty中拥有者、所属组和其他用户的权限如下:
要想改变文件或目录的访问权限,需要用到chmod指令,使用形式形如:chmod [用户表示符]+/-[对应权限] [文件/目录名]。
用户表示符有四个,即u、g、o和a,分别代表拥有者、所属组、其他用户和所有用户。
我们要先演示可读权限对于目录的影响,所以下面演示将拥有者、所属组和其他用户的权限都改为只可读:
注意:同时改变拥有者、所属组和其他用户的权限时需要用逗号隔开。
现在我们分别用root和普通账户来演示进入目录中:
可以看到,普通用户对于empty目录来说是others即其他用户,在只拥有可读权限下,是不能进入到目录中的,要进入到目录中需要有可执行权限即x,这个后边演示。而root仍然可以进入,这又体现了超级用户的权限之大,root不受权限约束。
事实上,拥有可读权限,就可以使用ls等命令来查看目录中的文件内容。
例如,普通用户创建了目录test,给 拥有者r和x权限,进入test后,使用ls指令是可以查看的。
接下来说可写权限,我们就以普通用户来讲解,因为root具有的权力太大,不好演示。
在没有可写的权限下,我们新建文件是建不了的,加上可写权限后就可以新建文件了,示例如下:
我们去掉写权限后,尝试删除newtest.txt文件:
可以看到提示没有权限,删除不了。
总结:删除文件/新建文件/对文件名进行修改都需要可写权限。
最后是可执行权限,在上边已经说过了,没有可执行权限就无法进去到目录中。
示例如下:
最后,简单总结一下:
有可读权限则可使用ls等命令查看目录中的文件内容;有可写文件则可删除文件/新建文件/修改文件名;有可执行权限则可进入到目录中。
修改权限还有另一种方式,接下来详细讲解。
我们新建一个目录和文件,发现新建目录默认的权限就是rwxrwxr-x,文件的默认权限是rw-rw-r--,每一组(三三为一组)都可以看作是一个二进制数,例如rwx,对应111,即7,再如rw-对应110即6。其实Linux系统中目录的默认权限应该是777,普通文件是666,但是因为有权限掩码,所以最后是775和664。
通过umask指令我们可以看到umask的值:
而最后的实际权限 = 起始权限 & (~权限掩码),权限掩码是0002,我们忽略第一个数字,得到002,每个数字用二进制表示就是000 000 010,~002后就是111 111 101,111 111 101 & 111 111 111就是111 111 101即775。
我们也可以改变权限掩码,通过命令umask [想要改变的权限掩码值]即可改变。
这里就要引出第二种改变权限的方法了,每个八进制数对应拥有者、所属组和其他用户的权限,示例如下:
接下来讲解粘滞位:
当要合作完成某项任务时,需要共享文件,要求都能进行可读、可写、可执行,但是如果是可写的话,那么别人就可以删除掉你的文件,这样是十分不安全的,这时候就需要粘滞位了。
粘滞位通常用于如/tmp这样的共享目录,以防止一个用户删除另一个用户的临时文件。例如,如果一个目录被设置了粘滞位,即使某个用户对该目录有写权限,他们也不能删除目录中其他用户的文件。
用法:chmod o+t [目录名]
示例如下:
新建目录shared,然后给其他用户设置可写权力,同时设置粘滞位:
我们切换到普通用户,尝试删除shared,发现删不了 。
于此,讲解结束~