在系统管理中,用户和组都是与权限息息相关的,在掌握了对用户和组的管理操作之后,今天介绍一下权限设置方面的内容。
在
Linux系统中,为系统中的每一个文件或目录都赋予了两种属性:访问权限和文件所有者,简称为“权限”和“归属”。
访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。
Linux系统根据文件或目录的归属、访问权限来对用户访问数据的过程进行控制。
在下面的操作中需要注意,root用户是系统的超级用户,拥有完全的管理权限,因此文件、目录的权限限制对root用户将不起作用。
一
、 查看文件/目录的权限和归属
在用
ls –l命令查看文件详细信息时,将会看到文件的权限或归属设置。如:
在显示的信息中,第3、4个字段的数据分别用于表示该文件的属主和属组,在上例中,install.log的属主和属组分别是root用户和root组。
第1个字段中除第1个字符以外的其它部分表示该文件的访问权限,如“rw-r—r--”。
权限字段由
3部分组成,各自的含义如下:
第
1部分(第2~4个字符),表示该文件的属主(user)对该文件的访问权限。
第
2部分(第5~7个字符),表示该文件的属组内各成员用户(group)对该文件的访问权限。
第
3部分(第8~10个字符),表示其他任何用户(other)对该文件的访问权限。
在表示访问权限时,主要使用了三种不同的权限字符:
r、w、x,分别表示可读、可写、可执行。若需要去除对应的权限位,则使用“-”表示。例如root用户对install.log文件具有可读可写权限(rw-),root组内的各用户对install.log文件只具有读取权限(r--),其他用户对install.log文件也是具有只读权限(r--)。
对于文件和目录来说,具体权限的含义是有差别的,如下表所示。例如用户只要对目录有写入权限,就可以删除该目录下任何文件或子目录,而不管这些文件或子目录是否属于该用户。
若用户在访问文件或目录时不具备相应的权限,系统将会拒绝执行。
例如:
[root@localhost ~]# ls -l /etc/shadow
----------. 1 root root 1320 11月 5 00:11 /etc/shadow
这个文件除了root用户之外,任何其他用户都没有权限(虽然看起来root用户也没有任何权限,但root用户不受权限制约)。
[root@localhost ~]# su – super #切换到普通用户super
[super@localhost ~]$ cat /etc/shadow #查看shadow文件内容
cat: /etc/shadow: 权限不够 #提示没有权限
另外还有个问题需要注意,在这三种权限之间存在等级关系,即:
属主权限>=属组权限>=其他用户权限
比如下面这个例子,用户user(也是sales组的成员)对TEST文件具有什么权限?
-r--rw-r-x 1 user sales 2887 Sep 7 12:06 TEST
遵循上面的等级关系原则,用户user将只具有读取权限,而不是sales组的读写权限。
二、 设置文件/目录的权限
通过
chmod命令可以来设置更改文件或目录的权限。在用chmod命令设置权限时,可以采用两种不同的权限表示方法:字符形式、数字形式。
1、字符形式的chmod命令
在命令选项中,用“ugoa”来代表用户类别,u表示文件属主,g表示文件属组,o表示其他用户,a表示所有用户。用“+-=”表示权限设置的操作动作,+表示增加相应权限,-表示减少相应权限,=表示赋值权限。
下面通过一个实例来说明权限设置的方法。
首先新建一个
/root/test目录,并将mkdir命令的程序文件/bin/mkdir复制到/root/test目录中。
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# cp /bin/mkdir mymkdir #将
/bin/mkdir文件复制到当前目录,并改名为mymkdir
查看一下
mymkdir文件的权限,可以看到这是一个可执行文件,所有用户都对这个文件具有执行权限。
[root@localhost test]# ls –l
-rwxr-xr-x. 1 root root 49384 11月
5 04:46 mymkdir
下面我们尝试一下能否用这个
mymkdir文件来创建目录。
由于
mymkdir相当于是一个外部命令,而它的程序文件路径/root/test/mymkdir又不在PATH变量里,所以无法直接执行这个文件,而是必须要告诉系统这个文件的具体路径,然后才能去执行它。所以要执行这个文件,应采用“/root/test/mymkdir file1”的形式(file1是要创建的目录名字),为了简化输入,一般建议采用“./mymkdir file1”的形式,“.”代表当前目录,“./mymkdir”就表示当前目录下的mymkdir文件。
[root@localhost test]# ./mymkdir file1
#运行
mymkdir文件创建一个目录
可以看到,命令被成功执行了。下面去掉
mymkdir文件的可执行权限,然后再次测试该文件能否执行。
[root@localhost test]# chmod a-x mymkdir
#去掉所有用户对
mymkdir文件的执行权限
[root@localhost test]# ll mymkdir
#再次查看
mymkdir文件的权限,已经没有执行权限。
-rw-r--r--. 1 root root 49384 11月
5 04:46 mymkdir
[root@localhost test]# ./mymkdir file2 #再次运行
mymkdir文件创建一个目录
-bash: ./mymkdir: 权限不够
由于了没有了执行权限,所以
mymkdir文件无法运行。
如果只想让
mymkdir文件的属主用户具有执行权限,可以执行下面的命令为属主增加执行权限:
[root@localhost test]# chmod u+x mymkdir
也可以执行下面的命令,直接赋予属主读写执行权限:
[root@localhost test]# chmod u=rwx mymkdi
也可以多个选项一起使用,如:
为属组增加执行权限,去掉其他用户的读取权限。
[root@localhost test]# chmod u+x,o-r mymkdir
2、数字形式的chmod命令
nnn表示3位八进制数,r、w、x权限字符可以分别表示为八进制数字4、2、1。表示一个权限组合时需要将数字进行累加,例如,“rwx”采用累加数字形式表示成“7”,“r-x”采用累加数字形式表示成“5”,而“rwxr-xr-x”由三个权限组成,因此可以表示成“755”,“rw-r—r—”可以表示成“644”。
相比字符形式,数字形式更为简便易用,也是在实践中广泛采用的方法。
如,对mymkdir文件进行如下权限设置:
- 属主具有读写执行权限;
- 属组具有读和执行权限;
- 其他用户具有读和执行权限
直接用一条命令就可以完成:
[root@localhost test]# chmod 755 mymkdir
[root@localhost test]# ls -l mymkdir
-rwxr-xr-x. 1 root root 49384 11月
5 04:46 mymkdir
chmod命令常用选项:
-R:递归修改指定目录下所有文件、子目录的权限
在实际的目录权限管理工作中,有时会需要将某一个目录中的所有子目录及文件的权限都设置为同一个值,只要结合
-R选项就可以实现。若不指定-R选项,chmod命令将只改变所指定目录本身的权限。
例:将
/usr/src目录以及其中所有的子目录、文件的权限都设置为rw-r—r--。
[root@localhost test]# chmod -R 644 /usr/src
三、 设置文件/目录的归属
通过
chown命令可以修改文件或目录的属主、属组。其基本的命令格式如下所示:
chown可以同时设置属主、属组,之间用冒号“:”间隔,也可以只设置属主或者属组,单独设置属组时,要使用“:组名”的形式以示区别。
例:将
mymkdir文件的属主更改为mike用户,更改后,mike将具有rwx的权限。
[root@localhost test]# chown mike mymkdir
[root@localhost test]# ll
-rwxr-xr-x. 1 mike root 49384 11月
5 04:46 mymkdir
例:将
mymkdir文件的属组更改为wheel组,更改后,wheel组的成员用户将具有r-x权限。
[root@localhost test]# chown :wheel mymkdir
[root@localhost test]# ll
-rwxr-xr-x. 1 mike wheel 49384 11月
5 04:46 mymkdir
例:同时将
mymkdir文件的属主更改为root用户,属组更改为daemon组。
[root@localhost test]# chown root:daemon mymkdir
[root@localhost test]# ll
-rwxr-xr-x. 1 root daemon 49384 11月
5 04:46 mymkdir
chown命令也可以结合“
-R”选项递归更改目录中所有子目录及文件的归属。
例:将“
/var/www”目录中的所有子目录、文件的属主更改为root用户。
[root@localhost ~]# chown -R root /var/www
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1122342