首页 > 系统相关 >Linux-特殊权限设置(SUID、SGID、SBIT)

Linux-特殊权限设置(SUID、SGID、SBIT)

时间:2023-05-16 11:00:31浏览次数:29  
标签:文件 SUID Linux SBIT SGID 权限 目录

一、SUID权限

1.概念

当s这个标志出现在文件所有者的x权限上时,例如文件权限状态“-rwsr-xr-x”,此时就被称为Set UID,简称SUID。

如果该属主权限位上有执行权限,则会显示(小写)s。

如果该属主权限位上没有执行权限,则会显示(大写)S。

说明:SUID权限中的s有大小写之分,如果强行给普通文件添加s权限,那么现实的是大写的S,因为普通文件没有x权限,这样显示的suid其实没什么用,因为它并不是可执行文件。

只有给文件添加了x权限后,suid才有效。

 

2.作用

(1) SUID权限仅对可执行文件有效;

(2) 执行者对于该可执行文件需要具有x权限;

(3) 在执行过程中,调用者会暂时获得该文件的拥有者权限;

(4) 该权限只在程序执行的过程中有效;

例如/bin/su和/usr/bin/passwd这2个命令的所有者的x权限上都用s权限替换了。

实际上这2个可执行文件的所有者是root,但是我们依然可以在普通账号下使用这两个命令,这是因为普通账号在使用这2个命令的时候会暂时获得其拥有者的权限。

3.授权方式

chmod   u+s   filename

chmod   4xxx  filename

4.总结

(1) 让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限

(2) 如果设置的二进制文件没有执行权限,那么SUID的权限就显示为S(大写)

(3) 特殊权限suid仅对二进制可执行程序有效,其它文件或目录无效。

注意: suid不安全,如果使用了普通用户可以使用属主用户的权限,那么普通用户在执行对应命令文件时,就可以任意查看或修改文件内容,比如修改了etc/sudoers 文件,那普通用户相当于超级用户的复制品。

 

二、SGID权限

1.概念

当s出现在文件的所属组x权限位置上时,表示所属组有SGID的权限。

如果该属组权限位上有执行权限,则会显示(小写)s。

如果该属组权限位上没有执行权限,则会显示(大写)S。

说明:同样SGID的s权限也是分大小写的,当g权限组没有x权限的时候,设置SGID后就会变成大写的S,这点跟SUID一样。

2.作用

(1) 既可以作用于目录,也可以作用于可执行文件;

(2) 只要父目录有SGID权限,所有的子目录都会递归继承;

(3) 执行者对于该可执行文件需要具有x权限 ;

(4) 在执行过程中,调用者会暂时获得该文件的所属组权限。

3.授权方式

chmod   g+s     filename

chmod   2xxx    filename

4.总结

(1) 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。

(2) 当某个目录设置了Sgid后,在该目录中新建的文件不在是创建该文件的默认所属组。

(3) 使用Sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

 

三、SBIT权限

1.概念

当t出现在其他组的x权限位置时,表示其他组具有SBIT的权限。

如果该其它用户权限位上有执行权限,则会显示(小写)t。

如果该其它用户权限位上没有执行权限,则会显示(大写)T。

2.作用

SBIT(Sticky Bit)目前只针对目录有效。

作用:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。

3.授权方式

chmod   o+t   filename

chmod   1xxx  filename

4.总结

(1) 让多个用户都具有写权限,并让每个用户都只能删除自己的文件

(2) 投入数sticky目录表现在others 的 x 位,用(小写)t 表示,没有执行权限时(大写)T

(3) 一个目录即使使得它的权限为“777” ,如果设置了粘滞位,除了目录的属主和“root”用户有权限删除,其它用户都不允许删除。

 

四、SUID/SGID/SBIT权限设置

和rwx权限一样通过chmod命令设置,s、t也有两种设置方法:

1、符号表示:

SUID: u+s

SGID: g+s

SBIT: o+t

2、数字表示:

SUID=4

SGID=2

SBIT=1

将原来的三位数扩展为四位数即可,把它们放在权限数字的最开头。例如设置SUID,可以写成4777,设置SGID可以写成,2777,设置SBIT可以写成1777;如果同时设置就是数字之和,例如suid,sgid和sbit都设置的话就是7777。

标签:文件,SUID,Linux,SBIT,SGID,权限,目录
From: https://www.cnblogs.com/yeyuzhuanjia/p/17404282.html

相关文章

  • 【转】Linux下判断cpu架构及系统发行版方法
    原文地址:https://zhuanlan.zhihu.com/p/374738476一、判断cpu架构1,使用命令:hostnamectl2,使用命令:arch3,使用lscpu4,使用命令:cat/proc/cpuinfo,可以查到具体指令集二、判断系统是Debian系还是Redhat系大家都知道linux分redhat系和debian系,那么肯定有办法,去判断系统是r......
  • Linux 文件上传下载的几种方式
    虚拟终端软件中的rz和sz我们使用虚拟终端软件,如Xshell、SecureCRT或PuTTY来连接远程服务器后,可以使用rz或sz来上传下载文件rz命令使用rz命令可以上传本地文件到远程服务器。运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器sz命令将选定的......
  • Linux & Window: idea配置php+xdebug
    xdebugproblemusingidekey[url]http://devnet.jetbrains.com/message/5265653[/url]NetBeans结合xdebug调试php-fpm下的PHP代码[url]http://www.48474.com/netbeans%E7%BB%93%E5%90%88xdebug%E8%B0%83%E8%AF%95php-fpm%E4%B8%8B%E7%9A%84php%E4%BB%A3%......
  • Linux操作系统分析-课程总结
     结合虚拟化技术分析Linux系统的一般执行过程一、     Linux系统运行一般场景:用户进程之间切换                     (1)用户态进程X调用系统调用或触发异常用户态进程X需要进行进程切换时,可以通过调用一些特定的系统调用(例如fork、exec等)或者......
  • linux工具学习 day03
    1、gdb命令run:在调试器中运行程序list:查看程序源码break+行号:设置断点break+行号+if条件:设置断点break+函数名:设置断点infobreak:查看断点信息delete+断点编号:删除断点enable/disable:使能断点print+X+变量名:查看变量值next:单步执行,不进入子函数(跳过函数,直接拿结果)ste......
  • Linux操作系统分析-课程总结报告
    结合虚拟化技术分析Linux系统的一般执行过程虚拟化层启动:在虚拟化环境中,物理主机上的虚拟化软件(如VMware、KVM等)启动,并创建虚拟机管理器(VMM)或称为hypervisor。VMM负责管理虚拟机的创建、销毁和资源分配。虚拟机创建:VMM根据用户的需求创建虚拟机实例。虚拟机实例是一种逻辑上的隔......
  • linux中安装jdk
    安装步骤:1.首先我们需要一台虚拟机或者一台配置了环境的服务器这里我们使用阿贝云服务器。2.搜索需要的jdkyumsearchjdk 3.安装需要的版本yuminstall java-1.8.0-openjdk-devel.x86_644.安装完成查看版本......
  • Linux系统的一般执行过程与虚拟化技术结合分析
    Linux系统一般执行过程Linux操作系统的启动过程一般分为四个阶段:BIOS启动引导阶段、GRUB启动引导阶段、内核阶段和init初始化阶段。BIOS启动引导阶段:计算机加电后,首先运行的是BIOS程序。BIOS程序会检测计算机硬件设备并进行初始化,然后将控制权交给下一级的启动引导程序。GRUB......
  • Linux下部署安装JDK
    系统:Centos7安装jdk版本:1.8.0_371安装方式:压缩包jdk官网下载 https://www.oracle.com/java/technologies/downloads/#java8 先用Java-version命令检测系统是否默认安装了jdk,如有可以使用rpm命令卸载!1、利用工具将下载的包放到/usr/local下并解压#切换到jdk目录下cd/u......
  • Linux内核debugfs介绍
    前言内核开发者经常需要导出一些信息到用户空间,用于分析内核运行逻辑。最常见的方法是使用printk(),不过在嵌入式中,printk()往往直接打印到console,一旦printk()被频繁调用的话,console就会被刷屏,此时输入命令都是件困难的事情。有时我们只想偶尔看一下某个内核变量的值,但是......