在Linux下利用suid Perl实现权限委托

需求场景:如果有其他用户(例如外包团队的用户)需要不定期利用你的Linux账户执行固定的一些命令,可以利用suidperl脚本来实现。

首先新建一个Perl脚本,脚本的权限设置为-rwsr-sr-x

脚本的内容参考:

#!/usr/bin/suidperl -wT
my $cellname;
open (my $fh, '<', 'cell_name_here') or dir "cannot open the cell name file!\n";
{
	local $/;
	$cellname = <$fh>;
}
close($fh);

my @dangerous = ("\$", ";", ",", " ", "!", "\\", "/", "#", "^", "'", "\"");
foreach my $i(@dangerous) {
	if (index($cellname, $i) !== -1) { die "no spectial char allowed in the cell name file!\n" };
}

$ENV{"PATH"} = "/usr/bin";
system("ssh", "zakk.zhu\@bay91", "-i", "/opt/xxx/private/.key", "-t", "/opt/xxxxx/private/1_TOP");
print "\n\n====";
print "Job done\n";

可以看到这里面首先是利用了suidperl,其次是ssh到了新的机器,ssh -i直接利用了密钥,避免了密码沟通

private文件夹权限需要设置成drwxr-x—,.key文件权限需要设置成-rwxrwx–x。

最终可以实现,脚本的使用者无法访问private文件夹的内容,执行脚本就可以以脚本owner的身份,执行private里面的1_TOP脚本实现更多功能。

发表评论

您的电子邮箱地址不会被公开。