博客地址:http://www.moonxy.com

一、前言

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 笔记 - 特殊权限的更多相关文章

  1. linux笔记:权限管理命令chmod,chown,chgrp,umask

    权限对文件和目录的含义是不同的:对文件来说:读:可以查看文件内容写:可以修改文件内容执行:可以执行文件对目录来说:读:可以列出目录中的内容写:可以在目录中创建.删除文件执行:可以进入目录 能够更改文件 ...

  2. linux笔记:权限管理-sudo

    sudo可以将只有root可以使用的命令授权给普通用户: 授权的过程实际是修改配置文件: 授权示例: 普通用户使用sudo权限的示例:

  3. 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令

    Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...

  4. Linux运维学习笔记-文件权限知识总结

    权限总结: 1. 可读r:表示具有读取\阅读文件内容的权限: 2. 可写w:表示具有新增.修改文件内容的权限: a. 若果没有r配合,那么vi编辑文件会提示无法编辑(但可以强制编辑),echo可以重定 ...

  5. 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 ...

  6. 鸟哥的Linux私房菜学习笔记——文件权限与目录配置

    Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...

  7. 【Linux笔记】Linux目录结构

    [Linux笔记]Linux目录结构   本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...

  8. Linux文件的权限与属性

    由于以前学习Linux的时候没有做比较全面的总结笔记,而且平时大部分工作都在windows上进行,所以关于Linux的一些知识点有所遗忘.近期难得空闲,翻阅书籍,学习<鸟哥的Linux私房菜&g ...

  9. 《学渣Linux笔记》——关于.bashrc与profile(涉及交互式与非交互式、登录与非登录shell)

    <学渣Linux笔记>--关于.bashrc与profile(涉及交互式与非交互式.登录与非登录shell) 1.基本概念(个人理解) 交互式shell:等待用户输入,并执行相应操作的sh ...

随机推荐

  1. SQL TRUNCATE TABLE 命令

    SQL TRUNCATE TABLE 命令 SQL TRUNCATE TABLE 命令用于删除现有数据表中的所有数据. 你也可以使用 DROP TABLE 命令来删除整个数据表,不过 DROP TAB ...

  2. ansible模块介绍之ios_command

    一.模块简介 ios_command此模块将任意命令发送到ios节点并返回设备读取的结果 此模块不支持在配置模式下使用,即只支持在用户模式>和特权模式#下使用 官方文档地址:https://do ...

  3. Python爬虫(二)正则表达式

    一.介绍 1.概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来 ...

  4. C#ORM中的对象映射

    使用Linq.Expressions来动态生成映射方法 1.我们先写个简单的类Test,包含一个ID和Name. public class Test { public int? ID { get; s ...

  5. 设计模式(C#)——09外观模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 前言       在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然 ...

  6. eShopOnContainers部署在docker的坑

    把eShopOnContainers(.net core 的版本是2.1)下载之后,部署到docker上,查看容器eShopOnContainers的项目都部署上去了. 用http://localho ...

  7. Java 最全异常讲解

    1. 导引问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是 ...

  8. 通过sql命令建表 和 主外键约束以及其他约束

    create table命令 create table dept ( dept_id int primary key, dept_name ) not null, dept_address ) ) c ...

  9. session一致性的解决方案

    更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文,这个相 ...

  10. Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法

    Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法: 写在前面,在配置hbase使用lzo算法时,在网上搜了很多文章,一般都是比较老的文章,一是版本低,二是一般都是使用hadoop- ...