{"id":2702,"date":"2021-01-27T18:20:25","date_gmt":"2021-01-27T18:20:25","guid":{"rendered":"https:\/\/oursoide.wordpress.com\/?p=2702"},"modified":"2021-01-27T18:20:25","modified_gmt":"2021-01-27T18:20:25","slug":"helios-64-part-4-caddy-au-demarrage-et-protection-du-systeme","status":"publish","type":"post","link":"https:\/\/blog.nanuq.me\/?p=2702","title":{"rendered":"[ARCHIVE] Helios 64 \/ Part 4 \/ Caddy au d\u00e9marrage, et protection du syst\u00e8me."},"content":{"rendered":"<p><em>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour.<\/em><\/p>\n<p>Ou comment on relance automatiquement Caddy au d\u00e9marrage ? Et protection du syst\u00e8me.<!--more--><\/p>\n<h1>R\u00e9sum\u00e9 des \u00e9pisodes pr\u00e9c\u00e9dents<\/h1>\n<ul>\n<li><a href=\"https:\/\/blog.nanuq.me\/2021\/01\/13\/helios64\/\">Helios 64 &#8211; Part 1 &#8211; Pr\u00e9sentation<\/a><\/li>\n<li><a href=\"https:\/\/blog.nanuq.me\/2021\/01\/22\/helios-64-part-2-installons-un-serveur-web-caddy\/\">Helios 64 &#8211; Part 2 &#8211; Caddy<\/a><\/li>\n<li><a href=\"https:\/\/blog.nanuq.me\/2021\/01\/23\/helios-64-part-3-ajout-dun-service-transmission\/\">Helios 64 &#8211; Part 3 &#8211; Transmission et Fail2ban<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>Disclaimer<\/h1>\n<p>Je commence \u00e0 saturer d&rsquo;\u00e9crire des tartines. Cet article sera \u00ab\u00a0\u00e9pur\u00e9\u00a0\u00bb et \u00ab\u00a0droit au but\u00a0\u00bb ; pour rappel :<\/p>\n<ul>\n<li>Je ne suis pas un expert<\/li>\n<li>Il peut y avoir des erreurs et des inexactitudes dans ce qui va suivre<\/li>\n<li>C&rsquo;est \u00e0 vos risques et p\u00e9rils.<\/li>\n<li>N\u00e9anmoins, n&rsquo;h\u00e9sitez pas \u00e0 faire avancer le schmilblick et \u00e0 me faire remarquer les points noirs.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>Caddy au d\u00e9marrage du syst\u00e8me<\/h1>\n<p>&nbsp;<\/p>\n<h2 id=\"debian-ubuntu-raspbian\">Debian, Ubuntu, Raspbian<\/h2>\n<p>En fouillant un peu, je me suis rendu compte que normalement Caddy est cens\u00e9 d\u00e9marrer au d\u00e9marrage du syst\u00e8me (merci <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Systemd\">systemd<\/a>) . En effet, <a href=\"https:\/\/caddyserver.com\/docs\/install#debian-ubuntu-raspbian\">d\u2019apr\u00e8s la documentation officielle<\/a> :<\/p>\n<blockquote><p>Installing this package automatically starts and runs Caddy for you as a systemd service named <code>caddy<\/code> using our official <a href=\"https:\/\/github.com\/caddyserver\/dist\/blob\/master\/init\/caddy.service\"><code>caddy.service<\/code><\/a> unit file.<\/p><\/blockquote>\n<p>Mais chez moi&#8230; ca marchait pas&#8230;<\/p>\n<h2 id=\"debian-ubuntu-raspbian\">Et pour les autres OS ?<\/h2>\n<p>Veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation du syst\u00e8me. J&rsquo;ai cru comprendre qu&rsquo;on peut faire certaines choses avec <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Systemd\">systemd<\/a> (vous trouverez un bon article \u00e0 ce sujet : <a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd.service.html\">ici<\/a>) ; et vous trouverez <a href=\"https:\/\/github.com\/caddyserver\/dist\/blob\/master\/init\/caddy.service\">ici le fichier caddy.service officiel.<\/a><\/p>\n<p>&nbsp;<\/p>\n<h1>Chez moi, \u00e7a marche pas.<\/h1>\n<p>Comme je l&rsquo;ai d\u00e9j\u00e0 dit, au d\u00e9marrage du syst\u00e8me, caddy ne d\u00e9marre pas. Enfin&#8230; Plus exactement. Il d\u00e9marre : mais rien ne se passe mon super site est innaccessible. Je suis oblig\u00e9 de l&rsquo;arr\u00eater de le relancer \u00e0 la mano. On va donc voir ce qui se passe, et on va utiliser <strong>systemctl<\/strong>.<\/p>\n<h2>Quelques commandes utiles <em>systemctl<\/em><\/h2>\n<p>Pour activer ou d\u00e9sactiver le service au d\u00e9marrage du syst\u00e8me :<\/p>\n<p><code><br>\nsudo systemctl enable caddy.service<br>\n<\/code><code>sudo systemctl disable caddy.service<br>\n<\/code><\/p>\n<p><!-- wp:code --><\/p>\n<p>Pour d\u00e9marrer ou arr\u00eater le service :<\/p>\n<p><code><br>\nsudo systemctl start caddy.service<br>\nsudo systemctl stop caddy.service<br>\n<\/code><code><br>\n<\/code><\/p>\n<p>Pour v\u00e9rifier l&rsquo;\u00e9tat d&rsquo;un service :\u00a0<code><br>\nsystemctl status caddy.service<\/code><\/p>\n<h2>V\u00e9rifier le statut<em><br>\n<\/em><\/h2>\n<p>Du coup, apr\u00e8s un reboot, j&rsquo;ai tap\u00e9 <code>systemctl status caddy.service<\/code> et voil\u00e0 ce qu&rsquo;on obtient (j&rsquo;ai caviard\u00e9 les informations personnelles) :<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/caddylog-1.jpeg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2716 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/caddylog-1.jpeg\" alt=\"\" width=\"1062\" height=\"504\"><\/a><\/p>\n<p>On remarque que m\u00eame si le service est actif, tout ne se passe comme pr\u00e9vu. Apparemment, c&rsquo;est des probl\u00e8mes de <em><strong>\u00ab\u00a0permission denied\u00a0\u00bb<\/strong><\/em> (permissions refus\u00e9es) sur le dossier <strong><em>\/var\/lib\/caddy<\/em><\/strong>&#8230; (oui c&rsquo;est pas \u00e9crit en entier, la mise en page n&rsquo;est pas ad\u00e9quat).<\/p>\n<h2>A qui donner les permissions ?<\/h2>\n<p>Pour \u00e9viter de donner les permissions \u00ab\u00a0\u00e0 tout le monde\u00a0\u00bb (et augmenter les risques vis \u00e0 vis de la s\u00e9curit\u00e9 du syst\u00e9me) , il faudrait savoir \u00e0 qui il faut donner ses permissions. Je me suis donc mis \u00e0 \u00e9tudier <a href=\"https:\/\/github.com\/caddyserver\/dist\/blob\/master\/init\/caddy.service\">le fichier caddy.service de la documentation officielle.<\/a><\/p>\n<p>Et on voit quelque chose d&rsquo;int\u00e9ressant \u00e0 la ligne 22 :<\/p>\n<blockquote><p><strong><em>[Service]<\/em><\/strong><br>\n<strong><em>User=caddy<\/em><\/strong><br>\n<strong><em>Group=caddy<\/em><\/strong><\/p><\/blockquote>\n<p>J&rsquo;ai donc d\u00e9duis que c&rsquo;est \u00e0 l&rsquo;user \u00ab\u00a0caddy\u00a0\u00bb que je dois donner les droits sur le dossier <strong>\/var\/lib\/caddy\u00a0<\/strong><\/p>\n<h2>A\u00a0 l&rsquo;assaut du probl\u00e9me<\/h2>\n<p>Premi\u00e8re etape, on remarque que dans notre log, la commande<em><strong> \u00ab\u00a0mkdir\u00a0\u00bb<\/strong> <\/em>\u00e9choue \u00e0 cr\u00e9er le dossier. On va donc le cr\u00e9er nous m\u00eame et donner les droits \u00e0 ce dossier.<\/p>\n<p><code>mkdir \/var\/lib\/caddy<\/code><\/p>\n<p>Ensuite, on va donner tous les droits au propri\u00e9taire du fichier et droit de lecture pour les autres.<\/p>\n<p><code>chmod -R 744 \/var\/lib\/caddy<\/code><\/p>\n<ul>\n<li><strong>chmod<\/strong> est la commande qui permet de modifier les droits sur un fichier ou un dossier. Pour plus d&rsquo;informations sur chown \/ chmod <a href=\"https:\/\/www.leshirondellesdunet.com\/chmod-et-chown\">c&rsquo;est par ici.<\/a><\/li>\n<li><strong>-R<\/strong> signifie que la commande est r\u00e9cursive, les sous dossier b\u00e9n\u00e9ficieront des m\u00eames droits.<\/li>\n<li><strong>744<\/strong> est le code qui signifie que le propri\u00e9taire aura tous les droits, et le groupe et les autres auront juste le droit de lecture. Pour mieux comprendre ce code, <a href=\"https:\/\/chmodcommand.com\/chmod-744\/\">rendez vous ici.<\/a><\/li>\n<li>et enfin le chemin : <strong>\/var\/lib\/caddy<\/strong><\/li>\n<\/ul>\n<p>Pour le moment, on a juste donn\u00e9 les droits au propri\u00e9taire du dossier. Maintenant on va dire : <em><strong>\u00ab\u00a0C&rsquo;est monsieur Caddy le propri\u00e9taire d\u00e9sormais !\u00a0\u00bb <\/strong><\/em>:<\/p>\n<p><code>chown -R caddy \/var\/lib\/caddy<\/code><\/p>\n<ul>\n<li><strong>chown<\/strong> est la commande qui permet de modifier le propri\u00e9taire d&rsquo;un fichier ou d&rsquo;un dossier. Pour plus d&rsquo;informations sur chown \/ chmod <a href=\"https:\/\/www.leshirondellesdunet.com\/chmod-et-chown\">c&rsquo;est par ici.<\/a><\/li>\n<li><strong>-R<\/strong> signifie que la commande est r\u00e9cursive, les sous dossier b\u00e9n\u00e9ficieront des m\u00eames droits.<\/li>\n<li><strong>caddy<\/strong> est le nom du propri\u00e9taire<\/li>\n<li>et enfin le chemin : <strong>\/var\/lib\/caddy<\/strong><\/li>\n<\/ul>\n<h2>V\u00e9rification<\/h2>\n<p>On est content, on fait un reboot du systeme. Je refais un petit coup de <code>systemctl status caddy.service<\/code> . Je ne vous refais pas une capture d&rsquo;\u00e9cran mais il y avait un probl\u00e8me similaire : caddy ne pouvait pas \u00e9crire dans les logs. Et c&rsquo;est facheux, puisque c&rsquo;est eux qui permettent de bannir des gens via fail2ban. (On en a d\u00e9ja parl\u00e9 dans <a href=\"https:\/\/blog.nanuq.me\/2021\/01\/23\/helios-64-part-3-ajout-dun-service-transmission\/\">un pr\u00e9c\u00e9dent article<\/a>.)<\/p>\n<h2>Encore un petit coup !<\/h2>\n<p>On refait la m\u00eame chose cette fois ci pour le fichier de log (vu que c&rsquo;est un fichier et pas un dossier, pas besoin de<strong> -R<\/strong>) :<\/p>\n<p><code>chmod 744 \/var\/log\/caddy-torrent.log<\/code><\/p>\n<p>chown caddy \/var\/log\/caddy-torrent.log<\/p>\n<h2>Derni\u00e8re v\u00e9rification&#8230;<\/h2>\n<p>Alors on reboot&#8230; on rev\u00e9rifie les logs&#8230; on essaye d&rsquo;acc\u00e9der \u00e0 notre super site&#8230; et&#8230; c&rsquo;est ouvert !<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/sitewebexemple-1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2622 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/sitewebexemple-1.jpg\" alt=\"\" width=\"439\" height=\"181\"><\/a><\/p>\n<h1>Am\u00e9liorer la s\u00e9curit\u00e9 du syst\u00e8me<\/h1>\n<p><a href=\"https:\/\/www.ionos.fr\/digitalguide\/serveur\/configuration\/securiser-un-serveur-configurer-correctement-linux-etc\/\">Ce qui suit est fortement inspir\u00e9 de ceci.<\/a><\/p>\n<h2>D\u00e9sactiver SSH pour root.<\/h2>\n<p>On en avait d\u00e9j\u00e0 parl\u00e9, mais on va continuer d&rsquo;am\u00e9liorer la s\u00e9curit\u00e9 de notre syst\u00e8me, on va interdire \u00e0 l&rsquo;utilisateur <em>root<\/em> de se connecter directement en SSH. En effet, le mot de passe <em>root<\/em> donne les privil\u00e8ges les plus \u00e9lev\u00e9 sur une machine, et on peut donc en faire ce qu&rsquo;on veut. L&rsquo;id\u00e9e c&rsquo;est de mettre des b\u00e2tons dans les roues des personnes qui seraient malintentionn\u00e9es. (<a href=\"https:\/\/unix.stackexchange.com\/a\/82639\">plus d&rsquo;informations ici<\/a>)<\/p>\n<p>C&rsquo;est tr\u00e8s facile \u00e0 faire. Il vous faut un utilisateur suppl\u00e9mentaire (en plus de l&rsquo;utilisateur <em>root<\/em>). Si vous vous rappelez bien, on l&rsquo;a cr\u00e9\u00e9 au tout d\u00e9but de notre \u00e9pop\u00e9e avec Helios64 !<br>\nDans l&rsquo;id\u00e9al, il faut que le mot de passe pour <em>root<\/em> et le mot de passe pour ce nouvel utilisateur soient diff\u00e9rents.<\/p>\n<p>Avant de commettre l&rsquo;irr\u00e9parable, assurez vous que vous arrivez \u00e0 vous connecter avec ce nouvel utilisateur (via ssh) , et que vous pouvez passer root ! N&rsquo;oubliez pas de donner \u00e0 ce nouvel user les droits :<\/p>\n<pre class=\"terminal\"><code class=\"terminal-line\">usermod -aG sudo username<\/code><\/pre>\n<p>En tant que user, vous devez taper :<\/p>\n<p><code class=\"rainbow language-mixed rb2\">su -<\/code> puis, le mot de passe <em>root.\u00a0 <\/em>Et voil\u00e0 !\u00a0 Si c&rsquo;est concluant, (et seulement si c&rsquo;est concluant) on peut faire la suite :<\/p>\n<p>Puis on vient \u00e9diter le fichier suivant <em>sshd_config<\/em> :<\/p>\n<pre class=\"line-numbers language-mixed code-toolbar\"><code class=\"rainbow language-mixed rb2\">nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n<p>On cherche la ligne <strong>PermitRootLogin yes<\/strong> et on remplace par <strong>PermitRootLogin no <\/strong>; on enregistre, et on recharge les nouvelles configurations via :<\/p>\n<pre class=\"line-numbers language-mixed code-toolbar\"><code class=\"rainbow language-mixed rb5\">service ssh restart<\/code><\/pre>\n<p>Voil\u00e0, <em>root<\/em> ne peut plus se connecter directement via SSH.<\/p>\n<p>&nbsp;<\/p>\n<h2>Rebinder le port SSH (par d\u00e9faut : 22)<\/h2>\n<p>Encore une fois, l&rsquo;id\u00e9e c&rsquo;est d&rsquo;am\u00e9liorer la s\u00e9curit\u00e9. Par d\u00e9faut, tout le monde sait (et particuli\u00e9rement les vilains programmes malicieux) que le port SSH est par d\u00e9faut le port 22. On va corser un peu la difficult\u00e9 en changeant le port par d\u00e9faut. Prenez garde \u00e0 <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Liste_de_ports_logiciels\">choisir un port qui n&rsquo;est pas d\u00e9j\u00e0 utilis\u00e9 par quelque-chose sur votre machine<\/a> !<\/p>\n<pre class=\"line-numbers language-mixed code-toolbar\"><code class=\"rainbow language-mixed rb2\">nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n<p>Vous devriez rep\u00e9rer la ligne suivante :<br>\n<code class=\"rainbow language-mixed rb2\"># Port 22<\/code><\/p>\n<p>Admettons que vous choisissez le port <strong>1234<\/strong>, vous devez modifier cette ligne et la remplacer par : (pensez bien \u00e0 retirer le #) :<br>\n<code class=\"rainbow language-mixed rb2\">Port 1234<\/code><\/p>\n<p>On enregistre, et on relance SSH pour prendre en compte cette modification :<\/p>\n<p><code class=\"rainbow language-mixed rb5\">service ssh restart<\/code><\/p>\n<p>D\u00e9sormais, pour vous connecter en local vous devrez taper :<\/p>\n<p><code class=\"rainbow language-mixed rb5\">user@192.168.x.y -p 1234<\/code><\/p>\n<p><strong>(\u00e0 adapter selon votre configuration)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2>On v\u00e9rifie que c&rsquo;est bien pris en compte avec fail2ban<\/h2>\n<p><a href=\"https:\/\/blog.nanuq.me\/2021\/01\/23\/helios-64-part-3-ajout-dun-service-transmission\/\">On en a d\u00e9ja parl\u00e9 ici,<\/a> je ne vais pas refaire le topo. Fail2ban par d\u00e9faut vous prot\u00e8ge des personnes qui tentent de forcer l\u2019acc\u00e8s SSH. L&rsquo;id\u00e9e c&rsquo;est de tenter de se connecter en SSH depuis votre machine (qui normalement peut pas \u00eatre auto-banni) et depuis une autre IP pour voir si vous vous retrouvez bien ban. Et de surveillez les logs pour \u00eatre sur et certain de pas se faire pirater ! On essaye de se connecter depuis n&rsquo;importe quel machine via :<\/p>\n<p><code class=\"rainbow language-mixed rb2\">ssh user@monsupersite.truc -p 1234<\/code><\/p>\n<p><strong>(\u00e0 adapter selon votre configuration)<\/strong><\/p>\n<h2><\/h2>\n<h2>Conclusion<\/h2>\n<p>Ben voil\u00e0; c&rsquo;est d\u00e9j\u00e0 fini !<\/p>\n<p>Ce fut court, j\u2019esp\u00e8re que ca vous a int\u00e9ress\u00e9 quand m\u00eame. Si jamais j&rsquo;ai dit des b\u00eatises, n&rsquo;h\u00e9sitez pas \u00e0 me corriger ! Je continue d&rsquo;apprendre les arcanes de \u00ab\u00a0l&rsquo;adminsys\u00a0\u00bb.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour. Ou comment on relance&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2743,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,4],"tags":[18,29,62,106,107,114],"_links":{"self":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2702"}],"collection":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2702"}],"version-history":[{"count":0,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2702\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}