Безопасный доступ к панели и SSH через Web-Knokking
Безопасный доступ к панели и SSH через Web-Knokking
VestaCP — это панель-"дуршлаг" для уязвимостей. Хотя бы потому, что любой пользователь на хостинге может вызывать в PHP через EXEC команды CLI-интерфейса панели: exec(/usr/bin/sudo /usr/local/vesta/bin/v-*…) и делать с сервером абсолютно всё что угодно. Ну и по умолчанию при создании сайтов и некоторых других моментов предлагаются самые небезопасные варианты. Поэтому сначала немного подкрутим гайки для безопасности:
- Первым делом отключаем в PHP.ini опасные функции:
Code: Select all
disable_functions=pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,show_source
- Меняем для каждого сайта Web-шаблон для APACHE2 в панели с default на basedir. Вообще этот опасный шаблон не должен использоваться по умолчанию и по идее его быть не должно. Если уже используется любой другой шаблон, отличный от default, то всё должно быть в порядке.
- 1-ю часть назовём, например, Hidden.php и положим в /usr/local/vesta/web
Code: Select all
<?PHP $ip=getenv('QUERY_STRING'); if(filter_var($ip,FILTER_VALIDATE_IP)) { exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "2" "ACCEPT" "'.$ip.'" "8083" "TCP"',$output,$return_var); exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "11" "ACCEPT" "'.$ip.'" "22" "TCP"'); echo'<h1><center>'.$ip.'<br>'.gethostbyaddr($ip).'<br>'; #print_r($output);print_r($return_var); } ?>
- 2-часть назовём как угодно и положим на любой сайт на сервере в public_html в /home
Code: Select all
<?PHP $curl=curl_init('https://localhost:8083/Hidden.php?'.getenv('REMOTE_ADDR')); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false); echo curl_exec($curl); ?>
-
- Support team
- Posts: 1111
- Joined: Tue Jul 30, 2013 10:18 pm
- Contact:
- Os: CentOS 6x
- Web: nginx + php-fpm
Re: Безопасный доступ к панели и SSH через Web-Knokking
А каким образом у вас выполнится exec(), если вы его запретили в php.ini?... wrote: ↑Sun May 02, 2021 8:12 pmCode: Select all
exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "2" "ACCEPT" "'.$ip.'" "8083" "TCP"',$output,$return_var); exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "11" "ACCEPT" "'.$ip.'" "22" "TCP"');
Именно поэтому и не следует использовать Весту для организации многопользовательского хостинга.
P.S. Если в php файле нет иного кода, кроме php, закрывающий тег ставить незачем.
Re: Безопасный доступ к панели и SSH через Web-Knokking
Отключили его для пользовательских сайтов. У панели на 8083 отдельный nginx со своим php.
Так Web-Knokking и делается для себя. Если многопользовательский хостинг, то такой вариант защиты уже не применим.
Тут дело несколько в другом: если бы изначально из коробки генерелись конфиги, запрещающие всё потенциально опасное для пользователей, то в принципе панелью пользоваться можно и даже организовывать какой-то хостинг.
Re: Безопасный доступ к панели и SSH через Web-Knokking
Из-под рута запускаются если положить в /usr/local/vesta/web
У меня так же запускаются из /home/admin (если владелец admin)
У меня так же запускаются из /home/admin (если владелец admin)
-
- Support team
- Posts: 1111
- Joined: Tue Jul 30, 2013 10:18 pm
- Contact:
- Os: CentOS 6x
- Web: nginx + php-fpm
Re: Безопасный доступ к панели и SSH через Web-Knokking
Так в Весте admin - это администратор сервера, он и должен иметь такие права.
Все же, любой не может.