Applications, problèmes de configuration réseau
AchilleFraisse
Elfe
Messages : 623 Inscription : dim. 27 avr. 2014, 09:32
Message
par AchilleFraisse » ven. 19 août 2016, 14:38
Bonjour,
J'ai un programme qui nécessite d'être lancé en root, car il modifie le contenu dans fichier root. Je l'éxécute donc comme ça :
Afin que je puisse le modifier en tant qu'utilisateur normal, je fais :
Code : Tout sélectionner
sudo chown root:root mon_programme
sudo chmod u+s mon_programme
Et quand je tape :
il me dit encore qu'il faut que je soit root. Bizzare, non ?
Dernière modification par
AchilleFraisse le ven. 19 août 2016, 18:46, modifié 1 fois.
benjarobin
Maître du Kyudo
Messages : 17632 Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon
Message
par benjarobin » ven. 19 août 2016, 15:04
Bonjour, si c'est un script c'est normal...
Par contre je n'ai pas vraiment compris pourquoi tu avais besoin des droits root. Ton programme fait quoi concrètement ?
AchilleFraisse
Elfe
Messages : 623 Inscription : dim. 27 avr. 2014, 09:32
Message
par AchilleFraisse » ven. 19 août 2016, 15:07
A...
Oui, c'est un script bash.
Et du coup, je fais comment ?
Je veux modifier la valeur de /sys/class/leds/asus::kbd_backlight/brightness en tant qu'utilisateur normal, donc sans passer par root et sans modifier les droits et le propriétaire du fichier brigtness.
C'est un script pour modifier le rétro-éclairage de mon clavier.
benjarobin
Maître du Kyudo
Messages : 17632 Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon
Message
par benjarobin » ven. 19 août 2016, 18:00
Pourquoi tu ne veux pas modifier les droits de ce fichier ? Ce serait plus sécurisé que de faire un bête programme setuid (à moins de faire correctement les choses). Bref, si tu veux le faire, il faut le faire en C
avi3000
Chu Ko Nu
Messages : 405 Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois
Message
par avi3000 » ven. 19 août 2016, 21:41
Le programme C qui fait ce que tu veux sans le paquet upower.
la compile => gcc asus-kbd-brightness.c -o asus-kbd-brightness -std=gnu99 -Wall -s
les capabilities => sudo setcap cap_setuid+ep asus-kbd-brightness
c'est cadeau.
asus-kbd-brightness.c
Code : Tout sélectionner
#define APPNAME "asus-kbd-brightness"
#define BRIGHTNESS_FILE "/sys/class/leds/asus::kbd_backlight/brightness"
#define USAGE "---------------------------------------------------------------\n" \
" \n" \
" "APPNAME" \n" \
" gère la luminosité du clavier des netbooks Asus \n" \
" \n" \
" "APPNAME" [dDuU0123] \n" \
" \n" \
" modus operandi : \n" \
" controle le paramètre de luminosité \n" \
" met à jour le fichier \n" \
" "BRIGHTNESS_FILE" \n" \
" \n" \
" testé et fonctionnel sur l'ux31a, avec 4 niveaux de \n" \
" luminosité. \n" \
" Avec des niveaux supplémentaires de luminosité il faut \n" \
" modifier les tests de switch ( argv[1][0] ) \n" \
" \n" \
"---------------------------------------------------------------\n" \
/* capabilities : cap_setuid+ep */
/* gcc asus-kbd-brightness.c -o asus-kbd-brightness -std=gnu99 -Wall -s */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#define CHECK_ACCESS(fn, mode) \
if ( access(fn, mode) != 0 ) { \
printf("%s, mode %u\n", fn, mode); \
perror("\t"); \
exit(EXIT_FAILURE); \
}
#define PRINT_USAGE { \
fprintf(stderr, USAGE); \
exit(1); \
}
static char read_brightness_file() {
FILE* file;
char c = '\0';
if ( (file = fopen(BRIGHTNESS_FILE, "r")) ) {
c = fgetc(file);
fclose(file);
}
return c;
}
static char write_brightness_file(char level) {
FILE* file;
if ( (file = fopen(BRIGHTNESS_FILE, "w")) ) {
fputc(level, file);
fclose(file);
return level;
}
printf("fopen(BRIGHTNESS_FILE, w)\n");
perror("\t"); \
return 0;
}
int main(int argc, char *argv[]) {
if ( argc != 2 ) {
PRINT_USAGE
}
setuid(0);
CHECK_ACCESS(BRIGHTNESS_FILE, W_OK)
switch ( argv[1][0] ) {
case 'D' :;
case 'd' : write_brightness_file(read_brightness_file() - '\1'); break;
case 'U' :;
case 'u' : write_brightness_file(read_brightness_file() + '\1'); break;
case '0' :;
case '1' :;
case '2' :;
case '3' : write_brightness_file(argv[1][0]); break;
default : PRINT_USAGE
}
return 0;
}
Je suis sur devuan avec sysvinit et kbwm