Dossier inconnu en root mais ok avec sudo

bonjour,
pour info à propos du fichier pris en exemple ci-dessous et dont les droits ont été modifiés :

mm@Xfce:~$ ls -l /etc/ssh/sshd_config
-rw------- 1 root root 3748 12 sept. 17:07 /etc/ssh/sshd_config

en essayant d’utiliser la commande diff pour des fichiers protégés je suis tombé sur un problème avec une console root qui m’a d’abord fait penser , à tort , que diff était réservé aux fichiers non protégés .

À des fins de test je commence par copier /etc/ssh/sshd_config dans /home/mm sous le nom c1 . Puis je modifie c1 afin d’introduire une différence avec l’original ( ici un espace dans le nom d’un utilisateur ) . Ensuite j’essaie la commande diff avec sudo puis , dans un autre terminal en root

mm@Xfce:~$ sudo cp /etc/ssh/sshd_config c1
[sudo] Mot de passe de mm : 
mm@Xfce:~$ sudo less c1 [modification de c1]
mm@Xfce:~$ sudo diff /etc/ssh/sshd_config c1
127c127
AllowUsers mm  mm3 mm-lvm

AllowUsers mm  mm3 mm -lvm

avec une 2ème console root :

mm@Xfce:~$ su -
Mot de passe : 
root@Xfce:~# diff /etc/ssh/sshd_config c1
diff: c1: Aucun fichier ou dossier de ce type

pourquoi root ne reconnaît-il pas c1 ?

Bonjour,

diff lit les fichiers lisibles, ce n’est pas son boulot de vérifier s’ils sont protégés ou non, c’est celui du système de fichiers et sa gestion des droits d’accès.

Si ça ne fonctionne pas, c’est que ton environnement (dont le répertoire de travail) est modifié entre tes deux exécutions. Un des deux fichiers comparée est référencé par son chemin relatif, dépendant donc du répertoire de travail.

donc en restant en root :

root@Xfce:~# cp /etc/ssh/sshd_config c2
root@Xfce:~# less c2 [modif]
root@Xfce:~# diff /etc/ssh/sshd_config c2
127c127
< AllowUsers mm  mm3 mm-lvm
---
> AllowUsers mm  mm3 mm -lvm

merci pour la réponse qui résout un problème que j’avais déjà rencontré et que je n’arrivais pas à solutionner .

note : chemin relatif et donc chemin absolu ? Bon…
ok j’ai pigé et à relier à une remarque au sujet de l’emploi du raccourci ~ que je n’arrivais pas à comprendre ; enfin je suppose :

root@Xfce:~# diff /etc/ssh/sshd_config c1
diff: c1: Aucun fichier ou dossier de ce type
root@Xfce:~# diff /etc/ssh/sshd_config /home/mm/c1
127c127
< AllowUsers mm  mm3 mm-lvm
---
> AllowUsers mm  mm3 mm -lvm

ps : tant qu’on est avec diff : je sais comment comparer 2 fichiers non protégés sur 2 machines différentes , mais est-ce possible avec des fichiers protégés ?

Bonjour

Répertoire courant
On peut faire s’afficher le répertoire courant en lançant la commande pwd :

michel@deb114x:~$ pwd
/home/michel
michel@deb114x:~$ 
michel@deb114x:/media/michel/128M_déchiffré$ pwd
/media/michel/128M_déchiffré
michel@deb114x:/media/michel/128M_déchiffré$ 
michel@deb114x:~/Téléchargements/xmlVirsh$ pwd
/home/michel/Téléchargements/xmlVirsh
michel@deb114x:~/Téléchargements/xmlVirsh$ 

ou, en faisant s’afficher la valeur qui a été assignée à la variable PWD

michel@deb114x:~$ echo $PWD
/home/michel
michel@deb114x:~$ 

Chemin absolu <=> relatif à la racine du système de fichiers du système linux utilisé
Ce type de chemin pourra être utilisé dans une commande quelque soit le répertoire courant depuis lequel la commande sera lancée.

dans les deux blocs de texte suivants,
comme le chemin du fichier donné en argument à la commande ls était un chemin absolu,
la même ligne commande ls a listé exactement le même fichier.

michel@deb114x:~/Téléchargements/xmlVirsh$ pwd
/home/michel/Téléchargements/xmlVirsh
michel@deb114x:~/Téléchargements/xmlVirsh$ ls -l /etc/fstab
-rw-r--r-- 1 root root 1043  7 sept. 15:04 /etc/fstab
michel@deb114x:~/Téléchargements/xmlVirsh$ 
michel@deb114x:~$ pwd
/home/michel
michel@deb114x:~$ ls -l /etc/fstab
-rw-r--r-- 1 root root 1043  7 sept. 15:04 /etc/fstab
michel@deb114x:~$ 

Chemin relatif <=> relatif au répertoire courant
Ce type de chemin indiquera un chemin différent selon le répertoire courant depuis lequel la commande sera lancée.

Dans les deux blocs de texte suivants,
comme le chemin du fichier donné en argument à la commande ls était un chemin relatif,
la même ligne commande ls n’a pas listé le même fichier.

michel@deb114x:~$ pwd
/home/michel
michel@deb114x:~$ ls -l .bashrc
-rw-r--r-- 1 michel michel 4006 11 juin  00:24 .bashrc
michel@deb114x:~$ 
root@deb114x:~# pwd
/root
root@deb114x:~# ls -l .bashrc
-rw-r--r-- 1 root root 571 10 avril  2021 .bashrc
root@deb114x:~# 

Avec l’interpréteur de commande(s) bash et dans une ligne de commande(s),
le caractère tilde (~) sera remplacé par le chemin absolu du répertoire personnel du compte utilisateur qui lancera la ligne de commande :

michel@deb114x:~/Téléchargements/xmlVirsh$ ls -l ~/.bashrc
-rw-r--r-- 1 michel michel 4006 11 juin  00:24 /home/michel/.bashrc
michel@deb114x:~/Téléchargements/xmlVirsh$ 
jeff@deb114x:~/Images$ ls -l ~/.bashrc
-rw-r--r-- 1 jeff jeff 4006  3 sept.  2018 /home/jeff/.bashrc
jeff@deb114x:~/Images$ 
root@deb114x:/etc/apt# ls -l ~/.bashrc
-rw-r--r-- 1 root root 571 10 avril  2021 /root/.bashrc
root@deb114x:/etc/apt# 

Voir la page du manuel du shell bash
en lançant une des lignes de commandes suivantes :

man --pager='less -p "Développement du tilde$"' bash
LANG=C man --pager='less -p "Tilde Expansion$"' bash

c’est ce que j’avais retenu de mes déboires avec sudo et root et après l’explication de Almtesh : à moins de savoir exactement où on est mieux vaut développer une adresse à partir de / .

merci d’avoir pris le temps de développer ces notions de chemin .

Et pour ce qui est de comparer 2 fichiers protégés sur 2 machines différentes , est-ce possible ? Ma réponse intuitive est non à cause des mots de passe différents , mais peut-être que je me trompe .

C’est une autre façon de dire qu’il s’agirait d’une adresse utilisant un chemin absolu.


Je ne sais pas ce que veux dire « fichiers protégés »
mais pour pouvoir comparer le contenu de deux fichiers en utilisant la commande diff,
il faudra seulement que le compte utilisateur qui va lancer la commande diff ait la possibilité d’avoir accès au contenu des deux fichiers.

le mieux est que je fasse un essai en passant par le protocole scp pour transférer un fichier /etc/ssh/sshd_config modifié pour introduire une différence , sur ma machine .

  • fichier protégé dans mon esprit = tout fichier dont le propriétaire est root et qui n’écessite donc un mot de passe pour le lire .

c’est bien ce que je pensais le fichier à transférer ayant root pour propriétaire conduit à Permission denied ( à partir d’une console user ) . Peut-être en utilisant scp à partir d’une console root mais tu m’avais dit qu’utiliser ssh avec sudo (donc en tant que root ? ) n’est pas conseillé . Donc une clef USB s’impose , non ?

Ou alors uniquement pour le transfert je change le propriétaire , mais est-ce acceptable du point de vue de la sécurité ?

Mais quel est le but final de cette comparaison des fichiers de configuration du serveur ssh de deux systèmes différents ?

pour régler mon problème d’autentification refusée , avec ssh , j’ai eu à trouver dans /etc/ssh/sshd_config une erreur qui s’y était glissée lorsque je l’ai modifié suite aux recommandations de zargos , pour améliorer la sécurité de la connexion . Or je disposais d’un autre fichier sur une autre machine , modifié à la main lui aussi et de la même manière et qui était fonctionnel . Donc j’aurais voulu comparer à l’aide de diff ces deux fichiers de propriétaires root car le fameux espace blanc qui m’a servi ci-dessus était l’erreur à trouver au milieu du fichier ( depuis j’ai transféré le AllowUsers… en fin de fichier , c’est nettement plus visible ) .

Dans ce cas précis le protocole scp n’était de toute façon pas en état de fonctionner , donc je devais passer par une clef USB . Mais du coup je me suis posé la question du transfert entre 2 machines de fichiers de propriétaire root à des fins de comparaison ou autres .

Merci beaucoup pour cette très claire explication du besoin :slight_smile:


Les attributs du fichier /etc/ssh/sshd_config permettent un accès en lecture à un compte utilisateur non privilégié :

michel@deb114x:~$ ls -l /etc/ssh/sshd_config
-rw-r--r-- 1 root root 3289  2 juil. 00:37 /etc/ssh/sshd_config
michel@deb114x:~$ 

donc, il est possible de comparer le contenu de ce fichier avec celui qui serait sur une machine distante sans avoir besoin d’utiliser les privilèges du compte root:

  • En supposant que le nom du compte utilisateur existant et accessible sur la machine distante soit : zao
  • et que l’adresse IP du système qui tourne sur la machine distante soit : 192.168.122.1
ssh  zao@192.168.122.1  "cat /etc/ssh/sshd_config" | diff  /etc/ssh/sshd_config  -

(ne pas oublier le tiret qui est en fin de ligne de commandes car il est indispensable)

sauf que en suivant les recommendations pour améliorer la sécurité de ssh et tirées de la doc CIS_Debian_Linux_8_Benchmark_v2.0.2 trouvée à partir de la source située à https://workbench.cisecurity.org/sections/1431439/recommendations/2296983 ( lien non direct qui conduit aux téléchargements gratuits ) ces permissions ont été rognées et sont devenues (0600) chez moi . mais j’ai compris le principe et c’est l’essentiel .

merci pour toutes ces explications .

Et oui,
sans les données précises du contexte, on a toutes les chances de proposer une mauvaise solution.

Je précise que je ne dis pas ça pour toi et que ce n’est pas du tout un reproche :

  • du côté du demandeur il est difficile de savoir quelles informations donner concernant le contexte
  • et du côté de l’aidant il est difficile de devoir tout demander à chaque fois.

j’ai remis temporairement les droits à (0644) et cette commande fonctionne bien . Elle m’a d’ailleurs permis de constater que je n’avais pas tout mis aux préconisations de la doc de CIS . J’ai rajouté une sortie diff.txt ( juste pour tester ce que j’ai lu ) .

je viens de réaliser la situation :

  • depuis mon 1er message , du fait de mon imprécision due à mon manque de connaissances , il y a un malentendu car j’aurais dû préciser que j’avais modifié les droits de ce fichier = passage de 0644 à 0600 et alors la nécessité de l’utilisation de sudo diff ou d’une console root devenait plus claire
  • de plus je me focalisais sur le propriétaire , root en l’occurence , alors que le plus important sont les permissions associées , ce qui m’a fait réaliser que même un fichier de propriétaire root peut être lu par un utilisateur et donc ma notion de « fichier protégé » était bien trop imprécise

mea culpa , mea culpa .

  • du coup j’ai modifié mon 1er message … mieux vaut tard que jamais .