linux suid权限,Linux 学习:文件特殊权限SUID, SGID, SBIT
本次记录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相关推荐
- linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...
前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...
- java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题
在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...
- ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段!
可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占 1位,表示文件类型 ,第二段占3位,表示文件所有者 对该文件的权限. Linux用户分为:拥有者.组群( ...
- linux 去掉文件的suid,Linux学习---文件特殊权限(SUID)
SetUID的功能 1. 只有可执行的二进制程序或者shell程序才能设定SUID权限 2. 命令执行者要对该程序(命令)拥有x(执行)权限 3. 命令执行者在执行该程序时获得该程序 ...
- linux文件权限_Linux的文件特殊权限
Linux文件权限的作用域有三个: •属主:u•属组:g•其他:o 针对这三者,除了基础的rwx权限之外,还有如下几个特殊权限 SUID: 默认情况下,进程的属主是其发起者,进程以发起者的身份运行 如 ...
- linux给普通用户赋予scp权限,关于linux新建用户并赋予文件夹权限和scp权限的问题...
当前用户是aaa,新建用户bbb: $adduser bbb 赋予sudo权限(即把用户bbb添加到sudo组): $usermod -a -G sudo bbb 切换到bbb: $su - bbb ...
- Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位
Linux下的基本指令 目录: 权限的概念 权限管理 文件访问权限的设置方法 目录的权限 粘滞位 权限的概念 Linux下用户有两种: 超级用户(root).普通用户. 超级用户:具有最高权限,可以在 ...
- java项目在linux环境中赋予新建文件777权限
一.使用java file类的方法 1. setExecutable设置可执行权限 1) setExecutable(boolean executable) 查看源码: public boolean ...
- Linux的常用命令chmod(文件的权限777和755)
Linux的常用命令 一.关于文件权限的基本理论知识 二.关于文件权限的命令 (1)查看文件权限 (2)文件权限的基本知识 (3)关于修改权限的命令 一.关于文件权限的基本理论知识 一个Linux目录 ...
- linux怎样设置目录和文件的权限?
linux设置目录和文件的权限: 通过chmod命令设置文件或目录的权限,可以采用两种形式的权限表示方法:字符形式和数字形式.r.w.x权限字符可分别表示为八进制数字4.2.1,表示一个权限组合时需 ...
最新文章
- shell中几个特殊的符号
- 【bzoj2463】 谁能赢呢?
- 【theano-windows】学习笔记十二——卷积神经网络
- python generator长度_Python 高级特性之:生成器(generator)和迭代器(Iterator)
- r语言读取excel数据_R语言 | 更快的表格文件读取方法!
- 按代码行衡量编程进度就像按重量衡量飞机制造进度一样
- Node.js的集群功能以及在Express的配置
- 9.Memcached 介绍
- 验证码识别库 python_python 验证码识别库pytesseract的使用
- 基于javaweb的大学生助学贷款管理系统项目源代码
- Java版本中最好用的网易云音乐、qq音乐api请求工具,你还在忙于如何使用java调音乐api?来看下这里的实现
- set_set_switching_activity
- node.js+uniapp计算机毕业设计安卓和悦少年文明礼仪监管APP(程序+APP+LW)
- 一个PDF免费转WORD的网站,亲测,好用!
- 字符流何用, 字节流呢
- 网际协议(IP,Internet Protocol)
- Programming Contest Ranking(题解)
- 常见的十进制代码(8421码,余3码,2421码,5211码,余3循环码,格雷码)
- 信号处理-Chirp-Z变换
- VisualSVN安装
热门文章
- c语言程序设计 出圈游戏,出圈游戏程序及设计.doc
- spring事务实现的几种方式
- 深圳天虹做java开发_Apache Storm 2.0.0 发布,基于 Java ​​​​​​​的新架构
- 深入理解二进制的一些用法及题目详解(一定可以帮你学会二进制的习题哟)
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1...
- 用Windows工具揪出隐藏的QQ尾巴
- 用 CSS 画个企鹅呀 ~
- linux7 epel,在CentOS 7/RHEL 7系统上启用EPEL的方法
- 【HDU 2553】 N皇后问题
- HTML5游戏开发(十)