====== Enable Upload Script ======
To enable uploadscript set the paramter "CallUploadScript" to "yes". In Ubuntu this is done by creating a file called "CallUploadScript" with only the word "yes" inside it. Place CallUploadScript into /etc/pure-ftpd/conf.
Now edit the file /etc/default/pure-ftpd-common and add/edit the following:
UPLOADSCRIPT=/home/pureftpd/uploadscript.sh
# if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the
# given uid and gid
UPLOADUID=1008
UPLOADGID=1008
This will call the script "/home/pureftpd/uploadscript.sh" after an upload event and run it as the user given by uid=1008/guid=1008. To find the values for a user just run:
# id pureftpd
uid=1008(pureftpd) gid=1008(pureftpd) groups=1008(pureftpd)
====== The Upload Script ======
Now to the script.
Of course you will have to make sure it has execution permissions:
# chmod +x /home/pureftpd/uploadscript.sh
===== A Word of Caution =====
You will also have to consider **very** carefully what you put into the script. The script will run no matter who or what is uploaded and can become a security breach. As you do not control what is uploaded or what it is called it could inadvertably do bad stuff to your system.
===== The Story =====
My need for an uploadscript was to determine if a file was a picture and not some funny Windows malware (Linux has saved a lot of Windows machines LOL). A customer of mine was getting a lot of documents scanned by a bureau with a massive virus infected network (cheap labour does come at a price :-)). To minimize the risk of uploading crapware I was told to find a simple (and cheap) solution. As I knew that the files uploaded only was pictures a simple filter testing for that was an easy choice. You could choose to extend the action and also virusscan the files, that would be a very easy job to do - just add an other if-then test cycle to the script and throw in [[http://www.clamav.net/|Clam AV]] or some other anti-virus vendor.
===== The Script =====
I'm simply testing the file with the command "file" and to determine what filetype it is. I rely on the fact that "file" does its job correctly. If you could fool the tool to believe that a file is a picture but instead is a Windows executable there is a very big chance that someone will double click on it and start the menace.
Back to the script. If the file is a picture of either GIF or PNG type it will be accepted and moved into /home/pureftpd/upload.
If it is of any other type it will be deleted and a mail send to user@spammenot.dk.
#!/bin/bash
logger uploadscript
FILETYPE=`file "$1" | cut -d: -f2 | cut -c 1-4 | tr -d " "`
if [ x$FILETYPE = xGIF -o x$FILETYPE = xPNG ]; then
mv "$1" /home/pureftpd/upload
else
rm "$1"
echo "$1 uploaded and deleted again" | /usr/bin/mail -s "New upload : $1" \ user@spammenot.dk
fi