码迷,mamicode.com
首页 > 其他好文 > 详细

centos文件权限

时间:2015-04-21 11:28:25      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:linux   程序   用户   

一、chmod

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
    文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。
    有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
    每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。

如:

[root@sparktech ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1671 Apr 15 08:08 /etc/passwd

  横线代表空,r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。

常见的文件类型有:b  块设备;c 字符设备;d 目录; - 普通文件;l 链接文件;s 套接字;p 管道

 

eg. :- rw- r--r--     普通文件 文件属主 文件属组 其他用户

    rw- r--r-- 是文件passwd的访问权限,属主是root,属组是root,属主有读写权限,属组有读权限,其他用户只有读权限。

    确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。

chown

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
1. 文字设定法

命令中各选项的含义为:
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置所表示的权限可用下述字母的任意组合:
r 可读
w 可写
x 可执行
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example
使同组和其他用户对文件example 有读权限。

2. 数字设定法


    我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:

例子:
(1)文字设定法:
例1:

[root@sparktech ~]# chmod +x /etc/passwd
[root@sparktech ~]# ls -l /etc/passwd
-rwxr-xr-x. 1 root root 1671 Apr 15 08:08 /etc/passwd
给u,g,o都加上了x权限

例2:

[root@sparktech ~]# touch text
[root@sparktech ~]# ls -l text 
-rw-r--r--. 1 root root 0 Apr 16 23:41 text
[root@sparktech ~]# chmod u+x,g+w,o-r text 
[root@sparktech ~]# ls -l text 
-rwxrw----. 1 root root 0 Apr 16 23:41 text

属主u增加了执行权限,属组增加了写权限,其他用户去掉了可读权限

    (2)数字设定法:
例1:

[root@sparktech ~]# chmod 644 text 
[root@sparktech ~]# ls -l text 
-rw-r--r--. 1 root root 0 Apr 16 23:41 text

设定text的权限,属主可读可写,属组可读,其他用户可读

例2:

[root@sparktech ~]# chmod 755 text
[root@sparktech ~]# ls -l text 
-rwxr-xr-x. 1 root root 0 Apr 16 23:41 text

设置text的权限,属主可读可写可执行,属组可读可执行,其他用户可读可执行

二、特殊权限

  我们登陆到系统之后,创建一个普通文件或者目录的时候,会有一个默认的权限。普通文件是644,目录文件是755,想必大家都知道这个是由umask这个值决定的。我们可以直接执行umask命令查看,linux系统默认的umask值是0022。想改变创建文件默认的权限,我们直接修改umask就可以,但是一般的权限都是通过777-022得到的默认权限位。022前面的这个0是什么呢?第一个0就是特殊权限位,下边我们就来跟大家说一下setuid、setgid和sticky这个三个特殊权限位。

1.suid, set uid   

  在一个程序或命令上添加setuid以后(u+s),这样属主有了s权限,意味着任何用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序的属主。最典型的一个例子就是passwd这个命令。

   普通用户运执行passwd命令来修改自己的密码,其实最终更改的是/etc/passwd这个文件。

   我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改。

[root@sparktech ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1671 Apr 15 08:08 /etc/passwd

    按照常规的逻辑思维,普通用户是修改不了/etc/passwd此文件的,但是在passwd这个命令上添加了setuid这个特殊权限位,普通账号临时变成root,就能间接修改自己账号的密码了。

 

[root@sparktest1 ~]# which passwd
/usr/bin/passwd
[root@sparktest1 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 30768 Feb 22  2012 /usr/bin/passwd

s就是suid位,设置setuid的方法如下:

chmod u(+|-)s /path/somefile
chmod 4664 /path/somefile
注意:
s:表示属主原来有执行权限
S:表示属主原来没有执行权限

例如:

[root@sparktech ~]# useradd Danby         #新增用户Danby
[root@sparktech ~]# vim /tmp/test.txt   #创建文件,并写入hello world
[root@sparktech ~]# ls -l /tmp/test.txt         #查看文件权限
-rw-r--r--. 1 root root 0 Apr 17 00:17 /tmp/test.txt
[root@sparktech ~]# chmod o-r /tmp/test.txt      #去掉其他用户可读权限
[root@sparktech ~]# su - Danby                    #切换用户到Danby
[Danby@sparktech ~]$ cat /tmp/test.txt             #查看文件,权限不足
cat: /tmp/test.txt: Permission denied                 #切换到root用户
[Danby@sparktech ~]$ su - root                     
Password: 
[root@sparktech ~]# cp /bin/cat /tmp/
[root@sparktech ~]# ls -l /tmp/test.txt /tmp/cat
-rwxr-xr-x. 1 root root 48568 Apr 17 00:20 /tmp/cat
-rwSr-----. 1 root root     0 Apr 17 00:17 /tmp/test.txt
[root@sparktech ~]# cd /tmp/
[root@sparktech tmp]# chmod u+s cat             #cat命令添加s权限
[root@sparktech ~]# su - Danby                      #切换到Danby用户 

[Danby@sparktech tmp]$ . /cat test.txt 
-bash: /cat: No such file or directory
[Danby@sparktech tmp]$ ./cat test.txt 
[Danby@sparktech tmp]$ ./cat test.txt 
hello world                                            #成功查看文件

2.Sgid,Set id,属组有s权限,意思就是执行此程序时,此进程的属组不再是运行者本人所属的基本组,而是此程序文件的属组。Set gid权限如果给文件设置,是让运行此文件的其它用户具有这个文件的属组特性;给目录设置Set gid权限,任何用户在该目录下创建的文件,则该文件属组都和目录的属组一致。

 

但是这个不但可以能成功写进去,还可以删除文件,我们只能自己删除自己的文件,不想让其他用户删除我们的文件,这时候怎么办呢?

3.stick bit (粘贴位)就是:除非目录的属主和root用户有权限删除它,除此之外其它用户不能删除和修改这个目录。只有文件的拥有者和root才能对其进行修改和删除,其他用户则不行,避免了上面所说的问题产生。

 

如何设置以上特殊权限
setuid:chmod u+s xxx

setgid: chmod g+s xxx

stick bit : chmod o+t xxx

或者使用八进制方式,在原先的数字前加一个数字,三个权限所代表的进制数与一般权限的方式类似,如下:

suid   guid    stick bit

  1        1          1

所以:suid的二进制串为:100,换算十进制为:4

guid的二进制串为:010,换算:2

stick bit 二进制串:001,换算:1

于是也可以这样设:setuid:chmod 4755 xxx

setgid:chmod 2755 xxx

stick bit:chmod 1755 xxx

最后,在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限 。

 

三、chattr和lsattr

    这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。

+ :在原有参数设定基础上,追加参数。

- :在原有参数设定基础上,移除参数。

= :更新为指定参数设定。

a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。

i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。

 

1、用chattr命令防止系统中某个关键文件被修改:

# chattr +i /etc/resolv.conf

然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf

# lsattr /etc/resolv.conf

会显示如下属性

----i-------- /etc/resolv.conf

2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

# chattr +a /var/log/messages

centos文件权限

标签:linux   程序   用户   

原文地址:http://magine356wj.blog.51cto.com/2664956/1636343

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!