Page 1 sur 1

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

Publié : sam. 10 avr. 2010, 15:49
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.

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

Publié : sam. 10 avr. 2010, 18:26
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

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

Publié : sam. 10 avr. 2010, 18:37
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

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

Publié : sam. 10 avr. 2010, 18:46
par benjarobin
J'ai redité avec le code... J'avais bien précisé que plus de détails allaient arriver

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

Publié : sam. 10 avr. 2010, 19:01
par Pierrot
Pfiou mais c'est magnifique ! Et comment fait-on pour passer en argument un level différent ? Merci beaucoup !

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

Publié : sam. 10 avr. 2010, 19:17
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...

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

Publié : sam. 10 avr. 2010, 21:04
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 ?

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

Publié : sam. 10 avr. 2010, 21:16
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"

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

Publié : sam. 10 avr. 2010, 21:24
par Pierrot
Ok je vais tester et lire tout ça, merci beaucoup t'es un chef !

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

Publié : dim. 11 avr. 2010, 03:26
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 ?

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

Publié : dim. 11 avr. 2010, 04:59
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...

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

Publié : dim. 11 avr. 2010, 11:18
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 !