Journal Une bibliothèque de fichiers semi-publique ?

Posté par  (site web personnel, Mastodon) .
Étiquettes : aucune
0
26
déc.
2005
Bonjour,

Je souhaite mettre en ligne une "bibliothèque de fichiers semi-publique". Oula, très web 2.0 comme appelation.

En gros, je souhaite mettre en ligne des fichiers, classés suivant des catégories.
La particularité est que je souhaite que certains fichiers ne soient disponibles que pour des personnes possédant un login/mot de passe.

En gros, un visiteur anonyme arrive sur la page, il voit une liste de fichier classés par catégorie et peut les télécharger sans restriction.
Par contre, un visiteur connecté (en introduisant son mot de passe) verra une liste plus importante et aura accès à des fichiers supplémentaires.

Vous voyez un peu le topo ?

Alors, dans un mon idéal, j'ai imaginé la chose comme cela :

- Chaque fichier dispose d'une petite description (et une URL ?) et peut appartenir à plusieurs catégories.
- Idéalement, un fichier peut exister en différente versions (par exemple un mp3 et un ogg pour une musique).
- Les personnes loguées ne voient pas toutes les mêmes fichiers. (c'est-à-dire que si Alice appartient au groupe musique, ce qui est décidé par l'admin, elle ne voit que les musiques. Par contre Bob, du groupe "global", peut lui voir tous les fichiers.)

Bon, pour ça, je rêve un peu, mais c'est pour vous montrer le topo.

Ce qui est par contre indispensable à mes yeux est une certaines sécurité : on ne peut pas télécharger un fichier non-public si on a pas de mot de passe, même si on a l'URL absolue du machin ! Je n'ai aucune idée de comment la chose est possible.

Bref, voilà, j'ai eu cette idée mais je n'ai pas la moindre piste de qqch existant qui puisse remplir ces conditions ou qui serait même un point de départ que je pourrais modifier pour mes besoins.

Je profite donc de la sagacité des lecteurs de DLFP pour proposer une petite séance de tempête dans le cerveau.

L'usage que je souhaite en faire est relativement simple : mettre à disposition certains fichiers pour ma famille et mes amis, mais pour certains fichiers, ils sont à caractère privé et je ne souhaite pas les voir sur le net à portée de tout le monde.
Certains fichiers seraient destinés uniquement à des amis très très proches, d'où la vague idée d'un second groupe (mais pas indispensable).
Enfin, pas mal de fichiers ne sont pas spécialement privés et autant les mettre à disposition.

voilà pour l'idée...

(PS : je me dis que je ne dois pas être le premier ni le seul interessé à mettre en place ce genre de chose, non ?)
  • # Fichiers non accessibles

    Posté par  (site web personnel) . Évalué à 5.

    Juste une petite réponse car le temps me manque concernant l'accès aux fichiers.

    Ceux-ci doivent être stockés dans un répertoire non accessible par le web
    Par exemple si ton site est dans /var/www/monsite, il te faut par exemple un /var/www/monsite/www pour le site web et /var/www/monsite/fichiers pour les fichiers.

    Mais tu vas me dire comment fait-on alors pour transférer les fichiers ?

    Et bien tu fais un script (dans la partie web), par exemple download.pl (bon allez, .php pour les amoureux des éléphants, moi je préfère les dromadaires)
    Ce script prend comme paramètre un code quelconque identifiant le fichier voulu et se charge de vérifier l'accès. Si l'accès est refusé, tu affiches un message, et s'il est autorisé, tu fais non pas un redirect vers le fichier, car ce n'est pas possible, mais simplement un dump du fichier en question (en gros tu le lis et le print en même temps).

    Attention au headers, types mimes, etc, etc

    C'est loin d'être complet mais c'est un début de piste
    • [^] # Re: Fichiers non accessibles

      Posté par  (site web personnel) . Évalué à 3.

      et un .htaccess tout simplement?
      Tu donnes pas le mot de passe -> 401
      Tu le donnes -> OK
      • [^] # Re: Fichiers non accessibles

        Posté par  (site web personnel) . Évalué à 3.

        C'est sympa comme idée il est vrai.

        Ceci dit ca implique soit de passer toute l'authentification via .htaccess / htpassw, soit de l'avoir en doublon (pour l'affichage des fichiers)

        Moi je préviligierai ma solution juste pour que tout soit géré de la même façon, sans recours au htaccess. Et ce serait aussi plus indépendant du serveur web.
  • # pour les photos : phpwebgallery

    Posté par  (site web personnel) . Évalué à 2.

    Pour les photos : phpwebgallery
    Fait exactement ce que tu veux.

    Il ne resterai plus qu'à généraliser à n'importe quel fichier.

    http://www.phpwebgallery.net/fre/index.html
    • [^] # Re: pour les photos : phpwebgallery

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      pas bête, en effet. Je vais voir ce qui est possible, merci pour l'astuce.
      (Juste qu'il va falloir adapter car effectivement, ici il ne s'agira pas d'images)

      Mes livres CC By-SA : https://ploum.net/livres.html

  • # proposition

    Posté par  . Évalué à 2.

    Plutôt que de faire une gestion des sécurité par fichier je te conseil d'en faire une par dossier. L'avantage est que cela te permettra d'utiliser la gestion des droits via le fichier .htaccess de apache.
    De plus, cette gestion est beaucoup plus robuste qu'un script .pl .php.

    l'idée est que tu as un fichier .htaccess par dossier que tu crées et pour un dossier donné tu peux définir la liste des utilisteurs qui pourront y accéder.

    site\ (accès complet)
    site\dossier_1 (accès complet)
    site\dossier_2\dossier_1_1 (user_1, user_2, user_4)
    site\dossier_2\dossier_1_2 (user_3)
    site\dossier_2\dossier_1_3 (user_3, user_2)

    Problème : avec htaccess et le directory listing activé, les utilisateurs peuvent voir des dossiers auquels ils n'ont pas accès mais lorsqu'ils cliquent dessus apache leur demande une identification. Pour éviter ce problème je te conseil ceci :

    Solutions : Tu ajoutes la directive "DirectoryIndex /scripts/index.php"
    Elle indique a apache qu'il doit charger ce fichier avant de tenter - si le fichier n'existe pas - de faire un Directory Listing.
    Dans le fichier index.php tu feras un scripts qui
    - récupère le repertoire courant (\site\)
    - parcour chaque dossier et pour chaque dossier lit le fichier htaccess. Si l'utilisateur figure dans le htaccess le dossier sera affiché.
    - parcour la liste des fichiers du dossier courant et les affiche.

    Cela paraît compliqué mais il n'est est rien. Il faut juste un script qui te permet de gérer les permissions et un autre qui affiche les repertoires. En plus, tu t'évites la douloureuse gestion des accès qu'un pirate plus ou moins motivé cassera un jour ou l'autre.

    Bonne journée.

    Je trolle dès quand ça parle business, sécurité et sciences sociales

    • [^] # Re: proposition

      Posté par  (Mastodon) . Évalué à 2.

      Tiens, question à propos de ces directory listing, si tu mets un index.html, quel qu'en soit le contenu, même vide, il n'est plus possible d'avoir la liste des fichiers d'un répertoire web, ou alors ça peut se faire quand même avec des requêtes spécifiques ?

      Yth.
      • [^] # Re: proposition

        Posté par  . Évalué à 1.

        Salut,

        non, La directive DirectoryIndex spécifie un autre mode de fonctionnement que celui par défaut. Donc, si t'as un fichier index.html il sera affiché comme un autre fichier.

        Je trolle dès quand ça parle business, sécurité et sciences sociales

      • [^] # Re: proposition

        Posté par  (site web personnel) . Évalué à 2.

        En utilisant les bugs du serveur web et de ses extensions oui.
        Suffit de se balader sur kitetoa pour voir des sites ayant un index.html affichier un Index of / ...
        • [^] # Re: proposition

          Posté par  (Mastodon) . Évalué à 2.

          Hmm, oki, c'est la solution la plus simple mais aussi la moins fiable...
          Et il y a quoi comme solution pour empécher ça ?
          Dans le .htaccess on peut empécher tout listage ?
          Mettre à jour son apache ?

          Yth.
          • [^] # Re: proposition

            Posté par  . Évalué à 2.

            Pour empêcher le listage : "Options -Indexes" dans htaccess
            voir http://httpd.apache.org/docs/1.3/mod/core.html#options
          • [^] # Re: proposition

            Posté par  (site web personnel) . Évalué à 2.

            Mettre à jour son serveur web et s'occuper un peu de la securité de ses scripts ...
            Et aussi consulter sa boite emails pour savoir si par hasard un internaute n'aurait pas trouver une faille sur le site ...

            (Toute ressemblance avec le serveur glossa.fltr.ucl.ac.be est bien entendu une coencidence ...)
    • [^] # Re: proposition

      Posté par  . Évalué à 4.

      De plus, cette gestion est beaucoup plus robuste qu'un script .pl .php.

      ha bon ? tu peux developper un peu ?

      l'exemple cité en premier (1er post) me semble tres bon, et je ne vois pas en quoi il n'est pas fiable, puisque deja les fichiers ne sont pas dans un dossier web... c'est pas plus con, au lieu de tout rendre accessible et ensuite trouver des astuces pour rendre indisponible. certains fichier a certaines personnes.

      et le .htaccess : bonjour la gestion non centralisé (donc lourde)
      • [^] # Re: proposition

        Posté par  . Évalué à 1.

        l'exemple cité en premier (1er post) me semble tres bon,

        je n'ai pas dit le contraire

        et je ne vois pas en quoi il n'est pas fiable

        je n'ai pas dit ça

        c'est pas plus con, au lieu de tout rendre accessible et ensuite trouver des astuces pour rendre indisponible. certains fichier a certaines personnes.

        Pas taper, Je ne faisais que proposer une idée... TMTOWTDI
        Mon exemple ne fait que mettre des permissions sur un repertoire que tu as crée via .htaccess.
        Cette solution me semble avantageuse dans le fait qu'elle évite d'avoir à développer une gestion de la sécurité ou il y aura forcément des bugs.
        J'aime bien me baser sur l'existant.

        et le .htaccess : bonjour la gestion non centralisé (donc lourde)

        C'est vrai c'est pas centralisé, mais tu peux par exemple déplacer un repertoire via ftp sans que cela te perdre les permissions. Dans l'autre cas, tu dois impérativement utiliser l'interface de gestion.

        Amicalement

        Je trolle dès quand ça parle business, sécurité et sciences sociales

        • [^] # Re: proposition

          Posté par  (site web personnel) . Évalué à 1.

          Le problème de la simple solution via htaccess est le listing des fichiers, qui doit différer selon les droits.
          • [^] # Re: proposition

            Posté par  (Mastodon) . Évalué à 1.

            Ben en faisant comme un gars ici proposait, tu mets des droits en fonction des répertoires : le groupe photo a accès au répertoire photo, le groupe potes a accès au répertoire potes, le groupe superpote a accès au répertoire photo ET au répertoire potes.

            Aucune gestion à faire ensuite, tu classes tes fichiers dans les répertoires, c'est suffisamment clair pour fonctionner je pense !
            Le listing ne dépend de rien, tu a ou n'a pas accès aux répertoires et zou.

            Et pour le répertoire dans lequel se trouvent les repertoires, tu essaies de t'arranger pour qu'il soit impossible de chopper le listing, ou tu fais un truc particulier uniquement pour lui : selon les droits tu affiches tout ou partie.


            Yth.
  • # re

    Posté par  . Évalué à 3.

    ca depend ce que tu veux utiliser comme technos, mais perso, j'ai fait un service de ce genre pour ft r&d, utilisant tomcat/cocoon/mysql.

    En gros, l'idee c'est d'avoir un espace https pour stocker des fichiers, et pouvoir y inviter qui on veut.

    Ton histoire de alice qui voit pas tout alors que bob voit tout est simplissime a gerer (bon, ok, pas simplissime, mais ca casse pas trois pattes a un connard, un simple filtre a appliquer lors du listage du repertoire et on n'en parle plus).

    En gros, t'as une action cocoon qui s'occupe de verifier les droits, tout ce genre de choses, le code metier comme on dit dans l'milieu, qui te remplit un javabean, qui est est transmit a la suite du pipeline cocoon, et au final, en fonction du contenu du bean, tu serialise un fichier ou une page html indiquant que le bonhomme peut aller suxer des caribous morts vu qu'il a pas les droits.

    Cocoon te permet de gerer la multipublication : tu peux avoir une version html pour quand t'es loin de ton pc perso, ou installer un client "lourd" qui te permet d'avoir des features ihm plus avancees (telecharger un dossier complet d'un coup, dnd ce genre de choses quoi).
    Ca se fait a coups de feuilles de styles xslt, ca fait un peu mal au cul et ca pique les yeux au debut, tu te dis que ca va jamais rentrer et en fait t'y met tout. Mais une fois que t'y a prit gout, tu peux plus t'en passer. Un peu comme la sodomie, en fait.
    Nan, blagues a part, xslt c'est un peu douloureux au debut, mais on en fait des choses admirables.
    Bon, apres, on est pas oblige d'utiliser cocoon, c'est juste que ca me parait etre un outil adapte pour ce genre d'applications.

    Ca marche bien, c'est pas specialement dur a coder (la gestion des verrous et des transactions est un peu plus complexe, mais ca se fait bien si on y reflechit un petit peu).

    Apres, ca depend sur quoi tu veux l'heberger, un tomcat c'est pas tres courant sur un heberge grand public.

    Bref, si ca t'interesse, hesite pas a me contacter par mp, histoire qu'on en discute.
    • [^] # Re: re

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      c'est sympa, mais c'est sur du apache2/php/python/mysql ;-) (et puis j'ai horreur du Java)

      Mes livres CC By-SA : https://ploum.net/livres.html

      • [^] # Re: re

        Posté par  . Évalué à 2.

        as you wish.

        Effectivement, tomcat tout ca, c'est un peu l'artillerie lourde.
        Mais ca permet de traiter le probleme avec tout le confort d'un langage compile, et de profiter d'eclipse en tant qu'ide (debuger sa servlet directement depuis son IDE, c'est quand meme achement pratique, et v'la le temps que ca fait gagner).
        • [^] # Re: re

          Posté par  . Évalué à 3.

          C'est marrant, mais "confort" n'est vraiment pas le terme qui me vient à l'esprit quand on parle de langage compilé. Sécurité, fiabilité, performances, ok (c'est sujet à discussion, mais sur le principe ça peut se défendre). Le confort d'un langage compilé par rapport à un interprété, par contre, j'ai plus de mal. Tu veux dire que tu as la grande chance d'être obligé de passer par une phase de compilation avant de pouvoir tester ton code?
          • [^] # Re: re

            Posté par  . Évalué à 2.

            Les gouts et les couleurs.

            Confort dans le sens ou la compilation me permet justement de detecter pas mal d'erreurs syntaxique/fautes de frappes etc. dans mon code.
            Je bosse plus ou moins sur un projet php, et je passe mon temps a pester contre la non compilation de mon code.
            C'est aussi, mais pas seulement, une question d'habitude aussi je pense.

            Pis avec eclipse, la compilation n'est plus une phase a part entiere.

            C'est sur que si on bosse sans compilation a la volee, c'est un peu plus lourd, mais je prefere tout de meme ca a un langage interprete.
            • [^] # Re: re

              Posté par  (Mastodon) . Évalué à 1.

              Tu dis ça parce que tu es en colère...
              Ou alors parce que tu n'as jamais eu l'occasion de coder en python !

              Le python est, grâce à sa console en grande partie, le langage, tout types confondus, pour lequel le débuggage et les tests sont, à mon goût, le plus simple et le plus agréable.

              En fait, depuis que j'ai découvert le Python, j'ai remplacé perl, php et java par lui.
              Mais bon, question de goûts je présume...
              Encore que, remplacer trois langages par un seul à ses avantages !

              Yth, python powered.
              • [^] # Re: re

                Posté par  . Évalué à 3.

                effectivement, jamais tente le python, j'en connais quelques uns qui sont fan pourtant.
                Le cote indentation tres stricte m'a un peu effraye, mais bon, faut voiri.
                faudrait que j'essaie un jour quoi.
  • # zope (+ éventuellement plone)

    Posté par  . Évalué à 4.

    Puisque tu désires faire un intranet à partir de ta machine, je te propose d'utiliser zope + plone. En installant plone, tu t'évites de mettre les mains dans le cambuis.

    Comme tout cms, il faut un peut d'étude pour le faire fonctionner, mais plone est assez intuitif.

    De plus, tu as possibilité de créer des droits d'utilisation comme sur tout système Unix, c'est à dire, droits en lecture, écriture, execution pour le propriétaire, le groupe et les autres.

    Que demander de plus.

    C'est vraiment très complet, et je trouve vraiment domage qu'il n'existe pas plus de vendeur d'espace web qui propose cela, et que ceux qui restent, le font à des prix relativement cher (par rapport à php+mysql).

    Par contre, pour une utilisation en intranet, c'est vraiment le pied (mais peut-être un peu de parti-pris ...)

    Ce que l'on peut trouver sur plone? Wiki, shop, possibilité de déposer des articles dans tous les formats possible et imaginables (zope n'est jamais qu'un serveur d'applications), calendrier, ... trop de fonctions pour tout dire ici. (On peut quelques fois dire que c'est une usine à gaz aussi ...)


    ;)
  • # Des DRMs?

    Posté par  (site web personnel) . Évalué à 10.

    Et pourquoi tu ne mettrais pas des DRMs dans tes fichiers? :)
    Comme ça, tout le monde peut télécharger, mais tout le monde ne peut pas les lire.
    Et en plus, tu peux même retirer l'accès quand tu veux, gèrer les droits, être certains qu'ils ne le diffuseront pas sur le web, être certains qu'ils ne le lieront pas sur un client/une plateforme non autorisé(e), savoir quand/où/avec quoi ils l'ouvrent, les faires payer si tu le désire parce que tu aura pris soin de bien cacher la petite etoile dans le contrat de licence utilisateur final dans la section monstrueuse des droits que tu te réserve que "tu te réserves le droit de faire payer l'affichage quand tu le désires, sans préavis, et que l'utilisateur doit de lui même venir relire régulièrement le présent contrat pour s'informer des nouvelles mesures", ...

    Bon, aller -->[].
    Sinon, dsl, pas de solution. Mais en PHP, avec une base de donnée, la gestion des droits ne serait pas non plus très complexe. Tout dépend aussi qui serai l'hébergeur(ta propre machine?).
  • # dmanager :

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    Je viens de découvrir dmanager :

    http://www.dmanager.org/

    c'est pas trop mal, il y'a juste encore quelques défauts à mes yeux, par ordre d'importance :

    - On gère les droits par répertoires entiers et pas par fichiers.
    - On voit les répertoires auxquels on n'a pas accès.
    - On doit gérer les utilisateurs individuellement et pas "par groupe".
    - Le fait d'ajouter des commentaires sur un fichier est très limité. (comme pour moi il y aura peu de fichiers, j'aimerais pouvoir mettre des explications, une url, à la limite une image)
    - un fichier ne peut pas appartenir à plusieurs "répertoires".
    - Une seule version par fichier.

    Mes livres CC By-SA : https://ploum.net/livres.html

    • [^] # Re: dmanager :

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      "- On voit les répertoires auxquels on n'a pas accès."

      Oki, un problème de moins, je viens de patcher le bazar et ça fonctionne visiblement très bien :-)

      Mes livres CC By-SA : https://ploum.net/livres.html

  • # et en utilisant qu'une bdd objet ?

    Posté par  . Évalué à 1.

    ben oui pourquoi se prendre la tête ?
    une bd objet qui contiens tous les objets.
    chaque identifiant a acces ou pas a ces fichiers (ca se fait au niveau de la bd)
    Et le script php est on ne peut plus simple.
    Il affiche un select nom dans les vues dont on a l'autorisations
    et l'envoi c'est juste un select file redirigé vers le flux réseau.

    /me qui étude les bd en cours :-D
    • [^] # Re: et en utilisant qu'une bdd objet ?

      Posté par  (Mastodon) . Évalué à 2.

      Tu oublies une part assez importante de ce qu'il demande.
      En fait le problème n'est pas tant d'avoir une interface propre, où quand tu lui demandes de ne t'afficher que les "photos" (par exemple), elle le fait.
      C'est aussi, et surtout, que si il n'a pas envie que tu voies les fichiers "moi_nu_sous_la_douche", tu ne puisses pas les voir, donc il y a des questions de sécurité, d'accès restreints, etc...

      Le problème étant que les fichiers doivent pouvoir être téléchargés, mais qu'il soit possible d'empécher ce téléchargement, et que selon des critères fixes et fiables ce choix puisse être fait.

      Une base de donnée peut servir à la gestion des droits et l'organisation des fichiers, mais elle se place plus du côté interface que du côté système et sécurité.


      Yth.
  • # hum ... et un CMS ?

    Posté par  . Évalué à 2.

    et pourquoi ne pas déployer un CMS du type Xoops, avec un module de téléchargement de fichier ( pour xoops il y en a une bonne demi douzaine, dont 3 ou 4 très bon ).

    Tu as tout ce que tu demandes dans ton journal, plus la possibilité de rajouter des features et tu fais tout ça en aller .. 2h :).
  • # xattr+mod_autoindex+mod_auth_* ?

    Posté par  (site web personnel) . Évalué à 2.

    Tu mets les "tags" du fichier dans ses attributs étendus () et tu utilises un mod_auth_* au choix pour les droits d'accès (.htpasswd, base de données,...).

    Pour que mod_autoindex n'affiche pas les fichiers aux personnes qui n'ont pas le droit de les télécharger il risque de falloir patcher un peu mais ça doit pas être trop compliqué. Pareil pour la description pour chaque fichier si tu veux qu'elle soit aussi dans les attributs étendus plutôt que dans un .htaccess.

    Par contre ça ne permet pas d'avoir plusieurs versions d'un même fichier et c'est sans doute pas fort portable en dehors de Linux.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # finalement...

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Comme c'est pour intégrer à dotclear, je pose la question directement :
    http://www.dotclear.net/forum/viewtopic.php?pid=67869

    Mes livres CC By-SA : https://ploum.net/livres.html

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.