ENVIRONNEMENT : Modification de la valeur de "PATH" Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Bonjour, :006:

Version courte


La commande doas sous Debian n'ajoute pas à la variable PATH les chemins : /sbin:/usr/sbin

J'ai trouvé une solution qui fonctionne :

Ajouter à la fin de : /home/admin/.profile

Code : Tout sélectionner

PATH="$PATH:/usr/sbin:/sbin"
Mais je ne suis pas certain que cela soit une solution très "orthodoxe" :017:





Version longue

CONTEXTE

Comme déjà discuter dans SÉCURITÉ : "doas" alternative à "sudo" (vos avis)
je teste l'usage de doas pour l'administration d'un serveur web.

Pour cela je dispose d'un utilisateur "ordinaire" nommé admin
ce compte sert aux tâches d'administration via connexion SSH avec une clé, évitant ainsi les connexions en "root" (interdites dans sshd.config).

Pour la configuration de doas l'ajout au fichier /etc/doas.confd'une ligne :

Code : Tout sélectionner

permit nopass admin
permet à cet utilisateur l'usage sans restriction de : $ doas <commande>


Mais malgré :

Code : Tout sélectionner

admin@server:~$  echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

admin@server:~$ doas env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

on a :

Code : Tout sélectionner

admin@server:~$ doas fdisk -l
doas: fdisk: command not found

alors que : admin@server:~$ doas /sbin/fdisk -l

fonctionne parfaitement !


La modification de /etc/doas.conf pour une des lignes suivantes :

Code : Tout sélectionner

permit nopass admin as root
permit nopass setenv { PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin } admin
permit nopass setenv { PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin } admin as root
n'y change rien.


Il semblerait que la cause soit qu'au moment où doas passe la commande,
la variable PATH ne soit pas encore modifiée (ce n'est pas très clair pour moi)


J'ai trouvé ce problème posé (à propos de Debian) dans une liste de diffusion d'OpenBSD : 'doas 101 question' - MARC
et
aussi dans :doas doesn't run a -usr-sbin binary | unix.stackexchange.com


La discussion sur OpenBSD se conclut par :
In order to use doas,
you already have to customize your system (it does nothing out-of-the-box).

You might as well take another step, and customize your login so that your PATH contains /usr/local/sbin and so on.

The details of how to do this are extremely specific to how you login,
but it should be pretty simple if you know what you're doing.



Traduction
Pour pouvoir utiliser doas,
vous devez d'abord personnaliser votre système (il ne fait rien par défaut).

Vous pouvez aussi aller pour loin, et personnaliser votre login pour que votre PATH contienne /usr/local/sbin et ainsi de suite.

Les détails de cette opération sont extrêmement spécifiques à votre mode de connexion,
mais cela devrait être assez simple si vous savez ce que vous faites.


Voilà, je pense que vous comprenez où je veux en venir :

... cela devrait être assez simple si vous savez ce que vous faites.



Avant de poster ici,
pensant que la question relevait d'avantage de doas + linux
que de Debian plus spécifiquement,
j'ai posé la question sur LQ : doas : setting root's PATH (/sbin) for admin user


LQ m'a permis de trouvé une solution qui fonctionne bien :

Ajouter à la fin de : /home/admin/.profile

Code : Tout sélectionner

PATH="$PATH:/usr/sbin:/sbin"
on m'a par-ailleurs conseillé d'ajouter l'exportation de cette variable,
en remplaçant la ligne précédente par celle-ci :

Code : Tout sélectionner

export PATH="$PATH:/usr/sbin:/sbin"
mais je ne saisis pas la subtilité car ~/.profile fixe la valeur pour la session
ou je zappe un truc important ?


En tous cas, ça fonctionne !



Une autre méthode serait d'agir au niveau de pam
(c'est totalement nouveau pour moi)

Voici ce que j'ai testé et qui ne fonctionne pas :

J'ai crée ~/.pam_environment pour :

Code : Tout sélectionner

$ cat ~/.pam_environment
PATH           DEFAULT=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/sbin
(jai aussi testé de remplacer "DEFAULT" par "OVERRIDE" sans plus de succès)


puis, j'ai édité /etc/pam.d/doas pour :

Code : Tout sélectionner

$ cat /etc/pam.d/doas
#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session required pam_env.so user_readenv=1
j'ai aussi testé cette version :

session required pam_env.so readenv=1 user_readenv=1

sans plus de succès.

Code : Tout sélectionner

admin@server:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

admin@server:~$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

admin@server:~$ doas env | grep PATH
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
Visiblement cela ne donne pas le résultat attendu :(

Mais je dois avouer que j'ai assez de mal à bien cerner ces histoires d'environnement "pam".


Petite question annexe :

Quelles différences entre ces 3 commandes :

$ echo $PATH

$ set | grep PATH

$ env | grep PATH

car elles renvoient la même sortie.


Voilà, j'espère ne pas avoir été trop long et confus,
et vous saurez me dire la façon la plus orthodoxe de résoudre ce type de problème sans créer de faille, ni effets de bord indésirables.


Merci de m'avoir lu.
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Je me doutais que la solution précédemment décrite utilisant /home/admin/.profile
pour ajouter les chemins /sbin:/usr/sbin
n'allait fonctionner que pour bash

je viens de tester l'usage de doas dans une commande passée via ssh

P.ex :

Code : Tout sélectionner

$ ssh admin@server 'doas fdisk -l' > info.txt
doas: fdisk: command not found
car

Code : Tout sélectionner

$ ssh admin@server 'echo $PATH' | cat -
/usr/local/bin:/usr/bin:/bin:/usr/games
donc il faudrait à chaque fois passer la variable :

Code : Tout sélectionner

$ ssh admin@server 'export PATH="${PATH}:/sbin:/usr/sbin" && doas fdisk -l' > info.txt
Ce n'est pas que je sois si flemmard, mais je préférerais :
  1. Éviter des oublis
  2. Apprendre à configurer cela proprement.
Merci :003:
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

J'ai trouvé sur la toile plusieurs pistes indiquant :

Côté serveur :

Dans /etc/ssh/sshd_conf paramétrer :

Code : Tout sélectionner

PermitUserEnvironment yes
Redémarrer le service SSHD
et
éditer /home/admin/.ssh/environment

j'ai testé sans résultat les lignes suivantes :

Code : Tout sélectionner

export PATH="$PATH:/usr/sbin:/sbin"
PATH="$PATH:/usr/sbin:/sbin"
PATH="/usr/sbin:/sbin"
J'ai du rater qqchose... :017:
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Finalement pour les connexions SSH (c'est le seul moyen que j'aie/connaisse pour la maintenance)
avec pour le compte de mon utilisateur "admin" sur le serveur :

Code : Tout sélectionner

$ cat .ssh/environment
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
ça le fait !

Notez que la syntaxe de ce fichier ne supporte pas : PATH=$PATH:/sbin:/usr/sbin
et
que si je veux exécuter des commandes faisant intervenir des variables côté serveur via ssh
alors j'édite d'abord ce fichier pour fournir les valeurs de mes variables (je n'ai pas trouvé mieux pour le moment :017: )

Bon, je marque résolu car le sujet n'emballe pas les foules.

:191:
**Simple Utilisateur** -- Debian stable - XFCE
Répondre