chmod命令学习2

2024-08-26 06:20
文章标签 学习 命令 chmod

本文主要是介绍chmod命令学习2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

递归地修改权限

chmod -R
很多Linux命令可以递归地应用于文件和目录,chmod命令也不例外。使用-R(或–recursive)选项能够在短时间内修改数百个文件系统对象的权限。

$ pwd
/home/scott/pictures/libby$ ls -lF
drwxrw---- 2 scott scott ... by_pool/
-rw-r--r-- 1 scott scott ... libby_arrowrock.jpg
-rw-r--r-- 1 scott scott ... libby.jpg
drwxrw---- 2 scott scott ... on_floor/
$ ls -l *
-rw-r--r-- 1 scott scott ... libby_arrowrock.jpg
-rw-r--r-- 1 scott scott ... libby.jpgby_pool:
-rw-r--r-- 1 scott scott ... libby_by_pool_02.jpg
-rwxr-xr-x 2 scott scott ... lieberman_pool.jpgon_floor:
-rw-r--r-- 1 scott scott ... libby_on_floor_01.jpg
-rw-r--r-- 1 scott scott ... libby_on_floor_02.jpg
$ chgrp -R family *
$ chmod -R 660 *
chmod: 'by_pool': Permission denied
chmod: 'on_floor': Permission denied

如果文件是可执行的,那么它就可以作为程序来运行;但目录也必须是可执行的,才能允许用户访问其内部,读取它的文件和子目录。上面运行的chmod -R 660 *命令删除了所有内容(包括文件和目录)的x权限。当chmod命令报告它已经完成执行时,因为它不能读取目录中的内容(这些目录不再是可执行的),所以不能成功完成操作。
可以使用通配符来运行chmod命令,让它只修改特定类型的文件,如下所示:

$ chmod -R 660 *.jpg

这个命令修改的只是图像,而不是目录,所以不会有任何问题。但是如果文件类型不止一种,这样的操作不得不为每种文件都运行一次chmod命令。
如果子目录里面还有很多子目录,或者需要处理的文件太多,使用find命令会更好。用find命令先找出所有文件(不是目录),然后再修改它们的权限。
需要特别注意的是,当递归地修改权限时,一定要小心。或许你得到的结果并不是自己原来想要的,偶尔还会造成无法访问某些文件或子目录。

设置和清除suid

chmod u[±]s
主要介绍的是r、w和x。suid,它只适用于可执行文件,不能用于目录。
在设置suid以后,用户就可以使用拥有者的权限执行这个文件了,就好像是程序的拥有者在运行它一样。使用suid的一个常见例子是passwd命令的权限设置,这个命令可以让用户设置和修改他们的密码。

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ... /usr/bin/passwd

可以看到passwd设置了suid权限,因为在用户的x权限位置,现在有一个s权限。passwd的拥有者是root用户,但是有必要让普通用户也能运行这个命令,否则他们就不能修改自己的密码。为了让所有人都能执行passwd命令,需要为用户、组及系统的其他用户都设置x权限。将passwd设成suid root,这样所有人都能以root用户的权限运行这个命令。
说明:或许你已经看到用s或S都可以表示设置了suid。在设置suid之前,如果拥有者已经具有执行权限(x),就会看到s;而S则表示在设置suid之前,拥有者没有执行的权限。最终的结果是一样的,但是字母的大小写能够告诉你最初的情形是什么样的。
有两种办法可以用于设置和取消suid,即字母表示法和数字表示法。字母表示法如下所示:

$ pwd
/home/scott/bin
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
$ chmod u+s backup_data
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data

现在admins组的任何成员都能够运行backup_data脚本,好像他们就是用户scott一样。但是要注意,任何非admins组的成员都不能运行这个程序,因为他们只有程序的读权限。如果有必要让系统中的每个用户都能够作为scott来运行backup_data脚本,那么就应该把权限设置成-rwsr-xr-x。
使用u-来代替u+即可删除suid。

$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
$ chmod u-s backup_data
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data

使用八进制权限表示法设置suid要更复杂些,这是因为它在原来使用的数字权限表示法中引入了新的一位数字。回想一下,数字权限表示法使用了3个数字,第一个数字表示拥有者的权限,第二个表示组用户的权限,第三个则表示其他人的权限。其实在拥有者数字的左边还有第四个数字。只不过在绝大多数情况下,这个数字为0,所以没有必要显示或使用它。换句话说,chmod 644 libby.jpg和chmod 0644 libby.jpg是完全相同的。只有在修改suid(或sgid、sticky bit)时,才需要第四位数字。
要将suid的数字设置为4,可以按如下所示的方法来修改backup_data:

$ pwd
/home/scott/bin
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
$ chmod 4754 backup_data
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data

要删除suid,只要将这一位数字设置为0,就能将权限设置回默认状态,不设置suid权限。

$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
$ chmod 0754 backup_data
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data

说明:作为普通用户,一般很少需要将程序的权限修改为suid。它的使用通常都与root用户拥有的程序有关,但是对此有所了解仍然是件好事情,以备在偶尔需要时能派上用场。

这篇关于chmod命令学习2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107793

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.