perl 限制用户操作

<pre name="code" class="sql">#!/usr/bin/perl
use strict;
use Switch;
use Sys::Hostname;
use File::Basename;
my $host = hostname;
my $prompt = "$host >";
my @allow_command=(
    "/bin/cat",
    "/bin/pwd",
    "/bin/date",
    "/bin/df",
    "/bin/dmesg",
    "/bin/grep",
    "/bin/hostname",
    "/bin/ls",
    "/bin/netstat",
    "/bin/ping",
    "/bin/ps",
    "/bin/rpm",
    "/bin/sleep",
    "/bin/sort",
    "/bin/uname",
    "/sbin/ifconfig",
    "/usr/bin/clear",
    "/usr/bin/du",
    "/usr/bin/id",
    "/usr/bin/vi",
    "/bin/tar",
   "/usr/kerberos/bin/ftp",
   "export",
   "/bin/echo",
   "/bin/env",
   "source",
   "chdir",
);

my @allow_command2=map {basename("$_") } @allow_command;
#print "@allow_command2
";
sub help() {
    print "Available commands:
";
    print $_."
" foreach (@allow_command);
}
 
system("/usr/bin/clear");

while ("1") {
    my $command;
    print "$prompt " ;
    my $input_command=<STDIN>;
    chomp ($command=$input_command);
    next if $command eq '';
    if ($command =~ /^(.|\)/){print "Sorry, unknown command '$command', please run 'help' to show all the avaiable commands.
";};
    exit if ($command =~ /^(quit|exit)$/);
    if ($command eq "help") {
        &help;
        next;
    }
 my ($binary,undef)=split /s+/,"$command";

if (grep m/$binary/,@allow_command or grep m/$binary/,@allow_command2 ) {
system("$command");
} elsif ($binary eq "cd") {my $newdir=(split /s+/,"$command")[1];
 chdir $newdir;}
else{
print "Sorry, unknown command '$binary', please run 'help' to show all the avaiable commands.
";}
}




                                    
原文地址:https://www.cnblogs.com/hzcya1995/p/13352027.html