文件权限管理

一 、文件属性介绍

1、linux文件权限分为读(read)、写(write)、执行(excute)三种,主要针对三类用户进行定义:ouwer:属主(u) 、group(g):属组、 other(o):其他人。文件的权限组合可以分为两种,一种是由三个字母r 、w、 x组成,一种是由数字组成4、2、1,它们代表的意思是r = 4 表示读权限、w = 2表示写权限、 x = 1表示执行权限。在同一个命令中两种组合不能混合使用,比如 设置test.txt文本权限chmod u=rwx,g=rw,o=test.txt ; chmod 760 test.txt ;即 rw-rw-x = 661 ;rwxrwxrwx=777 文件权限管理2、linux的读写执行权限对文件和目录有不同的意思:

文件:
    r:可以使用文件查看类工具获取其内容,比如ls 、cat。
    w:可以修改文件的内容,但不能删除。
    x:可以将文件(binary)运行为进程。
目录:
    r:可以使用ls查看此目录中的文件列表。
    w:可修改此目录下的文件列表,即创建或删除文件。
    x:可cd到此目录中,且可以使用ls -l 来获取所有文件的详细属性信息。
注意:为了系统安全性,执行权限一般只给目录而不给文件。

二、文件权限管理的相关命令

1、chown

功能:

修改文件的属主(可以用UID代替)。

语法:

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

选项:

-R:递归修改目录及其下所有文件的属主
-v:显示详细过程

补充:

其实此命令还可以修改用户的属组(可以用GID代替)。具体用法为: owner:group(指定属主和属组) 或者 owner:(右侧空白,表示属主和属组都是同一个)又或者 :group (左侧空白,表示只改属组不该属主)

示例:

(1)将文件/testdir/test.txt的属主和属组都修改为linuxpao
[root@localhost ~]# touch test.txt
-rw-r--r--. 1 root root 0 8月   3 21:48 test.txt
[root@localhost ~]# chown linuxpao: test.txt 
[root@localhost ~]# ll test.txt
-rw-r--r--. 1 linuxpao linuxpao 0 8月   3 21:48 test.txt
(2)参考文件/etc/issue修改test.txt文件的权限
[root@localhost ~]# chown --reference=/etc/issue test.txt
[root@localhost ~]# ll test.txt 
-rw-r--r--. 1 root root 0 8月   3 21:48 test.txt

2、chgrp

功能:

修改文件的属组(只修改组)。

语法:

chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

选项:

-R:递归修改目录及其下所有文件的属组

示例:

递归修改/test目录下所有文件的属组为haha
[root@localhost ~]# chgrp -R haha /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root haha 15 8月   3 22:04 /test
[root@localhost ~]# ll -d /test/*
-rw-r--r--. 1 root haha 0 8月   3 22:04 /test/hi

3、chmod

功能:

修改文件的权限。

语法:

chmod [OPTION]... MODE[,MODE]... FILE...(以r w x 模式)
chmod [OPTION]... OCTAL-MODE FILE...(以八进制4 2 1模式)
chmod [OPTION]... --reference=RFILE FILE...(参考其他文件)

选项:

-R:递归修改权限

补充说明:

操作对像
u(user):文件属主权限
g (group):同组用户权限
o (other):其它用户权限
a (all):所有用户(包括以上三种)
 (u g o a 只适用于 r w x 模式)
权限表达方式
+ 增加权限
- 取消权限
= 唯一设定权限
(+-=只适用于 r w x 模式)
r 对应于 4
w 对应于 2
x 对应于 1
权限类别
r 读权限
w 写权限
x 执行权限
X 会对目录添加执行权限,而文件如果文件本身有执行权限就保留,没有就不添加

示例:

修改文件/test/hi的权限为750
[root@localhost ~]# chmod 750 /test/hi
[root@localhost ~]# chmod u=rwx,g=rx,o= /test/hi
[root@localhost ~]# ll /test/hi
-rwxr-x---. 1 root haha 0 8月   3 22:04 /test/hi

4、umask

功能:

   设置新建文件和目录的默认权限 语法:

umask [选项] 权限掩码

选项:

-p:输出的权限掩码可以直接作为指令来执行
-S:以符号类型的形式来显示权限

补充说明:

(1)查看umask的值有两种方法:一种直接使用umask,以数字的形式查看;一种是使用-S选项,以符号类型查看。
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
[root@localhost ~]# umask
0022
(2)因为一般情况文件是不设置执行(x)权限的,只保留读写权限,所以创建文件是权限最大是666,即默认值是-rw-rw-rw-。如果目录没执行权限,用户就禁止进入目录,因此目录的默认权限时777,即drwxrwxrwx。
(3)一般系统的默认umask值是022,用户新创建的文件或目录的权限是由默认最大的文件权限和目录权限与umask值做减法得到。
文件:(-rw-rw-rw-)-(-----w--w-)= -rw-r--r-- 即 666-022=644
目录:(drwxrwxrwx)-(-----w--w-)= drwxr-xr-x 即 777-022=755
(4)使用命令行模式修改的umask值是不能永久生效的,需要写入到系统文件中,如果要对全部成员生效可以写到/etc/bashrc或/etc/profile文件中,只对某个用户生效可以写到~/.bashrc或~/.bash_profile文件中。
注意:之所以文件用666去减,表示文件默认不具有执行权限,如果减得的结果中有执行权限(为奇数),则需要将其值加1。

示例:

设置umask值为044
[root@localhost ~]# umask 044
[root@localhost ~]# umask -S
u=rwx,g=wx,o=wx

三、文件的特殊权限

1、SUID

(1)Linux用户可以使用passwd命令修改自己的密码,并记录字/etc/shadow文件中,但是/etc/shadow文件权限是400,也就是说只有管理员才可以修改此文件的内容,为什么普通用户也可以修改密码呢?这就与Linux文件的一种特殊权限有关,即SUID权限,它可以使普用户对设置了SUID的文件具有属主的权限。用s字母表示,会覆盖属主原有的x(执行)权限位置,如果是大写S表示属主不具有x(执行)权限。

[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[root@localhost ~]# ls -l /etc/shadow
----------. 1 root root 1260 7月  12 17:38 /etc/shadow

(2)SUID的特性

SUID权限仅对二进制程序文件有效;
文件拥有s权限时,所有的文件执行者都会具有文件属主的权限;
SUID对目录无效;

(3)示例:

以root身份在/test目录(需要给目录wx权限)下创建文件txt ,设置txt文件权限为700,尝试用普通用户Linuxpao能否删除,再设置txt文件SUID,看看能否删除。
[root@localhost ~]# chmod 777 /test/
[root@localhost ~]# touch /test/txt
[root@localhost ~]# chmod 700 /test/txt
[linuxpao@localhost tmp]$ id  (Linuxpao不属于root组)
uid=1000(linuxpao) gid=1000(linuxpao) 组=1000(linuxpao)
[linuxpao@localhost ~]$rm -rf /test/txt
-bash: /test/txt: 权限不够 (不能删除)
[root@localhost ~]# chmod u+s /test/txt(添加SUID权限)
[root@localhost ~]# ll /test/txt
-rws------. 1 root root 0 8月   4 12:47 /test/txt
[linuxpao@localhost ~]$ rm /test/txt
rm:是否删除有写保护的普通空文件 "/test/txt"?y
[linuxpao@localhost ~]$  (已删除)

2、SGID

(1)SGID也是文件的特殊权限,也是用s字母表示,会覆盖属组的x(执行)权限位置,大写S表示属组不具有执行权。SGID可以针对文件和目录设置,文件或目录设置了SGID表示其他用户具有该文件或目录的属组权限。

[root@localhost bin]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 40496 6月  10 2014 /usr/bin/locate

(2)SGID对文件的特性:

SGID对二进制程序有效;
程序执行者对于该程序需具有x的权限;
执行者在执行过程中将会获得改程序用户组权限的支持;

(3)SGID对目录的特性:

用户对此目录具有r、x的权限时,该用户能够进入此目录;
对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;

3、Sticky Bit

(1)SBIT只针对目录有效,用t字母表示,会覆盖other的x(执行)权限位置,大写T表示其他人不具有执行权。

(2)SBIT对目录的特性:

当用户对此目录具有w,x权限时,用户在该目录下创建的文件或目录,只有自己或管理员可以删除,其他人只能修改、查看。

(3)示例

以root身份在/tmp目录下创建test文件,设置权限为777,再用普通用户Linuxpao登录,尝试修改和删除test文件
[root@localhost bin]# ll -d /tmp  (可以看到/tmp有SBIT权限)
drwxrwxrwt. 15 root root 4096 8月   4 12:36 /tmp
[root@localhost bin]# echo "this is test" > /tmp/test   (创建test文件)
[root@localhost bin]# chmod 777 /tmp/test
[linuxpao@localhost tmp]$ echo "I am linuxpao" >> test 
[linuxpao@localhost tmp]$ cat test
this is test
I am linuxpao  (可以看到可以修改文件)
[linuxpao@localhost tmp]$ rm -rf test  (无法删除)
rm: 无法删除"test": 不允许的操作

4、补充

配置普通权限时可以使用字符或数字,SUID、SGID、Sticky也是一样。使用字符时s表示SUID和SGID、t表示Sticky;4表示SUID、2表示SGID、1表示Sticky。在配置这些属性时还是使用chmod命令。

四、文件的隐藏属性

1、chattr

功能:

设置文件的隐藏属性

语法:

chattr [ + - = ] [ ASacdistu ] files...

选项:

+:增加一个特殊参数
-:删除一个特殊参数
=:仅有后面接的参数
A:不该变文件的访问时间atime
S:同步写入磁盘
a:只能增加文件数据,不能删除文件也不能修改原有数据,只有root可以设置
c:自动解、压缩文件,存储时先压缩在存储
d:当dump程序被执行时,设置d属性将可以使文件(或目录)不会被dump备份
i:不能修改数据、更改文件名、删除文件,只有root可以设置
s:从磁盘中完全删除此文件,不能找回
u:只是删除文件名,其数据还保留在磁盘中,可以找回

示例:

创建文件/root/tesxt,添加i属性,能否删除?
[root@localhost ~]# touch tesxt
[root@localhost ~]# chattr +i tesxt 
[root@localhost ~]# rm -f tesxt  (root用户都不能删除)
rm: 无法删除"tesxt": 不允许的操作

2、lsattr

功能:

显示文件的隐藏属性

语法:

lsattr [ -adR ] file...

选项:

-a:将隐藏文件的属性显示出来
-d: 如果接的是目录,仅列出目录本身的属性而非目录内的文件名
-R: 连同子目录的数据也一并列出来

示例:

显示文件/root/tesxt文件的隐藏属性
[root@localhost ~]# lsattr tesxt 
----i----------- tesxt

五、访问控制列表(ACL)

1、什么是ACL:ACL可以针对单一用户、单一文件或目录来进行r、w、x权限的设置,对于需要特殊权限的使用状况非常有帮助。CentOS7.X 之前版本,默认手工创建的ext4 文件系统无ACL功能。需手动增加,命令为:mount –o remount,acl /

2、setfacl

功能:

设置文件的ACL规则,设置好之后用ls -l 查看 可以看权限位最后会有一个“+”。

语法:

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

选项:

-b:设置所有的ACL设置参数
-m:指定文件的ACL参数
-x:删除后续的ACL
-k:删除默认的ACL
-R:递归设置ACL
-d:只对目录有效,递归设置默认的ACL

3、getfacl

功能:

查看文件ACL规则

语法:

getfacl [-aceEsRLPtpndvh] file ...

选项:

-a:仅显示文件访问控制列表
-d:仅显示默认的访问控制列表
-c:不显示注释表头
-e;显示所有的有效权限
-E:显示无效权限
-s:跳过只有基条目(base entries)的文件
-R:递归显示子目录

4、示例:

(1)创建文件test.txt,针对linuxpao设置ACL权限为rw
[root@localhost test]# touch test.txt
[root@localhost test]# ll test.txt 
-rw-r--r--. 1 root root 0 8月   4 18:11 test.txt
[root@localhost test]# setfacl -m u:linuxpao:rw test.txt
[root@localhost test]# ll test.txt 
-rw-rw-r--+ 1 root root 0 8月   4 18:11 test.txt
[root@localhost test]# getfacl test.txt (查看test.txt的ACL)
# file: test.txt
# owner: root
# group: root
user::rw-
user:linuxpao:rw-
group::r--
mask::rw-
other::r--
(2)清空文件/test.txt的ACL规则
[root@localhost test]# setfacl -b test.txt
[root@localhost test]# getfacl test.txt 
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/29740