[Linux-bruxelles] question bash

Gildas Cotomale gildas.cotomale at gmail.com
Mer 24 Sep 12:03:00 CEST 2008


> comment se fait-il que dans un script bash on ne peut jamais être que root
> ou user, cad passer des commandes en étant au départ un des deux mais jamais
> passer de l'un à l'autre? dans une Deb en tout cas j'ai fait ce constat;

philosophie unixienne.. une comande (binaire ou script, peut importe :
fichier exécutable) s'exécute toujours sous un compte bien identifié
avec les permissions de celui-ci (selon les permissions de l'exécutant
des fois que ton script a besoin de certains accès)
dans le cas d'un script. les commandes sont exécutées avec les
permissions initiales (celui qui lance le script donc) ..sauf mention
contraire.. et comme il faut bien qu'il soit lancé par quelqu'un,
forcément, on est ce quelqu'un à l'exécution ou pas :D mais
contrairement à ce que tu crois, il ne s'agit pas forcément d'un
utilisateur (ou de super-administrateur) au sens où tu l'entends,
puisque en fait n'importe quel compte (= utilisateur déclaré sur le
système) peut (et c'est pour éviter ce genre d'accident avec certains
démons que leurs comptes n'ont pas de shell et de dossier personnel
associés..)

pour passer d'un user normal à root, il faut faire un `su [login]' qui
est une commande (hélas ?) interractive (i.e s'arrete pour demander le
mot de passe).. tu peux toujours essayer de bidouiller (`man su' te
dira ce qui est faisable.. je pense en particulier aux options `-c
-p')
une autre approche est le sudo quand un utilisateur normal (et
authorisé) doit passer en root.. selon la configuration de ton sudoer,
il peut y avoir demande de mot de passe utilisateur ou pas (je n'aime
pas trop ce dernier aspect car si on s'assure que c'est un compte
approuvé/privilégié qui lance une commande, personne ne nous dit que
la session est utilisée par la bonne personne)
puisque j'ai évoqué les permissions plus haut..; quels sont ceux de
ton script..? il suffit parfois qu'il appartienne au groupe qui va
bien pour pouvoir aller au bon endroit ou lancer ce qu'on veut. il est
aussi possible qu'il appartienne au root (pour que tu puisse le
modifier, tu dois alors appartenir au bon groupe qui a en plus le
droit de changements) et qu'il soit lancé par root quelque soit
l'utilisateur (oui. suid... `man chmod')

> parcontre sous Ubuntu si on lance déjà un script en sudo, là on peut
> quand-même arriver plus loin; es-ce exact?

c'est lié à la config de base du système : à part les réglages
initiaux, c'est pareil (on peut reproduire les memes comportements
dans l'un ou l'autre)

> Plus concrètement, es-ce possible de faire une conf d'un truc en étant user,
> (fichier ~/.machinrc)
> puis de faire une conf d'un fichier destiné à être placé dans /etc, ce qui
> requiert évidement d'être ou devenir su si on veut faire ça à partir du
> même script ?
>
pourquoi ne pas faire un su *et enchainer* avec l'exécution du script
ou, comme tu l'as testé, sudo l'exécution du fichier

> Mon exprience est que si je met dans un script une commande su root, il
> quitte le script après que je sois passé en root.
>
tout betement parce le `su' est une forme de login.. tu lance un
sous-shell (un shell dans le shell initial) qui a son autonomie et qui
n'a rien apporté avec lui -sauf option -c bien sur- ; et ça me fait
penser aussi que tu devrais jetter un coup d'oeil aux manuel de sh et
bash..)




Plus d'informations sur la liste de diffusion Linux-bruxelles