[CMD] Exécuter une commande root sans l'être Le sujet est résolu

Demande d'aide : c'est ici.
Avatar de l’utilisateur
vv222
Membre actif
Membre actif
Messages : 852
Inscription : 18 avr. 2016, 20:14
Contact :
Status : Hors-ligne

Certaines commandes ne demandent les droits root que pour certaines actions, un exemple :

Code : Tout sélectionner

dave@HAL9000:~$ /bin/ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 30:85:a9:b0:dd:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:470:1f13:668::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::3285:a9ff:feb0:dddc/64 scope link 
       valid_lft forever preferred_lft forever
dave@HAL9000:~$ /bin/ip link set eth0 down
RTNETLINK answers: Operation not permitted
Un autre exemple tout bête :

Code : Tout sélectionner

dave@HAL9000:~$ /bin/ls ~/bureau/
briefing-challenge-2.zip  git.play.it-arch  pages.new          sales_invoice.pdf.sig  scripts.new  transistor_1280x1024.jpg
buildit                   images.new        sales_invoice.pdf  scripts                tmp
dave@HAL9000:~$ /bin/ls /root/
/bin/ls: impossible d'ouvrir le répertoire '/root/': Permission non accordée
Voilà pourquoi il est parfois parfaitement justifié d’utiliser sudo pour des programmes se trouvant sous /bin/ ou /usr/bin/ :icon_wink:
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

lol a écrit :Salut,
Je crois qu'on a pas vu le script, ou alors sur un autre forum... :003:
La solution serait:

1) Virer tous les sudo du script en question
2) Lancer le script lui même avec sudo, avec ceci dans sudoers:

Code : Tout sélectionner

Cmnd_Alias MonscriptDeLaMortQuiTue=/usr/local/bin/monscript.sh
ALL ALL=NOPASSWD: MonscriptDeLaMortQuiTue
ET de préserver les variables d'environnement dont tu as besoin.
Par exemple si tu as beoins du $HOME de l'utilisateur, il faudra mettre ceci dans sudoers:

Code : Tout sélectionner

#Defaults       env_reset
Defaults env_keep += "HOME"
Je pense que tu tourne en rond à cause des variables d'environnement depuis le début.
Sous Debian le réglage par défaut est:
Defaults env_reset

Mon sudo est réparé, et effectivement, le changement de sudoers sans visudo, ça marche pas ^^

A peine j'ai mis :

Code : Tout sélectionner

Cmnd_Alias MonscriptDeLaMortQuiTue=/usr/local/bin/monscript.sh
ALL ALL=NOPASSWD: MonscriptDeLaMortQuiTue
Visudo m'indique une erreur de syntaxe dans le script..... Je ne trouve pas l'erreur.
lol a écrit :Salut,
Si c'est bien encadré, pourquoi pas:

Code : Tout sélectionner

toto@tor:~$ sudo chown -R www-data:www-data /var/www/html/essai

Nous espérons que vous avez reçu de votre administrateur système local les consignes traditionnelles. Généralement, elles se concentrent sur ces trois éléments :

    #1) Respectez la vie privée des autres.
    #2) Réfléchissez avant d'utiliser le clavier.
    #3) De grands pouvoirs confèrent de grandes responsabilités.

Mot de passe [sudo] de toto :
toto n'apparaît pas dans le fichier sudoers. Cet événement sera signalé.
Edition du fichier sudoers pour définir avec précision ce que toto à le droit de faire:

Code : Tout sélectionner

toto ALL=NOPASSWD:/bin/chown -R www-data\:www-data /var/www/html/essai

Code : Tout sélectionner

toto@tor:~$ sudo chown -R www-data:www-data /var/www/html/essai
toto@tor:~$
Ce qu'il ne faut surtout pas c'est autoriser tout le monde à utiliser chown ou chmod (évidemment), et en tout cas pas partout...
Il faut lister les répertoires ou c'est possible, et si possible les UID (dans mon exemple c'est www-data).

Code : Tout sélectionner

toto@tor:~$ sudo chown -R toto:toto /var/www/html/essai
Mot de passe [sudo] de toto :
Désolé, l'utilisateur toto n'est pas autorisé à exécuter « /bin/chown -R toto:toto /var/www/html/essai » en tant que root sur tor.zehome.org.
ça j'aimerai bien pouvoir le faire, mais comme je ne peux pas spécifier un exécutant précis, ça ne peut pas fonctionner (le principe est d'attribuer ses propres droits à un dossier précis).

Merci pour votre contribution.
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

MaxdeConde a écrit :Mon sudo est réparé
C'est déjà ça.

Tu as essayé avec ce que je propose ?
lol a écrit :La solution serait:

1) Virer tous les sudo du script en question
2) Lancer le script lui même avec sudo, avec ceci dans sudoers:

Code : Tout sélectionner

Cmnd_Alias MonscriptDeLaMortQuiTue=/usr/local/bin/monscript.sh
ALL ALL=NOPASSWD: MonscriptDeLaMortQuiTue
ET de préserver les variables d'environnement dont tu as besoin.
Par exemple si tu as beoins du $HOME de l'utilisateur, il faudra mettre ceci dans sudoers:

Code : Tout sélectionner

#Defaults       env_reset
Defaults env_keep += "HOME"
As-tu modifié le fichiers sudoers pour préserver l'environnement ?
As-tu lancé le script (qui ne contient plus de sudo) avec sudo ?
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Oui, j'ai fait ceci, d'où mon : "Visudo m'indique une erreur de syntaxe".
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

MaxdeConde a écrit :Oui, j'ai fait ceci, d'où mon : "Visudo m'indique une erreur de syntaxe".
Ok, pardon j'avais lu trop vite...
Visudo + pas de changement et sauvegarde = Pas d'erreur ?
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

En commentant les deux lignes ajoutées (le Cmand_Alias, et le ALL), pas d'erreur.
Donc le keep_env est bon, et ça roule, par contre les deux ci-dessus, ça passe pas. J'ai zieuté à droite et à gauche, le Cmnd_Alias semble correct, donc je ne comprends pas où ça coince.....
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Peut-être essayer un truc plus proche de la réalité:

Code : Tout sélectionner

Cmnd_Alias script=/usr/local/bin/le_vrai_nom.sh
ALL ALL=NOPASSWD: script
Je suis au boulot... Je regarderai à tête reposée ce soir.
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

C'est ce que j'ai fait ^^ Je l'ai appelé MonScript. J'ai relu et relu pour vérifier mon code, et il me semble que je ne commets pas d'erreur dans la copie.
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Je t'ai un peu laissé tomber. Je m'excuse.
Je me suis laissé déborder. Des que j'ai le temps je regarde.
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Pas de soucis, t'inquiète, je continue à chercher pendant ce temps là :)
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Hello,
On peut avoir une copie du contenu du fichier sudoers et éventuellement des fichiers présents dans sudoers.d/ ?
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Salut,

Voici mon /etc/sudoers

Code : Tout sélectionner

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
#Defaults       env_reset
Defaults env_keep += "HOME"
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:


#includedir /etc/sudoers.d

Cmnd_Alias MonScript=/usr/local/bin/transfertPOL.sh
ALL ALL=NOPASSWD: MonScript

Mon dossier /etc/sudoers.d est vide à l'exception du README.
Avatar de l’utilisateur
BelZéButh
Contributeur
Contributeur
Messages : 454
Inscription : 22 avr. 2016, 08:39
Localisation : Ch'timi
Status : Hors-ligne

Salut,
MaxdeConde a écrit :Salut,

Voici mon /etc/sudoers

Code : Tout sélectionner

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
#Defaults       env_reset
Defaults env_keep += "HOME"
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:


#includedir /etc/sudoers.d

Cmnd_Alias MonScript=/usr/local/bin/transfertPOL.sh
ALL ALL=NOPASSWD: MonScript
Mon petit grain de sel.

Comment donner certains droits root à un utilisateur (Sudo)

Sudo permet de logguer tous les évènements, on sait qui a fait quoi et quand.

Code : Tout sélectionner

~# tail -f /var/log/auth.log
Contrôler le fichier de configuration et repérer les erreurs de syntaxe.

Code : Tout sélectionner

~# visudo -c
Host alias specification

Cette section permet de définir des groupes de machines ou réseaux.

Code : Tout sélectionner

# This is all the servers
 Host_Alias SERVERS = 192.168.0.1, 192.168.0.2, server1
 # This is the whole network
 Host_Alias NETWORK = 192.168.0.0/255.255.255.0
 # And this is every machine in the network that is not a server
 Host_Alias WORKSTATIONS = NETWORK, !SERVER
User alias specification

Cette partie permet de définir des alias pour les utilisateurs auquel sudo va donner des droits particuliers.

Code : Tout sélectionner

User_Alias STAFF=pierre,paul,jacques
Cmnd alias specification

Cette partie permet de définir des alias pour les commandes que vont pouvoir exécuter les utilisateurs.

Code : Tout sélectionner

Cmnd_Alias NET=/usr/local/bin/transfertPOL.sh
Bonne lecture.
La première loi du libre et de tout hacker, au sens noble, le partage de la connaissance !
Site de réinformation ... http://www.panamza.com
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Étrange,

J'ai copié collé ton sudoers une fois et j'ai eu l'erreur...

Code : Tout sélectionner

root@tor:~# visudo
>>> /etc/sudoers: erreur de syntaxe near line 31 <<<
>>> /etc/sudoers: erreur de syntaxe near line 32 <<<
Et maintenant ?
J'ai recommencé et plus d'erreur. Encore une fois et... erreur à nouveau.

En modifiant le nom de l'alias ça semble aller mieux. Il y a un truc qui ne lui plaît pas là dedans.
Essaye avec ça (ou n'importe quoi d'autre que MS):

Code : Tout sélectionner

Cmnd_Alias MS=/usr/local/bin/transfertPOL.sh
ALL ALL=NOPASSWD: MS
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Salut Salut,

Alors le visudo passe maintenant, mais ça ne semble pas prendre effet... Voici mes retours consoles.
test@debian-college:~$ sh /usr/local/bin/transfertPOL.sh
mkdir: impossible de créer le répertoire « /home/test/Bureau/OUAIS »: Le fichier existe
[sudo] password for test:
Sorry, user test is not allowed to execute '/bin/chown -v -h -R test:test /var/POL' as root on debian-college.
ln: impossible de créer le lien symbolique « /home/test/.PlayOnLinux/POL »: Permission non accordée
[sudo] password for test:
Sorry, user test is not allowed to execute '/bin/chown -v -h -R test:test /home/test/.PlayOnLinux' as root on debian-college.
cp: impossible d'évaluer « /var/POL/shortcuts/*.desktop »: Aucun fichier ou dossier de ce type
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,
Il faut comme je te disais, virer les sudo du script, et lancer le script avec sudo.
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Salut,

Je l'ai fait (j'ai testé différentes possibilités). Voici le retour sans sudo dans le script :

Code : Tout sélectionner

test@debian-college:~$ sudo sh /usr/local/bin/transfertPOL.sh 
[sudo] password for test: 
Sorry, user test is not allowed to execute '/bin/sh /usr/local/bin/transfertPOL.sh' as root on debian-college.
test@debian-college:~$ 
Je remets mon /etc/sudoers :

Code : Tout sélectionner

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
#Defaults       env_reset
Defaults        env_keep += "HOME"
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
Cmnd_Alias MS=/usr/local/bin/transfertPOL.sh
ALL ALL=NOPASSWD: MS

%users ALL=NOPASSWD: /bin/chown
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,

J'y suis parvenu comme ceci. Fichiers sudoers:

Code : Tout sélectionner

...
Defaults env_keep += "HOME"
...
Cmnd_Alias POL=/bin/sh /usr/local/bin/transfertPOL.sh
ALL ALL=NOPASSWD: POL
Script (j'ai fais 2/3 adaptations, mais je pense que le principal y est):

Code : Tout sélectionner

$ cat /usr/local/bin/transfertPOL.sh
#!/bin/bash
#transfert de POL au démarrage de la session
groupe=$(id -gn $1)
echo $groupe
uid=$(id -u $1)
echo $uid
POL=/var/POL
home=$(eval echo ~$1)
lien=$home/.PlayOnLinux
#changement de propriétaire du dossier
chown -h -R $1:$groupe $POL
ln -s $POL $lien
chown -h -R $1:$groupe $lien
#Copie des raccourcis sur le Bureau
cp --preserve=ownership $POL/shorcuts/*.desktop $home/Desktop
Ce qui donne:

Code : Tout sélectionner

toto@tor:~$ sudo sh /usr/local/bin/transfertPOL.sh
root
0

Code : Tout sélectionner

toto@tor:~$ vdir -a
total 44
drwxr-xr-x 7 toto toto 4096 mai   25 23:06 .
drwxr-xr-x 7 root root 4096 mai    1 00:41 ..
-rw------- 1 toto toto 3408 mai   25 23:03 .bash_history
-rw-r--r-- 1 toto toto  220 mai    1 00:41 .bash_logout
-rw-r--r-- 1 toto toto 3526 mai    1 00:41 .bashrc
drwx------ 3 toto toto 4096 mai    3 13:21 .cache
drwx------ 3 toto toto 4096 mai    3 13:21 .config
drwxr-xr-x 2 toto toto 4096 mai   25 23:06 Desktop
drwxr-xr-x 3 toto toto 4096 mai    3 13:15 .local
drwxr-xr-x 2 toto toto 4096 mai    3 14:13 .nano
lrwxrwxrwx 1 root root    8 mai   25 23:06 .PlayOnLinux -> /var/POL
-rw-r--r-- 1 toto toto  675 mai    1 00:41 .profile
-rw------- 1 toto toto    0 mai    3 13:16 .Xauthority

Code : Tout sélectionner

toto@tor:~$ vdir -a .PlayOnLinux
lrwxrwxrwx 1 root root 8 mai   25 23:06 .PlayOnLinux -> /var/POL

Code : Tout sélectionner

toto@tor:~$ vdir -a Desktop/
total 8
drwxr-xr-x 2 toto toto 4096 mai   25 23:06 .
drwxr-xr-x 7 toto toto 4096 mai   25 23:06 ..
-rw-r--r-- 1 root root    0 mai   25 23:06 1.desktop
-rw-r--r-- 1 root root    0 mai   25 23:06 2.desktop
je ne sais pas si au final c'est ce que tu souhaite, mais le script fonctionne avec les droits d'un simple utilisateur.
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MaxdeConde
Membre
Membre
Messages : 25
Inscription : 03 mai 2016, 08:40
Status : Hors-ligne

Effectivement, on approche du résultat, merci lol.
Pour l'instant :
/var/POL appartient à userA.
userB réussi à modifier les droits de /var/POL sans rentrer de mdp.

Mais, le dernier souci, c'est que userB donne les droits root au dossier /var/POL alors que ce sont ses propres droits qu'il doit attribuer.

On n'est pas loin de la solution, c'est ce que j'ai eu de plus probant comme résultat depuis des semaines. Merci pour ce rayon de soleil lol :)
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,
Ravi d'avoir aidé à débroussailler!
Je commence à me perdre dans ce que tu souhaites faire exactement.
Pourrais-tu me re d'écrire la procédure (et l'objectif a atteindre) et les scripts utilisés (désolé de te demander ça, mais il y a eu pas mal de posts depuis le début et je suis un peu perdu...).
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Répondre