第四章 文件权限

文件权限

1. 基本权限UGO

在Linux系统中,文件权限是一个关键的概念,它决定了对文件的访问权限。文件权限主要分为读(r)、写(w)、执行(x),这些权限分别适用于文件的所有者(u)、所属组(g)和其他用户(o)。

1.1. 文件权限表示

文件权限以一串字符的形式表示,共有九个字符,分为三组,每组三个字符。例如,rw-r--r--表示文件所有者有读写权限,所属组和其他用户有读权限。

  • r:读权限
  • w:写权限
  • x:执行权限
  • -:表示相应位置没有该权限

1.2. 改变文件权限

1.2.1 chmod命令

chmod命令用于更改文件或目录的权限。可以使用符号表示法和数字表示法设置权限。

  • 符号表示法: + 添加权限,- 删除权限,= 设置权限。

    # 示例:将文件设置为所有者可读写,所属组可读,其他用户没有权限
    chmod u=rw,go=r example.txt
    
  • 数字表示法: 每个权限有一个相应的数字值,读(4)、写(2)、执行(1)。可以通过将这些数字相加来表示权限。

    # 示例:将文件权限设置为rw-r-----
    chmod 644 example.txt
    

1.2.2 chown命令

chown命令用于更改文件或目录的所有者。语法如下:

# 示例:将文件所有者更改为newowner
chown newowner example.txt

1.2.3 chgrp命令

chgrp命令用于更改文件或目录的所属组。语法如下:

# 示例:将文件所属组更改为newgroup
chgrp newgroup file

1.3. 同时给所有对象修改权限

如果要同时修改文件的所有者、所属组和其他用户的权限,可以使用如下语法:

# 示例:同时给予所有者读写权限,所属组和其他用户读权限
chmod a=rw file

1.4. 同时删除权限

使用-号可以删除指定权限。例如,如果要删除文件所有者的写权限,可以执行以下命令:

# 示例:删除文件所有者的写权限
chmod u-w file

1.5. 递归参数 -R

递归参数-R用于将权限修改操作应用于目录及其内容。

1.5.1 递归修改权限

# 示例:递归地给予目录及其内容所有者读写权限,所属组和其他用户读权限
chmod -R u=rw,go=r direction

1.5.2 递归修改所有者和所属组

# 示例:递归地将目录及其内容的所有者和所属组都更改为newowner和newgroup
chown -R newowner:newgroup direction

1.5.3 递归修改所属组

# 示例:递归地将目录及其内容的所属组更改为newgroup
chgrp -R newgroup direction

1.6 UGO权限设置案例

在Linux系统中,文件和目录的权限分为读(r)、写(w)、执行(x)三种,这些权限分别适用于文件的所有者(u)、所属组(g)和其他用户(o)。以下是通过案例说明r、w、x对文件和目录的影响以及文件与目录的区别。

1.6.1 文件权限设置案例

文件权限说明
  • r(读权限):允许查看文件内容。
  • w(写权限):允许修改文件内容。
  • x(执行权限):对文件而言,允许执行文件。
案例1:只读文件
chmod u=r,go= 文件名

此时,只有文件所有者具有读权限,其他用户没有任何权限。其他用户尝试读取文件将失败。

案例2:可写文件
chmod u=rw,go= 文件名

此时,文件所有者具有读写权限,其他用户没有任何权限。其他用户尝试修改文件将失败。

案例3:可执行文件
chmod u=r,go=x 文件名

此时,文件所有者具有读权限,其他用户具有执行权限,但不能读取或修改文件内容。

1.6.2目录权限设置案例

目录权限说明

对于目录而言,r 表示允许列出目录内容,w 表示允许在目录中创建或删除文件,x 表示允许进入目录。

案例4:只读目录
chmod u=r,go= 目录名

此时,目录所有者可以列出目录内容,但不能在其中创建或删除文件,其他用户没有任何权限。

案例5:可写目录
chmod u=rw,go= 目录名

此时,目录所有者可以列出目录内容、在其中创建或删除文件,其他用户没有任何权限。

案例6:可进入目录
chmod u=,go=x 目录名

此时,目录所有者不能列出目录内容、创建或删除文件,但可以进入目录,其他用户具有进入目录的权限。

1.6.3 文件与目录的区别

  • 文件: 用于存储数据或执行代码的容器。
  • 目录: 用于组织和存储文件的容器。

文件和目录之间的主要区别在于它们的用途和如何使用权限。文件权限控制对文件的读取、写入和执行操作,而目录权限控制对目录的查看、创建、删除和进入操作。

2. 基本权限ACL

UGO权限只针对一个用户、一个组与其他用户,使用上有局限性,ACL主要提供传统的UGO的r、w、x权限之外的具体权限设置,可以对单一用户、单一文件或目录进行权限设置

2.1 ACL的基本用法

2.1.1 查看ACL信息

ACL(Access Control List)是一种用于文件和目录的附加权限机制。getfacl命令用于查看文件或目录的ACL信息。它显示用户(user)和组(group)的具体权限信息。

getfacl filename

2.1.2 添加ACL权限

setfacl命令用于添加ACL权限。以下是添加用户和组权限的示例:

# 添加用户权限
setfacl -m u:username:permissions filename

# 添加组权限
setfacl -m g:groupname:permissions filename

其中,username是用户的名称,groupname是组的名称,而permissions表示权限,如r(读取)、w(写入)和x(执行)等。

2.1.3 删除ACL权限

使用setfacl命令可以删除指定用户或组的ACL权限:

# 删除用户权限
setfacl -x u:username filename

# 删除组权限
setfacl -x g:groupname filename

2.1.4 默认ACL权限

默认ACL权限用于确保新创建的文件和目录继承相应的ACL权限。以下是设置默认用户和组ACL权限的示例:

# 设置默认用户ACL权限
setfacl -m d:u:username:permissions dirname

# 设置默认组ACL权限
setfacl -m d:g:groupname:permissions dirname

2.2 ACL的高级特性

2.2.1 ACL继承

ACL权限可以继承到新创建的子目录和文件。使用-R选项表示递归设置ACL权限。

# 启用子目录和文件的ACL继承
setfacl -R -m d:u:username:permissions dirname

2.2.2 默认ACL权限

设置默认ACL权限以确保新创建的文件和目录继承ACL权限。

# 设置默认用户ACL权限
setfacl -m d:u:username:permissions dirname

# 设置默认组ACL权限
setfacl -m d:g:groupname:permissions dirname

2.2.3 ACL限定

ACL权限可以使用限定符进行更精细的控制。以下是添加限定符ACL权限的示例:

# 添加限定符的ACL权限
setfacl -m u::permissions filename

在这里,u::表示应用给文件拥有者。

3. Linux系统文件权限的高级权限管理

3.1. SUID权限

SUID(Set User ID)是一种文件权限机制,允许一个执行文件在执行过程中暂时获得文件所有者的权限。这对于某些需要特殊权限执行的程序非常有用。

  • 设置SUID权限: 使用chmod命令设置SUID权限。

    # 设置SUID权限
    chmod u+s filename
    

3.2. SGID权限

SGID(Set Group ID)是一种文件权限机制,允许一个执行文件在执行过程中暂时获得文件所属组的权限。通常用于确保多用户能够协同工作,同时具有对特定文件的写入权限。

  • 设置SGID权限: 使用chmod命令设置SGID权限。

    # 设置SGID权限
    chmod g+s dirname
    

3.3. Sticky权限

Sticky权限是一种目录权限机制,防止非目录所有者删除其他用户创建的文件。通常用于一些公共目录,例如/tmp,确保用户只能删除自己的文件。

  • 设置Sticky权限: 使用chmod命令设置Sticky权限。

    # 设置Sticky权限
    chmod +t dirname
    

4.Linux系统文件权限的进程掩码(umask)

4.1. 进程掩码概述

进程掩码,通常称为umask,是一个用于限制新创建文件权限的值。它作为一个权限掩码,用来屏蔽掉权限中的特定位,确保新创建的文件或目录不会赋予过于宽松的权限。

4.2. umask的作用

umask的主要作用是确定文件和目录的默认权限。系统中的每个用户和进程都有一个umask值,它与创建文件时所用的权限进行按位与运算,从而确定最终的实际权限。

  • umask的设置: umask值通过三位八进制数来表示,分别对应文件所有者、组和其他用户的权限位。例如,umask值为022表示新创建的文件默认会去掉组和其他用户的写权限。

    # 设置umask值
    umask 022
    

4.3. 修改umask值

  • 永久修改: 修改用户的shell配置文件(如~/.bashrc~/.bash_profile)。

    # 在配置文件中设置umask值
    umask 022
    
  • 临时修改: 直接在命令行中设置umask值。

    # 临时设置umask值
    umask 022
    

umask值的设置使得系统管理员可以对文件和目录的默认权限进行更精细的控制,确保系统的安全性和一致性。

posted @   iiiiicxegg  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示