Server IP : 103.119.228.120 / Your IP : 3.137.198.143 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/clear_orphaned_virtfs_mounts 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 Cpanel::Config::LoadUserDomains (); use Getopt::Param (); use Cpanel::Filesys::Virtfs (); use Cpanel::PwCache::Get (); use Cpanel::CloudLinux::CageFS (); my $prm = Getopt::Param->new( { 'help_coderef' => sub { print <<"END_USAGE"; Unmount any virtfs mounts whose users no longer exist or whose shell is not currently jailshell/noshell $0 [--help] [--errorsonly] [--inactiveonly] [--clearall] [--user=<user>] $0 --help - this screen $0 --user=<user> - Only cleanup the specified user $0 --errorsonly - Do not have any output unless there are errors $0 --inactiveonly - Only cleanup for users with no running processes $0 --clearall - Unmount all virtfs mounts regardless of user's jailshell/noshell status END_USAGE exit; }, } ); my %user_map = %{ Cpanel::Config::LoadUserDomains::loaduserdomains( undef, 0, 1 ) }; my $errorsonly = $prm->get_param('errorsonly') ? 1 : 0; my $clear_all = $prm->get_param('clearall') ? 1 : 0; my $inactiveonly = $prm->get_param('inactiveonly') ? 1 : 0; my $user = $prm->get_param('user'); if ($inactiveonly) { Cpanel::Filesys::Virtfs::cleanup_inactive_virtfs(); Cpanel::Filesys::Virtfs::cleanup_unmounts_virtfs_for_dead_users( verbose => !$errorsonly ); exit(0); } clear_orphaned_virtfs_mounts(); Cpanel::Filesys::Virtfs::cleanup_unmounts_virtfs_for_dead_users( verbose => !$errorsonly, user => $user ); sub clear_orphaned_virtfs_mounts { my %processed_users; my %cagefs_users = map { $_ => 1 } Cpanel::CloudLinux::CageFS::enabled_users(); for my $mount ( Cpanel::Filesys::Virtfs::get_virtfs_mounts() ) { my $username = Cpanel::Filesys::Virtfs::get_username_from_virtfs_mount_string($mount); next if length $user && $username ne $user; next if exists $processed_users{$username}; print "-- Begin user '$username' --\n" unless $errorsonly; my $umount = 0; if ( !exists $user_map{$username} ) { print "User no longer exists, cleaning orphan...\n" unless $errorsonly; $umount++; } elsif ( $clear_all || Cpanel::PwCache::Get::getshell($username) !~ m{(?:no|jail)shell} ) { print "User no longer has jailshell or noshell, cleaning orphan...\n" unless ( $errorsonly || $clear_all ); $umount++; } elsif ( $cagefs_users{$username} ) { print "User has CageFS enabled, cleaning orphan...\n" unless $errorsonly; $umount++; } else { print "No action needed\n" unless $errorsonly; } if ($umount) { print "Cleaning virtfs mounts (if any)\n" unless $errorsonly; my ( $rc, @errors ) = Cpanel::Filesys::Virtfs::remove_user_virtfs($username); if ($rc) { print "Done\n" unless $errorsonly; $processed_users{$username}++; } else { print "Failed\n" . join( "\t", @errors ) . "\n"; } } else { $processed_users{$username}++; } print "-- End user '$username' -- \n\n" unless $errorsonly; } return; }