PDA

Bekijk Volledige Versie : Voorkom verwijderen van public_html etc.



dennis0162
13/01/12, 16:46
Het komt bij ons vaak voor dat gebruikers (per ongeluk) de verkeerde mappen verwijderen zoals public_html, domains, imap etc.
Waarschijnlijk komt dat probleem jullie wel bekend voor en je bent er té veel tijd aan kwijt.

Nu was het vandaag de zoveelste gebruiker die zijn mappen heeft verwijderd, en ben ik even gaan zoeken naar een "oplossing" hiervoor.
Ik heb een bash scriptje geschreven wat een configuratie bestand aanmaakt voor ProFTPd wat voorkomt dat een user bepaalde mappen kan verwijderen.

De volgende mappen zijn mee genomen:

/home/user/public_html (link)
/home/user/imap
/home/user/Maildir
/home/user/domains
/home/user/domains/domein.nl
/home/user/domains/domein.nl/public_html
/home/user/domains/domein.nl/private_html
/home/user/domains/domein.nl/public_ftp
/home/user/domains/domein.nl/logs
/home/user/domains/domein.nl/.htpasswd

Ook verbergt het de volgende bestanden: bash_logout .bash_profile .bashrc .shadow

Enkel de mappen kunnen niet verwijderd worden, de inhoud van de mappen wel!
Als je een map verwijderd, leegt hij alles wat in die map staat, maar niet de map zelf.

Het enige nadeel is dat klanten alsnog de mappen kunnen verwijderen via de File manager van DirectAdmin.

Installatie:

In de file /etc/proftpd.conf helemaal onderaan plaatsen: Include /etc/proftpd.dir.conf

proftpd.cron.sh moet als cronjob ingesteld worden, ik neem aan dat iedereen wel weet hoe dat moet...

Gebruik op eigen risico etc. Aanpassingen graag delen:)
Ik hoop dat jullie er wat aan hebben.

Download link: http://bitency.nl/proftpd.cron.sh

Code proftpd.cron.sh:



#/bin/bash
#
# ProFTPd aanpassing voor DirectAdmin servers.
# Klanten kunnen directorys niet meer verwijderen.
#
# Dennis op de Weegh - Bitency
# info@bitency.nl - www.bitency.nl
#
# Deze file als CronJob instellen
#
# Plaats in /etc/proftpd.conf de volgende regel helemaal onderaan: Include /etc/proftpd.dir.conf
#
# Gebruik op eigen risico etc.

# Verwijderen oude tmp file
rm -rf /etc/proftpd.dir.conf.tmp

# Regels Per User
for u in `ls /usr/local/directadmin/data/users`; do

#echo -e '##### Begin User: '$u' #####' >> /etc/proftpd.dir.conf.tmp

echo -e '<Directory /home/'${u}'> \n HideFiles "(\\.bash_logout|.bash_profile|.bashrc|.shadow)$" \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/imap> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/Maildir> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/public_html> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/public_html/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp

# Regels Per domeinnaam
for a in `find /usr/local/directadmin/data/users/$u/domains.list`; do
d=`echo "$a" | awk -F / '{ print $7 }'`

for d in `cat $a`; do
echo -e '<Directory /home/'${u}'/domains/'$d'> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/public_html> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/public_html/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/public_ftp> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/public_ftp/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/private_html> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/private_html/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/.htpasswd> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/.htpasswd/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/logs> \n <Limit RMD XRMD> \n DenyAll \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
echo -e '<Directory /home/'${u}'/domains/'$d'/logs/*> \n <Limit RMD XRMD> \n AllowUser '${u}' \n </Limit> \n </Directory>' >> /etc/proftpd.dir.conf.tmp
done

done

#echo -e '##### Eind User: '$u' #####' >> /etc/proftpd.dir.conf.tmp

done

# TEMP File moven
rm -rf /etc/proftpd.dir.conf
mv /etc/proftpd.dir.conf.tmp /etc/proftpd.dir.conf
rm -rf /etc/proftpd.dir.conf.tmp

# Reload/reread proftpd configs
/etc/init.d/proftpd reread

BReady
13/01/12, 17:02
Fijn scriptje, jammer dat ik geen DirectAdmin/ProFTPD draai.

Je kan de betreffende (start) directories toch ook gewoon 'chmodden'? Dat lost het 'probleem' ook op.
Zo heb ik het in ieder geval gedaan.

Marco Mahieu
25/01/12, 01:21
Ik moet eerlijk bekennen, ik ben dat probleem in al die jaren nog nooit tegen gekomen. Veel tijd aan kwijt? Gewoon mapje terugzetten uit de back-up van de nacht ervoor?

xaban
25/01/12, 02:27
Ik moet eerlijk bekennen, ik ben dat probleem in al die jaren nog nooit tegen gekomen. Veel tijd aan kwijt? Gewoon mapje terugzetten uit de back-up van de nacht ervoor?

Als je duizenden gebruikers hebt en het komt vaak voor, dan kost het veel tijd. Ticket komt binnen, ticket in behandeling nemen, backup uitvoeren etc.

Is het niet handiger om inderdaad met rechten te werken in plaats met een script?

Yourwebhoster
25/01/12, 08:07
Ik moet eerlijk bekennen, ik ben dat probleem in al die jaren nog nooit tegen gekomen. Veel tijd aan kwijt? Gewoon mapje terugzetten uit de back-up van de nacht ervoor?
Heb het wel een paar keer gehad, maar dan pre defined replietje dan ofzo? Maar goed wat Dennis doet is mooi natuurlijk, beter voorkomen dan genezen hoewel dat niet helemaal kan. Wellicht iets voor DA om naar te kijken in de file manager, al contact met ze gehad Dennis?

Erik H.
27/01/12, 23:50
Script van Dennis is handig en neemt ons in elk geval (als we het gaan gebruiken) een paar tickets in de week uit handen. Maar wat Yourwebhoster zegt: misschien handig als je het even ook bij DA zelf neerlegt. Altijd mooier als ze het er daar inbouwen in plaats van dat je dat zelf moet doen.

Blacky
31/01/12, 18:04
Yep, handig, maar inderdaad ook handiger om het bij DA ook neer te leggen, temeer daar er nu ook gebruik gemaakt kan worden van pure-ftpd dus misschien is het mogelijk dit zodanig te verwerken dat er ook met pure-ftpd desgewenst gewerkt kan worden.
Of nog beter, dat er een restore scriptje van DA zelf komt wat al deze directory's met standaard rechten weer terug zet bij een klant als zoiets gebeurt.

dennis0162
17/02/12, 14:04
Nog even een kleine update;

Wij gebruik het sinds 2 dagen op een productie server maar we hebben het weer uitgeschakeld.

Het probleem is dat ProFTP alles steeds moet in laden bij elk FTP commando. (map maken, map verwijderen, bestandenlijst ophalen etc.)
Je merkt een flinke vertraging en het is vrij irritant als je voor alles even moet wachten voordat het geladen is.

Als je maar een paar users hebt op je server < 50 dan merk je het niet.

The-BosS
19/02/12, 17:42
Kun je dit probleem ook niet oplossen met acl settings of met chattr +i en dan in de pre/post hook scripts van da chattr +i doen na creatie van een user en chattr -i doen voor het verwijderen van een user op de betreffende files (zoals .htaccess etc).

dennis0162
19/02/12, 18:38
Dat zou ik ook kunnen inderdaad, v/d week even mee aan de gang gaan:)