Spécificités et durcissement de sécurité
Les serveurs Kokiris sont durcis par défaut : plusieurs protections sont activées d'origine pour limiter l'impact d'une compromission (site piraté, plugin vulnérable, fuite de données…). Ces protections expliquent certains comportements qui peuvent surprendre : une fonction PHP qui ne s'exécute pas, un service interne injoignable depuis l'extérieur, ou une adresse IP temporairement bloquée.
Cette page recense ces spécificités et les commandes que vous êtes autorisé à exécuter. Le détail interne des règles n'est volontairement pas publié ; en cas de besoin légitime non couvert ici, contactez support@kokiris.com.
PHP : fonctions désactivées
Pour empêcher l'exécution de commandes système depuis un site web (vecteur classique d'un webshell), un jeu de fonctions PHP est désactivé (disable_functions) dans la configuration PHP-FPM par défaut :
La liste complète (56 fonctions, identique sur toutes les versions de PHP) :
| Catégorie | Fonctions désactivées |
|---|---|
| Exécution de commandes système | exec, passthru, shell_exec, system, proc_open, popen, expect_open |
Gestion de processus pcntl_* | 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 |
Gestion de processus posix_* / proc_* | proc_get_status, proc_nice, proc_terminate, proc_close, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname |
| Chargement de code / liens | dl, virtual, symlink, link |
| Intégration Apache | apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv |
| Configuration / logs / réseau | ini_alter, ini_restore, show_source, openlog, syslog, define_syslog_variables, stream_socket_server |
Valeur exacte de disable_functions (PHP-FPM)
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,expect_open,dl,symlink,link,ini_restore,openlog,syslog,proc_get_status,proc_nice,proc_terminate,proc_close,show_source,apache_child_terminate,apache_get_modules,apache_get_version,apache_getenv,apache_note,apache_setenv,virtual,define_syslog_variables,ini_alter,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_uname,stream_socket_server
Quelques autres réglages de durcissement sont appliqués : expose_php = Off (la version de PHP n'est pas révélée), allow_url_include = Off, display_errors = Off.
Ces restrictions portent sur PHP-FPM (les sites web). L'interpréteur PHP CLI est moins restreint (seules les pcntl_* y sont désactivées).
C'est traité au cas par cas : contactez le support, nous évaluons l'activation ciblée sur l'instance concernée.
Voir aussi la rubrique Service PHP.
PHP-FPM : instances isolées et durcissement systemd
Chaque site dispose de sa propre instance PHP-FPM, exécutée sous un utilisateur système dédié et confinée à son répertoire de travail. Une compromission reste ainsi cantonnée au site touché.
Les processus PHP-FPM tournent en outre sous une unité systemd durcie. Sans entrer dans le détail, cela implique notamment :
- aucune élévation de privilèges possible (
NoNewPrivileges), capacités système réduites au strict nécessaire ; - filtrage des appels système (seuls ceux d'un service standard sont permis) ;
- interdiction d'exécuter des binaires depuis les répertoires temporaires (
/tmp,/dev/shm,/var/tmp) ; - accès refusé aux ressources sensibles : clés SSH et historiques shell, compilateurs et interpréteurs hors PHP, socket Docker, mécanismes de planification (cron), données des autres clients ;
- protections noyau renforcées et isolation des autres processus.
Isolation des sites : minimultimis
minimultimis est l'outil en ligne de commande qui vous permet de créer et gérer vous-même vos espaces web, tout en garantissant leur cloisonnement. Sa philosophie : un site = un utilisateur système dédié = une instance PHP dédiée, chacun confiné à son propre répertoire.
Il s'utilise depuis votre compte admin (le mot de passe admin est requis pour sudo) :
| Domaine | Sous-commandes |
|---|---|
| Comptes système | user create / user delete / user list |
| PHP | php create / php delete / php list |
| Apache (vhost) | apache create |
| FTP | ftp create / ftp delete / ftp list |
| MySQL / MariaDB | mysql create / mysql list |
# Exemple : créer un espace dédié, son instance PHP 8.4 puis son vhost
sudo /usr/local/bin/minimultimis.sh user create monsite
sudo /usr/local/bin/minimultimis.sh php create ab12345678-monsite 8.4
sudo /usr/local/bin/minimultimis.sh apache create monsite.fr www.monsite.fr 8.4 ab12345678-monsite
minimultimis ne permet pas de supprimer une configuration Apache, ni de lister/supprimer une base ou un utilisateur SQL. Il impose des chemins et identifiants prédéfinis (éléments connus et prédictibles), ce qui est une protection volontaire.
Pare-feu et surface d'attaque réduite
En entrée : fermé par défaut
Sur l'interface publique, toutes les connexions entrantes sont rejetées par défaut, sauf les ports strictement nécessaires (SSH, web 80/443, FTP, ICMP). Les services internes (Elasticsearch, Redis, MySQL/MariaDB, supervision…) ne sont volontairement pas exposés sur Internet : ils n'écoutent qu'en local et/ou sur le réseau privé (vRack).
C'est voulu : ces services se joignent depuis le serveur lui-même (127.0.0.1) ou via le réseau privé, pas depuis Internet. Si vous avez un besoin spécifique d'exposition, contactez le support : c'est étudié au cas par cas.
En sortie / local : accès restreint par utilisateur
Le filtrage ne s'arrête pas aux connexions entrantes. En sortie aussi, les comptes utilisateurs sont restreints — qu'ils soient admin ou non. Concrètement, depuis votre compte, vous ne pouvez pas joindre l'intégralité des ports et services qui tournent sur la machine : certains ports d'infrastructure (supervision, découverte de services, métriques internes…) sont bloqués pour les comptes utilisateurs.
C'est le principe de la défense en profondeur : plutôt que de tout miser sur une seule barrière, on empile plusieurs couches indépendantes. Ainsi, même si un compte venait à être compromis (mot de passe volé, site piraté, processus détourné), l'attaquant ne pourrait pas se servir de cet accès pour cartographier ou attaquer les rouages internes du serveur. Chaque couche — pare-feu en entrée, restriction en sortie par utilisateur, instances PHP isolées, durcissement systemd, fail2ban — réduit ce qu'une compromission permet réellement de faire.
Dans de rares cas, vous pourriez ne pas réussir à joindre un service en local depuis votre compte alors que votre besoin est légitime. N'hésitez pas à ouvrir un ticket : nous vérifions et ouvrons l'accès ciblé si c'est justifié.
Le détail des règles d'entrée est dans la rubrique Pare-feu.
Bannissements automatiques (fail2ban)
Un service fail2ban surveille les tentatives d'authentification. Au-delà de 5 échecs en 10 minutes, l'adresse IP est bloquée 24 h sur le service concerné (SSH, FTP, web/HAProxy…).
Des essais de connexion répétés (mauvais mot de passe SFTP, script qui boucle…) peuvent vous faire bannir votre propre IP. Vous pouvez vérifier et débloquer une adresse via fail2ban-client (commandes autorisées ci-dessous).
Procédure complète et liste des jails : rubrique Fail2Ban en détail.
Commandes sudo autorisées (compte admin)
Voici les actions de base que votre compte admin peut exécuter en sudo, sans mot de passe (NOPASSWD) sauf mention contraire. La liste exacte de votre serveur s'affiche avec sudo -l.
| Domaine | Commandes autorisées |
|---|---|
| Apache | apache2ctl -t (test de conf) · service apache2 start|stop|restart|reload|graceful-stop|force-reload |
| PHP-FPM | service phpX.Y-fpm restart|reload (versions 5.6 → 8.4) · update-alternatives --config php (version PHP en CLI) |
| Elasticsearch | service elasticsearch restart|status |
| Sécurité (fail2ban) | fail2ban-client status [jail] · fail2ban-client set <jail> banip|unbanip|addignoreip|delignoreip <ip> |
| FTP (Pure-FTPd) | création / suppression / liste de comptes FTP |
| Espaces web | minimultimis.sh … (voir plus haut) |
| HAProxy / SSL | scripts dédiés (haple.sh …) — voir les rubriques Haproxy et Certificat SSL |
Toute commande hors de cette liste est refusée par sudo. C'est une protection : le périmètre est volontairement restreint aux opérations courantes d'exploitation.
Un comportement vous bloque alors qu'il vous semble légitime ? Écrivez-nous à support@kokiris.com : la plupart des restrictions peuvent être ajustées au cas par cas.