文章目录

  • 1. 命令格式
  • 2. 基本用法
    • 2.1 符号模式
    • 2.2 八进制数字模式
  • 3. 高级用法
    • 3.1 递归操作
    • 3.2 参考权限
    • 3.3 特殊权限位(Setuid, Setgid, Sticky Bit)
    • 3.4 X 特殊执行权限
  • 4. 注意事项
    • 4.1权限与所有权
    • 4.2 Root 权限
    • 4.3 安全风险
    • 4.4 -R 的风险
    • 4.5 目录的执行权限

1. 命令格式

chmod 命令的完整格式如下:

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
  • [OPTION]: 可选的操作选项
  • MODE: 权限模式,通常由 [ugoa...][[+-=][perms...]...] 部分组成
    • ugoa: 指定权限作用的对象
      • u: 文件所有者 (user)
      • g: 文件所属组 (group)
      • o: 其他用户 (others)
      • a: 所有用户 (all),是默认值
    • +-=: 指定操作动作
      • +: 添加权限
      • -: 移除权限
      • =: 设置权限为精确值
    • perms: 具体的权限
      • r: 读 (read)
      • w: 写 (write)
      • x: 执行 (execute)
      • X: “特殊”的执行权限(后面详解)
      • s: 设置用户ID (setuid) 或 设置组ID (setgid)
      • t: 粘滞位 (sticky bit)
  • OCTAL-MODE: 八进制数字模式
    • 由 4 位或 3 位数字组成(如 755, 644, 4755)
  • --reference=RFILE: 参考另一个文件 RFILE 的权限来设置当前文件
  • FILE: 要操作的一个或多个目标文件或目录

2. 基本用法

基本用法主要通过 符号模式 和 八进制数字模式 来修改文件权限。

2.1 符号模式

# 为所有用户添加执行权限
chmod a+x script.sh
# 或省略 'a',因为默认就是 all
chmod +x script.sh# 移除所属组和其他用户的写权限
chmod go-w document.txt# 为文件所有者设置精确的读写执行权限,并清除组和其他用户的所有权限
chmod u=rwx,go= myfile
# 执行后权限为:-rwx------

2.2 八进制数字模式

这是一种最常用且最精确的方式。三位数字分别代表 所有者(u)所属组(g)其他用户(o) 的权限。

数字权限含义
4r–
2-w-
5r-x (4+1)读和执行
6rw- (4+2)读和写
7rwx (4+2+1)读写和执行
  • 示例:
chmod 755 my_script.sh
# 结果:-rwxr-xr-x
# 所有者:读、写、执行 (7)
# 组:读、执行 (5)
# 其他用户:读、执行 (5)chmod 600 secret.txt
# 结果:-rw-------
# 所有者:读、写 (6)
# 组:无权限 (0)
# 其他用户:无权限 (0)

3. 高级用法

3.1 递归操作

使用 -R 选项可以递归地修改目录及其内部所有文件和子目录的权限。

chmod -R 755 /var/www/mywebsite/
# 目录:rwxr-xr-x
# 文件:rwxr-xr-x (注意:这会让所有文件都可执行,可能不安全)

3.2 参考权限

不需要记住复杂的八进制数,直接复制另一个文件的权限。

# 让 file2 的权限和 file1 一模一样
chmod --reference=file1 file2

3.3 特殊权限位(Setuid, Setgid, Sticky Bit)

这些权限用于特殊功能,请谨慎使用

  • Setuid (s 在用户执行位): 以文件所有者的身份运行程序,而不是执行者。
    • 八进制表示:在三位数前加 4 (如 4755)
    • 案例passwd 命令就需要 setuid 来修改 /etc/shadow 文件:
chmod u+s /usr/bin/passwd
# 或
chmod 4755 /usr/bin/passwd
# 结果:-rwsr-xr-x (其中的 's')
  • Setgid (s 在组执行位):
    • 对文件:以文件所属组的身份运行程序。
    • 对目录:在该目录下创建的任何新文件或子目录,其所属组都将继承此目录的所属组,而不是创建者的主要组。这对于团队协作共享目录极其重要。
    • 八进制表示:在三位数前加 2 (如 2770)
    • 案例:设置一个共享目录:
chmod g+s /path/to/shared_directory
# 或
chmod 2770 /path/to/shared_directory
# 结果:drwxrws--- (其中的 's')
  • Sticky Bit (t 在其他用户执行位):它保证只有文件的所有者或 root 才能删除或重命名该目录下的文件。
    • 八进制表示:在三位数前加 1 (如 1777)
    • 案例:查看 /tmp 目录的权限
ls -ld /tmp
# 输出:drwxrwxrwt ... /tmp (其中的 't')
# 设置一个目录的粘滞位:
chmod o+t /tmp/mydir
# 或
chmod 1777 /tmp/mydir

3.4 X 特殊执行权限

它是一个智能的 x。当使用 X 而不是 x 时,权限只会被应用到:

  • 目录(目录天然需要 x 权限才能进入)
  • 那些已经至少拥有一个执行权限的文件(即它本身已经是可执行文件或脚本)

这在递归操作中非常有用。

  • 案例:递归地为目录添加执行权限,并只为已经是可执行的文件添加执行权限:
chmod -R a+rX myproject/
# 这条命令会:
# 1. 为所有用户(ugo/a)添加读(r)权限。
# 2. 为所有目录添加执行(X)权限(因为目录是“可执行”的)。
# 3. 只为那些原本就有x权限的文件添加执行(X)权限,不会让普通文本文件变成可执行文件。

4. 注意事项

4.1权限与所有权

chmod 改变的是权限,而 chownchgrp 改变的是所有者和所属组。不要混淆。

4.2 Root 权限

修改你不拥有的文件(非 root 用户创建的文件)的权限通常需要 sudo

4.3 安全风险

  • 切勿随意将文件设置为 777。这意味着任何用户都可以修改或执行它,是巨大的安全漏洞
  • 谨慎使用 setuid/setgid 权限,特别是放在 root 拥有的文件上时,这可能成为提权漏洞。

4.4 -R 的风险

递归修改权限是一把双刃剑。一个错误的递归命令(如 chmod -R 777 /)会彻底破坏你的系统。在执行递归操作前,务必双重检查路径。

4.5 目录的执行权限

目录的 x(执行)权限意味着 “可进入” 。没有 x 权限,即使有 r(读)权限,也无法用 ls 列出其内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97759.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97759.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97759.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医院预约挂号脚本

医院预约挂号脚本 功能介绍 本脚本是一个用 Python 编写的医院预约挂号程序,支持以下功能: 自动预约:通过api交互选择医院、科室、医生和时间段。自动监控:持续检查指定医生的号源状态,发现可预约时段时自动尝试预约。…

.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)

在使用MudTools.OfficeInterop.Word库进行Word文档自动化处理时,深入理解Word对象模型的核心组件是至关重要的。Word对象模型提供了一套层次化的结构,使开发者能够通过编程方式控制Word应用程序、文档以及文档内容。本章将详细介绍Word对象模型中最核心的…

Kotlin在医疗大健康域的应用实例探究与编程剖析(上)

一、引言 1.1 研究背景与意义 在当今数字化时代,医疗行业正经历着深刻的变革。随着信息技术的飞速发展,尤其是人工智能、大数据、物联网等新兴技术的广泛应用,医疗行业数字化转型已成为必然趋势。这种转型旨在提升医疗服务的效率和质量,优化医疗资源配置,为患者提供更加…

AI智能体的应用前景

AI智能体的应用前景正从技术探索迈向规模化落地的关键阶段,其发展动力源于大模型能力的突破、行业需求的深化以及商业化模式的创新。以下是基于最新技术动态和行业实践的深度解析: 一、技术突破:从「有脑无手」到「知行合一」 大模型的进化显著提升了智能体的多模态交互与…

高系分四:网络分布式

目录一、我的导图和思考二、大模型对我导图的评价优点可优化之处三、大模型对这章节的建议一、网络知识范畴(一)网络基础理论(二)局域网与广域网(三)网络安全(四)网络性能优化&#…

Day24_【深度学习(1)—概念】

一、AI、ML、DL基本关系 机器学习是实现人工智能的途径,深度学习是机器学习的一种方法。人工智能 (AI)↓ 机器学习 (ML) —— 让机器从数据中学习规律↓ 深度学习 (DL) —— 使用深层神经网络的机器学习方法二、深度学习与机器学习概念深度学习(Deep Lea…

VTK基础(01):VTK中的基本概念

VTK中的基本概念 1.三维场景中的基本要素 三维场景的基本要素包含:灯光、相机、颜色和纹理映射 (1)灯光vtkLight 光的本质是特定频段的电磁波,所以灯光的本质是特定频段(可见光频段)的电磁波发射器;依据发射可见光频段…

LeetCode 2348.全0子数组的数目

给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。 子数组 是一个数组中一段连续非空元素组成的序列。 示例 1: 输入:nums [1,3,0,0,2,0,0,4] 输出:6 解释: 子数组 [0] 出现了 4 次。 子数组 [0,0] 出现了 2 次。…

【wpf】从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路

从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路 最近我在做一个 WPF 项目,需要封装一个 ImageView 控件,用来显示图像并处理鼠标交互。 在实际开发中,我遇到了一系列和 数据绑定 有关的问题: 控件需要…

人力资源管理的思维方式学习笔记2

战略人力资源管理的思维方式——北京师范大学政府管理学院——王建民 教授3.1.理念:人力资源是第一战略资源 我们先来了解海尔集团公司实施发展战略的情况。海尔集团创立于1984年,根据官方网站的介绍,目前是一家全球领先的美好生活解决方案服…

汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一

一、什么是网络安全? 在智能网联和自动驾驶技术进入汽车行业之前,功能安全 一直是汽车开发的核心。 简单来说,功能安全的目标是确保车辆的系统在出现故障时,不会对人、环境或者设备造成危害。比如,刹车失灵了&#xff…

力扣(LeetCode) ——217. 存在重复元素(C++)

题目:217. 存在重复元素 示例1: 输入: nums [1,2,3,1] 输出: true 解释: 元素 1 在下标 0 和 3 出现。 示例2: 输入: nums [1,2,3,4] 输出: false 解释: 所有元素都…

Redis 高可用与集群原理

Redis 高可用与集群原理1. 前言 Redis 单机虽然高性能,但一旦节点宕机,数据丢失或服务不可用问题会非常严重。为了解决这一问题,Redis 提供了 主从复制、哨兵(Sentinel)、Cluster 集群 等高可用机制。 这一篇文章我们重…

Oracle OCP认证考试题目详解082系列第31题

考察知识点:SET VERIFY ON命令 英文题目 Which two statements are true about the SET VERIFY ON command? A.It displays values for variables prefixed with && B.It displays values for variables created by the DEFINE command C.It can be used in SQL Dev…

【WebSocket✨】入门之旅(五):WebSocket 的安全性

本篇文章将讲解 WebSocket 的安全性,特别是如何防止常见的 WebSocket 安全漏洞,如中间人攻击(MITM)、XSS、CSRF 等。我们将介绍如何使用 wss:// 协议保障数据传输的安全,并给出一些安全最佳实践,帮助你在使…

流程图用什么工具做?免费/付费工具对比,附在线制作与下载教程

在日常工作和学习中,流程图是一种高效的可视化工具——项目开发时梳理需求逻辑、业务推进中拆解步骤节点、学术研究里呈现论证框架,甚至是生活中规划旅行路线,都能借助流程图让复杂信息变得清晰易懂。但面对市面上五花八门的流程图工具&#…

Oracle重做日志(Redo Log):数据一致性的“守护者“

在Oracle数据库的三大核心文件中,数据文件承载着最终的业务数据,控制文件记录着数据库的"身份档案",而重做日志(Redo Log)则扮演着"事务日记"的关键角色——它以不可篡改的方式记录每一次数据变更…

C++学习:map/set源码剖析+利用红黑树封装map/set

前面我们已经学习了红黑树这个高级数据结构的实现。我们知道STL的map/set的底层数据结构为红黑树,本期就查看STL源码的map/set,并结合着这之前的红黑树的实现,模拟实现map和set的一部分功能 STL源码:楼田莉子/CPP代码学习 作者的个…

【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录:每一次抉择,都是将未来的自己轻轻推向某个方向 ★★★ 本文前置知识: 红黑树 原理 那么在上一期博客中&#xf…

JVM默认栈大小

JVM 里线程栈的大小不是一个固定值,而是由 操作系统平台、JVM 实现版本、以及启动参数 共同决定的。 常见情况(以 HotSpot 为例): Linux / macOS 64 位 JVM 默认大约是 1M (1024 KB)32 位 JVM 默认大约是 3…