[user] Lancer une commande root sans l'être

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

[user] Lancer une commande root sans l'être

Message par Pierrot »

Bonjour,

Pour ajuster la vitesse du ventilateur j'utilise des commandes du type

Code : Tout sélectionner

# echo level 2 > /proc/acpi/ibm/fan
Mais j'aimerais bien que mon utilisateur courant puisse modifier /proc/acpi/ibm/fan sans être root ou sans tapper le mot de passe comme avec "su -c 'echo level 2 > /proc/acpi/ibm/fan'".
N'y a-t-il pas un moyen d'ajouter l'utilisateur à un groupe ibm/fan ?
En fait le but final c'est de pouvoir mettre la commande ci-dessus mais avec le ventilo au max (level 7) dès que l'applet Computer Temperature Monitor déclenche l'alarme (à 80°C) tout ça sans mot de passe.

Merci d'avance pour votre aide.
Dernière modification par Pierrot le sam. 10 avr. 2010, 18:37, modifié 1 fois.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17596
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [pacman] Lancer une commande root sans l'être

Message par benjarobin »

Pacman ???

Bref, tu peux coder un petit programme en C qui écrira cette valeur dans ce fichier. (Un truc bien hard coder par sécurité) Puis tu donne la possibilité quand tu le lance de prend les droit root automatiquement (le flag 's')

Le code a mettre dans un fichier.c

Code : Tout sélectionner

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
        FILE *f = fopen("/proc/acpi/ibm/fan", "w");
        if(f == NULL) {
                printf("Fail to open /proc/acpi/ibm/fan\n");
                return 1;
        } else {
                fputs("level 2\n", f);
                fclose(f);
        }
        return 0;
}

Code : Tout sélectionner

gcc lefichier.c -o fan-max
cp fan-max /usr/bin/
chown root:root /usr/bin/fan-max
chmod +s /usr/bin/fan-max
A moins que quelqu'un est quelque chose de plus propre
Dernière modification par benjarobin le sam. 10 avr. 2010, 18:43, modifié 1 fois.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [pacman] Lancer une commande root sans l'être

Message par Pierrot »

Oui pacman jme suis gourré en fait...
Alors coder quelque chose en C euh... à part les langages web je ne sais pas faire (mais peut apprendre c'est sûr...).
En ce moment pour le dual screen je met dans un fichier .sh la commande xrandr comme ci-dessous. C'est simple et vraiment le top puisqu'on peut le mettre dans le menu ou sur le panel (vive Linux pour ça d'ailleurs !), il doit bien être possible de faire pareil non ?

Code : Tout sélectionner

#!/bin/sh
xrandr --output LVDS --mode 1440x900 --rate 60 --output DVI-0 --mode 1680x1050 --rate 60 --left-of LVDS
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17596
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [user] Lancer une commande root sans l'être

Message par benjarobin »

J'ai redité avec le code... J'avais bien précisé que plus de détails allaient arriver
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [user] Lancer une commande root sans l'être

Message par Pierrot »

Pfiou mais c'est magnifique ! Et comment fait-on pour passer en argument un level différent ? Merci beaucoup !
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17596
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [user] Lancer une commande root sans l'être

Message par benjarobin »

Code : Tout sélectionner

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
        char *level = "2";
        FILE *f = NULL;

        if(argc == 1) {
        }
        else if(argc == 2) {
                level = argv[1];
        }
        else {
                printf("Invalid number of argument");
                return 2;
        }

        f = fopen("/proc/acpi/ibm/fan", "w");
        if(f == NULL) {
                printf("Fail to open /proc/acpi/ibm/fan\n");
                return 1;
        } else {
                fprintf(f, "level %s\n", level);
                fclose(f);
        }
        return 0;
}
Bon question sécurité il n'y en a pas vraiment je ne vérifie pas l'entrée...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [user] Lancer une commande root sans l'être

Message par Pierrot »

Ok, c'est vraiment génial merci beaucoup. Mais pourrais-tu m'expliquer comment lancer le script avec les arguments ?
Parce que je pige pas bien la gestion de ceux-ci (le if elseif else avec le argc)...
Et autre chose il n'y aurait pas un tuto pour commencer à apprendre le C mais en prenant en compte Linux ou pour interragir avec lui ?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17596
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [user] Lancer une commande root sans l'être

Message par benjarobin »

Si tu ne spécifie pas d'argument il prend comme niveau 2, sinon si tu as un argument (sans le level) on l'utilise.
Exemple (avec speed fan le nom du programme):
speed-fan auto ou speed-fan 3

Pour apprendre le C je conseil le "site du zero"
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [user] Lancer une commande root sans l'être

Message par Pierrot »

Ok je vais tester et lire tout ça, merci beaucoup t'es un chef !
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [user] Lancer une commande root sans l'être

Message par Pierrot »

Mince alors ! La commande gcc lefichier.c -o fan-max renvoie :

Code : Tout sélectionner

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld a retourné 1 code d'état d'exécution
Vraiment pas chance, mais comment faire ?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17596
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [user] Lancer une commande root sans l'être

Message par benjarobin »

Je serais curieux de voir ce fichier .c que tu essaye de compiler. Car ce que je te donne marche très bien... (Vraiment très basique)
Tu aurais pas essayer de changer un peu ?
Bon je suis sur a 99% que tu as éditer mon exemple sans avoir compris ce que tu faisais. Il faut la fonction main...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Pierrot
Daikyu
Messages : 79
Inscription : ven. 09 avr. 2010, 19:34

Re: [user] Lancer une commande root sans l'être

Message par Pierrot »

Benjarobin merci infiniment ! Comme un couillon j'avais en fait laissé le fichier vide :D forcément ya des heures ou on est plus très clair... Donc oui tout a fonctionné, et fonctionne niquel encore maintenant ! Jpeux piloter le ventilo les doigts ds le nez !
T'es trop fort ! Merci merci !
Répondre