使用UNIX的suid脚本

ZDNet软件频道 时间:2003-08-20 作者:ZDNet China |  我要评论()
本文关键词:
尽管我们并不推荐你这么做,但有时候你会觉得有必要来运行在你的权限之外的脚本。特别是非特权用户(例如“nobody”)运行这样的脚本来访问和修改属于root用户的文件。
本文译自Builder.com,未经许可请勿转载尽管我们并不推荐你这么做,但有时候你会觉得有必要来运行在你的权限之外的脚本。特别是非特权用户(例如“nobody”)运行这样的脚本来访问和修改属于根用户(root)的文件。在UNIX系统下,你可以使用文件许可的set-id位,这样脚本就可以获得文件拥有者的权限了。

由于这并不是一个好的做法,所以有些操作系统(如Linux)忽略了脚本语言的set-id位。为了检查你的系统是否允许使用set-id位,我们创建了下面的外壳脚本。我们首先按照普通用户、然后按照根用户的身份来运行这段脚本:

#!/bin/sh
echo My effective user id is $EUID

如果你以根用户的身份运行这段脚本,那么你得到的用户id应该为零,否则(作为普通用户运行该脚本)你所得到的用户id为其它值。如果你把文件拥有者改为根用户并使用set-id位,以普通用户身份运行该脚本,并且你得到的用户id为零,那么你的系统就允许suid脚本。

然而,Perl提供一个叫着suidperl的程序,在这种情况下Perl会自动调用该程序。我们在Perl中创建等效测试脚本:

#!/usr/bin/perl
print "My effective user id is $> ";

分别用根用户和普通身份运行该脚本,应该得到两个不相同的用户id。然后,修改拥有者为根用户(作为root)并使用set-id位:

chownroot.root /tmp/suid.pl
chmod +s /tmp/suid.pl

现在当你以普通用户身份执行该脚本,就会调用suidperl而不是Perl,而且有效用户id是零。

注意:这是一个危险的方法,我们不应该轻易使用它——除非在所有可以安全解决问题的方法都无效的无效的情况下。



责任编辑:炒饭

欢迎评论投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134