当前位置: 首页 > news >正文

Linux 基础命令-文件权限与所有权

1. 文件权限概述

在Linux中,每个文件和目录都有与之关联的权限和所有权,来控制谁可以访问、修改或执行文件。文件权限与所有权可以防止未经授权的用户对文件进行访问或修改。

1.1 文件权限的组成

每个文件在Linux系统中都有三种类型的权限:

  • 读取权限(read, r):允许查看文件内容或列出目录内容。
  • 写入权限(write, w):允许修改文件内容或在目录中创建、删除文件。
  • 执行权限(execute, x):允许执行文件或进入目录。

文件的权限分为三组:

  1. 文件所有者(owner):文件的创建者,拥有对文件的完全控制。
  2. 同组用户(group):文件所属的用户组中的所有用户。
  3. 其他用户(others):系统中的其他所有用户。

1.2 文件权限的表示方式

文件权限可以通过两种方式表示:

  • 符号模式:用字母rwx分别表示读、写和执行权限,文件权限用三个三位组的符号表示,如rwxr-xr--。其中:

    • rwx:代表所有者的权限。
    • r-x:代表同组用户的权限。
    • r--:代表其他用户的权限。
  • 数字模式:用八进制数字表示文件权限,每种权限对应的数字如下:

    • r = 4
    • w = 2
    • x = 1
    • - = 0

    文件权限以三组数字来表示,如755,其中:

    • 7 = 4 + 2 + 1,即rwx(所有者权限)。
    • 5 = 4 + 1,即r-x(同组用户权限)。
    • 5 = 4 + 1,即r-x(其他用户权限)。

2. 查看文件权限与所有权

2.1 使用 ls -l 命令

ls -l 命令可以详细显示文件或目录的权限、所有权及其他信息。

$ ls -l

输出示例:

-rw-r--r--  1 user  group  4096 Sep  9 12:00 file.txt

解释:

  • -rw-r--r--:文件的权限。第一位表示文件类型(-表示文件,d表示目录)。接下来的九位分为三组,每组表示所有者、同组用户和其他用户的权限。
  • 1:硬链接数。
  • user:文件的所有者。
  • group:文件所属的用户组。
  • 4096:文件大小(以字节为单位)。
  • Sep 9 12:00:文件的修改时间。
  • file.txt:文件名。

2.2 使用 stat 命令

stat 命令提供了更详细的文件状态信息,包括权限、所有者、文件大小等。

$ stat file.txt

输出示例:

  File: ‘file.txt’Size: 4096       Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d Inode: 123456      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ user)   Gid: ( 1000/ group)
Access: 2023-09-09 12:00:00.000000000 +0000
Modify: 2023-09-09 12:00:00.000000000 +0000
Change: 2023-09-09 12:00:00.000000000 +0000Birth: -

3. 修改文件权限

3.1 使用 chmod 命令

chmod(change mode)命令用于更改文件或目录的权限。可以使用符号模式或数字模式来修改权限。

3.1.1 使用符号模式修改权限

符号模式允许更灵活地修改文件权限,使用u(用户)、g(组)、o(其他用户)和a(所有人)进行操作。

  • +:添加权限。
  • -:移除权限。
  • =:设置为指定权限。

示例:

  • 给文件所有者添加执行权限:
$ chmod u+x file.txt
  • 移除同组用户的写权限:
$ chmod g-w file.txt
  • 给所有人设置读权限:
$ chmod a+r file.txt
3.1.2 使用数字模式修改权限

数字模式更直观,直接设置文件权限的八进制表示。

示例:

  • 将文件的权限设置为755(所有者rwx,组用户r-x,其他用户r-x):
$ chmod 755 file.txt
  • 将文件的权限设置为644(所有者rw-,组用户r--,其他用户r--):
$ chmod 644 file.txt

3.2 修改目录权限

chmod命令同样适用于目录。注意,给目录添加执行权限表示用户可以进入该目录。

  • 递归修改目录及其子文件的权限:
$ chmod -R 755 /path/to/directory

4. 修改文件所有权

4.1 使用 chown 命令

chown(change owner)命令用于更改文件或目录的所有者和所属组。

4.1.1 修改文件所有者

示例:

  • 将文件的所有者修改为newuser
$ chown newuser file.txt
4.1.2 修改文件所属组

使用冒号(:)来指定用户组。

  • 将文件的所属组修改为newgroup
$ chown :newgroup file.txt
4.1.3 同时修改文件所有者和所属组
  • 将文件的所有者修改为newuser,并将所属组修改为newgroup
$ chown newuser:newgroup file.txt

4.2 使用 chgrp 命令

chgrp(change group)命令专门用于修改文件或目录的所属组。

  • 修改文件的所属组为newgroup
$ chgrp newgroup file.txt

4.3 递归修改目录的所有权

  • 使用-R选项递归修改目录及其子目录和文件的所有者和所属组:
$ chown -R newuser:newgroup /path/to/directory

5. 特殊权限

Linux文件系统还支持一些特殊的权限设置,如SUIDSGID和粘滞位(Sticky Bit)。这些权限主要用于特殊的场景,如共享文件夹或需要临时提高权限的程序。

5.1 SUID(Set User ID)

SUID是文件的特殊权限,当设置了SUID位的文件被执行时,该文件将以文件所有者的身份运行,而不是以执行者的身份运行。

  • 设置SUID权限:
$ chmod u+s file.txt

5.2 SGID(Set Group ID)

SGID是目录的特殊权限,当目录设置了SGID位时,所有在该目录下创建的文件将继承该目录的用户组,而不是创建者的默认组。

  • 设置SGID权限:
$ chmod g+s /path/to/directory

5.3 粘滞位(Sticky Bit)

粘滞位通常用于共享目录。当目录设置了粘滞位后,只有文件的所有者或root用户才能删除该目录中的文件,即使其他用户对目录有写权限。

  • 设置粘滞位:
$ chmod +t /path/to/directory
  • 查看粘滞位:当粘滞位生效时,目录权限的最后一位显示为t
drwxrwxrwt 2 root root 4096 Sep 9 12:00 /tmp

6. 文件权限管理示例

下面是几个常见场景的权限管理示例:

6.1 共享文件夹

权限设置

假设我们有一个共享文件夹/shared,所有用户都可以写入文件,但不能删除其他用户的文件。

  1. 创建共享文件夹:
$ mkdir /shared
  1. 设置目录权限为777,允许所有用户读、写和执行(进入)该目录:
$ chmod 777 /shared
  1. 设置粘滞位,防止用户删除其他用户的文件:
$ chmod +t /shared

6.2 限制文件访问权限

假设有一个敏感文件secret.txt,只有文件所有者能读取和修改该文件,其他用户不能访问。

  1. 创建文件:
$ touch secret.txt
  1. 设置权限为600,只有文件所有者有读写权限:
$ chmod 600 secret.txt

7. 总结

Linux文件权限和所有权机制是保障系统安全的关键部分。通过使用chmodchownls -l等命令,用户可以灵活地管理文件的读写执行权限及所有权。

http://www.lryc.cn/news/435546.html

相关文章:

  • 气压测试实验(用IIC)
  • C++ lambda闭包消除类成员变量
  • 等待唤醒机制和阻塞队列
  • IO多路复用是如何处理多个客户端同时访问一个数据的
  • QT中使用UTF-8编码
  • 我对 monorepo 的一些思考
  • Java学习Day41:骑龙救!(springMVC)
  • Redis 常用命令总结
  • Mysql SqlServer 分页
  • 电子支付原理
  • 什么是OAuth 2.0?OAuth 2.0的工作流程是什么?与OAuth 1.0有哪些区别?
  • Unity+LeapMotion2的使用
  • 【CanMV K230 AI视觉】 跌倒检测
  • 谈谈PCIe VID、DID、SSID、SSVID背后的智慧
  • 9月11日
  • 昇腾310内存拷贝测试
  • ‘$store‘ is not defined.
  • 如何利用Linux提升工作效率和安全性?
  • 初始Linux 和 各种常见指令
  • 【稀疏矩阵】使用torch.sparse模块
  • 如何增加谷歌网站曝光率?
  • 虚幻中的c++(持续更新)
  • 83-MySQL 索引有几种
  • 文献解读-The trans-omics landscape of COVID-19
  • Unity核心实践小项目
  • Avaloia 实现国产麒麟系统中文显示界面
  • pytest 生成allure测试报告
  • 查询GPU版本以及PyTorch中使用单GPU和多GPU
  • 基于SpringBoot+Vue的线上考试系统
  • 动手学深度学习(pytorch土堆)-02TensorBoard的使用