Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/09/2014, à 10:58

hitman40

script automatisation ACL's

Bonjour,

Je cherche à automatiser la création de mes acl's sur un serveur.

J'ai créé un script grâce à ce que j'ai vu sur internet mais il y a une erreur et je n'arrive pas à la solutionner.

#!/bin/bash

# Script pour placer les ACL plus rapidement que par l'utilisation
# seule de la ligne de commande. Il ne s'agit que de raccourcis et
# d'une demande en boucle de la commande.

entrer_utilisateur() {
echo "### ENTRER UN UTILISATEUR SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Combien d'utilisateurs voulez-vous entrer ?"
read nbre
for ((i=0; i<$nbre; i++)); do
	echo "Nom d'utilisateur ?"
	read nom
	setfacl -Rm u:$nom:rwx $cible
	setfacl -Rm d:u:$nom:rwx $cible
done
setfacl -Rk u:: $cible
setfacl -Rk d:u:: $cible
setfacl -Rx d:u:: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

supprimer_utilisateur() {
echo "### SUPPRIMER UN UTILISATEUR SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Combien d'utilisateurs voulez-vous supprimer ?"
read nbre
for ((i=0; i<$nbre; i++)); do
	echo "Nom d'utilisateur ?"
	read nom
	setfacl -Rx u:$nom: $cible
	setfacl -Rx d:u:$nom: $cible
done
setfacl -Rx u:: $cible
setfacl -Rx d:u:: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

entrer_groupe() {
echo "### ENTRER UN GROUPE SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Combien de groupes voulez-vous entrer ?"
read nbre
for ((i=0; i<$nbre; i++)); do
	echo "Nom du groupe ?"
	read nom
	setfacl -Rm g:$nom:rwx $cible
	setfacl -Rm d:g:$nom:rwx $cible
done
setfacl -Rx g:: $cible
setfacl -Rx d:g:: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

supprimer_groupe() {
echo "### SUPPRIMER UN GROUPE SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Combien de groupes voulez-vous supprimer ?"
read nbre
for ((i=0; i<$nbre; i++)); do
	echo "Nom du groupe ?"
	read nom
	setfacl -Rx g:$nom: $cible
	setfacl -Rx d:g:$nom: $cible
done
setfacl -Rx g:: $cible
setfacl -Rx d:g:: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

supprimer_defautg() {
echo "###    SUPPRIMER UN GROUPE    ###"
echo "### PAR DEFAUT SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Nom du groupe ?"
read nom
setfacl -Rkx g:$nom: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

supprimer_defautu() {
echo "### SUPPRIMER UN UTILISATEUR  ###"
echo "### PAR DEFAUT SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Nom de l'utilisateur ?"
read nom
setfacl -Rkx u:$nom: $cible
echo "Après modification :"
getfacl $cible
acl_base
}

bloquer_util() {
echo "###        BLOQUER L'ACCES          ###"
echo "### D'UN UTILISATEUR SUR UN DOSSIER ###"
echo "Quel dossier (depuis la racine) voulez-vous modifier ?"
read cible
echo "Avant modification :"
getfacl $cible
echo "Voulez-vous le modifier ? (o/N)"
read lecture
		case $lecture in	
			o | O) break
			;;
			*) echo "Abandon."
			acl_base
		esac
echo "Nom de l'utilisateur ?"
read nom
setfacl -Rm u:$nom:--- $cible
echo "Après modification :"
getfacl $cible
acl_base
}

acl_base(){
echo "Que voulez-vous faire ?"
echo "1 - entrer l'accès à un ou plusieurs utilisateurs."
echo "2 - supprimer l'accès à un ou plusieurs utilisateurs."
echo "3 - entrer l'accès à un ou plusieurs groupes."
echo "4 - supprimer l'accès à un ou plusieurs groupes."
echo "5 - supprimer un groupe par défaut sur un dossier."
echo "6 - supprimer un utilisateur par défaut sur un dossier."
echo "7 - bloquer un utilisateur sur un dossier."
echo "0 - pour annuler."
		read lecture
		case $lecture in	
			1) entrer_utilisateur
			;;
			2) supprimer_utilisateur
			;;
			3) entrer_groupe
			;;
			4) supprimer_groupe
			;;
			5) supprimer_defautg
			;;
			6) supprimer_defautu
			;;
			7) bloquer_util
			;;
			*) echo "Abandon."
			exit 1
		esac
}

#verification des droits de l'utilisateur (id root = 0)
	IDuser=`id -u`

	if [ ! $IDuser -eq 0 ]
	then
		echo "Vous  n'avez pas les droits ROOT."
		exit 1
	fi
acl_base
exit 0

voici-ci dessus la tête de mon script. Avez vous une meilleur solution ou tout simplement la correction de mon script.

Merci par avance.

Dernière modification par hitman40 (Le 08/09/2014, à 11:10)

Hors ligne

#2 Le 08/09/2014, à 10:59

Gaara

Re : script automatisation ACL's

Bonjour, il faudrait mettre ton code entre balises code ( bouton <> )

Dernière modification par Gaara (Le 08/09/2014, à 11:00)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#3 Le 08/09/2014, à 11:02

hitman40

Re : script automatisation ACL's

penses que ça viendrais de la.

Hors ligne

#4 Le 08/09/2014, à 11:02

PPdM

Re : script automatisation ACL's

Gaara a écrit :

Bonjour, il faudrait mettre ton code entre balises code ( bouton <> )

Salut, je plussoie.
http://pix.toile-libre.org/upload/img/1355134149.png


La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera

Hors ligne

#5 Le 08/09/2014, à 11:11

hitman40

Re : script automatisation ACL's

Désolé je n'avais pas compris.

Sinon avez vous une idée?

Hors ligne

#6 Le 08/09/2014, à 11:19

jplemoine

Re : script automatisation ACL's

hitman40 a écrit :

mais il y a une erreur

Eh, si tu ne nous donnais l'erreur exacte...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#7 Le 08/09/2014, à 11:20

pingouinux

Re : script automatisation ACL's

Bonjour,
Tu devrais donner le message d'erreur, ça aiderait…

Hors ligne

#8 Le 08/09/2014, à 11:54

hitman40

Re : script automatisation ACL's

voici le message d'erreur.

acl_utilisateur.sh: 23: acl_utilisateur.sh: Syntax error: Bad for loop variable

Hors ligne

#9 Le 08/09/2014, à 12:03

jplemoine

Re : script automatisation ACL's

Je pense que

for ((i=0; i<$nbre; i++)); do

doit devenir

for ((i=0 ; i<$nbre ; i++))
do

Edit : modification de la commande (dans la parenthèse, le signe ; a un espace avant et après)

Dernière modification par jplemoine (Le 08/09/2014, à 12:49)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#10 Le 08/09/2014, à 12:42

pingouinux

Re : script automatisation ACL's

Tu peux remplacer

for ((i=0; i<$nbre; i++)); do

par

for i in $(seq 1 $nbre); do

Édité : Ou même

for i in $(seq $nbre); do

ou bien

i=0;while ((i++<nbre)); do

Dernière modification par pingouinux (Le 08/09/2014, à 13:55)

Hors ligne

#11 Le 08/09/2014, à 14:22

hitman40

Re : script automatisation ACL's

Merci mais maintenant je me retrouve avec l'erreur :

acl_utilisateur.sh: 53: acl_utilisateur.sh: Syntax error: Bad for loop variable

aurais-tu une idée??

Hors ligne

#12 Le 08/09/2014, à 14:24

hitman40

Re : script automatisation ACL's

autant pour moi c'était la même erreur partout. Je teste ça de suite et je te dis

Hors ligne

#13 Le 08/09/2014, à 14:24

pingouinux

Re : script automatisation ACL's

Bah oui ! Il faut évidemment faire la même chose, ainsi qu'aux lignes 82 et 111.

Hors ligne

#14 Le 08/09/2014, à 14:38

hitman40

Re : script automatisation ACL's

par contre j'ai un autre problème j'ai bien mon menu déroulant (1 2 3 4 5 6) j'ai bien également le chemin du dossier à modifier. par contre mon script me demande combien d'utilisateurs je veux rajouter et dès que je mets 1 et mon script revient au début tu aurais une solution?

Hors ligne

#15 Le 08/09/2014, à 14:50

hitman40

Re : script automatisation ACL's

c'est bon j'ai modifié i=0;while ((i++<nbre)); do par for i in $(seq 1 $nbre); do cela fonctionne mieux.

Par contre sais-tu comment je pourrai faire pour que les droits soient plus détaillés.
Je m'explique.
La par défaut, l'utilisateur et le groupe, prennent les droits rwx en récursif . Ce que j'aimerai c'est que le script me demande quels droits je veux attribuer et si je le veux de magnanière récursif ou non.

Saurais-tu comment je peux écrire ça?

Hors ligne

#16 Le 09/09/2014, à 00:46

Postmortem

Re : script automatisation ACL's

Salut,
Cette syntaxe me semble correcte en BASH :

for ((i=0; i<$nbre; i++)); do

Ne lancerais tu pas ton script en faisant :

sh /chemin/tonscript
# ou
sh tonscript
# ou encore
sh ./tonscript

Si c'est le cas, c'est sh qui exécute ton script, et non bash. Et le for de sh fonctionne seulement de cette manière :

for i in elem1 elem2 elem3; do

Ou alors l'erreur vient des (( )) qui ne sont pas connues en sh.
Pour lancer ton script, et qu'il s'execute bien via bash, il faut faire :

bash tonscript

Ou mieux, il faut le rendre exécutable :

chmod +x /chemin/tonscript

Et ensuite tu pourras l'appeler simplement ainsi :

/chemin/tonscript
# ou
./tonscript

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#17 Le 09/09/2014, à 07:42

pingouinux

Re : script automatisation ACL's

Bonjour Postmortem,
Tu as en effet raison. J'avais fait le test sans initialiser nbre.

Hors ligne

#18 Le 09/09/2014, à 07:48

hitman40

Re : script automatisation ACL's

Merci postmorterm
Sh exécute à la perfection mon script. Les droits d'exécution sont bien appliqués.

Ce que je ne sais pas faire c'est pouvoir décider des droits que je veux appliquer.

J'aimerai que mon script  me demande le type de droit que je veux appliqué et qu'il me demande également si je le veux de façon récursive ou non.

Pourriez-vous m'indiquer  la démarche à suivre.

Hors ligne