SSH : "root" remplacé par "admin", précisions?


#1

Dans l’annonce de la sortie de Yunohost 3.4, je repère :

C’est à dire que le compte “root” n’est plus autorisé à se connecter via SSH ?
Donc le compte “admin” remplace par défaut “root” qui est maintenant activé sur chacune des machines Yunohost… Alors chaque machine Yunohost a depuis ce compte par défaut actif pour une connexion distante par SSH ?
Ou ai-je mal compris ?

Merci d’avance !


#2

C’est bizarre, je viens d’appliquer la mise à jour, j’ai ensuite réalisé la migration manuellement, et je peux toujours me connecter en root en ssh via la commande “su -” appliquée depuis une connexion ssh en simple utilisateur. C’est normal ?


#3

Oui, c’est normal. L’objectif est de bloquer les tentatives de connexion directe sur root via ssh depuis une ip distante. L’objectif n’est pas d’empêcher l’admin d’endosser l’identité de root.

Il reste possible de se connecter directement en root via ssh depuis une ip locale.

Le user admin est autorisé en ssh depuis des années (YunoHost 2.0?).

La façon recommandé pour se connecter en ssh via YunoHost est de le faire ainsi:
ssh admin@DOMAIN.TLD

Après l’admin est libre de faire ‘sudo su’ ou ‘su’


#4

Ok merci ljf pour ces précisions.
Je ne savais pas que “admin” était autorisé à se connecter via ssh… Bon, why not.

Avec des comptes par défaut, je me dis toujours qu’il est plus simple à un attaquant de l’utiliser pour tenter du bruteforce ou autre technique qui me dépasse…? Un peu à la façon du compte “administrateur” dans les vieilles années sous Windows NT :wink:
Certes “fail2ban” est là pour éviter ce type de désagrément. Mais j’aime bien l’idée d’avoir un compte portant un nom un peu plus personnalisé et unique :wink:


#5

Des dernières discussions, il y a effectivement une volonté de fusionner le premier utilisateur créé et l’utilisateur admin, pour plusieurs raisons.

A noter que tous ces changements sur ssh ont été longuement discutés.

A défaut de contraindre, nous recommandons par ailleurs de choisir une phrase de passe correcte pour root et admin. Logiquement, quelqu’un qui suit les recommandations à ce sujet est à l’abri du bruteforce des mots de passes.


#6

Pas de souci, j’imagine que c’est murement réfléchit, je n’en doute point :wink:
Oui ce peut être une idée alternative d’utiliser le “premier utilisateur” comme compte d’administration, il sera aussi possible de rediriger (à l’aide des outils existants) ses mails vers un autre compte orienté plus “utilisateur lambda” pour un suivi moins contraignant par l’admin.

Merci pour le taf en tous cas :slight_smile:


#7

Hello,

Pour ma part, j’ai utilisé uniquement un utilisateur spécial SSH pour se logguer sur la machine à distance ainsi admin et user1 n’ont pas accès au SSH. Sa plus un changement de port c’est peut être pas le plus complexe mais c’est pas les paramètres par défaut.

:slight_smile:


#8

C’est normal que dans les logs de la mise à jour d’aujourd’hui, mon mot de passe root se balade en clair ?


#9

:open_mouth: a quel endroit vous avez vu cela ? Dans mes logs, sur les MAJ, c’est juste marqué fait, je n’ai vu aucune trace d’aucun MDP.


#10

Je l’ai vu dans le log qui s’affiche automatiquement après la mise à jour sur le webadmin. C’était même mentionné à plusieurs reprises.
SI quelqu’un m’explique comment retrouver ce log, je suis tout disposé à vous donner de plus amples détails :wink:


#11

Si tu vas dans Outils puis Logs, est-ce que tu le retrouves ?


#12

Non, j’ai été voir mais bizarrement je n’ai qu’une seule ligne (“2019-01-31 13:56:19,373: INFO - Terminé”) alors que lors de la mise à jour j’en avais plusieurs dizaines. Je ne comprends pas pourquoi.


#13

bonjour, mais alors le mp de admin est le même que root?


#14

Oui, il est synchronisé depuis la version 3.3


#15

Hello,

J’ai vu cela en effectuant la migration. Puis j’ai modifié root avec passwd est ce que cela peut occasionner une dysfonction dans le Yuno ?
Question de curiosité personnel : pourquoi avoir choisis d’avoir les mêmes MDP pour ces deux users ?


#16

Question de curiosité personnel : pourquoi avoir choisis d’avoir les mêmes MDP pour ces deux users ?

et pour preciser cette question: en quoi ces comptes sont diferent? par default, sudo est il “limité” sur le compte admin? le fichier sudoer de mon yunohost ne contient pas de ligne sur admin …


#17

Non ça fonctionnera tout aussi bien :wink:

Essentiellement parce que :

  • dans le processus d’install, il pouvait se produire des cas où le mot de passe root n’était pas changé (soit le système te force à le changer, soit tu sais qu’il faut taper passwd manuellement, mais si il n’y a ni l’un ni l’autre, tu peux te retrouver avec un password root qui a gardé la valeur par défaut)
  • ça créé des questions existentielles comme “est-ce que j’ai le droit de mettre le meme mot de passe pour les deux ou est-ce qu’il faut que ce soit différent”, puis plus tard tu oublies l’autre mot de passe … fondamentalement si ce sont les memes ça ne pose pas de soucis.

root est “dieu” dans un système UNIX. admin est un utilisateur supplémentaire dans le contexte de YunoHost. Il s’agit d’un utilisateur défini dans la base LDAP, qui permet notamment de manipuler la base LDAP et de s’authentifier sur la webadmin. Mais en terme de pouvoir, c’est grossomodo équivalent puisque admin peut devenir root via sudo.

Il n’y a effectivement pas de ligne dans le fichier sudoers, c’est configuré ailleurs via sudo-ldap (et des enregistrements dans la base LDAP), je saurais pas exactement dire comment :wink:


#18

Merci Aleks :slight_smile:

Moralité, il faut mieux deux utilisateurs avec le même mot de passe, qu’un root perdu ou par défaut :grin:


#19

merci de prendre le temps de nous donner toutes ces précisions!
c’est très instructif ! :smiley:


#20

J’ai encore aujourd’hui mon mot de passe root (que l’on appellera “XXXXXXXXXXXXX”) qui se balade en clair dans les logs lorsque je fais une mise à jour :

2019-02-01 20:55:33,562 DEBUG gnupg _read_response - [GNUPG:] BEGIN_DECRYPTION
2019-02-01 20:55:33,563 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_INFO 2 7
2019-02-01 20:55:33,563 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT 62 1548944968
2019-02-01 20:55:33,564 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT_LENGTH 17
2019-02-01 20:55:33,564 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_OKAY
2019-02-01 20:55:33,564 DEBUG gnupg _read_response - [GNUPG:] GOODMDC
2019-02-01 20:55:33,565 DEBUG gnupg _read_response - [GNUPG:] END_DECRYPTION
2019-02-01 20:55:33,566 DEBUG gnupg _read_data - chunk: ‘XXXXXXXXXXXXX’
2019-02-01 20:55:33,566 DEBUG gnupg decrypt_file - decrypt result: ‘XXXXXXXXXXXXX’
2019-02-01 20:55:33,643 DEBUG moulinette.core acquire - lock has been acquired
2019-02-01 20:55:33,644 DEBUG moulinette.actionsmap process - loading python module yunohost.tools took 0.000s
2019-02-01 20:55:33,644 INFO moulinette.actionsmap process - processing action [30719.62]: yunohost.tools.diagnosis with args={‘private’: False, ‘auth’: <moulinette.authenticators.ldap.Authenticator object at 0x6f514290>}
2019-02-01 20:55:41,024 DEBUG moulinette.actionsmap process - action [30719.62] executed in 7.379s
2019-02-01 20:55:41,024 DEBUG moulinette.core release - lock has been released
2019-02-01 20:55:41,027 INFO geventwebsocket.handler log_request - 127.0.0.1 - - [2019-02-01 20:55:41] “GET /diagnosis?locale=fr HTTP/1.1” 200 1625 7.557010
2019-02-01 20:55:41,029 DEBUG geventwebsocket.handler close - Closed WebSocket
2019-02-01 20:55:41,030 DEBUG geventwebsocket.handler close - Failed to write closing frame -> closing socket
2019-02-01 20:55:41,031 DEBUG geventwebsocket.handler close - Closed WebSocket
2019-02-01 20:55:41,034 DEBUG geventwebsocket.handler run_application - Initializing WebSocket
2019-02-01 20:55:41,035 DEBUG geventwebsocket.handler upgrade_websocket - Validating WebSocket request
2019-02-01 20:55:41,035 DEBUG geventwebsocket.handler upgrade_connection - Attempting to upgrade connection
2019-02-01 20:55:41,036 DEBUG geventwebsocket.handler upgrade_connection - WebSocket request accepted, switching protocols
2019-02-01 20:55:41,058 DEBUG geventwebsocket.handler run_application - Initializing WebSocket
2019-02-01 20:55:41,058 DEBUG geventwebsocket.handler upgrade_websocket - Validating WebSocket request
2019-02-01 20:55:41,059 DEBUG geventwebsocket.handler upgrade_websocket - Can only upgrade connection if using GET method.
2019-02-01 20:55:41,060 DEBUG moulinette.authenticator.ldap init - initialize authenticator ‘default’ with: uri=‘ldap://localhost:389’, base_dn=‘dc=yunohost,dc=org’, user_rdn=‘cn=admin’
2019-02-01 20:55:41,062 DEBUG gnupg _open_subprocess - [‘gpg1’, ‘–status-fd’, ‘2’, ‘–no-tty’, ‘–version’]
2019-02-01 20:55:41,098 DEBUG gnupg _collect_output - stderr reader: <Thread(Thread-316, initial daemon)>
2019-02-01 20:55:41,099 DEBUG gnupg _collect_output - stdout reader: <Thread(Thread-317, initial daemon)>
2019-02-01 20:55:41,104 DEBUG gnupg _read_data - chunk: ‘gpg (GnuPG) 1.4.21\nCopyright © 2015 Free Software Foundation, Inc.\nLicense GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permit’
2019-02-01 20:55:41,105 DEBUG gnupg _open_subprocess - [‘gpg1’, ‘–status-fd’, ‘2’, ‘–no-tty’, ‘–batch’, ‘–passphrase-fd’, ‘0’, ‘–decrypt’]
2019-02-01 20:55:41,140 DEBUG gnupg _write_passphrase - Wrote passphrase
2019-02-01 20:55:41,141 DEBUG gnupg _threaded_copy_data - data copier: <Thread(Thread-318, initial daemon)>, <_io.BytesIO object at 0x6f5bef90>, <open file ‘’, mode ‘wb’ at 0x6f66e230>
2019-02-01 20:55:41,143 DEBUG gnupg _collect_output - stderr reader: <Thread(Thread-319, initial daemon)>
2019-02-01 20:55:41,143 DEBUG gnupg _copy_data - closed output, 179 bytes sent
2019-02-01 20:55:41,145 DEBUG gnupg _collect_output - stdout reader: <Thread(Thread-320, initial daemon)>
2019-02-01 20:55:41,148 DEBUG gnupg _read_response - gpg: AES encrypted data
2019-02-01 20:55:41,149 DEBUG gnupg _read_response - [GNUPG:] NEED_PASSPHRASE_SYM 7 3 2
2019-02-01 20:55:41,149 DEBUG gnupg _read_response - gpg: encrypted with 1 passphrase
2019-02-01 20:55:41,150 DEBUG gnupg _read_response - [GNUPG:] BEGIN_DECRYPTION
2019-02-01 20:55:41,150 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_INFO 2 7
2019-02-01 20:55:41,151 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT 62 1548944968
2019-02-01 20:55:41,151 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT_LENGTH 17
2019-02-01 20:55:41,152 DEBUG gnupg _read_data - chunk: ‘XXXXXXXXXXXXX’
2019-02-01 20:55:41,152 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_OKAY
2019-02-01 20:55:41,153 DEBUG gnupg _read_response - [GNUPG:] GOODMDC
2019-02-01 20:55:41,154 DEBUG gnupg _read_response - [GNUPG:] END_DECRYPTION
2019-02-01 20:55:41,154 DEBUG gnupg decrypt_file - decrypt result: ‘XXXXXXXXXXXXX’
2019-02-01 20:55:41,232 DEBUG moulinette.core acquire - lock has been acquired
2019-02-01 20:55:41,233 DEBUG moulinette.actionsmap process - loading python module yunohost.tools took 0.000s
2019-02-01 20:55:41,233 INFO moulinette.actionsmap process - processing action [30719.63]: yunohost.tools.update with args={‘ignore_packages’: False, ‘ignore_apps’: False}
2019-02-01 20:55:42,247 DEBUG yunohost.tools tools_update - [30719.63] Mise à jour de la liste des paquets disponibles…
2019-02-01 20:56:22,758 DEBUG yunohost.tools tools_update - [30719.63] Terminé
2019-02-01 20:56:22,763 DEBUG yunohost.app app_fetchlist - [30719.63] Attempting to fetch list yunohost at https://app.yunohost.org/official.json
2019-02-01 20:56:22,770 DEBUG requests.packages.urllib3.connectionpool _new_conn - Starting new HTTPS connection (1): app.yunohost.org
2019-02-01 20:56:23,156 DEBUG requests.packages.urllib3.connectionpool _make_request - https://app.yunohost.org:443 “GET /official.json HTTP/1.1” 200 41849
2019-02-01 20:56:23,193 SUCCESS yunohost.app success - [30719.63] La liste d’applications yunohost a été récupérée
2019-02-01 20:56:23,353 DEBUG moulinette.actionsmap process - action [30719.63] executed in 42.120s
2019-02-01 20:56:23,354 DEBUG moulinette.core release - lock has been released
2019-02-01 20:56:23,356 INFO geventwebsocket.handler log_request - 127.0.0.1 - - [2019-02-01 20:56:23] “PUT /update HTTP/1.1” 200 268 42.297646
2019-02-01 20:56:23,358 DEBUG geventwebsocket.handler close - Closed WebSocket
2019-02-01 20:56:23,359 DEBUG geventwebsocket.handler close - Failed to write closing frame -> closing socket
2019-02-01 20:56:23,359 DEBUG geventwebsocket.handler close - Closed WebSocket
2019-02-01 20:56:28,009 DEBUG geventwebsocket.handler run_application - Initializing WebSocket
2019-02-01 20:56:28,011 DEBUG geventwebsocket.handler upgrade_websocket - Validating WebSocket request
2019-02-01 20:56:28,153 DEBUG geventwebsocket.handler upgrade_connection - Attempting to upgrade connection
2019-02-01 20:56:28,155 DEBUG geventwebsocket.handler upgrade_connection - WebSocket request accepted, switching protocols
2019-02-01 20:56:28,183 DEBUG geventwebsocket.handler run_application - Initializing WebSocket
2019-02-01 20:56:28,185 DEBUG geventwebsocket.handler upgrade_websocket - Validating WebSocket request
2019-02-01 20:56:28,185 DEBUG geventwebsocket.handler upgrade_websocket - Can only upgrade connection if using GET method.
2019-02-01 20:56:28,188 DEBUG moulinette.authenticator.ldap init - initialize authenticator ‘default’ with: uri=‘ldap://localhost:389’, base_dn=‘dc=yunohost,dc=org’, user_rdn=‘cn=admin’
2019-02-01 20:56:28,192 DEBUG gnupg _open_subprocess - [‘gpg1’, ‘–status-fd’, ‘2’, ‘–no-tty’, ‘–version’]
2019-02-01 20:56:28,427 DEBUG gnupg _collect_output - stderr reader: <Thread(Thread-321, initial daemon)>
2019-02-01 20:56:28,430 DEBUG gnupg _collect_output - stdout reader: <Thread(Thread-322, initial daemon)>
2019-02-01 20:56:28,440 DEBUG gnupg _read_data - chunk: ‘gpg (GnuPG) 1.4.21\nCopyright © 2015 Free Software Foundation, Inc.\nLicense GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permit’
2019-02-01 20:56:28,442 DEBUG gnupg _open_subprocess - [‘gpg1’, ‘–status-fd’, ‘2’, ‘–no-tty’, ‘–batch’, ‘–passphrase-fd’, ‘0’, ‘–decrypt’]
2019-02-01 20:56:28,500 DEBUG gnupg _write_passphrase - Wrote passphrase
2019-02-01 20:56:28,502 DEBUG gnupg _threaded_copy_data - data copier: <Thread(Thread-323, initial daemon)>, <_io.BytesIO object at 0x6f5be420>, <open file ‘’, mode ‘wb’ at 0x6f66e2e0>
2019-02-01 20:56:28,504 DEBUG gnupg _collect_output - stderr reader: <Thread(Thread-324, initial daemon)>
2019-02-01 20:56:28,506 DEBUG gnupg _copy_data - closed output, 179 bytes sent
2019-02-01 20:56:28,507 DEBUG gnupg _collect_output - stdout reader: <Thread(Thread-325, initial daemon)>
2019-02-01 20:56:28,515 DEBUG gnupg _read_response - gpg: AES encrypted data
2019-02-01 20:56:28,516 DEBUG gnupg _read_response - [GNUPG:] NEED_PASSPHRASE_SYM 7 3 2
2019-02-01 20:56:28,518 DEBUG gnupg _read_data - chunk: ‘XXXXXXXXXXXXX’
2019-02-01 20:56:28,518 DEBUG gnupg _read_response - gpg: encrypted with 1 passphrase
2019-02-01 20:56:28,520 DEBUG gnupg _read_response - [GNUPG:] BEGIN_DECRYPTION
2019-02-01 20:56:28,521 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_INFO 2 7
2019-02-01 20:56:28,522 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT 62 1548944968
2019-02-01 20:56:28,523 DEBUG gnupg _read_response - [GNUPG:] PLAINTEXT_LENGTH 17
2019-02-01 20:56:28,524 DEBUG gnupg _read_response - [GNUPG:] DECRYPTION_OKAY
2019-02-01 20:56:28,525 DEBUG gnupg _read_response - [GNUPG:] GOODMDC
2019-02-01 20:56:28,526 DEBUG gnupg _read_response - [GNUPG:] END_DECRYPTION
2019-02-01 20:56:28,527 DEBUG gnupg decrypt_file - decrypt result: ‘XXXXXXXXXXXXX’
2019-02-01 20:56:28,638 DEBUG moulinette.core acquire - lock has been acquired
2019-02-01 20:56:28,638 DEBUG moulinette.actionsmap process - loading python module yunohost.tools took 0.000s
2019-02-01 20:56:28,639 INFO moulinette.actionsmap process - processing action [30719.64]: yunohost.tools.upgrade with args={‘ignore_packages’: False, ‘ignore_apps’: True, ‘auth’: <moulinette.authenticators.ldap.Authenticator object at 0x6f563490>}
2019-02-01 20:56:31,583 INFO yunohost.tools tools_upgrade - [30719.64] Mise à jour des paquets…
2019-02-01 20:56:49,291 INFO yunohost.tools tools_upgrade - [30719.64] Terminé
2019-02-01 20:56:49,294 DEBUG yunohost.log close - [30719.64] Log complet de cette opération : « Mise à jour des paquets Debian »
2019-02-01 20:56:49,303 SUCCESS yunohost.tools success - [30719.64] Le système a été mis à jour

J’aimerais beaucoup comprendre pourquoi, et surtout comment arrêter ça !

Merci :wink: