logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#26 01-03-2023 13:18:01

agp91
Membre
Distrib. : Debian GNU/Linux 11 (bullseye)
Noyau : Linux 5.10.0-20-amd64
(G)UI : xfce4
Inscription : 12-02-2023

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

Soit le script test/script1 :

#!/bin/bash

sudo_filepath=/etc/sudoers.d/${0##*/}

if [ "$1" == --sudo ]
then
  cmd1="/usr/bin/cat $3"
  cmd2="/usr/bin/rm $sudo_filepath"
  echo "$2 $(hostname) = (root) NOPASSWD: $cmd1 , NOPASSWD: $cmd2" > "$sudo_filepath"
  exit 0
elif [ "$1" != --reload ]
then
  p=$(readlink -f $0)
  pkexec  $p --sudo $(id -nu) "/etc/sudoers.d/${0##*/}"
  $p --reload "$@"
  exit 0
fi
shift

echo "user=$USER argument : $*"
sudo cat /etc/sudoers.d/"${0##*/}"
sudo rm $sudo_filepath
 



test/script1 arg1 arg2


user=DF argument : arg1 arg2
DF pc24 = (root) NOPASSWD: /usr/bin/cat /etc/sudoers.d/script1 , NOPASSWD: /usr/bin/rm /etc/sudoers.d/script1



Tu remarquera  p=$(readlink -f $0), c'est par-ce-que j'ai écris plus haut une clownerie (je corrige) : $0 ne retourne pas le chemin absolu, mais le chemin relatif du script (depuis là où il est lancé). Pkexec apparemment n'aime pas les chemins relatifs.

Dernière modification par agp91 (01-03-2023 13:23:52)

Hors ligne

#27 01-03-2023 14:59:03

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

Re,

En fait si ça fonctionne !
Mon erreur était de créer un fichier dans /etc/sudoers.d avec une extension.
Je m'en suis rendu compte avec un

visudo -c




Tiens voilà avec quoi j'ai testé, je l'ai agrémenté de retours :

#!/bin/bash

echo "uid=$UID"

auth_file="${0##*/}"
auth_file="${auth_file%.*}"

auth_test=$(sudo -ln | grep "(root).*NOPASSWD: */usr/bin/cat")

sudo_filepath="/etc/sudoers.d/$auth_file"

if [ ! "$auth_test" ]
then
  if [ "$UID" -eq 0 ]
  then
    cmd1="/usr/bin/cat /etc/sudoers.d/*"
    cmd2="/usr/bin/rm $sudo_filepath"
    echo "$1 $(hostname) = (root) NOPASSWD: $cmd1 , NOPASSWD: $cmd2" > "$sudo_filepath"
    exit 0
  else
    pkexec "$0" $(id -nu) "/etc/sudoers.d/$auth_file"
    $0
    exit
  fi
fi



echo "user=$USER"
# Test des droits avec affichage
echo "Affichage de droits :"
sudo -ln | grep "(root).*NOPASSWD: */usr/bin/cat"
echo

# Usage des droits
echo "Usage des droits  : sudo cat /usr/bin/cat /etc/sudoers.d/$auth_file"
sudo /usr/bin/cat /etc/sudoers.d/"$auth_file"
echo

# Enlèvement des droits
echo "Suppression des droits."
sudo /usr/bin/rm "$sudo_filepath"

# Essai d'utilisation des droits :
echo "Test : sudo cat /etc/sudoers.d/README"
sudo cat /etc/sudoers.d/README
 


Et le retour du lancement du script par son chemin absolu :

$ /home/tawal/Term/test_pkexec
uid=1000
uid=0
uid=1000
user=tawal
Affichage de droits :
    (root) NOPASSWD: /usr/bin/cat /etc/sudoers.d/*, /usr/bin/rm /etc/sudoers.d/test_pkexec

Usage des droits  : sudo cat /usr/bin/cat /etc/sudoers.d/test_pkexec
tawal Deb1 = (root) NOPASSWD: /usr/bin/cat /etc/sudoers.d/* , NOPASSWD: /usr/bin/rm /etc/sudoers.d/test_pkexec

Suppression des droits.
Test : sudo cat /etc/sudoers.d/README
[sudo] Mot de passe de tawal :
#
# As of Debian version 1.7.2p1-1, the default /etc/sudoers file created on
# installation of the package now includes the directive:
#
# #includedir /etc/sudoers.d
#
# This will cause sudo to read and parse any files in the /etc/sudoers.d
# directory that do not end in '~' or contain a '.' character.
#
# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.
#
# Note also, that because sudoers contents can vary widely, no attempt is
# made to add this directive to existing sudoers files on upgrade.  Feel free
# to add the above directive to the end of your /etc/sudoers file to enable
# this functionality for existing installations if you wish!
#
# Finally, please note that using the visudo command is the recommended way
# to update sudoers content, since it protects against many failure modes.
# See the man page for visudo for more information.
#
$


Ça fonctionne très bien, on voit la révocation des droits et la demande de mot de passe pour lire /etc/sudoers.d/README.

Super merci.gif

Dernière modification par Tawal (01-03-2023 15:01:27)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#28 01-03-2023 15:24:19

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

Je sais "double post".
On va le considérer comme ma conclusion roll


Du coup, je vois que 3 solutions viables :
  - la dernière évoquée (message ci-dessus)
  - lancer le script en root et les commandes user avec les bons droits.
  - ou, cas précis ici, éditer une fois pour toutes le fichier /etc/sudoers.d/apt-get avec cette ligne :

ALL ALL = (ALL:ALL) NOPASSWD: /usr/bin/apt-get --assume-yes --quiet install CHAÎNE_INVARIABLE*


peut-être plus dangereuse ...


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#29 01-03-2023 16:23:31

agp91
Membre
Distrib. : Debian GNU/Linux 11 (bullseye)
Noyau : Linux 5.10.0-20-amd64
(G)UI : xfce4
Inscription : 12-02-2023

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

Dans le script il faut modifier $0 par $(readlink -f $0), pour que le script puisse être lancé sans son chemin absolu.

Hors ligne

#30 01-03-2023 17:26:36

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

Oui, j'ai vu wink
Ce qui est bien aussi dans ta solution, c'est qu'il est possible d'écrire un fichier "polkit" spécialement pour le script.
Ce qui permet une personnalisation de la demande de mot de passe et plus encore ...

Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#31 01-03-2023 19:15:22

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

agp91 a écrit :

Dans le script il faut modifier $0 par $(readlink -f $0)



À prendre avec des pincettes, vu que je ne me rappelle plus exactement du pourquoi de ce changement, mais je me rappelle avoir mis à jour mes outils en shell il y a quelques années pour abandonner readlink -f au profit de realpath.

Après une recherche rapide, je pense que c’était pour suivre la recommandation que je viens de retrouver dans le man de readlink :

Note realpath(1) is the preferred command to use for canonicalization functionality.


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#32 01-03-2023 19:19:20

agp91
Membre
Distrib. : Debian GNU/Linux 11 (bullseye)
Noyau : Linux 5.10.0-20-amd64
(G)UI : xfce4
Inscription : 12-02-2023

Re : [Résolu] Droits root que pour 1 ligne d'un script lancé en USER.

vv222 a écrit :

Après une recherche rapide, je pense que c’était pour suivre la recommandation que je viens de retrouver dans le man de readlink :

Note realpath(1) is the preferred command to use for canonicalization functionality.


Alors il faut utiliser realpath wink

Hors ligne

Pied de page des forums