http://www.perlmonks.org?node_id=1007438

wellmje has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I am looking for a way to validate that this use of regular expressions will match all and any commands except SU on a Red Hat Linux server when following Perl rules

 (?!.*/su[\r\s]).*/.*

Any assistance or direction would be appreciated. I know there are many other ways to achieve the same goal but I am being told that this should work. Thank You in advance!

Replies are listed 'Best First'.
Re: Perl regular expression rules
by Crackers2 (Parson) on Dec 06, 2012 at 01:58 UTC

    You may want to give more details about what you're trying to accomplish, because...

    [user@host]$ ll /bin/su -rwsr-xr-x 1 root root 30148 Jul 21 19:54 /bin/su [user@host]$ ln -s /bin/su notsu [user@host]$ ./notsu Password: [root@host]#

    So if you're trying to use this to prevent people from running su it's probably not a good idea.

Re: Perl regular expression rules
by ww (Archbishop) on Dec 06, 2012 at 00:39 UTC
    The best way to validate your regex is to read the docs re regexen; perlre, perlretut, etc (and there's lots of etc inside perldoc, too) and use the knowledge acquired to refine your ability to understand the regex.

    Second best, perhaps? Seek out a regex explanation utility of the sort frequently mentioned here.

    Next best, try it. Test (brute force) a substantial subset or all the commands you're likely to use, in a dry run setting like:

    #pseudocode my @commands=qw(ls rm rd cat....); for $command(@commands) { if ($command =~ /(your regex here)/ ) { say "regex matched $command"; } else { say "Oops! $command slipped by"; } }