We are happy to announce that Vesta is back under active development as of 25 February 2024. We are working on v1 candidate and expect to engage more with the community over the coming months. We are committed to open source, and we encourage contributors to help us build the future of Vesta.
Безопасный доступ к панели и 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 - это администратор сервера, он и должен иметь такие права.
Все же, любой не может.