本次记录Linux特殊权限SUID、SGID、SBIT相关知识及使用实例等。

由于SUID和SGID涉及到系统安全,所以对它们知识点的掌握尤为重要。关于文件权限的表示方法和解析

SUID是Set User ID,SGID是Set Group ID的意思。

Linux下可以用ls –l命令来查看文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 这种方法共有十位

9 8 7 6 5 4 3 2 1 0

-  r w x r  -  x  r - x

第9位表示文件类型,可以为-、d、b、s、c、l、p

第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户权限,其形式为rwx。

r表示可读,可读出文件的内容

w表示可写,可修改文件的内容

x表示可执行,可运行这个文件

没有权限的位置用-表示

例子:

ls -l myfile显示为:

-rwxr-x--- 1 foo staff 7734 Aug 05 17:18 myfile

表示文件myfile是普通文件,文件的所有者是foo用户,而foo用户属于staff组,文件只有1个硬连接,长度是7734个字节,最后修改时间8月5日17:18。

所有者foo对文件有读写执行权限,staff组的成员对文件有读和执行权限,其他用户对文件没有权限。SUID、SGID和SBIT的详细解析

1. SUID权限

仅对二进制程序有效,执行者对该程序需要有x执行权限,在程序运行过程中,执行者拥有程序拥有者(owner)的权限。

例如:

普通用户执行passwd命令。

首先查看passwd命令的绝对路径及文件权限:

我们发现passwd的拥有者是root,且拥有者权限里面本应是x的那一例显示的是s,这说明此命令具有SUID权限。同时发现普通用户没有w权限,所以按理来说普通用户是不能执行这个命令的,因为这个命令修改了密码肯定是要写文件的。

进一步分析,实际上passwd这个命令会操作/etc/shadow这个文件,因为密码都是放在这里,查看密码文件权限:

发现权限为000,(注意:root用户对所有文件都是有rw权限的,对所有目录都是有rwx权限的),这意味着普通用户确实不能读或写这个文件。不过因为passwd命令具有SUID权限,所以普通用户执行这个命令时,当系统生成对应的进程后,这个进程就拥有了/usr/bin/passwd文件拥有者root的权限。

上面的操作在要输入密码时按CTRL+Z,回车。

查看进程树:可以发现确实passwd的权限不是bash而是root!

这种文件会在原权限值(假设是0755)之前加上4000,记为4755。通过chmod u+/-s FileName设定。

2. SGID权限

SGID权限可以应用在目录或可执行文件上。

1) 对于文件:

SGID对于二进制程序有用,程序执行者要有x权限,执行者在执行过程中会获得该程序用户组(group)的权限(相当于临时加入了程序的用户组)。

例如:

普通用户使用locate命令。

发现用户组权限中应该出现x的位置显示s,表示这个命令具有SGID权限。而普通用户只有x权限而没有rw权限。locate这个命令,实际上会去访问 /var/lib/mlocate/mlocate.db这个文件。

此文件对于普通用户没有任何权限。所以理论上普通用户执行locate命令是不行的。不过因为locate命令有SGID权限,所以运行locate生成进程时,这个进程会得到locate命令的用户组权限,相当于Allen这个用户被临时加入了用户组slocate内。于是就对mlocate.db这个文件有r权限,可以访问了。

2) 对于目录:

用户对于此目录具有r与x的权限时,可以进入目录;

用户在此目录下的有效用户组会变成该目录的用户组;

若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。实用于一组开发人员共用资源的场景。

实例:

一个团队想在Linux某个目录下协同做Cloud项目,那么每个团队成员都得对这个目录下的所有文件具有rwx权限。

于是我们首先新建一个名为cloudgrp的用户组,再新建几个账号,且每个账号的用户组都附加cloudgrp这个组。

然后新建文件夹,根据文件夹默认umask权限计算得出此文件夹权限为drwxr-xr-x。

可以看出只有root用户能在此文件夹新建文件,而其他用户没有写权限。须把目录权限设为775,且其属组更改为cloudgrp组,让属于这个组的其他用户有写文件权限。

现在账户developer可以新建文件,且文件的所有者和用户组都会是developer,这样的话诸如techusr等无法访问这个文件,无法达到协同工作的目标。

所以我们需要给这个目录加入SGID权限,之后任意一个用户创建的文件,文件用户组都会是cloudgrp。

文件夹会在原权限值(假设是0775)之前加上2000,记为2775。通过chmod g+/-s FileName设定。

3. Sticky Bit权限

作用于目录:若一个目录的Sticky bit被设置,那么只有这个目录的owner或root用户才能对目录中的文件或子目录进行删除和重命名。

该位可以理解为防删除位,一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用Sticky bit位。设置该位后,就算用户对目录具有写权限,也不能删除该文件。

实例:

我们新建目录,且把一个文件复制到该目录下,此文件对所有人开放权限。

添加Sticky bit后,文件夹会在原权限值(假设是0755)之前加上1000,记为1755。通过chmod o+/-t FileName设定。

现在目录的权限变为:

尽管developer.b文件所有人有全部权限,但现在只有owner或root对其进行重命名和删除。

它可以保护文件,这也是 /tmp有Stick bit的原因。

linux suid权限,Linux 学习:文件特殊权限SUID, SGID, SBIT相关推荐

  1. linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...

    前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...

  2. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  3. ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段!

    可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占 1位,表示文件类型 ,第二段占3位,表示文件所有者 对该文件的权限. Linux用户分为:拥有者.组群( ...

  4. linux 去掉文件的suid,Linux学习---文件特殊权限(SUID)

    SetUID的功能 1.    只有可执行的二进制程序或者shell程序才能设定SUID权限 2.    命令执行者要对该程序(命令)拥有x(执行)权限 3.    命令执行者在执行该程序时获得该程序 ...

  5. linux文件权限_Linux的文件特殊权限

    Linux文件权限的作用域有三个: •属主:u•属组:g•其他:o 针对这三者,除了基础的rwx权限之外,还有如下几个特殊权限 SUID: 默认情况下,进程的属主是其发起者,进程以发起者的身份运行 如 ...

  6. linux给普通用户赋予scp权限,关于linux新建用户并赋予文件夹权限和scp权限的问题...

    当前用户是aaa,新建用户bbb: $adduser bbb 赋予sudo权限(即把用户bbb添加到sudo组): $usermod -a -G sudo bbb 切换到bbb: $su - bbb ...

  7. Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位

    Linux下的基本指令 目录: 权限的概念 权限管理 文件访问权限的设置方法 目录的权限 粘滞位 权限的概念 Linux下用户有两种: 超级用户(root).普通用户. 超级用户:具有最高权限,可以在 ...

  8. java项目在linux环境中赋予新建文件777权限

    一.使用java file类的方法 1. setExecutable设置可执行权限 1) setExecutable(boolean executable) 查看源码: public boolean ...

  9. Linux的常用命令chmod(文件的权限777和755)

    Linux的常用命令 一.关于文件权限的基本理论知识 二.关于文件权限的命令 (1)查看文件权限 (2)文件权限的基本知识 (3)关于修改权限的命令 一.关于文件权限的基本理论知识 一个Linux目录 ...

  10. linux怎样设置目录和文件的权限?

    linux设置目录和文件的权限:  通过chmod命令设置文件或目录的权限,可以采用两种形式的权限表示方法:字符形式和数字形式.r.w.x权限字符可分别表示为八进制数字4.2.1,表示一个权限组合时需 ...

最新文章

  1. shell中几个特殊的符号
  2. 【bzoj2463】 谁能赢呢?
  3. 【theano-windows】学习笔记十二——卷积神经网络
  4. python generator长度_Python 高级特性之:生成器(generator)和迭代器(Iterator)
  5. r语言读取excel数据_R语言 | 更快的表格文件读取方法!
  6. 按代码行衡量编程进度就像按重量衡量飞机制造进度一样
  7. Node.js的集群功能以及在Express的配置
  8. 9.Memcached 介绍
  9. 验证码识别库 python_python 验证码识别库pytesseract的使用
  10. 基于javaweb的大学生助学贷款管理系统项目源代码
  11. Java版本中最好用的网易云音乐、qq音乐api请求工具,你还在忙于如何使用java调音乐api?来看下这里的实现
  12. set_set_switching_activity
  13. node.js+uniapp计算机毕业设计安卓和悦少年文明礼仪监管APP(程序+APP+LW)
  14. 一个PDF免费转WORD的网站,亲测,好用!
  15. 字符流何用, 字节流呢
  16. 网际协议(IP,Internet Protocol)
  17. Programming Contest Ranking(题解)
  18. 常见的十进制代码(8421码,余3码,2421码,5211码,余3循环码,格雷码)
  19. 信号处理-Chirp-Z变换
  20. VisualSVN安装

热门文章

  1. c语言程序设计 出圈游戏,出圈游戏程序及设计.doc
  2. spring事务实现的几种方式
  3. 深圳天虹做java开发_Apache Storm 2.0.0 发布,基于 Java ​​​​​​​的新架构
  4. 深入理解二进制的一些用法及题目详解(一定可以帮你学会二进制的习题哟)
  5. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1...
  6. 用Windows工具揪出隐藏的QQ尾巴
  7. 用 CSS 画个企鹅呀 ~
  8. linux7 epel,在CentOS 7/RHEL 7系统上启用EPEL的方法
  9. 【HDU 2553】 N皇后问题
  10. HTML5游戏开发(十)