利用Linux文件系统权限控制文件访问

Linux文件系统权限

通过文件权限控制用户对文件的访问。

文件具有三个应用权限的用户类别:文件归用户所有,通常是创建文件的用户;文件还归单个组所有,通常是创建该文件的主要用户组所有,但是可以进行更改;文件可以为系统上的非所属用户和非所属组的其他用户设置权限。

用户权限覆盖组权限,从而覆盖其他权限。

[root@linuxprobe Desktop]# ll
total 20
drwxr-xr-x 3 root root  17 May 21 23:10 dir1
-rw-r--r-- 1 root root  16 May 30 14:44 test1.txt
-rw-r--r-- 1 root root  16 May 30 14:45 test2.txt
-rw-r--r-- 1 root root  16 May 30 14:45 test3.txt
-rw-r--r-- 1 root root  20 Jun  4 22:57 test.txt
-rw-r--r-- 1 root root 101 May 30 10:25 test.txt~
[root@linuxprobe Desktop]# 

r(read)代表读;w(write)代表写;x(execute)代表执行;

上面的示例中第一条:权限开头的第一位标识文件类型,d为目录、-为文件,当然还有其他的类型。再3位标识所属用户的权限为rwx,再3位标识所属用户组权限r-x,最后3位标识其他用户的权限为r-x。第三第四个字段分别代表所属用户和所属组。

文件和目录权限的影像

权限对文件的影像对目录的影像
r(读取)可以读取文件的内容可以列出目录的内容
w(写入)可以更改文件的内容可以创建或删除目录中的任一文件
x(执行)可以作为命令执行文件可以访问目录的内容(取决于目录中文件的权限)

请注意:用户通常对只读目录具有read和exec权限,因此他们可以列出目录并访问其内容。如果用户对某目录具只有read权限,可以列出其中文件的名称,但是其他信息(包括权限和时间戳)都不可用,也不可访问。如果用户对某目录只有exec权限,则他们不能列出该目录中文件的名称,但是如果它们已知道对其具有读取权限的文件的名称,那么它们可以通过明确地指定文件名来访问文件的内容。

在文件所在的目录中拥有目录写入权限的任何人都可以删除此文件,不论此文件本身的所有权或者权限如何。

查看文件/目录权限和所有权

ls命令的-l选项将展开文件列表,以包括文件的权限和所有权;

[root@linuxprobe dir3]# ls -l
total 0
drwxr-xr-x 2 root root 6 Jun 24 11:07 dir4
[root@linuxprobe dir3]# 

ls -l directoryname命令将显示驻留在该目录中所有文件的拓展列表。若要阻止下降至该目录,但可以看到目录本身的信息列表,可在ls命令上添加上-d选项:

[root@linuxprobe dir3]# ls -l /home
total 12
drwx------   3 db2fenc1   db2fadm1     87 Feb 21 12:36 db2fenc1
drwxr-xr-x   9 db2inst1   db2iadm1   4096 Feb 22 17:23 db2inst1
drwx------. 14 linuxprobe linuxprobe 4096 Jun  5 22:36 linuxprobe
drwx------  15 rwas       qlb        4096 Jun 24 10:54 rwas
[root@linuxprobe dir3]# ls -ld /home
drwxr-xr-x. 6 root root 64 Feb 22 10:05 /home
[root@linuxprobe dir3]# 

注意:与NTFS权限不同,Linux权限仅适用于设置了Linux权限的目录或文件。目录中的子目录和文件不会继承目录的权限。(但是,目录的权限可能会有效的阻止对其内容的访问。)在每个文件或目录上直接设置Linux中的所有权限。

Linux中目录的读取权限大致等同于Windows中的列出文件夹内容。

Linux中目录的写入权限等同于Windows中的修改;意味着可以新增删除文件和子目录。在Linux中,如果对某目录同时设置了写入和粘滞位,则只有文件或目录的拥有者才可以删除该目录,这与Windows的写入权限行为接近。

从命令行管理文件系统权限

更改文件/目录的权限

用于从命令行更改权限的命令为chmod,是“change mode(更改模式)”的缩写。chmod命令在要更改的文件或目录列表后面列出了权限说明。可使用符号(符号法)或数值(数值法)来说明权限。

符号法关键字

chmod WhoWhatWitch file|dorectory
  • Who是指u、g、o、a(代表用户、组、其他、全部)
  • What是指+、-、=(代表添加、删除、精确设置,可以替换一组权限的整个权限集)
  • Witch是指r、w、x(代表读取、写入、可执行)

数值法

chmod ### file|directory
  • 每个数字代表一个访问级别:用户、组、其他
  • # 是r=4、w=2、x=1的和。

检查权限-rwxr-x---。对于用户,rwx计算为4+2+1=7。对于组,r-x计算为4+0+1=5,而对于其他用户,—用0+0+0=0表示。将这三个放在一起,这些权限的数值表示是750。

这一计算也可按相反的方向执行。我们来看一下权限640。对于用户权限,6表示读取(4)和写入(2),其显示为rw-。对于组部分,4仅包含读取(4),显示为r–。对于其他用户使用的0表示无权限(—),因此这一文件最终的符号权限集为-rw-r-----。

示例

对test.txt的组和其他用户的权限,删除读取和写入权限:

[root@linuxprobe Desktop]# ls -l test.txt
-rw-rw-rw- 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# chmod go-rw test.txt
[root@linuxprobe Desktop]# ls -l test.txt
-rw------- 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# 

对test.txt中的每个人添加执行权限:

[root@linuxprobe Desktop]# ls -l test.txt
-rw------- 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# chmod a+x test.txt
[root@linuxprobe Desktop]# ls -l test.txt
-rwx--x--x 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# 

对test.txt设置用户有读取、写入权限,对组有读取权限,对其他用户设置读取权限:

[root@linuxprobe Desktop]# ls -l test.txt
-rwx--x--x 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# chmod 644 test.txt
[root@linuxprobe Desktop]# ls -l test.txt
-rw-r--r-- 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# 

注意:对于在整个目录树中递归的权限,chmod命令支持-R选项。当使用此选项时,务必要使用X权限,而不是x权限,表示应仅对目录而不是普通文件设置执行权限。例如,以下命令将递归的设置对dir及其子目录设置读取和下入权限,而仅将执行权限应用于目录而非普通文件

[root@linuxprobe Desktop]# chmod -R g+wX dir1/

更改文件/目录的所属用户或所属组

新建的文件由创建该文件的用户所有。默认情况下,新文件的所属组为创建该文件的主要用户的主要用户组。由于红帽企业Linux使用用户专有组,因此该组通常为仅有该用户作为组成员的组。要根据组成员资格授予访问权限,需要更改文件的所有者或者所属组。

使用chown命令可以更改文件的所有权。例如要将text.txt的所有者更改为rwas,可使用以下命令:

[root@linuxprobe Desktop]# ls -l test.txt
-rw-r--r-- 1 root root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# chown rwas test.txt
[root@linuxprobe Desktop]# ls -l test.txt
-rw-r--r-- 1 rwas root 20 Jun  4 22:57 test.txt
[root@linuxprobe Desktop]# 

chown可与-R选项配合使用,以递归更改整个目录树的所有权。以下命令可将dir1的所有权及此目录书中的所有文件和子目录授予给rwas:

[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# ls -l dir1/
total 0
drwxrwxr-x 3 root root 33 May 22 20:50 dir2
[root@linuxprobe Desktop]# chown -R rwas dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 rwas root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# ls -l dir1/
total 0
drwxrwxr-x 3 rwas root 33 May 22 20:50 dir2
[root@linuxprobe Desktop]# 

chown命令也可以用于更改文件的组所有权,只需在组名称之前加上冒号(:)。例如,下列命令将dir1的所属组更改为qlb:

[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 rwas root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# chown :qlb dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 rwas qlb 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# 

chowm命令也可用于同时修改所有者和所属组,此时可使用语法owner:group。例如,要将dir1的所有权更改回root,同时组更改回root,可使用以下命令:

[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 rwas qlb 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# chown root:root dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# 

只有root用户可以更改文件的所有者。但是,root或者文件的所有者可设置文件的所属组。root用户可以将所有权授予任何组,但是非root用户只能将所有权授予给他们的所属组。

注意:除了使用chown外,部分用户通过chgrp命令更改文件所属组;此命令的工作方式与chown命令完全相同,也可使用-R选项来作用于整个目录树。

管理默认权限和文件访问

特殊权限

对可执行文件的setuid(或setgid)权限表示将以文件的用户(或组)身份运行命令,而不是以运行命令的用户身份。以passwd命令为例,注意观察用户权限位:

[root@linuxprobe Desktop]# ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jan 30  2014 /usr/bin/passwd
[root@linuxprobe Desktop]# 

目录的粘滞位可以为文件删除设置特殊限制:仅文件所有者(和root)用户可以删除目录中的文件。以/tmp为例:

[root@linuxprobe Desktop]# ls -dl /tmp/
drwxrwxrwt. 14 root root 4096 Jun 25 21:40 /tmp/
[root@linuxprobe Desktop]# 

最后,对某目录的setgid权限表示在该目录中创建的文件将继承该目录的组所属关系,而不是继承自创建用户。这通常用于组协作目录,将文件从默认的专有组自动更改为共享组。

特殊权限对文件和目录的影响

特殊权限对文件的影响对目录的影响
u+s(suid)需以文件所有者的身份,而不是以运行文件的用户身份执行文件。无影响
g+s(sgid)以拥有文件的组身份执行文件。在目录中最新创建的文件将其所属组设置为与目录的所属组相同。
o+t(sticky)无影响对目录具有写入权限的用户可以删除其所拥有的文件,而无法删除或强制保存到其他用户所拥有的文件。

设置特殊权限

  • 用符号表示:setuid = u+s;setgid = g+s;sticky = o+t;
  • 用数值表示:setuid = 4;setgid = 2;sticky = 1;

示例

在dir1目录上添加setgid位:

[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# chmod g+s dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwsr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# 

设置setgid位,并对dir1的用户和组设置读取/写入/执行权限:

[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwsr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# chmod g-s dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrwxr-x 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# chmod 2770 dir1/
[root@linuxprobe Desktop]# ls -dl dir1/
drwxrws--- 3 root root 17 May 21 23:10 dir1/
[root@linuxprobe Desktop]# 

默认文件权限

文件的默认权限由创建他们的进程设置。例如,文本编辑器创建的文件可由所有者读取和写入,但不可执行。shell重定向也是如此。此外,二进制可执行文件由创建他们的编译器设置为可执行权限。mkdir命令创建新的目录,并设置读取/写入/执行权限。

经验显示,这些权限通常不是在文件和目录创建时予以设置的。这是因为其中一些权限被shell进程的umask清除。不带参数运行umask命令将显示shell的umask的当前值。

[root@linuxprobe Desktop]# umask
0022
[root@linuxprobe Desktop]#

系统的每个进程都具有umask,他是一个八进制位掩码,用于清除由该进程创建的新文件和目录的权限。如果在umask中设置了一个位,则新文件中对应的权限将被删除。例如,前面的umask 0002清除其他用户的写入位。前导零表示特殊的用户和组权限被清除。umask为077时,清除新创建文件的所有组和其他用户的权限。

通过一个数字参数使用umask命令,可以更改当前shell的umask。该数字参数应当是与新umask值对应的八进制值。如果少于3位,则假定带有前导0.

Bash shell用户的系统默认umask在/etc/profile和/etc/bashrc文件中定义。用户可以在它们的.bash_profile和.bashrc文件中覆盖系统默认值。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值