Merci pour l'explication. Je connaissais la problématique du MITM mais qui est tout de même bien réduite avec le SSL.
Ton troisième point me semble le plus intéressant comme argument. Cela signifie que lors de la consultation d'un site en .onion, le dernier node avant d'arriver sur le service caché n'est pas forcément un exit node ?
En dehors de l'intérêt technique de mise en place et de l'intérêt réel d'avoir de plus en plus de services cachés Tor pour tout un tas de raisons (faire découvrir le réseau Tor, avoir une meilleure réputation du réseau, …), je m’interroge sur l'intérêt réel pour l'utilisateur.
Je ne connais pas forcément très bien Tor, donc petite question : ton site est accessible en http et https, quelle est donc la différence en terme de protection pour tes utilisateurs entre accéder à ton site en https + Tor et via le service caché ? (en dehors des logs qui ne sont pas activés)
avec xargs, ça fonctionne parfaitement. Tu viens de sauver le reste de mes cheveux. Un immense merci !
Le code qui fonctionne :
#!/bin/bashplugin_options="\"openerp\" \"Installation d'OpenERP\" off \"lamp\" \"Installation du serveur web\" off \"security\" \"Installation de la partie securite\" on"echo${plugin_options} | xargs dialog --args --stdout --backtitle "Choisissez les plugins à installer" --title "Plugins à installer" --checklist "Sélectionnez le ou les plugins à installer sur le serveur" 20 61 5
Tout d'abord, un grand merci pour ton lien vers le word splitting de bash, pendant mes recherches j'avais trouvé quelques références à ce concept mais le lien que tu me donnes est vraiment le mieux que j'ai pu lire.
Ensuite, j'ai copier/coller ton code et cela me fait la même erreur qu'avant (en gros mes espaces dans mes libellés sont toujours considérés comme l'espacement entre 2 arguments)
Enfin, j'ai compris le word splitting et vu qu'avec xargs (proposé au dessus) ça fonctionne, je pense que je vais arrêter de me prendre la tête à mettre mes arguments directement dans la commande
Mais, le soucis vient maintenant de mon ${plugins_options} à mon avis car en faisant :
#!/bin/bashplugin_options=$(list_plugins_for_menu "${plugins}")echo${plugins_options}choices=$(dialog --stdout --backtitle "Choisissez les plugins à installer" --title "Plugins à installer" --checklist "Sélectionnez le ou les plugins à installer sur le serveur" 20 61 5 ${plugin_options})
J'ai l'erreur :
Error: Expected 3 arguments, found only 2.
Use --help to list options.
et ça m'affiche bien cela :
"openerp" "Installation d'OpenERP" off "lamp" "Installation du serveur web" off "security" "Installation de la partie securite" on
Donc, il me semble que les options sont bien échappées vu que le echo les affiche comme elles devraient l'être dans la commande, j'ai tort ?
Pour résumer :
ceci fonctionne :
#!/bashchoices=$(dialog --stdout --backtitle "Choisissez les plugins à installer" --title "Plugins à installer" --checklist "Sélectionnez le ou les plugins à installer sur le serveur" 20 61 5 "openerp""Installation d'OpenERP" off "lamp""Installation du serveur web" off "security""Installation de la partie securite" on)
ceci ne fonctionne pas :
#!/bashplugin_options="\"openerp\" \"Installation d'OpenERP\" off \"lamp\" \"Installation du serveur web\" off \"security\" \"Installation de la partie securite\" on"choices=$(dialog --stdout --backtitle "Choisissez les plugins à installer" --title "Plugins à installer" --checklist "Sélectionnez le ou les plugins à installer sur le serveur" 20 61 5 ${plugin_options})
Il y a un assez bon article pour générer des PDF à partir de HTML : [http://artisan.karma-lab.net/node/1711].
Il présente Firefox et wkhtml2pdf.
wkhtml2pdf a l'avantage d'être simple à installer sur un serveur et moins lourd que Firefox. Mais lors de mes tests (il y a environ 6 mois - 1 an) je trouvais que wkhtml2pdf avait un rendu moins bon que Firefox. Il faudrait que je teste de nouveau.
Si tu peux exécuter des scripts PHP, il y a un moyen en passant par Propel [http://www.propelorm.org/]
Il existe des scripts pour transformer des schémas XML de DBDesigner en schémas XML pour Propel.
Par exemple, un script (avec interface web, mais modifiable très simplement pour l'utiliser en CLI) : [http://leblanc-simon.eu/utils_dbdesigner2propel.zip]
Ensuite, la transformation du XML généré en script SQL se fait via Propel avec une commande du style : propel-gen sql
Cela nécessite l'installation de Propel, mais une fois en place, ça se scripte très bien.
Au final, le plus simple serait peut-être de passer par la libssh [http://www.libssh.org/]
J'ai réalisé un programme C++ en passant par cette bibliothèque pour lancer des commandes ssh simplement et vu mon niveau assez faible en C++, la bibliothèque est assez simple à manipuler.
L'utilisation de Qt pour faire un programme de ce genre me semble disproportionné. Surtout que c'est pour installer sur un serveur et que celui-ci ne possède pas les bibliothèques Qt.
Je garde la solution sous le coude si je ne parviens pas à faire ce que je souhaite avec les autres propositions ci-dessus.
J'avais effectivement pensé à coder un programme qui utiliserai l'API d'OpenSSL, mais mon niveau n'étant pas super et le souvenir que j'ai de l'utilisation de l'API d'OpenSSL m'ont un peu découragé.
Si je génère un certificat avec l'API de GnuTLS, celui-ci sera compatible avec OpenSSL ?
Vu que ma version d'OpenSSH ne supportait pas le chroot en natif et que j'avais moyennement envie d'installer une nouvelle version majeure, j'ai trouvé une autre solution.
Il s'agit de modifier le seul script autorisé a être exécuté par mon utilisateur miroir (via le fichier "authorized_keys")
Oui, je sais que je peux utiliser rsync sans ssh, mais comme le port ssh est de tout façon ouvert, je préfère ne pas ouvrir un port de plus (pour rsync) sur le serveur et passer par ssh.
Ainsi rsync n'écoute que la boucle locale et n'a pas d'accès vers l'extérieur. Mais de cette façon, j'ai l'impression que l'on ne peut pas configurer le chroot de rsync (à moins que j'ai mal cherché).
Enfin, je ne crée qu'un seul user (et pas un par miroir) mais cet utilisateur peut s'identifier avec plusieurs clé ssh.
Effectivement, cela serait une solution. Mais comme les miroirs sont de gentils bénévoles, il faudrait en plus de faire miroir qu'ils veuillent nous ouvrir un accès ssh et/ou rsync en écriture.
Cela me semble beaucoup leur demander alors qu'avec la solution proposée, il n'ont qu'un script à mettre en cron et pas de configuration à faire sur leur serveur.
En fait, j'ai bien résolu le problème grâce à une identification en deux étapes (identification + vérification au début du téléchargement), et c'est vraiment bien plus léger que de s'occuper d'un cookie, qui présente certes bien plus de fonctionnalités, mais assez inutiles dans mon cas.
J'aimerais bien savoir en quoi c'est plus léger qu'un :
if (isset($_SESSION['login']) && $_SESSION['login'] === true) { }
De plus tu peux très bien utiliser les sessions sans cookies en passant le SID dans l'URL et en forçant l'utilisation du SID en paramètre (en fixant session.use_cookies à 0, session.use_only_cookies à 0 et session.use_trans_sid à 1 via la fonction ini_set())
Ce code fonctionne parfaitement sans acceptation des cookies par le client (et en plus il ajoute automatiquement le SID dans l'URL
Enfin pour finir avec les sessions, si tu initialise bien ta session lors d'une connexion, tu n'auras aucun problème de cache et tes utilisateurs pourront se connecter avec plusieurs login sans que cela ne pose de problème.
Au moins avec cette solution, pour peu que tu sécurises un peu la session, tu n'auras plus de problème avec l'identification.
Ensuite, pour les fichiers que l'utilisateur peut télécharger, il suffit de les garder en session pour vérification avant d'envoyer le fichier demandé avec ta page php
// Dans la page de login
// Si le login est réussi
// on stocke les fichiers autorise
// dans la session
if ($login === true) {
$files = file_get_contents('./fichier_pour_l_utilisateur_hors_repertoire_web_avec_fichier_autorise');
$_SESSION['files'] = explode(';', $files);
$_SESSION['login'] = true;
} else {
unset($_SESSION['files']);
unset($_SESSION['login']);
}
// Dans la page de telechargement
// On vérifie que l'utilisateur est connecté
if (isset($_SESSION['login']) === false || $_SESSION['login'] !== true) {
// l'utilisateur n'est pas connecté
// on le renvoie sur la page de login
header('Location: login.php');
exit();
} else {
// l'utilisateur est connecté
// on vérifie que le fichier demandé
// fait parti des fichiers autorisés
if (in_array($_GET['music'], $_SESSION['files']) === true) {
// le fichier est bin, on l'envoie
// code d'envoie du fichier avec les headers
} else {
// le fichier ne fait pas parti de la liste
// on l'indique à l'utilisateur
echo 'fichier interdit....';
}
}
L'excellent site Artisan Numérique a fait il y a quelques temps un article à ce propos. Au lieu de passer par FPDF, il proposait de passer via Firefox ou WebKit (après quelques tests, je préfère Firefox qui génère des PDF bien plus beaux et conformes aux résultats souhaités)
Si tu utilise Firefox, il faut faire quelques modifications dans un fichier de configuration du plugin à installer. J'ai eu un peu de mal à trouver ce qui n'allait pas avec la configuration proposé par Artisan Numérique, mais en supprimant la ligne : settings.paperWidth=280;
cela va tout de suite mieux pour moi.
Alors, oui ce n'est pas un outil standalone, mais pour l'instant c'est ce que j'ai trouvé de mieux en terme de temps de développement.
[^] # Re: Zerobin
Posté par leviathan (site web personnel) . En réponse au journal PrivateBin sécurise vos partages de texte en version 1.1. Évalué à 0.
Java ? Non, cela reste du PHP
[^] # Re: Intérêt réel pour l'utilisateur ?
Posté par leviathan (site web personnel) . En réponse à la dépêche Dans lequel on met un service caché Tor pour le site sauf.ca. Évalué à 3.
Merci pour l'explication. Je connaissais la problématique du MITM mais qui est tout de même bien réduite avec le SSL.
Ton troisième point me semble le plus intéressant comme argument. Cela signifie que lors de la consultation d'un site en .onion, le dernier node avant d'arriver sur le service caché n'est pas forcément un exit node ?
[^] # Re: Intérêt réel pour l'utilisateur ?
Posté par leviathan (site web personnel) . En réponse à la dépêche Dans lequel on met un service caché Tor pour le site sauf.ca. Évalué à 4.
Tu as mal lu mon commentaire, je compare (https + Tor) et service caché. Donc pas de problème de DNS et pas de problème avec l'IP du client.
Donc oui, je suis très sérieux sur mon interrogation :)
# Intérêt réel pour l'utilisateur ?
Posté par leviathan (site web personnel) . En réponse à la dépêche Dans lequel on met un service caché Tor pour le site sauf.ca. Évalué à 2.
En dehors de l'intérêt technique de mise en place et de l'intérêt réel d'avoir de plus en plus de services cachés Tor pour tout un tas de raisons (faire découvrir le réseau Tor, avoir une meilleure réputation du réseau, …), je m’interroge sur l'intérêt réel pour l'utilisateur.
Je ne connais pas forcément très bien Tor, donc petite question : ton site est accessible en http et https, quelle est donc la différence en terme de protection pour tes utilisateurs entre accéder à ton site en https + Tor et via le service caché ? (en dehors des logs qui ne sont pas activés)
[^] # Re: Les guillemets sont transmis
Posté par leviathan (site web personnel) . En réponse au message Substitution de commande et dialog. Évalué à 1.
avec xargs, ça fonctionne parfaitement. Tu viens de sauver le reste de mes cheveux. Un immense merci !
Le code qui fonctionne :
[^] # Re: une solution à base de printf
Posté par leviathan (site web personnel) . En réponse au message Substitution de commande et dialog. Évalué à 0.
Tout d'abord, un grand merci pour ton lien vers le word splitting de bash, pendant mes recherches j'avais trouvé quelques références à ce concept mais le lien que tu me donnes est vraiment le mieux que j'ai pu lire.
Ensuite, j'ai copier/coller ton code et cela me fait la même erreur qu'avant (en gros mes espaces dans mes libellés sont toujours considérés comme l'espacement entre 2 arguments)
Enfin, j'ai compris le word splitting et vu qu'avec xargs (proposé au dessus) ça fonctionne, je pense que je vais arrêter de me prendre la tête à mettre mes arguments directement dans la commande
merci beaucoup de ton aide.
[^] # Re: pourquoi ne pas faire simplement
Posté par leviathan (site web personnel) . En réponse au message Substitution de commande et dialog. Évalué à 1.
Ta solution fait avancé le problème, merci.
Mais, le soucis vient maintenant de mon ${plugins_options} à mon avis car en faisant :
J'ai l'erreur :
et ça m'affiche bien cela :
Donc, il me semble que les options sont bien échappées vu que le echo les affiche comme elles devraient l'être dans la commande, j'ai tort ?
Pour résumer :
ceci fonctionne :
ceci ne fonctionne pas :
Et je n'arrive pas à comprendre pourquoi...
[^] # Re: Schtroumpf grognon
Posté par leviathan (site web personnel) . En réponse à la dépêche Framasoft lance une campagne de dons. Évalué à 3.
[^] # Re: ... ou Firefox
Posté par leviathan (site web personnel) . En réponse au message Conversion HTML en PDF: wkhtml2pdf. Évalué à 1.
# ... ou Firefox
Posté par leviathan (site web personnel) . En réponse au message Conversion HTML en PDF: wkhtml2pdf. Évalué à 1.
Il présente Firefox et wkhtml2pdf.
wkhtml2pdf a l'avantage d'être simple à installer sur un serveur et moins lourd que Firefox. Mais lors de mes tests (il y a environ 6 mois - 1 an) je trouvais que wkhtml2pdf avait un rendu moins bon que Firefox. Il faudrait que je teste de nouveau.
# En passant par Propel
Posté par leviathan (site web personnel) . En réponse au message Générateur de SQL Create scripts. Évalué à 1.
Il existe des scripts pour transformer des schémas XML de DBDesigner en schémas XML pour Propel.
Par exemple, un script (avec interface web, mais modifiable très simplement pour l'utiliser en CLI) : [http://leblanc-simon.eu/utils_dbdesigner2propel.zip]
Ensuite, la transformation du XML généré en script SQL se fait via Propel avec une commande du style : propel-gen sql
Cela nécessite l'installation de Propel, mais une fois en place, ça se scripte très bien.
[^] # Re: Sources
Posté par leviathan (site web personnel) . En réponse au journal OpenStreetGame : un jeu pour vous faire réviser votre géographie. Évalué à 3.
Le deux fichiers étant à mettre dans le même répertoire.
# La libssh
Posté par leviathan (site web personnel) . En réponse au message Reprendre la main sur un tty. Évalué à 2.
J'ai réalisé un programme C++ en passant par cette bibliothèque pour lancer des commandes ssh simplement et vu mon niveau assez faible en C++, la bibliothèque est assez simple à manipuler.
[^] # Re: Expect
Posté par leviathan (site web personnel) . En réponse au message Manipulation d'un programme interactif en C++. Évalué à 1.
Un grand merci
[^] # Re: Qt
Posté par leviathan (site web personnel) . En réponse au message Manipulation d'un programme interactif en C++. Évalué à 2.
Je garde la solution sous le coude si je ne parviens pas à faire ce que je souhaite avec les autres propositions ci-dessus.
[^] # Re: Faire un tube
Posté par leviathan (site web personnel) . En réponse au message Manipulation d'un programme interactif en C++. Évalué à 1.
Si je génère un certificat avec l'API de GnuTLS, celui-ci sera compatible avec OpenSSL ?
[^] # Re: Expect
Posté par leviathan (site web personnel) . En réponse au message Manipulation d'un programme interactif en C++. Évalué à 1.
[^] # Re: pour etre beaucoup plus precis :)
Posté par leviathan (site web personnel) . En réponse au message droits utilisateur. Évalué à 1.
[^] # Re: Chacun le sien....
Posté par leviathan (site web personnel) . En réponse à la dépêche Sortie d'OpenWebReader 0.1a1. Évalué à 3.
# Solution retenue
Posté par leviathan (site web personnel) . En réponse au message Sécurité d'un rsync via ssh. Évalué à 1.
Vu que ma version d'OpenSSH ne supportait pas le chroot en natif et que j'avais moyennement envie d'installer une nouvelle version majeure, j'ai trouvé une autre solution.
Il s'agit de modifier le seul script autorisé a être exécuté par mon utilisateur miroir (via le fichier "authorized_keys")
Voici mon script :
#!/bin/bash
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
*\/*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
L'ajout du cas "/" permet de bloquer l'utilisateur aux seuls modules définis dans le fichier rsyncd.conf et d'empêcher les miroirs de mettre un path.
[^] # Re: et pourquoi ssh ?
Posté par leviathan (site web personnel) . En réponse au message Sécurité d'un rsync via ssh. Évalué à 1.
Ainsi rsync n'écoute que la boucle locale et n'a pas d'accès vers l'extérieur. Mais de cette façon, j'ai l'impression que l'on ne peut pas configurer le chroot de rsync (à moins que j'ai mal cherché).
Enfin, je ne crée qu'un seul user (et pas un par miroir) mais cet utilisateur peut s'identifier avec plusieurs clé ssh.
[^] # Re: ssh / chroot / force_command
Posté par leviathan (site web personnel) . En réponse au message Sécurité d'un rsync via ssh. Évalué à 2.
Pour la copie du maître vers les miroirs, cela demande plus de travail du côté des miroirs et je ne suis pas forcément pour.
Merci beaucoup pour l'astuce.
[^] # Re: l'inverse ?
Posté par leviathan (site web personnel) . En réponse au message Sécurité d'un rsync via ssh. Évalué à 1.
Cela me semble beaucoup leur demander alors qu'avec la solution proposée, il n'ont qu'un script à mettre en cron et pas de configuration à faire sur leur serveur.
[^] # Re: SID
Posté par leviathan (site web personnel) . En réponse au message Accès réservé à des fichiers vendus. Évalué à 3.
J'aimerais bien savoir en quoi c'est plus léger qu'un :
if (isset($_SESSION['login']) && $_SESSION['login'] === true) { }
De plus tu peux très bien utiliser les sessions sans cookies en passant le SID dans l'URL et en forçant l'utilisation du SID en paramètre (en fixant session.use_cookies à 0, session.use_only_cookies à 0 et session.use_trans_sid à 1 via la fonction ini_set())
Ce code fonctionne parfaitement sans acceptation des cookies par le client (et en plus il ajoute automatiquement le SID dans l'URL
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
if (isset($_SESSION['id']) === false) {
echo 'pas de session';
$_SESSION['id'] = 42;
} else {
echo $_SESSION['id'];
$_SESSION['id'] = 1;
}
<a href='./test.php>lien
Enfin pour finir avec les sessions, si tu initialise bien ta session lors d'une connexion, tu n'auras aucun problème de cache et tes utilisateurs pourront se connecter avec plusieurs login sans que cela ne pose de problème.
Au moins avec cette solution, pour peu que tu sécurises un peu la session, tu n'auras plus de problème avec l'identification.
Ensuite, pour les fichiers que l'utilisateur peut télécharger, il suffit de les garder en session pour vérification avant d'envoyer le fichier demandé avec ta page php
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
// Dans la page de login
// Si le login est réussi
// on stocke les fichiers autorise
// dans la session
if ($login === true) {
$files = file_get_contents('./fichier_pour_l_utilisateur_hors_repertoire_web_avec_fichier_autorise');
$_SESSION['files'] = explode(';', $files);
$_SESSION['login'] = true;
} else {
unset($_SESSION['files']);
unset($_SESSION['login']);
}
// Dans la page de telechargement
// On vérifie que l'utilisateur est connecté
if (isset($_SESSION['login']) === false || $_SESSION['login'] !== true) {
// l'utilisateur n'est pas connecté
// on le renvoie sur la page de login
header('Location: login.php');
exit();
} else {
// l'utilisateur est connecté
// on vérifie que le fichier demandé
// fait parti des fichiers autorisés
if (in_array($_GET['music'], $_SESSION['files']) === true) {
// le fichier est bin, on l'envoie
// code d'envoie du fichier avec les headers
} else {
// le fichier ne fait pas parti de la liste
// on l'indique à l'utilisateur
echo 'fichier interdit....';
}
}
[^] # Re: Plus que ODT vers PDF
Posté par leviathan (site web personnel) . En réponse à la dépêche Sortie de odtPHP v0.9 : Générez des documents OpenOffice avec PHP. Évalué à 2.
Si tu utilise Firefox, il faut faire quelques modifications dans un fichier de configuration du plugin à installer. J'ai eu un peu de mal à trouver ce qui n'allait pas avec la configuration proposé par Artisan Numérique, mais en supprimant la ligne :
settings.paperWidth=280;
cela va tout de suite mieux pour moi.
Alors, oui ce n'est pas un outil standalone, mais pour l'instant c'est ce que j'ai trouvé de mieux en terme de temps de développement.
http://artisan.karma-lab.net/node/1711