Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 27-08-2012 14:12:18

chuugar
Membre
Lieu : Nancy, France
Distrib. : Jessie
Noyau : 4.7.2 (compilé)
(G)UI : Openbox
Inscription : 17-08-2012

[Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

Salut à tous ! smile
J'ai crée un petit script qui me permet de me connecter à mon réseau wifi grâce à la commande iwconfig et dhcpcd.
Ces deux commandes nécessites d'être connecté en root pour pouvoir les utiliser.
Mon script prend tout son intérêt s'il est exécuté au démarrage de la session, sauf qu'au démarrage, je ne suis pas en root ! Le script ne s'exécute donc pas.
Quelqu'un a une idée de comment résoudre ce problème ?

Autre chose, je souhaite modifier un fichier de configuration: /sys/class/backlight/acpi_video0/brightness
sans être root, comment faire ?

Merci d'avance !

Vous cherchez une alternative à Google?
Essayez StartPage !

Hors ligne

#2 27-08-2012 21:23:40

Switch
Membre
(G)UI : XFCE !
Inscription : 17-06-2012
Site Web

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

Mon script prend tout son intérêt s'il est exécuté au démarrage de la session, sauf qu'au démarrage, je ne suis pas en root ! Le script ne s'exécute donc pas.



Comment as tu essayé cela?
Tu veux lancer ton script AVANT le démarrage de ta session je pense.
Peut-être que tu peux utiliser les scripts du démarrage Debian ?
A ce sujet  j'en profite pour mettre le message d'hier tongue

http://debian-facile.org/viewtopic.php?id=5803         Micro présentation des scripts de démarrage.


Les scripts lancés au démarrage sont dans /etc/init.d
Il y a entre autre

#voir les scripts contenant le mot network dans leur nom
$ ls /etc/init.d/network*
/etc/init.d/networking  /etc/init.d/network-manager



#voir les lignes description de ces 2 scripts
$ grep -i description /etc/init.d/network*
/etc/init.d/networking:# Short-Description: Raise network interfaces.
/etc/init.d/networking:# Description:       Prepare /run/network directory, ifstate file and raise network interfaces, or take them down.
/etc/init.d/network-manager:# Short-Description: network connection manager
/etc/init.d/network-manager:# Description:       Daemon for automatically switching network



Ces scripts sont lancés au démarrage, en tant que ROOT donc.
Pourrais tu les modifier pour y ajouter ta bidouille?
Ou même créer un nouveau script ?

Exemple de création de script de démarrage http://www.admin-debian.com/gestion-des … us-debian/


Je précise que l'ordre de lancement des scripts est important: tu ne va pas lancer des commandes utilisant du wifi par exemlpe, avant même que le script networking ai été lancé évidement.
Sachant que le runlevel par défaut est 2, j'ai regardé les liens des scripts lancés pour ce niveau:

ls /etc/rc2.d/*network*
/etc/rc2.d/S18network-manager


Et je ne vois pas de lien sur "networking" hmm Qui pourrait m'expliquer cela ? sad
En tout cas "S" = start et "18" l'ordre de lancement.

Il y a probablement d'autres voies ?

Je ne sais pas à quoi correspond ton script. Si c'est simplement le lancement de la carte wifi?
rappel de Cpitain Fab: les interfaces réseau sont lancées grâce au fichier

/etc/interfaces


Tu peux voir les pages du wiki : http://debian-facile.org/?do=search&id=interfaces

Explications completes:              man interfaces


remarque : la c'est encore lancé en root  avant ta session évidement.
or il est possible d'ajouter des commandes avant ou apres le montage de chaque interface réseau dans ce même fichier grâce aux options pre-up , post-up etc...

#Exemple offert par captfab:
auto wlan0
iface wlan0 inet dhcp
    pre-up echo "prout"
    wireless-essid Bla
    wireless-key Bli


captnfab> sachant qu'il peut remplacer « echo "prout" » par ce qu'il veut

wink

Après je ne sais pas si tu utilises plusieurs interfaces réseau ou seulement une carte Wifi; puis à quoi correspondait ton script exactement, et  penser au fait d'utiliser ou non le network-manager selon tes besoin!

Dernière modification par Switch (27-08-2012 21:58:31)

Hors ligne

#3 29-08-2012 04:54:47

tinux
Membre
Lieu : Courbevoie, 92
Distrib. : 7.0
Noyau : Linux 3.2.0-4-amd64 (tour)
(G)UI : Xfce4 pour le moment
Inscription : 23-05-2012
Site Web

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

Salut,

switch a écrit :

Et je ne vois pas de lien sur "networking" hmm Qui pourrait m'expliquer cela ? sad



cat /etc/inittab |grep -A3 initial

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
 


cat /etc/init.d/rcS
#! /bin/sh
#
# rcS
#
# Call all S??* scripts in /etc/rcS.d/ in numerical/alphabetical order
#

exec /etc/init.d/rc S
 



Bon ! la syntaxe est un peu chelou ! mais en fait ce sont les scripts de /etc/rcS.d qui sont exécutés en premier lieu au démarrage et les voilà :

( sauf README qui n'est pas un script bien sûr  )

find /etc/rcS.d/ \! -type d|cat -n
     1  /etc/rcS.d/README
     2  /etc/rcS.d/S10ifupdown
     3  /etc/rcS.d/S04bootlogd
     4  /etc/rcS.d/S08module-init-tools
     5  /etc/rcS.d/S21lm-sensors
     6  /etc/rcS.d/S06hostname.sh
     7  /etc/rcS.d/S07checkroot.sh
     8  /etc/rcS.d/S08hwclock.sh
     9  /etc/rcS.d/S16nfs-common
    10  /etc/rcS.d/S10mountall.sh
    11  /etc/rcS.d/S06hibernate
    12  /etc/rcS.d/S19kbd
    13  /etc/rcS.d/S14networking
    14  /etc/rcS.d/S13pppd-dns
    15  /etc/rcS.d/S13procps
    16  /etc/rcS.d/S08mtab.sh
    17  /etc/rcS.d/S08ifupdown-clean
    18  /etc/rcS.d/S21bootmisc.sh
    19  /etc/rcS.d/S01mountkernfs.sh
    20  /etc/rcS.d/S13pcmciautils
    21  /etc/rcS.d/S17mountnfs.sh
    22  /etc/rcS.d/S18mountnfs-bootclean.sh
    23  /etc/rcS.d/S20console-setup
    24  /etc/rcS.d/S05keyboard-setup
    25  /etc/rcS.d/S13udev-mtab
    26  /etc/rcS.d/S11mountall-bootclean.sh
    27  /etc/rcS.d/S15portmap
    28  /etc/rcS.d/S02udev
    29  /etc/rcS.d/S06hwclockfirst.sh
    30  /etc/rcS.d/S21alsa-utils
    31  /etc/rcS.d/S13urandom
    32  /etc/rcS.d/S09checkfs.sh
    33  /etc/rcS.d/S21fuse
    34  /etc/rcS.d/S12mountoverflowtmp
    35  /etc/rcS.d/S06hdparm
    36  /etc/rcS.d/S03mountdevsubfs.sh
    37  /etc/rcS.d/S22stop-bootlogd-single
    38  /etc/rcS.d/S13x11-common
 



Tu peux voir :

find /etc/rcS.d/ \! -type d|cat -n|grep -i network

    13  /etc/rcS.d/S14networking



Et pour terminer sur ce point :

find -L /etc -iname '*network*' -type f |grep -E 'S[0-9]|K[0-9]'

/etc/rc1.d/K01network-manager
/etc/rcS.d/S14networking
/etc/rc3.d/S03network-manager
/etc/rc0.d/K01network-manager
/etc/rc0.d/K07networking
/etc/rc6.d/K01network-manager
/etc/rc6.d/K07networking
/etc/rc2.d/S03network-manager
/etc/rc5.d/S03network-manager
/etc/rc4.d/S03network-manager
 



Tu peux clairement voir dans quels niveaux sont activés (S) / désactivés (K) les scripts relatifs au réseau.

Les interfaces réseaux ne se voient pas attribuées automatiquement une adresse ip au démarrage ( sauf pour un serveur configuré pour ça ) , par exemple, avant que je ne connecte mon utilisateur ordinaire, l'état des interfaces réseaux est le suivant sur mon laptop :

ifconfig

eth0      Link encap:Ethernet  HWaddr 00:23:54:84:87:9e  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 lg file transmission:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interruption:27

lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1272 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1272 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:99928 (97.5 KiB)  TX bytes:99928 (97.5 KiB)

wlan0     Link encap:Ethernet  HWaddr 00:22:43:49:c0:6d  
          adr inet6: fe80::222:43ff:fe49:c06d/64 Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:299858 errors:0 dropped:0 overruns:0 frame:0
          TX packets:708 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:54666305 (52.1 MiB)  TX bytes:104 (104.0 B)
          Interruption:19
 


Tu vois qu'aucune interface n'a encore d'adresse IP sauf lo ( obligatoire )

Il est intéressant de remarquer que l'interface wlan0 reçoit / envoi malgré tout des paquets de données

La commande iwconfig est plus bavarde concernant le wifi bien sûr :

iwconfig

lo        no wireless extensions.

eth0      no wireless extensions.

pan0      no wireless extensions.

wlan0     Ralink STA  ESSID:""  Nickname:"RT2860STA"
          Mode:Auto  Frequency=2.462 GHz  Access Point: Not-Associated
          Bit Rate:1 Mb/s
          RTS thr:off   Fragment thr:off
 



@ chuugar


A ma connaissance, il faut faire partie du groupe netdev pour pouvoir recevoir une adresse IP au niveau utilisateur :

cat /etc/group|grep netdev

netdev:x:109:machin,bidule
 



Il faut peut-être faire parti d'autre grp, je ne me souviens plus

Sinon, pour lancer des cde avec des privilèges root, tu as la cde sudo, là aussi il faut faire partie du groupe sudo et paramétrer le fichier /etc/sudoers via la commande :

visudo


ce que tu devra faire en root la première fois ... bien sûr ! :-)

Chez moi je ne parviens pas à modifier, même en root, /sys/class/backlight/acpi_video0/brightness, il faut dire que /sys est un système de fichier virtuel ( en fait tu accèdes directement à certaines partie du noyau ( comme /proc ) )

Mais si toi tu peux le faire, alors une commande dans le genre :

sudo echo "5" > /sys/class/backlight/acpi_video0/brightness


devrait fonctionner et mettrai "5" dans le "fichier", mais chez moi "ça ne veux rien savoir !"

Bon courage :-)

Edit : hors sujet : comment fait-on pour modifier la taille de la police dans les balises "code" par exemple, j'ai pas trouvé ?

Edit 2:
Concernant la recherche des scripts d'initialisation relatifs au "network", un peu plus soft et jolie est la commande suivante ( qui donne le même résultat que celle donnée plus haut )

find -L /etc -iname '[KS][[:digit:]]*network*' -executable

/etc/rc1.d/K01network-manager
/etc/rcS.d/S14networking
/etc/rc3.d/S03network-manager
/etc/rc0.d/K01network-manager
/etc/rc0.d/K07networking
/etc/rc6.d/K01network-manager
/etc/rc6.d/K07networking
/etc/rc2.d/S03network-manager
/etc/rc5.d/S03network-manager
/etc/rc4.d/S03network-manager

 

Dernière modification par tinux (29-08-2012 08:05:22)


tinux
------------------
Portable: Acer Aspire One 725 / Wheezy / AMD C-60 APU CG Radeon - Tour: CM Gigabyte GA-B75M-D3V / i5 3450 Socket 1155 / 4Gib / 1 Tib Seagate  / Wheezy

Hors ligne

#4 29-08-2012 06:56:37

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

comment fait-on pour modifier la taille de la police dans les balises "code"


On peut pas tinux. smile


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#5 29-08-2012 07:14:06

tinux
Membre
Lieu : Courbevoie, 92
Distrib. : 7.0
Noyau : Linux 3.2.0-4-amd64 (tour)
(G)UI : Xfce4 pour le moment
Inscription : 23-05-2012
Site Web

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

smolski a écrit :

comment fait-on pour modifier la taille de la police dans les balises "code"


On peut pas tinux. smile


Salut smolski :-)

Oui, je vois ça ! Bah ... pffff ! c'est pas grave ! j'vais aller tirer l'oreille aux concepteurs de FluxBB ces gros paresseux ! Mouai ... heu ... bon ... non ... j'ai rien dit !

Bonne journée smile


tinux
------------------
Portable: Acer Aspire One 725 / Wheezy / AMD C-60 APU CG Radeon - Tour: CM Gigabyte GA-B75M-D3V / i5 3450 Socket 1155 / 4Gib / 1 Tib Seagate  / Wheezy

Hors ligne

#6 29-08-2012 10:49:20

Blacksad
Membre
Lieu : Le Havre gris
Distrib. : Stable
Inscription : 03-05-2012

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

tu peux, si tu estimes que ça ne nuit pas à la sécurité, autoriser ces commandes à un user lambda en tant que root.

sois en les ajoutant dans ton /etc/sudoers si tu as sudo d'installé en ajoutant les lignes qui vont bien:

"le user" ALL = NOPASSWD: "chemin complet vers la commande" *

dans ce cas il faudra appler la commande avec sudo ou bien autre solution, modifier le bit SUID:

chown "le user" "la commande"
chmod ug+s "la commande"

Hors ligne

#7 29-08-2012 11:30:14

Switch
Membre
(G)UI : XFCE !
Inscription : 17-06-2012
Site Web

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

Je crois qu'il faut plûstôt utiliser SUDO .


Blacksad a écrit :

bien autre solution, modifier le bit SUID:


T'es sur de ton coup ?
Le SUID sur le FICHIER script qui sera lancé par le programme BASH qui lui ne doit sûretout pas avoir le bit SUID etc...
Je crois que le SUID c'est plus pour les programmes.

A lire : Les dangers des shell scripts SUID
http://www.tofe.org/suid.php3

Hors ligne

#8 29-08-2012 17:06:34

Blacksad
Membre
Lieu : Le Havre gris
Distrib. : Stable
Inscription : 03-05-2012

Re : [Bash] Autoriser l'accès à des fichiers/logiciel système au démarrage

J'ai crée un petit script qui me permet de me connecter à mon réseau wifi grâce à la commande iwconfig et dhcpcd.
Ces deux commandes nécessites d'être connecté en root pour pouvoir les utiliser.



Donc s'il a bien identifié son problème, mettre le bit SUID sur iwconfig et dhcpcd devrait le résoudre, tout comme les ajouter au sudoers et les appeler par sudo.

Hors ligne

Pied de page des forums