Gestion des groups

Résolu/Fermé
Zebuuu Messages postés 19 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 4 décembre 2012 - 3 déc. 2012 à 17:14
mamiemando Messages postés 33108 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2024 - 4 déc. 2012 à 10:38
Bonjour,
Je suis encore de retour sur le fofo du shell^^

Voilà :
J'ai projet de fac réaliser, qui un pseudo réseau social en shell et/ou awk.

Le principe est que chaque utilisateur qui crée son profil aura un dossier qui lui est réservé.
Ce dossier et son contenu saura accessible à lui seulement, lui et ses amis ou tout le monde (public).

Donc j'ai immédiatement pensé à un chmod où le group serait les amis et other tout le monde

Mon problème étant, que j'ai pensé un group spécifique à chaque utilisateur; exemple :
L'utilisateur toto --------> groupe : ami_de_toto.

Le hic c'est que les commandes groupadd, groupdel, usermod (pour ajouter un group aux amis avec -aG) ça ne marche qu'en root. Normal

Donc en fait dès qu'un de mes utilisateurs voudra créer son profil (création d'un groupe) enlever ajouter des amis,..., Je devrai lancer ces scripts en tant que root ce qui est franchement facheux imaginez vous sur FB ou G+ si vous voulez ajouter un ami il faut que l'admin soit d'accord^^.

J'ai d'abord pensé à la solution barbare ---> sudo chmod 666 /etc/group mais de toute facon je ne peux quand même pas modifier le fichier avec un utilisateur lambda.
Exemple j'utilise sed pour ajouter un utilisateur au group
sed -i 's/ami_de_zebuuu:x:1002:/ami_de_zebuuu:x:1002:neolelu/g' /etc/group

et j'obtiens : sed: impossible d'ouvrir le fichier temporaire /etc/sedt5NIuZ: Permission non accordée
Faut-il que je donne les droits aussi à ce fichier?

Qui plus est cette solution ne me plaît pas car par conséquent l'utilisateur pourra bousiller le fichier et ça reste un projet, je tiens un minimum à faire quelque chose de logique et de sûr.

J'ai pensé sinon à chaque création de profil ou modification de profil..... de stocké celles-ci dans un fichier.
Ensuite tous les x temps j'exécute un script avec cron en root qui applique ce fichier.
C'est plus propre mais assez limitant.

Par exemple si mon script avec cron s'exécute toutes les 15min. Mon utilisateur crée son profil ( par défaut son dossier et son contenu sera accessible que par lui) Ensuite il doit attendre entre 0 et 15min pour que cela soit effectif.

Qu'en pensez-vous?
Avez-vous des idées ?

Sinon j'execute tous mes scripts en root et là pas de pb, c'est pas gênant pour un simple projet, mais j'aimerai bien faire quelque chose d'utilisable réellement.

Merci d'avance
A voir également:

5 réponses

mamiemando Messages postés 33108 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2024 7 753
3 déc. 2012 à 20:51
Je ne pense pas qu'utiliser des utilisateurs et groupes linux soit justifié dans ton cas, car ça te forcera à gérer tous les cas tordus genre un utilisateur qui décise de créer un profil appelé root. Personnellement je pense que tu devrais utiliser un système d'authentification dédié pour savoir qui s'authentifie et avec quels mots de passe. On peut imaginer que ces mots de passe soient par exemple stocké dans une base de donnée.

Ensuite en imaginant que ton projet s'appelle fb2, ce serait logique que les données relatives à ce service soient dans /var/lib/fb2 et que cette arborescence ne soit manipulable que par un utilisateur fb2 (qui serait l'utilisateur qui lance ton service). Finalement quand tu regardes comment marche par exemple un serveur mysql c'est exactement ce qui se passe : ses données sont dans /var/lib/mysql, appartiennent à l'utilisateur mysql, et le service mysql est lancé par cet utilisateur mysql.

Enfin je pense que dans ton cas le système de droits POSIX que tu as sous linux peut être rapidement limité, car finalement un fichier n'appartient qu'à un utilisateur et un groupe. Le modèle adopté dans des droits ACL est par exemple beaucoup plus souple, et si tu dois faire un système de droits, il me paraît plus flexible. À toi de voir si tu veux ensuite les stocker dans une base ou pas, et contrôler à chaque fois qu'un utilisateur si cet accès est conforme en terme de droits...
http://doc.ubuntu-fr.org/acl

Après je pense que ça vaut le coup de se renseigner et voir si des solutions clé en main n'existent pas sous linux pour répondre à ce genre de besoin.
1
Zebuuu Messages postés 19 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 4 décembre 2012
3 déc. 2012 à 23:23
Alala j'étais parti dans de la dev pas propre. Mais les acl ça me sauve la vie.

Si j'ai bien compris les acl ;
Soit 3 user toto tutu titi avec leurs dossiers respectifs dans le dossier de mon appli :
On considère que toto a pour ami tutu mais pas titi

A la création du profil de toto mon script fait :
mkdir /mon_appli/toto
chmod 600 /mon_appli/toto
setfacl -m u:tutu:r /mon_appli/toto tutu

Ce la veut dire que tutu a accès au dossier de toto mais pas titi et cela sans éditer /etc/group.

Non?

Ensuite tu parles de /var/lib/ , ce qui donnerait /var/lib/mon_projet/toto
J'étais parti sur le repertoire /usr/share en ayant lu https://www.commentcamarche.net/contents/1143-unix-les-fichiers comme ça chaque utilisateur à accès au repertoire mon_projet.

Je ne comprend pas trop si je devrais le laisser dans /usr/share (voire /usr/local/share je capte pas la différence si le local on parle d'utilisateur ou de la machine) ou le mettre comme tu dis dans /var/lib.
J'aimerai que ça soit stocké dans un endroit où ça risque pas de disparaitre lors d'une maj ou autre ou que ca fasse merder l'os.

Concernant le stockage des mdp dans une BD ça peut être pas mal mais je pense pas que mon projet est l'envergure pour et je ne pense pas en avoir le temps, mais je note, ça me resservira quand même plus tard.
J'ai choisi une solution simple :
Quand je crée, modifie, supprime,..... mon profil : Si je suis sur la bonne session ok sinon un
su nom_user
.
Comme ça chaque utilisateur ne peut avoir qu'un profil du même nom et je ne peux modifier que le mien^^ (eh oui dommage).

En tout cas un grand merci à toi mamiemando.
0
mamiemando Messages postés 33108 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2024 7 753
4 déc. 2012 à 10:13
Ce la veut dire que tutu a accès au dossier de toto mais pas titi et cela sans éditer /etc/group.

Les droits ACL c'est effectivement un moyen de définir des accès par utilisateur sans avoir à gérer des groupes improbables. Après je ne connais pas la syntaxe par coeur mais en créant quelques utilisateurs tu verras bien qui peut accéder au fichier ou non.

J'aimerai que ça soit stocké dans un endroit où ça risque pas de disparaitre lors d'une maj ou autre ou que ca fasse merder l'os.

/usr/local/lib alors.

Concernant le stockage des mdp dans une BD ça peut être pas mal mais je pense pas que mon projet ait l'envergure pour

Tu peux te contenter d'un fichier texte chiffré alors à la htaccess et qui repose sur la commande htpasswd. Ceci dit installer un base ça n'a rien de fantastique et tu en as des plus ou moins "lourdes" par exemple sqlite3 peut suffire dans ton cas.

Quand je crée, modifie, supprime,..... mon profil : Si je suis sur la bonne session ok sinon un su nom_user

Attention, car sur certaines distributions (genre gentoo) tout le monde ne peut pas faire un "su" il faut être dans le groupe wheel. Sous ubuntu la commande su n'est pas lançable par défaut par un utilisateur sauf par le biais d'un sudo (et seuls les sudoers peuvent utiliser la commande sudo). Plus de détails ici :
http://www.mistra.fr/tutoriel-linux-profils-et-droits.html

Et attention car même si tu bénéficies des droits ACL et d'un système de création clé en main avec des utilisateurs linux, tu peux avoir des collisions entre les utilisateurs de ton "fb2" et les utilisateurs du système (root, mysql, etc...) et les utilisateurs locaux à la machine (genre ton profil utilisateur). Peut-être qu'une piste serait de travailler dans un environnement chrooté pour lever ce problème. La commande chroot permet de repositionner un shell dans une arborescence (par exemple si dans /aaa/bbb tu arrives à constituer une arborescence linux suffisante, tu peux faire chroot /aaa/bbb).

Un exemple concret de chroot : mon linux est cassé, je démarre sur un live CD, je monte la partition / du disque dur dans /media/linux. Alors je peux faire chroot /media/linux et faire "comme si" j'avais démarré normalement. Cela suppose que certaines choses existent dans cette arborescence (par exemple un shell) si le chroot va échouer.

En tout cas un grand merci à toi mamiemando.

De rien :-)

Bonne chance
0
Zebuuu Messages postés 19 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 4 décembre 2012
4 déc. 2012 à 10:23
Merci pour le lien je vais étudier ça
Pour les ACL ca marche impec.

Je passe en résolu
Encore un grand merci à toi pour tout tes conseils ça m'a été grandement utile
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33108 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2024 7 753
4 déc. 2012 à 10:38
Parfait, bonne continuation et à bientôt :-)
0