`

Linux 权限

 
阅读更多

 

1.权限的常规表示

文件和目录的权限

    

    

无权限(-

无权限(-

读(r):允许读文件的内容

读(r):允许查看目录中

有哪些文件和目录

写(w):允许向文件中写入数据

写(w):允许在目录下创建

(或删除)文件和目录  

执行(x):允许将文件作为程序执行

执行(x):允许访问目录

(用cd 命令进入该目录,

并查看目录中可读文件的内容)

权限的表示方法与含义

符号表示

八进制表示

    

-

0

没有权限

r

4

read的缩写,拥有读权限

w

2

write的缩写,拥有写权限

x

1

execute的缩写,拥有执行权限

sStT

 

特殊权限

权限的作用范围

符号表示

    

u

user的缩写,文件所有者(文件的创建者)

g

group的缩写,同组用户(与文件所有

者同组的用户)

o

other的缩写,其他用户(系统中除所有者、

同组用户以外的用户)

a

all的缩写,全部的用户,包括所有者、

同组用户及其他用户

 文件和目录的权限字段

1

2

3

4

5

6

7

8

9

10

-

r-

w-

x-

r-

w-

x-

r-

w-

r-

说明

文件

类型

属主的权限

组权限

其他用户的权限

2.使用chmod命令进行权限设置

可以使用命令chmod来为文件或目录赋予权限。chmod 命令格式如下:

  1. chmod [选项] [模式] [参考文件=文件名] 

其中各可用选项的意义如下。

-c, --changes:与verbose相反,只在有更改时才显示结果。

-f, --silent, --quiet:去除大部分的错误信息,静默模式。

-v, --verbose:显示全部信息,冗余模式。

--reference=file:不再使用自行指定权限的模式进行权限赋值,而使用[参考文件]的模式。

-R, --recursive:以递归方式更改所有的文件及子目录。

-help:显示帮助信息并退出。

-version:显示版本信息并退出。

1.八进制模式

chmod命令中的[模式]可以是八进制模式,即八进制数字表示的权限,同表6.11所示。例如预设置普通文件ABC.exe的属主权限为读、写、执行,组权限为读、写,其他用户的权限为读,即文件ABC.exe的权限为rwxrw-r--,转化为八进制可表示为764。使用命令如下:

  1. #chmod  764  ABC.exe  
  2. #ls  -l  ABC.exe  
  3. -rwxrx-r--  1 root root 224 07-21 23:10 ABC.exe 

再如把/home/teacher目录的权限设为属主可以读、写、执行,用户组也可以读、写、执行,其他用户只能读,则权限应设置为rwxrwxr--,转化为数字表示应为774。命令如下所示:

 

  1. #chmod  774  /home/teacher  
  2. #ls  -l   
  3. drwxrwxr--  2 root root 224 07-21 23:30 teacher  
  4. …  … 

上例中的命令只能修改/home/teacher目录的权限,如果需要将/home/teacher目录及其目录中的文件和子目录的权限一并进行修改,使用递归参数"-R"即可。例如将/home/teacher中的所有文件及子目录一并修改为rwxrwxrwx,命令如下所示:

  1. # chmod  -R  777  teacher1  
  2. # ls  -l  teacher1  
  3. drwxrwxrwx 2 root root 4096 07-26 15:58 homework  
  4. -rwxrwxrwx 1 root root    0 07-26 15:58 pp.c  
  5. #cd ..  
  6. # ls  -l  
  7. drwxrwxrwx  4 teacher1 teacher1 4096 07-26 15:58 teacher1  
  8. …  … 

可以看到目录teacher、子目录homework,以及teacher下的文件pp.c具有相同的权限。

2.字符模式

chmod的权限模式既可以用八进制数字的方式表示,也可以使用字符方式,配合运算符"+"、" "、"=",增加、减少权限或指定权限。修改权限可选用的字符选项如表6.12所示。

表6.12  权限的字符选项

用户对象表

修改操作

权限表示

文件所有者

同组用户

其他用户

所有用户

+  赋予权限

-  拒绝权限

设置权限

r  读权限

写权限

执行权限

无权限

s设置set-UIDset-GID

t粘滞位


例如给文件ABC.exe的属主增加执行权限,命令行如下:

  1. # ls  -l  
  2. -rw-r--r-- 1 root root 0 07-26 08:16 ABC.exe  
  3. # chmod u+x ABC.exe   
  4. # ls  -l  
  5. -rwxr--r-- 1 root root 0 07-26 08:16 ABC.exe  
  6.  
  7. 又如去掉同组和其他用户的读权限,可以使用命令:  
  8.  
  9. # ls  -l  
  10. -rwxr--r-- 1 root root 0 07-26 08:16 ABC.exe  
  11. # chmod g-r,o-r ABC.exe            
  12. # ls  -l  
  13. -rwx------ 1 root root 0 07-26 08:16 ABC.exe 

注意:设置的各权限之间用","分隔,且","前后不可有空格,否则无法执行命令。

例如重新设定文件ABC.exe的其他用户的权限为读取,可以使用命令:

  1. # ls  -l  
  2. -rwx------ 1 root root 0 07-26 08:16 ABC.exe  
  3. # chmod o=r ABC.exe   
  4. # ls  -l  
  5. -rwx---r-- 1 root root 0 07-26 08:16 ABC.exe 

又如重新设定文件ABC.exe的其他用户的权限为读取、写入和执行,可以使用命令:

  1. # ls  -l  
  2. -rwx---r-- 1 root root 0 07-26 08:16 ABC.exe  
  3. # chmod o=rwx  ABC.exe   
  4. # ls  -l  
  5. -rwx---rwx 1 root root 0 07-26 08:16 ABC.exe 

再如为所有用户(包括属主、组和其他)赋予写权限,可以使用命令:

  1. # ls  -l  
  2. -r-x---r-- 1 root root 0 07-26 08:16 ABC.exe  
  3. # chmod a+w ABC.exe   
  4. # ls  -l  
  5. -rwx-w-rwx 1 root root 0 07-26 08:16 ABC.exe 

利用chmod的[reference=file]选项可以对文件的权限进行复制,将"reference(参考)"文件的权限直接复制给指定文件。例如:

  1. # ls  -l  
  2. -rwx---r-- 1 root root 0 07-26 08:16 ABC.exe  
  3. # chmod  -reference=ABC.exe  copy.x  
  4. # ls  -l  
  5. -rwx---rwx 1 root root 0 07-26 08:19 ABC.exe  
  6. -rwx---rwx 1 root root 0 07-26 08:19 copy. x  
  7. …  … 

可以看到copy. x文件与ABC.exe文件拥有了相同的权限。

3.设置特殊权限

除了读、写和执行权限之外,在Red Hat Enterprise Linux 文件系统中还有特殊权限,包括set-UID、set-GID及黏滞位(sticky)。

从表6.11中可以看到,使用chmod命令可以对特殊权限进行设置。如果要加上特殊权限,chmod命令必须使用4位八进制数字格式。其中第1位表示特殊权限,set-UID对应值为"4",set-GID对应值为"2",黏滞位对应值为"1"。其余三位表示普通权限(包括属主、用户组及其他用户的权限)。

1.设置set-UID

如果文件的权限被设置为set-UID,则表示如果该文件是可执行的,则运行该文件的用户将在程序运行期间拥有与该文件的属主相同的权限。例如,假设有下面的Shell脚本程序被存储到test.exe文件中:

  1. #cat  test.exe  
  2. #!/bin/bash  
  3. echo $PATH  
  4. ps -aux >>/home/process  

使用chown命令设置test脚本的属主,使用chmod命令设定脚本的权限:

  1. #chown  root:root  test.exe  
  2. #chmod  4777  test.exe  
  3. # ls  -l  test.exe  
  4. -rwsrwxrwx 1 root root 0 07-26 08:19 test.exe  

此时test.exe的属主是root,由于设置了set-UID位,任何运行该文件的用户都会临时具有root身份,这无疑是非常危险的,所以应慎重使用set-UID权限。

2.设置set-GID

与set-UID类似,如果文件的权限被设置为set-GID,则表示如果该文件是可执行的,则运行该文件的用户会在运行期间拥有与该文件的用户组相同的权限。例如可以对文件test1.exe设定set-GID:

  1. #chown  root:nobody  test1.exe  
  2. #chmod  2775  test1.exe  
  3. # ls  -l  test1.exe  
  4. -rwxrwsr-x 1 root root 0 07-26 09:19 test1.exe  

3.设置黏滞位

如果文件被设置了黏滞位(sticky-bit),则表示如果该文件是可执行的,一旦其被装载进内存就将一直驻留内存。例如对文件test2.exe设定黏滞位,命令如下:

  1. #chmod  1775  test2.exe  
  2. # ls  -l  test2.exe  
  3. -rwxrwxr-t 1 root root 0 07-26 10:19 test1.exe  

注意:只需将特殊权限所对应的值相加,就可一次完成文件的特殊权限设置。例如对文件text3.exe设置set-UID、set-GID及黏滞位,各值相累加结果为4+2+1=7,则命令行为:

  1. #chmod  7775  test3.exe  
  2. # ls  -l  test2.exe  
  3. -rwsrwsr-t 1 root root 0 07-23 13:19 test3.exe   
  4. …  … 

 

4.设置文件或目录的默认权限

对每一个新创建的文件或目录,系统都会自动赋予一个默认的权限。可以使用umask命令设置文件或目录的默认权限。umask命令的格式如下所示:

  1. umask  [mask] 

其中[mask]可以是由4个8进制数字组成的权限掩码,直接使用umask命令可以显示系统默认的权限掩码:

  1. #umask   
  2. 0022 

通常新建文件的默认权限值为0666,新建目录的默认权限值为0777,与当前的权限掩码0022相减,即可得到每个新增加的文件的最终权限值为0666-0022=0644,而新建目录的最终权限值为0777-0022=0755。例如新建文件test,新建目录T,通过ls命令可以看到生成的最终权限:

  1. #umask   
  2. 0022  
  3. # touch  test  
  4. # ls  -l  test  
  5. -rw-r--r-- 1 root root 0 07-26 09:06 test     //test的权限为rw-r--r--,即644  
  6. # mkdir  T  
  7. # ls  
  8.  T  test  
  9. # ls  -l  
  10. drwxr-xr-x 2 root root 4096 07-26 09:07 T     //T的权限为rwxr-xr-x,即755  
  11. -rw-r--r-- 1 root root    0 07-26 09:06 test 

可以使用umask命令重新设置权限掩码。例如将系统默认的权限掩码设为0002,则新建文件的最终权限为0666-0002=0664(即rw-rw-r--),新建目录的最终权限为0777-0002=0775(即rwxrwxr-x),如下所示:

  1. # umask  0002  
  2. # touch  test3  
  3. # ls  -l  test3  
  4. -rw-rw-r-- 1 root root 0 07-26 09:40 test3  
  5. # mkdir  new  
  6. # ls  -l  
  7. drwxrwxr-x 2 root root 4096 07-26 09:42 new  
  8. -rw-rw-r-- 1 root root    0 07-26 09:40 test3 

umask命令也可以通过表6.12的权限参数直接设置新建文件或目录的默认权限。例如将默认权限改为属主读、写、执行,同组用户读,其他用户读、执行,可以使用如下命令:

  1. # umask  u=rwx,g=r,o=rw   
  2. # umask  
  3. 0031  
  4. # touch  p  
  5. # ls  -l  p  
  6. -rw-r--rw- 1 root root 0 07-26 09:14 p    
  7. # mkdir  M  
  8. # ls  -l  
  9. drwxr--rw- 2 root root 4096 07-26 09:15 M  
  10. -rw-r--rw- 1 root root    0 07-26 09:14 p 

从本例可以看出,"umask u=rwx,g=r,o=rw"与"umask 0031"作用相同,但文件的执行权限不可由umask命令的"x"选项进行指定。

 

5.访问控制列表ACL

基于用户和用户组的权限机制奠定了Linux系统安全的基础,但在十几年的应用中也暴露出了一些不足,例如权限只能基于用户或用户组进行设定,无法为用户组中的个别用户设定不同的权限。为了增加文件或目录权限管理的灵活性,从Red Hat Enterprise Linux 3开始,访问控制列表(ACL)被引入到系统中。ACL可以根据需要对用户的权限进行定制,支持标准的Ext3文件系统、NTFS文件系统及Samba文件系统。

启动ACL之前首先应对需要进行访问控制的分区或目录进行挂载,具体语法可以参照mount命令,格式如下:

  1. mount  -o  acl  <device>  <mount point> 

例如在/myfile目录上挂载带有ACL支持的/dev/sda1分区,命令行如下:

  1. #mount  -o  acl  /dev/sda1  /myfile 

ACL在分区中成功启动后,可以使用setfacl命令来添加、修改或删除访问权限。setfacl常用选项格式及说明如表6.13所示。

表6.13  setfacl常用选项格式及说明

setfacl选项格式

    

[d[efault]:] [u[ser]:]uid [:perms]

设置用户的权限,4个字段分别

表示默认设置,用户名,用户ID和权限

[d[efault]:] g[roup]:gid [:perms]

设置用户组的权限,4个字段分

别表示默认设置,用户组名,

用户组ID和权限

[d[efault]:] m[ask][:] [:perms]

设置权限掩码,3个字段分别表

示默认设置,掩码和权限

[d[efault]:] o[ther][:] [:perms]

设置其他用户的权限,4个字段分

别表示默认设置,其他用户名,

其他用户名ID和权限 


可以使用"-m"参数来添加用户或用户组的权限。例如为用户teacher1和teacher2设置对/homework目录的读、写和执行权限,可以运行下面的命令:

 

  1. #setfacl  -m u:teacher1:rwx  /home/homework  
  2. #setfacl  -m u:teacher2:rwx  /home/homework 

为用户student1和student2设置对/homework目录的读、写权限,可以运行下面的命令:

  1. #setfacl  -m u:student1:rw   /home/homework  
  2. #setfacl  -m u: student2:rw  /home/homework 

再如为用户组director设置对/home/director目录的读权限,命令行如下:

  1. #setfacl  -m u: director:r  /home/director 

要对权限进行修改,与添加ACL相同,可以使用带"-m"选项的setfacl命令。例如修改上例中的director用户组的权限为读、写和执行,命令如下:

  1. #setfacl  -m u: director:rwx  /home/director 

可以使用"-x"参数来删除一个用户或用户组的权限。例如删除上例中director用户组的权限可以使用如下命令:

  1. #setfacl -x u: director  /home/director 

使用"-d"选项可以为一个文件或目录设置默认的ACL。例如对使用/home/ftp目录的用户组设定默认的权限为读、写入,命令如下:

  1. #setfacl-m d:g:rw /home/ftp 

注意:若为组中用户重新指定权限,则默认的组权限被覆盖,即具体指定的ACL权限优先于默认ACL权限。

 

6.权限的图形化管理

在Red Hat Enterprise Linux 5环境下,如果要使用X-Window修改一个文件或目录的权限,需首先打开Nautilus文件管理器。Nautilus文件管理器与Windows资源管理器类似,可以浏览系统的目录结构,可以查找、打开、移动、复制和删除文件或目录,还可以运行脚本程序。

(1)在Nautilus中找到需要修改权限的文件或目录,单击鼠标右键,在快捷菜单中选择【属性】选项,如图6.5所示。

(2)在打开的属性对话框中,可以设置文件或目录的图标、名称和打开方式等。选择【权限】标签,打开【权限】选项卡,如图6.6所示。可以在【权限】选项卡中对文件或目录的所有者、用户组的权限进行修改。

(3)单击【所有者】下拉菜单,会显示目前系统中的所有用户。重新选择一个用户即可更改该文件或目录的属主。同样单击【群组】下拉菜单,也可以更改文件或目录所属的用户组。如图6.7所示。

(4)在【权限】选项卡中单击【访问】下拉菜单,可以对所有者、用户组及其他用户的访问权限进行重新设定,所图6.8所示。

(5)单击【关闭】按钮,完成权限的设置。

在Red Hat Enterprise Linux 4的【权限】选项卡中还可以对特殊权限进行设定。由于特殊权限的设定很可能带来安全隐患,Red Hat Enterprise Linux 5已将该选项从【权限】选项卡中去掉。同时在图6.8中可以看到Red Hat Enterprise Linux 5中加入了SELinux来加强安全控制。

 
图6.5  在Nautilus文件管理器右键菜单中选择【属性】
 
图6.6  在属性窗口中选择【权限】选项卡
 
图6.7  修改文件或目录的所有者
 
图6.8  修改文件或目录的访问权限

 

 

 

 

分享到:
评论

相关推荐

    linux 权限设计练习及答案

    总结来说,Linux权限设计是一项关键的系统管理任务,它涉及到对用户权限的精细控制,以保证系统的安全性和功能性。理解并熟练掌握权限设置和管理,是每个Linux用户和管理员必备的技能。通过实践练习和查阅相关资料,...

    php 基于Linux权限登录

    一、Linux权限系统 Linux系统采用的是Unix-like的权限模型,每个文件和目录都有三个基本权限:读(r)、写(w)和执行(x)。这些权限分为用户(owner)、组(group)和其他人(others)三类。通过chmod命令,我们...

    linux权限之圈圈点点

    这是我在工作中自己总结的linux权限,希望对大家有些用处。

    LINUX 权限机制实例

    在Linux系统中,权限机制是其安全模型的核心组成部分。它允许系统管理员精细控制用户和组对文件和目录的访问权限,以确保数据的安全性和隐私。本实例将介绍如何利用Linux...这充分体现了Linux权限机制的强大和灵活性。

    Linux服务器配置与管理:linux权限管理命令.pptx

    本文将深入探讨Linux服务器配置与管理中的核心知识点——Linux权限管理命令,主要包括`chmod`和`chown`两个命令。 首先,我们来看`chmod`命令,用于修改文件或目录的权限。这个命令有两种基本格式,一种是以字母...

    08-Linux权限设置

    "Linux权限设置详解" Linux权限设置是Linux系统中的一项重要功能,用于控制用户对文件和目录的访问权限。在Linux系统中,文件和目录的权限是通过Access Control List(ACL)来实现的。ACL是一个表,记录着文件或...

    linux 权限

    linux 权限,只介绍了一般权限的介绍,没有特殊权限的介绍。

    linux权限维持.pdf

    Linux权限维持是信息安全领域内一个关键的话题,特别是在对Linux系统进行入侵测试或实际遭受攻击后,保持对系统的访问权限是一个常见需求。以下是关于Linux权限维持的详细介绍: 首先,Linux系统权限维持的方法通常...

    用ACL控制Linux权限.pdf

    "ACL控制Linux权限" Linux操作系统中的权限管理是非常重要的,但 Linux 中默 认 的 权 限 管 理 难 以 实 现 复 杂 的 权 限 控 制。特别是在使用 Samba 文件系统时,无法灵活地设置权限。本文将讨论如何使用 ACL...

    shell 运行原理和 Linux 权限详解.docx

    shell 运行原理和 Linux 权限详解 shell 命令以及运行原理 * Shell 是 Linux 的外壳程序,用户不能直接使用内核,而是通过 Shell 与内核沟通。 * Shell 的定义:命令行解释器(command Interpreter),将用户的...

    把握Linux权限.pdf

    本文档"把握Linux权限.pdf"主要探讨了如何理解和操作Linux中的文件权限。首先,我们通过`ls -l`命令查看文件的详细信息,例如文件类型、所有者、所属组和其他用户权限。 在Linux中,每个文件或目录都有三个级别的...

    恢复LINUX权限

    ### 恢复 Linux 权限 在 Linux 系统中,权限管理是确保系统安全性和数据完整性的关键因素之一。当系统权限因为某种原因被更改或破坏时,需要进行权限恢复来确保系统的正常运行。 #### 知识点 1:Linux 文件权限的...

    Linux服务器配置与管理:linux权限基础.pptx

    在这个主题中,我们将深入探讨Linux权限的基础,包括一般权限、特殊权限以及如何分析权限功能。 首先,我们关注一般权限,它们包括读取(r)、写入(w)和执行(x)。对于文件,这三个权限分别对应查看文件内容、...

    使用Go语言开发的Linux权限审计工具.zip

    本项目“使用Go语言开发的Linux权限审计工具”正体现了这种开发实践,通过Go语言来实现对Linux系统权限的监控和审计。下面将详细介绍这个工具的关键知识点。 首先,Go语言(又称Golang)是由Google开发的一种静态...

    linux权限学习的思路图

    学习linux权限

    LINUX文件权限理解

    ### Linux 文件权限理解 #### 一、用户与组群管理 在 Linux 系统中,用户的账号信息主要存储于 `/etc/passwd` 文件内,包括一般用户和超级用户(root)的相关信息。每个用户的密码信息则单独保存在 `/etc/shadow` ...

    linux 权限 c,Linux下获取root权限的c程序

    Linux下获取root权限的c程序 传递euid和egid给脚本,使脚本具有特殊用户的权限 使脚本实现类于设置了stick位的效果 shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/...

    J-Linux&Shell-W14Linux权限练习

    7. **Linux权限位**:一个文件的权限用9位字符表示,如rwxrwxr—。这些字符分为三组,每组3位,分别代表属主、属组和其他用户的读、写和执行权限。对于普通文件,执行权限通常无实际意义;而对于目录,执行权限允许...

Global site tag (gtag.js) - Google Analytics