IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > Linux Setuid和Setgid

Linux Setuid和Setgid

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  1、setuid和setgid的解说

  setuid 和setgid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比 如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/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,以达到修改自己口令的权限

  我们在Linux 系统中的超级权限的控制中 有提到过我们知道Linux的用户管理是极为严格的,不同的用户拥有不同的权限,为了完成只有root用户才能完成的工作,我们必须为普通用户提升权 限,最常用的方法就是su或sudo虽然setuid 和setgid也是让普通用户超越自身拥有的普通权限达到root权限的方法,但我不推荐大家使用,因为它能为系统带来安全隐患!!

  注意:setuid和setgid会面临风险,所以尽可能的少用,了解了解既可~~~

  2、setuid和setgid的实例应用

  我们想让一个普通用户beinan拥有root用户拥有超级rm删除权限,我们除了用su或sudo 临时切换到 root身份操作以外,还能怎么做呢???

  [root@localhost ~]#cd /home 注:进入/home目录

  [root@localhost home]# touch beinantest.txt 注:创建一个测试文件;

  [root@localhost home]# ls -l beinantest.txt 注:查看文件属性;

  -rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt 注:文件的属性;

  [root@localhost home]# su beinan 注:切换到普通用户 beinan

  [beinan@localhost home]$ rm -rf beinantest.txt 注:以普通用户身份来删除beinantest.txt文件;

  rm: 无法删除 beinantest.txt: 权限不够

  那我们怎么才能让beinan 这个普通用户也拥有root超级的rm 删除功力呢?

  [root@localhost ~]# ls -l /bin/rm

  -rwxr-xr-x 1 root root 93876 02-11 14:43 /bin/rm

  [root@localhost ~]# chmod 4755 /bin/rm 注:设置rm的权限为4755 , 就把setuid 位设置好了

  [root@localhost ~]# ls -l /bin/rm

  -rwsr-xr-x 1 root root 43980 02-11 14:43 /bin/rm

  [root@localhost ~]# cd /home/

  [root@localhost home]# su beinan 注:切换到beinan用户身份;

  [root@localhost home]$ ls -l beinantest.txt 注:查看文件属性;

  -rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt 注:文件的属性;

  [beinan@localhost home]$ rm -rf beinantest.txt 注:删除beinantest.txt文件;

  我们只是设置了rm的setuid位,让普通用户在rm指令上有超级root的删除超级权力

  通过这个例子,我们应该能明白setuid和setgid位的应用了,如同前面所说,让普通用户超越本身的能力,让普通用户能执行只有root才能 执行的命令在这一点,我们要和su和sudo 区分开来请参见su和sudo的文档:Linux 系统中的超级权限的控制

  3、setuid和setgid的设置方法

  第一种方法:八进制方法:

  setuid位是的设置用八进制的4000,setgid占用的是八进制的2000 ;比如我们前面所说的 chmod 4755 /bin/rm 就是设置的setuid位;

  至于setuid的设置方法,只是在我们通过chmod设置文件或目录权限位的八进制方法的前面多加一个数字,也就是4比如:

  [root@localhost ~]# chmod 4755 /bin/rm 注:设置rm的权限为4755 , 就把setuid 位设置好了

  作为setgid 位占用的是八进制的2000位,我们下面举个例子;

  [root@localhost ~]# cd /home/

  [root@localhost home]# mkdir slackdir

  [root@localhost home]# ls -ld slackdir/

  drwxr-xr-x 2 root root 4096 04-24 18:25 slackdir/

  [root@localhost home]# chmod 2755 slackdir/

  [root@localhost home]# ls -ld slackdir/

  drwxr-sr-x 2 root root 4096 04-24 18:25 slackdir/

  我们看到 slackdir这个目录,经过改变权限后的,目录所归属用户组的那三个权限位是 r-s 如果我们见到的是小写的s,表明文件所归属的用户组位有执行权限x因为我们用了2755 ,意思是说文件属主拥有可读可写可执行权限,所归属的用户组拥有可读可执行权限,并且设置了setuid,所以这时本来文件所归属的用户组拥有r-x,现 在加了setgid位,就把其中的x换成了s如果文件所归属的用户组没有执行权限,这个权限应该是S同理setuid位的中的大写的S和小写的s,也 是这个原理见下面的例子;

  [root@localhost home]# chmod 2740 slackdir/

  [root@localhost home]# ls -ld slackdir/

  drwxr-S--- 2 root root 4096 04-24 18:25 slackdir/

  这个例子是因为目录slackdir所归属的组没有执行权限,这时本来在执行权限位上显示-,由于有了setuid,所以显示为S

  如果我们为一个文件的权限拥有 属主可读可写可执行所归的组拥有可读可执行,其它用户可读可执行,并且同时设置setuid和setgid位,我们应该怎么运行命令呢?

  [root@localhost ~]# touch gooddoc.txt

  [root@localhost ~]# ls -l gooddoc.txt

  -rw-r--r-- 1 root root 0 04-24 18:47 gooddoc.txt

  [root@localhost ~]# chmod 6755 gooddoc.txt

  [root@localhost ~]# ls -l gooddoc.txt

  -rwsr-sr-x 1 root root 0 04-24 18:47 gooddoc.txt

  所以,同时设置setuid和setgid,就是把setuid和setgid两个八进位的值相加 (4000 2000=6000),然后加上文件或目录的权限位的三位数值(上面的例子是755),然后通过chmod 运行就行了所以上面例子中用了6755

  第二种方法:通过助记语法;

  还是延用chmod的助记语法,通过u s 或u-s 来增减setuid位,同理,我们可以通过g s 或g-s 来setgid位;

  [root@localhost ~]# touch mydoc.txt 注:创建一个文件;

  [root@localhost ~]# ls -l mydoc.txt

  -rw-r--r-- 1 root root 0 04-24 19:00 mydoc.txt

  [root@localhost ~]# chmod u s mydoc.txt

  [root@localhost ~]# ls -l mydoc.txt

  -rwSr--r-- 1 root root 0 04-24 19:00 mydoc.txt

  我们也可以用file命令来查看setuid和setgid位,当然也能用file来查看文件的类型;

  比如:

  [root@localhost ~]# file /usr/bin/passwd

关键词标签:Linux,Setuid,Setgid

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法