Тема: [Вирішено] [ProFTPd] Заборона певних типів файлів та самих файлів.
Почну з того, що недавно на роботі почав міграцію зі зберігання розкидано файлів в SMB на централізоване зберігання на FTP. Ну як кажуть, просто і зі смаком. Бо бекап робити так куди простіше.
Ну і при першій спробі мігрувати стало зрозуміло, що на Windows сміття чимало і як на зло воно розкидано всюди, ну типова бидло система яка сире всюди. Відповідно користувачі звиклі до цього способу життя не позбавлялися всього непотребу і засмічували сервер, лиш перша чистка і одразу 4% від об'єму серверу, а день чистки і вже за 10% перевалило. Сказати, що це старі документи не можна, бо цим сміттям є різноманітні тимчасові файли та т.п.
Тож з'явилася потреба у фільтрації, тут все просто, є такий параметр в конфігу як PathDenyFilter, та для нього треба сформувати регулярний вираз, ну який буде чималий і писати його вручну не дуже зручно, тому цей параметр виніс у окремий файл з конфігу proftpd.conf:
# Фільтр для захисту від проникнення
DenyFilter \*.*/
# Заборона певних файлів та типів файлів
Include /etc/proftpd/deny.conf
Та створив перелік заборонених файлів та типів файлів:
# Viktor Matvieienko <hetman.net@gmail.com>
# Перелік заборонених файлів
# Для відступу використовувати [[:blank:]], тобто TAB
# ТОВ "Майстер Мілк" 2014
system.1st діагностичний файл ms windows
suhdlog.dat діагностичний файл ms windows
Trumbs.dB кеш попередньго перегляду файлу
mscreate.dir файл налаштувань тимчасових файлів
autorun.inf файл автозапуску в Windows системах
desktop.ini файл налаштувань робочого столу в Windows системах
oeminfo.ini інформаційн файл про обладнання в Windows системах
# Viktor Matvieienko <hetman.net@gmail.com>
# Перелік заборонених типів файлів
# Для відступу використовувати [[:blank:]], тобто TAB
# ТОВ "Майстер Мілк" 2014
# Файли серверів
.ftpaccess файл налаштувань доступу до теки FTP сервера
.htaccess файл налаштувань доступу до теки HTTP сервера
.htpasswd файл для зберігання хешу пароля до теки HTTP сервера
.directory файл налаштувань параметрів перегляду теки
.bash_profile файл налаштувань профілю користувача для терміналу Bash
.bashrc файл налаштувань поведінки для терміналу Bash
.cer файл сертифіката безпеки веб-сервера
.csr файл сертифіката безпеки веб-сервера
# Файли налаштування для різних сімейств ОС
.properties файл налаштувань
.conf файл налаштувань в UNIX системах
.kderc файл налаштувань поведінки для терміналу Bash в KDE
.xul файл налаштувань користувацького інтерфейсу у рушіях Mozilla
.swb файл макроса SolidWorks
# Файли попереднього перегляду ОС сімейства UNIX
.thumbnails файл попереднього перегляду для файлів в теках на ОС сімейства UNIX
.ds_store файл налаштувань параметрів перегляду теки MacOS X
# Виконавчі файли ОС сімейства UNIX
.sh файл скрипту Shell/Bash для UNIX систем
.bin файл бінарного файлу програм для UNIX систем
.so файл динамічної бібліотеки програм для UNIX систем
.elf файл бінарного файлу програми чи дампу програми для UNIX систем
.jar файл програми написаної на Java
.cpp файл програми на C++
.cgi файл CGI скрипта
.py файл Python скрипта
.php файл PHP скрипта
.lua файл LUA скрипта
.class файл класа Java
.c файл програми на С
.asm файл програми на Assembler
# Файли налаштувань для ОС сімейства Windows
.ini файл налаштувань в Windows та MS-DOS системах
.lnk файл посилань на файли і теки в ОС сімейства Windows
.reg файл реєстру (системних налаштувань) в Windows системах
.cfg файл налаштувань в Windows системах
.sys файл системних налаштувань в windows та MS-DOS системах
.regtrans-ms файл реєстру (системних налаштувань) в Windows системах
.cpl файл налаштувань панелі керування в ОС сімейства Windows
.deskthemepack файл налаштування оформлення у ОС Windows 8
.msstyles файл налаштування оформлення у ОС сімейства Windows
.hlp файл довідки в ОС сімейства Windows
.chm файл довідки в ОС сімейства Windows
.ico файл іконки в ОС сімейства Windows
.ics файл налаштування спільного доступу MS-ICS
.key файл реєстру (системних налаштувань) в ОС Windows 7
.rtp файл пакету оновлень програмного забезпечення для ОС сімейства Windows
.scr файл налаштування заставки ОС сімейства Windows
.theme файл налаштування оформлення
.themepack файл налаштування оформлення у ОС Windows 7
.thm файл налаштування оформлення
.gadget файл налаштування оформлення у ОС сімейства Windows
.pif інформаційний файл про програмне забезпечення ОС сімейства Windows
.aif інформаційний файл про програмне забезпечення ОС сімейства Windows
.dtd файл налаштувань програми ICQ
.prf файл налаштування програми MS Outlook
.swf файл активатора профіля Microsoft Sidewinder
.wps файл налаштувань для різних прогам
# Виконавчі файли ОС сімейства Windows
.exe бінарний файл програм в Windows системах
.com бінарний файл програм в Windows системах
.msi бінарний файл програми установки в Windows системах
.dll файл динамічної бібліотеки програм для Windows систем
.bat файл скрипту BAT для Windows систем
.cmd файл скрипту команд для Windows систем
.nt файл скрипту команд для Windows систем
.wsf файл скрипту команд для Windows систем
.vb файл скрипту команд на VBScript для Windows систем
.msu файл пакету оновлень ОС сімейства Windows
.mod файл модуля до програмного забезпечення
.plugin файл модуля до програмного забезпечення
.ext файл модуля до програмного забезпечення Norton
.crx файл модуля до програмного забезпечення Google Chrome
.ape файл модуля до програмного забезпечення Winamp
# Логи, резервні копії та тимчасові файли для різних сімейств ОС
.tmp тимчасовий файлів
.log файл логу програми
.old попередня версія файлу конфігурації (налаштувань)
.bak резервна копія файлу
.temp тимчасовий файл
.bash_history файл логу введених команд до терміналу Bash
.bash_logout файл логу терміналу Bash
.sh_history файл логу введених команд до терміналу Shell
.mysql_history файл логу введених команд до терміналу MySQL
.history файл логу
.err файл деталізованого логу про помилки, баґи
.dmg файл дампу оперативної пам'яті
# Логи, резервні копії та тимчасові файли для ОС сімейства Windows
.chk відновлений файл з втраченого кластера
.gid тимчасовий файл довідки
.~res резервна копія файлу
.~flb резервна копія файлу
.~file_id.diz підпис до вільнопоширюваних програм
.~dmp дамп оперативної пам'яті
.syd тимчасовий файл
.ftg тимчасовий файл довідки
.fts тимчасовий файл довідки
.$$$ тимчасовий файл
.@@@ тимчасовий файл
.--- тимчасовий файл
.___ тимчасовий файл
.wbk резервна копія файлу ms office word
.xlk резервна копія файлу ms office exel
.log.txt файл логу програми
.??$ тимчасові файли
.??~ тимчасові файли
.?~? тимчасові файли
.prv резервна копія файлу
.original резервна копія початкової версії файлу
.sv$ тимчасовий файл
.dwl2 тимчасовий файл
.asd файл автозбереження ms office
.000 файл індексації файлів
.~cr файл образа файла
.cvr файл звіту про крах Windows
.localstorage-journal тимчасовий файл браузера Google Chrome
.csi тимчасовий файл Windows Server
.gdoc посилання на файл в Google Docs
.gsheet посилання на файл в Google Docs
.ht файл сесії HyperTerminal
.etl файл трасування Windows
.xps тимчасовий файл Windows Blinds
.iff тимчасовий файл злиття даних SmartWare
.prf файл трасировки помилок Windows
.shs тимчасовий файл буфера обміну ОС сімейства Windows
.spl тимчасовий файл спула друку ОС сімейства Windows
.webarchive веб-історія Apple Safari
# Файли систем індексації та метаданих
.asx файл індексу, що застосовується у бібліотеці Alpha Five
.cue файл метаданих про оптичний носій даних
.asp файл індексу, що застосовується у програмному забезпечені Adobe
# Недовантажені чи фрагментовані файли
.part неповний файл
.crdownload недовантажений файл браузером Google Chrome
.download недовантажений файл браузером Google Chrome
.opdownload недовантажений файл браузера Opera
.mxdl недовантажений файл браузером Maxthon
.dlc файл посилань для JDownloader
.webloc файл посилань для Apple Safari
.partial недовантажений файл браузером IE
.adadownload недовантажений файл програмой Adobe
Ну відповідно, для перетворення цього переліку у регулярний вираз дуже простенький bash скрипт. Це лишень перша версія, далі його приведу до кращого вигляду.
#!/bin/bash
# Viktor Matvieienko <viktor.matveenko@gmail.com> 2014
# Скрипт генерації регулярного виразу для фільтру proftpd
# ТОВ "Мастер Мілк" 2014
BANNED_FILE_TYPES=/path/to/Banned_file_types.list
FORBIDDEN_FILES=/path/to/Forbidden_files.list
PATH_CONF=/etc/proftpd/deny.conf
echo "# Регулярний вираз для PathDenyFilter" > $PATH_CONF
echo -n "PathDenyFilter \.(" >> $PATH_CONF
cat $BANNED_FILE_TYPES | sed '/#/d' | sed '/^$/d' | sed "s/[[:blank:]].*//" | sed "s/\.//" | sed "s/\\$/\\\\$/g" | sed "s/\\?/\\\\?/g" | tr '\n' '|' >> $PATH_CONF
declare -a tmp_1
declare -a tmp_2
tmp_1=( `cat $FORBIDDEN_FILES | sed '/#/d' | sed '/^$/d' | sed "s/\..*//" | sed "s/[[:blank:]].*//" | sed "s/\\$/\\\\$/g" | sed "s/\\?/\\\\?/g"` )
tmp_2=( `cat $FORBIDDEN_FILES | sed '/#/d' | sed '/^$/d' | sed "s/[[:blank:]].*//" | sed "s/.*\.//" | sed "s/\\$/\\\\$/g" | sed "s/\\?/\\\\?/g"` )
index_1=1
for e in "${tmp_1[@]}"
do
NAME_FILES[$index_1]=$e
index_1=`expr $index_1 + 1`
done
index_2=1
for e in "${tmp_2[@]}"
do
TYPE_FILES[$index_2]=$e
index_2=`expr $index_2 + 1`
done
count_1=$index_1
index_3=1
while [ "$index_3" -ne "$count_1" ]
do
echo -n "|(?<=" >> $PATH_CONF
echo -n "${NAME_FILES[$index_3]}" | sed "s/.$//" >> $PATH_CONF
echo -n "\.)" >> $PATH_CONF
echo -n "${TYPE_FILES[$index_3]}" | sed "s/.$//" >> $PATH_CONF
index_3=`expr $index_3 + 1`
done
echo -n ")$ [NC]" >> $PATH_CONF
echo "" >> $PATH_CONF
Тепер найголовніше: питання. Які ще слід типи файлів заборонити, щоб на сервері було як можна менше сміття.