Linux 笔记 - 特殊权限
一、前言
Linux 中使用权限的时候,一般都是使用 3 位数,比如,777、755、666、644 等,其实在最前面还有一位,那就是特殊权限,也就是 set uid、set gid 和 sticky bit。
二、特殊权限
setuid:设置使文件在执行阶段具有文件所有者的权限。代表字母 s,代表数字 4,即 SUID 为 4。典型的文件是 /usr/bin/passwd,如果一般用户执行该 /usr/bin/passwd 文件,则在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码。
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd
作为普通用户如果修改自己的口令,通过修改 /etc/passwd 肯定是不可完成的任务,但是不是可以通过一个命令来修改呢?答案是肯定的,作为普通用户可以通过 passwd 来修改自己的口令这归功于 passwd 命令的权限我们来看一下;
[root@localhost ~]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd
因为 /usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成 root,间接的修改 /etc/passwd,以达到修改自己口令的权限。
setgid:该权限只对目录有效,目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。代表字母 s,代表数字 2,即 SGID 为 2。
sticky bit:该位可以理解为防删除位,也有人称其为粘滞位。代表字母 t,代表数字 1,即 SBIT 为 1。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用sticky bit位,设置该位后,就算用户对目录具有写权限,也不能删除该文件,常见的用于 /tmp 目录。stciky bit 一般只用在目录上,用在文件上起不到什么作用。
如果某个目录设置了sticky bit(是在 others 用户的权限上设置的,设置后可执行位从 x 变成了 t),那么用户在该目录下可以创建文件(当然前提是用户具有写权限和可执行权限,如果具有可执行权限,设置 sticky bit 后是 t;如果没有可执行权限的话,设置 sticky bit 后是 T),而且可以删除自己创建的文件,但是,不能删除其他用户创建的文件,这样就起到了一种保护作用了。
下面说一下如何操作这些标志:
操作这些标志与操作文件权限的命令是一样的, 都是 chmod。有两种方法来操作:
1) chmod u+s tmps -- 为 tmps 文件加上 setuid 标志。( setuid 只对文件有效)
chmod g+s tmp -- 为 tmp 目录加上 setgid 标志 ( setgid 只对目录有效)
chmod o+t tmp -- 为 tmp 目录加上 sticky 标志 ( sticky 一般只用于目录)
2) 采用八进制方式。对一般文件通过三组八进制数字来置标志, 如 666、777、644等。 如果设置这些特殊标志,则在这组数字之外再加一组八进制数字, 如 4666、 2777等。 这一组八进制数字三位的意义如下:
abc
a - setuid 位,如果该位为1,则表示设置 setuid --- 4
b - setgid 位, 如果该位为1,则表示设置 setgid --- 2
c - sticky 位,如果该位为1,则表示设置 sticky --- 1
设置完这些标志后,可以用 ls -l 来查看。如果有这些标志,则会在原来的执行标志位置上显示。如:
rwsrw-r-- 表示有 setuid 标志
rwxrwsrw- 表示有 setgid 标志
rwxrw-rwt 表示有 sticky 标志
那么原来的执行标志x到哪里去了呢?系统是这样规定的,如果本来在该位上有x,则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)。
如果希望查找系统中所有具有特殊权限的文件,则:
find / -perm +7000
三、总结
Linux 目录读权限、执行权限和写权限分析
当用户对某个目录只有读权限时,那么该用户可以列出该目录下的文件列表(即可以使用ll来列出目录下的文件),但是不能进入该目录(即不能cd 目录名 来进入该目录),即如果该目录是用户访问路径的某个组成部分的话,到这里是访问不了的。
当用户对某个目录只有执行权限时,该用户是可以进入该目录的(即可以通过 cd 目录名 来进入该目录),因为一个用户要想进入一个目录,就必须具有可执行权限才可以。但该用户是不能列出这个目录下的文件列表的(即不能使用ll等命令列出该目录下的信息)。
当用户对某个目录具有写权限时,用户可以在当前目录增加或者删除文件,但需要几个前提:1、需要有可执行权限;2、要想删除文件,那么sticky bit位是没有设置的。
Linux 笔记 - 特殊权限的更多相关文章
- linux笔记:权限管理命令chmod,chown,chgrp,umask
权限对文件和目录的含义是不同的:对文件来说:读:可以查看文件内容写:可以修改文件内容执行:可以执行文件对目录来说:读:可以列出目录中的内容写:可以在目录中创建.删除文件执行:可以进入目录 能够更改文件 ...
- linux笔记:权限管理-sudo
sudo可以将只有root可以使用的命令授权给普通用户: 授权的过程实际是修改配置文件: 授权示例: 普通用户使用sudo权限的示例:
- 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令
Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...
- Linux运维学习笔记-文件权限知识总结
权限总结: 1. 可读r:表示具有读取\阅读文件内容的权限: 2. 可写w:表示具有新增.修改文件内容的权限: a. 若果没有r配合,那么vi编辑文件会提示无法编辑(但可以强制编辑),echo可以重定 ...
- Linux 学习笔记分享: Linux 用户组的权限: drwx------ 700权限(d 目录 ,r=4,w=2,x=1:rwx=7;---=0;---=0)
Linux 用户组的权限: drwx------ 700权限(d 目录 ,r=4,w=2,x=1:rwx=7;---=0;---=0) 1 1 Linux 用户组的权限: drwx------ 700 ...
- 鸟哥的Linux私房菜学习笔记——文件权限与目录配置
Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...
- 【Linux笔记】Linux目录结构
[Linux笔记]Linux目录结构 本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...
- Linux文件的权限与属性
由于以前学习Linux的时候没有做比较全面的总结笔记,而且平时大部分工作都在windows上进行,所以关于Linux的一些知识点有所遗忘.近期难得空闲,翻阅书籍,学习<鸟哥的Linux私房菜&g ...
- 《学渣Linux笔记》——关于.bashrc与profile(涉及交互式与非交互式、登录与非登录shell)
<学渣Linux笔记>--关于.bashrc与profile(涉及交互式与非交互式.登录与非登录shell) 1.基本概念(个人理解) 交互式shell:等待用户输入,并执行相应操作的sh ...
随机推荐
- hadoop2.7之作业提交详解(下)
接着作业提交详解(上)继续写:在上一篇(hadoop2.7之作业提交详解(上))中已经讲到了YARNRunner.submitJob() [WordCount.main() -> Job.wai ...
- Django安装于基本介绍
pycharm果然是最强大的python IDE,在创建Diango项目时如果没有则自动下载. 然而即使是这样,我在安装Django的时候还是比较曲折的. Django的安装方式有很多,但是因为网络问 ...
- IDEA编辑器
一.打开含有jsx语法的文件都会显示红线,提示export declarations are not supported bu current javascript version 解决办法: 二.I ...
- mysql------explain工具
基于mysql5.7,innodb存储引擎 使用explain关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL ...
- Jupter NotebooK学习
1.参考资料 B站上学习视频 Jupyter 安装与使用 2.安装 在cmd窗口中输入(创建的文件会再当前的目录下):pip install jupyter 然后输入:jupyter notebook ...
- SpringBoot:elasticSearch 7.2.0 Java High Level REST Client 搜索 API
Springboot整合最新版elasticSearch参考之前的文章:SpingBoot:整合ElasticSearch 7.2.0 Search API SearchRequest用于与搜索文档, ...
- HTTP head请求
GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体. PUT: 从客户端向服务器传送的数据取代指定 ...
- egret之红包满屏随意飘动
在做这个需求之前,我们假设屏幕上同时飘动的红包数最大为10 ) { let redBag = GameUtil.createBitmapByName("Red_bag_png"); ...
- Gym - 101252H
题意略. 思路:二分.注意当利率高且m比较小的时候,每个月的偿还可能会大于本金,所以我们二分的右边界应该要设为2 * 本金. 详见代码: #include<bits/stdc++.h> # ...
- Condition控制线程通信
Condition控制线程通信 一.前言 java.util.concurrent.locks.Condition 接口描述了可能会与锁有关联的条件变量.这些变量在用法上与使用Object.wait ...