script setuid "suspend to disk"

script setuid "suspend to disk" - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 21-08-2004 à 02:32:52    

je me suis fais un petit script pour faire un suspend_to_disk (hibernate) automatique. C'est une ligne unique:

#!/bin/sh
echo 4 > /proc/acpi/sleep


 
lorsque je le lance en root la manip se fait sans probleme. Par contre ce que je voudrais c'est que n'importe quel user puisse exécuter cette commande simplement. J'ai essayé de jouer avec les SUID bits:

ll suspend*
-rwsr-sr-x   1 root       root         36 Aug 20 20:11 suspend_to_disk*


 
malheureusement lorsque je lance mon script avec un user normal j'ai le message:

[toto@localhost home]$ ./suspend_to_disk
./suspend_to_disk: line 2: /proc/acpi/sleep: Permission denied


 
Pourquoi il me donne pas la permission? Je capte pas mon /proc/acpi/sleep est pourtant en:

[toto@localhost home]$ ll /proc/acpi/sleep
-rw-r--r--  1 root root 0 Aug 21 02:31 /proc/acpi/sleep


 
Merci bcp pour vos idées...! :wahoo:


Message édité par Figti le 21-08-2004 à 02:35:04
Reply

Marsh Posté le 21-08-2004 à 02:32:52   

Reply

Marsh Posté le 21-08-2004 à 02:36:03    

jaurais tendance à dire parce qu'il peut lancer le script en tant que root, mais il n'a pas les accès root pour faire des manip sur d'autres fichiers
 
en gros, le user il est root que sur le script
 
/* je crois, je ne l'affirme pas */


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-08-2004 à 03:02:59    

mais le setuid permet pas de contourner ca justement?

Reply

Marsh Posté le 21-08-2004 à 03:04:54    

j'aurais tendance à dire que non
 
le script est exécuté en tant que root, mais ne te droit pas accès partout en tant que root
 
si tu veux vraiment tester, créer toi un fichier toto.txt en 700 et tente de le lire avec un script tata.sh qui est 770 avec un setuid


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-08-2004 à 13:32:28    

'ffectivement ca passe pas non plus.  :sweat:
 
du coup, je sais plus comment faire... j'ai cette ligne de commande qui doit être exécutée en root et je voudrais que n'importe quel user puisse l'exécuter. comment donc?
:jap:

Reply

Marsh Posté le 21-08-2004 à 14:09:50    

tu peux pas chmodder le fichier sleep pour que n'importe qui ait accès en écriture?


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-08-2004 à 14:38:47    

(merci pour ton soutien ;))
non je crois pas puisque c'est un truc système... pas un vrai fichier :(

Reply

Marsh Posté le 21-08-2004 à 14:41:31    

bon moi jai viré l'acpi de mon kernel, mais si je regarde /proc/cpuinfo, c'est bien un fichier
 
selon moi c'est tous des fichiers "normaux"


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-08-2004 à 14:56:12    

Ouaip. effectivement ca passe. mais j'sais pas ca me chagrine un peu de changer des droits sur des "fichiers" système.
j'avais un jour entendu que /proc et /dev étaient montés "à la manière" d'un système de fichier, mais sans l'être vraiment.
D'ou ma réticence à modifier des trucs là-dedans.
 
M'enfin si on m'assure que gênera rien... soit! ;)

Reply

Marsh Posté le 21-08-2004 à 15:19:31    

bin de manière logique, tu veux que n'importe qui puisse écrire dans /proc/acpi/sleep alors la solution c'est de mettre un o+w sur celui ci
 
par contre c'est là que des acls sont pratique (comme avec DFS) où l'on a des acl donne le droit d'écriture sur un fichier, mais qui empêche de changer les acls ou de le supprimer


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-08-2004 à 15:19:31   

Reply

Marsh Posté le 25-08-2004 à 21:43:06    

Rha............ :cry:
J'ai cru que ca passait, mais le filou se laisse pas faire : lorsque je reboot il remet les droits classiques sur /proc/acpi/sleep :(
Y'a donc jamais personne qu'a eu besoin de ca? (sauf toi Burgergold ;))

Reply

Marsh Posté le 25-08-2004 à 22:19:38    

bah tu te rajoutes un truc au boot qui va le chmodder comme tu le veux :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 25-08-2004 à 22:23:02    

pfiou c'te truc de sale... :/
Une autre suggestion? :P

Reply

Marsh Posté le 25-08-2004 à 22:28:06    

/proc/acpi/sleep devient un lien symbolique vers un fichier sur lequel tlm a le droit en écriture? :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 25-08-2004 à 22:47:22    

et sudo ?

Reply

Marsh Posté le 25-08-2004 à 23:06:02    

Je pense pas que ca puisse aller parce je voudrais associer cette commande root à une icone KDE.
Peut-être que je connais mal sudo, mais pour moi cette commande oblige à taper un passwor. Or justement je voudrais que ce soit d'un usage facile...

Reply

Marsh Posté le 25-08-2004 à 23:09:40    

tu compiles un petit truc en C qui a le password à l'intérieur et qui va effectuer la tache avec un sudo


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 25-08-2004 à 23:11:48    

euh... y'a pas un moyen simple de faire ce truc de 3 fois rien? Ca prend des proportions impressionnantes ! :D

Reply

Marsh Posté le 25-08-2004 à 23:13:41    

bah c'est pas très gros à faire en C sérieusement
 
le plus simple reste d'ajouter le chmod dans ton inittab


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 27-08-2004 à 22:10:10    

OK ca passe.
Pour info voilà le truc. Avec le Setuid ca marche nickel pour n'importe quel user.

#include <stdio.h>
int main(void)
{
        char value = '4' ;
        FILE *monFichier ;
 
        if ((monFichier = fopen("/proc/acpi/sleep", "w" )) != NULL)
        {
                if (fwrite(&value, sizeof(char), 1, monFichier) != 1)
                {
                        fclose(monFichier) ;
                        printf("Write error - Suspend to Disk interrupted\n" ) ;
                        exit(1) ;
                }
        }
        else
                {
                printf("Error when trying to open /proc/acpi/sleep\n" ) ;
                exit(1) ;
                }
 
        fclose(monFichier) ;
        printf("Suspend to Disk pending...\n" ) ;
 
        return 0 ;
}
 


Message édité par Figti le 27-08-2004 à 22:10:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed