什么是SetUID
1. 什么是SetUID
我们知道,在linux的命令行下执行“ps”命令时,就会列出当前系统中的所有进程,在其中可以看到每个进程都和用户的真实id关联,实际上,Linux中的每个进程还跟一个称为有效用户id(set User id)紧密关联。前者用于表示该进程由那个用户控制,后者用于为新建立的文件分配所有权,检查文件访问许可等操作,同时有效用户为该文件的所有者。linux系统内核允许一个进程以调用一个SetUID程序(或显示执行SetUID系统调用)的方式,来改变其自身的有效用户id。
2. 如何配置SetUID权限
在linux中,不管是Root用户还是普通用户,都可以使用“Password”命令来更改自身的密码。但是,Linux中的密码通常是保存在“/etc/paswd”和“/etc/shadow”文件中,这两个文件对系统安全至关重要,因此只有Root用户才能对其执行读写操作。以管理员的身份登陆系统,在Linxu提示符下执行“ls /etc/passwd /etc/shadow”命令,在返回信息中可以看到普通用户对上述这两个文件并没有写权限,因此从文件属性的角度看,普通用户在更改自身密码时,是无法将密码信息写入到上述文件中的,哪么用户是怎样成功的更改密码的呢?实际上,问题的关键不在于密码文件本身,而在于密码更改命令“passwd”。在提示符下执行命令“ls /usr/bin/passwd”,在返回信息中的文件所有者执行权限位上显示“S”字样,表示“passwd”命令具有SetUID权限,其所有者为Root,这样普通用户在执行“passwd”命令时,实际上以有效用户root的身份来执行的,并具有了相应的权限,从而将新的密码写入到“/etc/passwd”和“/etc/shadow”文件中,当命令执行完毕,该用户的身份立即消失。如何设置SetUID权限呢?使用“chmod”命令即可为指定文件设置SetUID权限,例如“chmod 4xxx filename”命令,取消SetUID权限的命令为“chmod xxx filename”。类似的,执行“chmod 2xxx filename”命令可以设置SetGID权限,使用“chmod xxx filename”命令即可取消SetGID权限,如果执行“chmod 6xxx filename”命令,即可同时为指定文件设置SetUID和SetGID,执行命令“chmod 0xxx filename”,即可同时取消指定文件的SetUID和SetGID权限。例如以Root用户登陆系统,执行“chmod 0511 /usr/bin/passwd”命令,就可以取消“passwd”命令的SetUID权限,这样普通用户就无法修改自己的密码了。
3. SetUID权限的安全性
使用SetUID可以灵活的调整所有文件所有者权限,但是也为系统的安全性带来了隐患。如果Root用户为指定的程序文件配置过大的SetUID权限,那么就会为黑客或者非法用户打开了侵入系统的大门。例如在Linux中可以使用“vi”命令来编辑文件,但是,对于普通用户而言,当其试图使用命令“vi /etc/shadow”来修改密码文件时,系统就会弹出“/etc/shadow : Permission Denied”的警告提示,从而禁止其对密码文件的非法修改。但是,如果在Root用户环境中执行“which vi”命令,就可以看到“vi”命令实际上是“vim”命令的别名,其真实路径为“/usr/bin/vim”,这样执行命令"chmod 6755 /usr/bin/vim",就可以将“vi”命令的所有者更改为Root,这样在普通的用户环境中,就可以使用“vi”命令来编辑任何文件(例如“/etc/shadow”),这样,即使是普通用户也可以将密码文件清空,从而实现无密码登陆Linux,给系统的安全带来的威胁不言而喻。因此,对可能给系统安全带来危害的程序来说,应该尽量不要随意为其配置SetUID权限。
4. 如何禁用SetUID权限
对于存放在敏感数据的分区而言,有时可能希望禁用SetUID权限设置功能。例如对"/home" 分区禁用SetUID权限,可以找到修改其配置文件“/etc/fstab”, 执行命令“vi /rtc/fstab”,可以看到“LABEL=/home /home ext3 defaults 1 2”等数据,我们只需在上述“default”关键字的后面添加“nosuid” 关键字即可,例如使用“vi”命令将其修改为“LANBEL=/home /home ext3 default , nosuid 1 2”,之后执行命令“mountoremount /home”,这样即使对“/home”分区上的任何可执行文件配置了SetUID权限,也是无效的。这样就在很大程度上保护了系统的安全。
列子:
第一,我要声明,linux系统本身/usr/bin/passwd 命令就添加有SUID权限,不然你用普通用户也无法修改自己的密码。
为什么这么说呢?/etc/shadow 文件是保存用户密码的文件。但是这个文件只有 root 用户有读权限。看下面代码!
代码:
[root@server253 ~]# which passwd
/usr/bin/passwd
[root@server253 ~]# ls -la /usr/bin/passwd
-rwsr-xr-x 1 root root 23688 2007-01-07 /usr/bin/passwd
[root@server253 ~]# ls -la /etc/shadow
-r-------- 1 root root 1054 07-23 23:05 /etc/shadow
首先我给你举个例子你看一下:
复制一个mkdir 的副本 添加 SGID权限。 通过实验回答您的问题。
代码:
[root@server253 ~]# which mkdir
/bin/mkdir
[root@server253 ~]# cp -a /bin/mkdir /bin/mymkdir
[root@server253 ~]# ls -ls /bin/mkdir /bin/mymkdir
32 -rwxr-xr-x 1 root root 28016 2010-03-01 /bin/mkdir
32 -rwxr-xr-x 1 root root 28016 2010-03-01 /bin/mymkdir
[root@server253 ~]# chmod g+s /bin/mymkdir
[root@server253 ~]# ls -ls /bin/mkdir /bin/mymkdir
32 -rwxr-xr-x 1 root root 28016 2010-03-01 /bin/mkdir
32 -rwxr-sr-x 1 root root 28016 2010-03-01 /bin/mymkdir
然后我在创建一个普通用户,用普通用户用这2个命令分别创建2个目录,看他们的区别:
代码:
[root@server253 ~]# useradd test
[root@server253 ~]# su - test
[test@server253 ~]$ ls -la /bin/mkdir /bin/mymkdir
-rwxr-xr-x 1 root root 28016 2010-03-01 /bin/mkdir
-rwxr-sr-x 1 root root 28016 2010-03-01 /bin/mymkdir
[test@server253 ~]$ /bin/mkdir a1
[test@server253 ~]$ /bin/mymkdir a2
[test@server253 ~]$ ls -lad a1
drwxrwxr-x 2 test test 4096 07-23 23:07 a1 //用mkdir 没SGID权限 创建的目录 属主和属组 都是test
[test@server253 ~]$ ls -lad a2
drwxrwxr-x 2 test root 4096 07-23 23:07 a2 //用mymkdir 设置了SGID 权限, 创建目录 属组变为root 了
[test@server253 ~]$
为什么呢?
因为,mymkdir 文件的属组是 root,并且我给它添加了 SGID权限,所以当用户执行命令创建目录的时候。他将以root属组的身份创建 属于root属组的文件。
有些人会问:既然我其他用户有了root的权限执行passwd ,可是为何我只能修改自己的密码?
因为passwd 这个命令是一个允许执行者临时拥有root权限的命令。
[root@localhost ~]# ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 27768 Jan 7 2007 /usr/bin/passwd
第4位是s ,代表other用户如果有x权限的话,执行该命令时被当做root看待,但仅限于运行这个命令。
有人说了,那这样我可以干任何事,这是不可能的,首先这个命令只有root可以修改,是755权限,组用户和other用户是不能修改的。第二,这个命令是二进制格式,即便你能修改你也看不懂,它是封装好的。用cat 看一下就知道了,修改不了的。
所以只有你运行这个命令的时候,他里面的内容可以随意使用系统资源,把自己当root看待,但仅限于该命令内部。
所以其他用户能否用passwd 修改其他用户名密码和SGID和SUID权限没关系。因为判断是否修改自己的密码还是其他用户密码,这是passwd命令内部机制决定的。也就是说passwd命令默认执行只是用来更改当前用户密码的。
这样就是vim 这个命令为什么不能被添加上SUID和SGID权限了。因为很危险。只要这个命令添加SET位权限 就可以修改任何系统配置文件而VIM或vi只是编辑器。同时,如果某个root管理员比较2,弄出一个脚本文件,并且赋予4777权限,也就是上面看到那个有s的权限,并且让其他用户也能写和执行,那么随便什么人都能控制root了,所以+s是禁止随便使用的,因为用不好就会产生漏洞。
什么是SetUID的更多相关文章
- SET-UID程序漏洞实验
一.实验描述 Set-UID 是Unix系统中的一个重要的安全机制.当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程 ...
- 修改ubuntu中usr文件夹的权限后,sudo后出现sudo:must be setuid root问题的解决方案
无意之间,使用sudo chmod -R 777 /usr命令修改了usr文件的所有者,导致sudo:must be setuid root问题的出现,即sudo命令无法使用.网上介绍的方法差不多都相 ...
- 文件属性之setuid位
setuid位是可执行文件的一个属性,ls -l /bin/ping 或mount等可以看到权限为-rwsr-xr-x 1 root root 含有s位,所属用户为root表明该文件可以被其他用户以该 ...
- Linux下的特殊权限SetUID
1.SetUID的功能 只有可以执行的二进制程序才能设置SUID权限 命令执行者要对改程序拥有x执行权限 命令执行者在执行改程序的时候获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属性) ...
- 关于为busybox设置setuid
安卓root了,重启之后就没root权限了,于是想到了为 busybox 设置 setuid 来实现使用root的身份执行命令. 可是,不管用啊,还是提示没有权限.搜了一下 busybox setui ...
- 五大权限:UGO权限、SetUID SetGID Sticky、ACL权限、chattr(文件系统级别的权限)、SELINUX
五大权限:UGO权限.SetUID SetGID Sticky.ACL权限.chattr(文件系统级别的权限).SELINUX ======================文件属性以及ugo权限= ...
- Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限;sudo提权
相关学习资料 http://blog.sina.com.cn/s/blog_4e2e6d6a0100g47o.html http://blog.csdn.net/aegoose/article/det ...
- umask setuid setgid
cat /etc/bashrc if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ];#用户UI ...
- setuid函数解析
在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值.这三个UID分别是实际用户ID(real uid).有效用户ID(effective uid).保存的设置 ...
- 【Linux】理解setuid()、setgid()和sticky位
详见: http://blog.csdn.net/m13666368773/article/details/7615125 Linux SETUID机制 (1)进程运行时能够访问哪些资源或文件,不取决 ...
随机推荐
- filebeat的安装及配置
概述:Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasti ...
- 深入理解PHP数组函数和预定义接口
一. PHP对数组的过滤 函数: array_filter(p1[,p2]) 参数p1是要过滤的数组,参数p2是自定义过滤会掉函数(可以是匿名函数) 例子: <?php $arr = ['',n ...
- PAT (Basic Level) Practice 1040 有几个PAT
个人练习 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位( ...
- RabbitMQ实现中AMQP与MQTT消息收发异同
实现了AMQP与MQTT(至多一次)后,用多个队列以topic exchange的方式用相同交换机监听同一个主题(topic),发现情况存在不同,觉得有点意思,所以记录了下来. 用2个MQTT(分别记 ...
- 吴恩达DeepLearning 第一课第四周随笔
第四周 4.1深度神经网络符号约定 L=4______(神经网络层数) 4.2 校正矩阵的维数 校正要点:,, dZ,dA,dW,db都与它们被导数(Z,A,W,b)的维数相同 4.3 为什么使用 ...
- Android快速发布项目到jcenter详解
不管别人的教程多详细,都有他们忽略的坑,所以,都要自己动手.我也是参考了许多许多的博客,弄了一上午加下午十分钟,才搞定. 参考: 下面这个是大部分的步骤 http://blog.csdn.net/zh ...
- web在线调试
xx <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta h ...
- 《Cracking the Coding Interview》——第4章:树和图——题目7
2014-03-19 04:48 题目:最近公共父节点问题. 解法1:Naive算法,先对其高度,然后一层一层往上直到找到结果. 代码: // 4.7 Least Common Ancestor // ...
- 《Cracking the Coding Interview》——第2章:链表——题目1
2014-03-18 02:16 题目:给定一个未排序的单链表,去除其中的重复元素. 解法1:不花额外空间,使用O(n^2)的比较方法来找出重复元素. 代码: // 2.1 Remove duplic ...
- ACM二分搜索算法
二分搜索算法就是把要搜索的数据在搜索文本中根据情况进行折半,比如要在2 6 4 9 3 8 7 3 5中找到找到4的位置,那么可以考虑先把数据进行排序,然后把拍好后的数据的中间的那个数据和要查找的数据 ...