FileZ¶
FileZ est une application web développée par l’Université d’Avignon et des Pays de Vaucluse qui permet de déposer et gérer des fichiers destinés à être partagés grâce à une URL unique, sur le principe de l’application perl/mod_perl filex.
- PHP/Mysql – Framework Limonade PHP
- Authentification modulaire : CAS+LDAP, LDAP only, BDD, ou vos propres classes PHP
- URL courtes (ex: filez.univ-avignon.fr/x42ni1)
- Barre de progression d’upload (Utilisation non obstructive du javascript)
- Formulaire d’installation
- Internationnalisation
- Protection des fichiers par mot de passe
- Envoi d’emails
- Tâches cron
- Quota
https://github.com/FileZ/FileZ
doc http://pegasus45.free.fr/index.php?title=Ubuntu_10.04:_Installation_de_FileZ_2.0.2
Installation¶
on part d’une debian 6
apt-get install apache2 mysql-server php5-mysql php5-gd make unzip
apt-get install php5-dev php-pear
pecl install uploadprogress
echo "extension = uploadprogress.so" >> /etc/php5/apache2/conf.d/uploadprogress.ini
apache2ctl restart
vi /etc/apache2/sites-available/filez
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName srv-filez
DocumentRoot /var/www/filez
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog /var/log/apache2/filez-error.log
LogLevel warn
CustomLog /var/log/apache2/filez-access.log combined
</VirtualHost>
vi /etc/apache2/sites-available/default
AllowOverride All
a2ensite filez
a2enmod rewrite
mkdir /var/www/filez
/etc/init.d/apache2 restart
vi /etc/php5/apache2/php.ini
#Taille max d'un fichier en upload
upload_max_filesize = 750M
#Taille max d'un fichier que PHP peut accepter
post_max_size = 750M
#Temps max qu'un script peut executer
max_execution_time = 1200
#Répertoire temporaire pour le transfert
upload_tmp_dir "/srv/filez-tmp"
mkdir /srv/filez-tmp
chown www-data.www-data /srv/filez-tmp
/etc/init.d/apache2 restart
wget https://download.github.com/UAPV-FileZ-2.0.2-14-g232f5be.tar.gz
tar zxvf UAPV-FileZ-2.0.2-14-g232f5be.tar.gz
mv FileZ-master/* /var/www/filez/
mv FileZ-master/.* /var/www/filez/
chown -R www-data.www-data /var/www/filez
mysql -u root -p
Note
le lien vers l’archive peut changer via la modification des sources il est donc préférable d’aller le télécharger manuellement sur le site git
create database filez;
use filez;
CREATE TABLE `filez`.`db_users` (
`uid` SERIAL NOT NULL ,
`login` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
`givenname` VARCHAR( 255 ) NOT NULL ,
`sn` VARCHAR( 255 ) NOT NULL ,
`mail` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
INSERT INTO `filez`.`db_users`
(`uid`, `login`, `password`, `givenname`, `sn`, `mail`)
VALUES (NULL, 'admin', MD5('admin'), 'Admin', 'Olympe', 'admin@olympe.local');
mkdir -p /var/filez/uploads
mkdir -p /var/log/filez
chown -R www-data.www-data /var/filez
chown www-data.www-data /var/log/filez
Paramétrage¶
Nous venons d’installer le serveur sur le lien http://myservdeb04/filez
Nous avons donc un utilisateur d’inscrit (admin/admin)
Il faut maintenant lancer votre naviguateur pour finir l’installation par le paramétrage
le fichier /var/www/filez/config/filez.ini est
[app]
use_url_rewriting = 1
log_dir = "/var/log/filez"
upload_dir = "/var/filez/uploads"
max_file_lifetime = 20
default_file_lifetime = 10
max_extend_count = 7
min_hash_size = 4
max_hash_size = 8
default_locale = "fr"
auth_handler_class = "Fz_Controller_Security_Internal"
user_factory_class = "Fz_User_Factory_Database"
user_quota = "2G"
https = "off"
progress_monitor = "Fz_UploadMonitor_ProgressUpload"
sharing_destinations[] = "email"
admin_email = "informatiquepz@myprop-group.com"
[db]
dsn = "mysql:host=localhost;dbname=filez"
user = "root"
password = "systemlx"
[cron]
days_before_expiration_mail = 2
frequency = "+1 day"
[email]
from_name = "Mysociety Filez"
from_email = "svcfilez@myprop-group.com"
host = "srvxxxx1"
name = "filez"
; si le serveur demande une authentification
; auth=login ; possible values = crammd5, login, plain
; port=25
; username=svcfilez
; password=myprop2012
[user_factory_options]
db_use_global_conf = 1
db_table = "db_users"
db_username_field = "login"
db_password_field = "password"
db_password_algorithm = "MD5"
[user_attributes_translation]
firstname = "givenname"
lastname = "sn"
email = "mail"
id = "uid"
[looknfeel]
show_credit = 1
help_url = "help"
on peut aussi gérer la suppression automatique des fichiers par une tache cron
vi /var/www/filez/scripts/cron.sh
LOG_DIR=/var/log/filez
# Url of filez web root
URL=http://myservdeb04/filez
LANG=fr
url_output="`wget --header=\"Accept-Language: $LANG\" -q -O - $URL/admin/checkFiles`"
if test -n "$url_output"; then
cd $LOG_DIR
echo "[`date +'%FT%T%:z'`] [CRON] wget output: "$url_output >> "$LOG_DIR/filez-cron-error.log"
fi
Ensuite, on le place dans le cron. Important, le script doit être exécuté par l’utilisateur Apache:
crontab -e
0 0 * * * su www-data -c "sh /var/www/filez/scripts/cron.sh" 2>/dev/null
Un mail d’avertissement sera envoyé 2 jours avant l’expiration. Et le jour j, le fichier sera supprimé.
Dans le fichier /var/www/filez/config/filez.ini, on peut modifier certaines valeurs:
max_file_lifetime = nb de jours max que l'utilisateur peut choisir pour l'expiration
default_file_lifetime = nb de jours par défaut pour l'expiration
max_extend_count = nb max de fois que l'utilisateur peut étendre l'expiration
user_quota = la taille max de l'espace de stockage à chaque utilisateur
days_before_expiration_mail = nb de jour avant l'envoi d'un mail d'avertissement
concernant les utilisateurs, juste après l’installation j’ai lancé la commande suivante
update fz_user set is_admin=1
cela a permit de donner les droits d’administration à l’utilisateur admin
Pour que la base puisse être accessible depuis un autre poste
vi /etc/mysql/my.cnf
# Mettre ici l'adresse IP de votre serveur
bind-address = XXX.XXX.XXX.XXX
# Cette ligne doit être commentée ou inexistante
# skip-networking
/etc/init.d/mysql restart
creation d’un compte “mysql” avec pour password “mysociety” pour un accès distant
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY 'mysociety' WITH GRANT OPTION;
Invité¶
Il est parfois utile d’avoir un compte “invité” afin d’offrir la possibilité à une personne extérieur à pouvoir déposé un fichier.
création du compte guest (password initial guest)
mysql -u root -p
INSERT INTO `filez`.`db_users`
(`uid`, `login`, `password`, `givenname`, `sn`, `mail`)
VALUES (NULL, 'guest', MD5('guest'), 'guest', 'guest', 'guest@myprop-group.com');
ajout dans /var/www/filez/config/filez.ini des infos de password de guest
[guest]
password_guest = guest
modification du fichier /var/www/filez/app/views/layout afin:
- d’avoir une charte d’utilisation
- qu’un utilisateur authentifié puisse voir les informations de connexion du compte guest
<footer>
<?php if (is_array (option ('debug_msg'))): ?>
<div class="debug"><h3>Logged messages :</h3>
<?php foreach (option ('debug_msg') as $msg): ?>
<pre><?php echo $msg ?></pre>
<?php endforeach ?>
</div>
<?php endif ?>
<?php if (isset ($fz_user)): ?>
<p id="disk-usage"><?php echo __r('Using %space% of %quota%', array(
'space' => '<b id="disk-usage-value">'.$fz_user->getDiskUsage ().'</b>',
'quota' => fz_config_get('app', 'user_quota') )); ?>.
</p>
<?php if ($fz_user != 'guest guest'): ?>
<div id="charte">
Si vous souhaitez qu'un utilisateur extérieur puisse déposer un fichier, vous pouvez lui donner comme info de connexion
<br/>login: guest
<br/>password: <b><?php echo __(fz_config_get('guest', 'password_guest')) ?></b>
</div>
<?php endif ?>
<?php else: ?>
<div id="charte">
<dd>1 - L'usage de ce service ne peut se faire que dans le cadre professionnel.<br></dd>
<dd>2 - Seuls les fichiers ne contrevenant pas à la législation et notamment au respect des droits d'auteur peuvent y être déposés.<br></dd>
<dd>3 - Le déposant sera tenu responsable juridiquement des documents accessibles.<br></dd>
<dd>4 - La confidentialité des fichiers déposés n'est pas garantie.<br></dd>
<dd>5 - Toutes les opérations sont journalisées.</dd><p></p>
</div>
<?php endif ?>
<div id="support">
<?php if (fz_config_get('looknfeel', 'help_url')): ?>
<a href="<?php echo url_for (fz_config_get('looknfeel', 'help_url')) ?>" class="help" target="#_blank"><?php echo __('Find help') ?></a>
<?php endif; ?>
<?php if (fz_config_get('looknfeel', 'bug_report_href')): ?>
<a href="<?php echo fz_config_get('looknfeel', 'bug_report_href') ?>" class="bug"><?php echo __('Report a bug') ?></a>
<?php endif; ?>
</div>
<?php if (fz_config_get('looknfeel', 'show_credit')): ?>
<a href="https://github.com/FileZ/FileZ" target="#_blank"><?php echo __('A free software from the University of Avignon and the FileZ community') ?></a>
<?php endif ?>
<?php echo check_cron();?>
</footer>
j’ai aussi placé dans /var/www/filez/resource/css/custom.css des infos pour le div charte
div#charte {
text-align: left;
font-size:11px;
}
il faut maintenant faire un script qui va changer régulièrement:
- le mot de passe de guest dans la base de donnée mysql
- le mot de passe de guest dans le fichier var/www/filez/config/filez.ini
pour cela il faut installer su le serveur python et le module python-mysqldb
apt-get install python python-mysqldb
puis écrire le module suivant:
import _mysql
import string
from random import sample
f='/var/www/filez/config/filez.ini'
pop = string.ascii_letters + string.digits
k=8
passwd = ''.join(sample(pop, k))
print passwd
db=_mysql.connect(host="localhost",user="root", passwd="systemlx",db="filez")
db.query("update db_users set password=MD5('%s') where login='guest'" % passwd)
db.commit()
db.close()
fichier = open(f,'r')
txt=''
for i in fichier.readlines():
if i[0:14] == 'password_guest':
i = 'password_guest = %s' % passwd
txt = txt + i
fichier.close()
result = open(f,'w')
result.write(txt)
result.close()
il faut maintenant ajouter une tâche dans crontab pour calculer régulièrement ce nouveau mot de passe
crontab -e
0 0 * * * /root/change_password_guest.sh