Les droits sont un trio de trios de bits : lecture (4), ecritrure (2) et exécution (1) pour le propriétaire, le groupe et les autres, d'où au total une spécification par 3 chiffres en octal: 751 est une entrée totalement accessible au propriétaire, en lecture et exécution pour le groupe et seulement en exécution pour les autres. Pour avoir automatiquement ce positionnement de droit, la session a du appeler la commande umask avec 026 comme argument.
Il est important de comprendre que :
Le trio de trios de bits est en fait un quatuor, car complété par :
La commande umask, souvent placée dans le fichier de profil, indique le masque de création sur les droits de toutes les entrées créées pendant la session. Sur votre machine, on suppose qu'il existe l'utilisateur sioux dont vous souhaitez que lui ainsi qu'un minimum d'autres utilisateurs puissent exécuter vos scripts. On suppose que la commande sudo vous laisse exécuter la commande chgrp sur votre répertoire ~/usr/bin et son contenu (vos scripts).
Question
Écrivez un script qui détermine le nombre d'utilisateurs total sur la machine, la taille du groupe le plus important et la taille du plus petit groupe dont fait partie l'utilisateur sioux. Fort de ses résultats, votre script déterminera la meilleure combinaison, puis indiquera les commandes a exécuter pour modifier les droits du répertoire ~/usr/bin selon cette solution.
Solution
# !/bin/bash COPAIN=$1 REPAPARTAGER=$2 # nombre d'utilisateurs USERS=`wc -l < /etc/passwd` # nombre de membres du plus gros groupe n'incluant pas le copain BIGGROUP=$(sed -n "/[:,]$COPAIN\(,\|\$\)/! s/[^,]//gp" </etc/group | wc -L) BIGGROUP=$((BIGGROUP + 1)) # nombre de membres du plus petit groupe incluant le copain PTIGROUP=$(sed -n "/[:,]$COPAIN\(,\|\$\)/ s/[^,]//gp" </etc/group | sort | head -n 1 | wc -c) if [ $((USERS - BIGGROUP)) -lt $PTIGROUP ]; then # exclure le gros regexp="\\(,.*\\)\\{$((BIGGROUP-1))\\}" BIGGROUP=$(grep -v "[:,]$COPAIN\(,\|\$\)" /etc/group |grep "$regexp") GROUP=${BIGGROUP%%:*} MOD=707 else # inclure le petit regexp="\\(,.*\\)\\{$((PTIGROUP-1))\\}" PTIGROUP=$(grep "[:,]$COPAIN\(,\|\$\)" /etc/group |grep "$regexp") GROUP=${PTIGROUP%%:*} MOD=770 fi echo executer les commandes suivantes : echo sudo chgrp $GROUP $REPAPARTAGER echo chmod -R $MOD $REPAPARTAGER
Question
Essayez de deviner quels sont les exécutables du système dont le Set User ID bit a besoin d'être positionné.
Solution
La commande asswd doit pouvoir ecrire dans /etc/passwd sans que l'accès en écriture soit donné à tous sur ce fichier. C'est l'exemple type de l'utilisation de setuid.
Question
Donnez un exemple d'un exécutable bien connu qui ne doit surtout pas être dans ce cas.
Solution
/bin/sh et plus généralement tous les interprètes dont le propriétaire est root ne doivent surtout pas avoir setuid, car cela donnerait les droits root à toutes les commandes exécutées par l'interprète.
Question
Utilisez la commande find pour trouver tous les fichiers et répertoires ayant le setuid ou le setgid positionné. Vérifiez vos intuitions; si elles sont fausses, révisez votre cours, et si vos doutes persistent, contactez d'urgence l'administrateur.
Solution
Pour trouver tous les fichiers concernés dans /usr :
find /usr -perm +06000 -ls
Le processus cron est lancé toutes les minutes pour effectuer des taches programmées à l'avance. Celles-ci sont décrites dans des fichiers nommés par le login de l'utilisateur désireux de lancer de telles taches, et placés dans un répertoire conventionnel dépendant du système. La commande crontab permet de modifier ces fichiers (consulter le manuel). Le programme at permet de spécifier un programme à exécuter, une seule fois, à une date fixée (idem).
Question
Concevez un script qui parcourt tout votre répertoire personnel et :
Utilisez ensuite crontab pour demander son exécution toutes les 24 heures, à un moment où vous avez l'habitude de dormir (note: il n'est pas demandé de simulation).
Solution
# !/bin/bash # attention, le profil personnel, n'est pas exécuté # donc pas de $HOME, de $PATH etc. prédéfinis MOI=esj CHEZMOI=/home/$MOI ARCH=/tmp/$MOI mv $CHEZMOI/.at_first $CHEZMOI/.at_last > $CHEZMOI/.at_first find $CHEZMOI -name core -exec rm {} \; find $CHEZMOI -exec chmod go-r {} \; find $CHEZMOI/public_html -exec chmod a+r {} \; tar -zcf /tmp/at_$$.tgz $(find $CHEZMOI -newer $CHEZMOI/.at_last -type file) # le numero du jour DIR=$ARCH/$(date "+%w") # créer les repertoires (en silence si c'est deja fait) mkdir -p $DIR mv /tmp/at_$$.tgz $DIR/backup.tgz a=$(wc -c < $DIR/backup.tgz) mail -s "$a octets de sauvegarde en $DIR" $MOI </dev/null