Архів за місяць: Жовтень 2013

Як поставити пароль на архів tar у Лінукс

Виявляється це на так просто. Команда tar не має вбудованої підтримки шифрування. Тому робимо це у “юнікс”-way:

Шифруємо дані:

$ tar cfz - ФАЙЛ | openssl enc -aes-256-cbc -e > АРХІВ.tar.gz
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:

Розшифровуємо:

$ openssl enc -in АРХІВ.tar.gz -aes-256-cbc -d | tar -zxvf -
enter aes-256-cbc decryption password:

Звичайно замість файлу може бути і директорія.

Масове перекодування файлів з cp1251 у utf8

Пересаджуючи старий проект на Twitter Bootstrap я стикнувся з необхідністю перекодування шаблонів HTML з кодової сторінки window-1251 у UTF-8. Шаблони всі були в одному каталозі, мали розширення *.tmpl і їх було не багато, але запускати для кожного файлу iconv було якось не по лінуксоїдські. Проблема була ще й у методі конвертації утиліти iconv – вона не перезаписувала файл, а робила вивід у новий. Тобто для кожного файлу треба було зробити такі дії:

  1. Перевести з cp1251 у utf8 та зберегти у новому файлі
  2. Замінити старий файл новим

Писати сценарій для такої простої операції не варто, тому я зробив це у 3 команди, але потім трохи подумав і зменшив їх до 2:

$ ls *.tmpl | sed s/tmpl$/tmp/ | xargs -I '{}'
 iconv -f cp1251 -t utf8 -o '{}' '{}'l

Знаходимо в поточній директорії всі файли шаблонів (з розширенням tmpl), змінюємо розширення на tmp, конвертуємо файл *.tmpl у *.tmp. Тепер tmp-файли містять шаблони в UTF-8 кодуванні.

А тепер у старі tmpl-файли кладемо новий зміст:

$ ls *.tmp | xargs -I '{}' mv '{}' '{}'l

Якщо вам треба перекодувати файли, що розташовані в піддиректоріях, то змініть команду ls на find.

Обмеження швидкості завантаження (upload) у Nginx для тестування

У веб-сервера Nginx є гарна вбудована опція для обмеження швидкості скачування – limit_rate. Але вона впливає лише на швидкість download і ніяк не може обмежити upload.

А в тестових цілях мені потрібно було зробити завантаження повільним, таким як на dial-up каналі. Пошук в інтернеті мене вивів на http://wiki.nginx.org/HttpUploadModule, я навіть зміг його додати до Nginx після встановлення пакунку libssl-dev:

# apt-get install libssl-dev

Цей модуль ніяк не хотів компілюватися без файлів md5.h та sha.h.

Та на жаль, я так і не зміг примусити директиву upload_limit_rate працювати.

Час спливав, і я змушений був шукати альтернативний спосіб зменшення швидкості завантаження файлів на тестовий сервер. Ним виявився пакунок trickle:

# apt-get install trickle

Це така консольна програма, що дозволяє обмежувати швидкість як завантаження так і скачування для програм, які запущені через неї.

Замість обмеження швидкості для Nginx – я обмежив її для браузера, в якому виконую тестування:

$ trickle -u 5 google-chrome

І хром завантажує лише 5 кілобайт на секунду.

 

Tomcat, що слухає лише localhost

У лог-файлі Томкату помітив чисельні спроби зайти у менеджер додатків (Tomcat Web Application Manager):

Sep 8, 2013 11:46:04 AM org.apache.catalina.realm.LockOutRealm authenticate
WARNING: An attempt was made to authenticate the locked user ""
Sep 8, 2013 11:46:04 AM org.apache.catalina.realm.LockOutRealm authenticate
WARNING: An attempt was made to authenticate the locked user "tomcat"
Sep 8, 2013 11:46:04 AM org.apache.catalina.realm.LockOutRealm authenticate
WARNING: An attempt was made to authenticate the locked user "tomcat"

Подібних рядків було багато, здається це якійсь павук-робот намагався підібрати пароль.

Сервер був тестовий, тому ніякої цінної інформації не містив, проте мене здивувало, як зловмисники підібралися до менеджера додатків, адже Tomcat працює як back-end і front-end Nginx проксує тільки певні URL. Мої спроби перейти на http://serverdomain/manager закінчувались 404 сторінкою.

І тут я зрозумів свій прорахунок у системі безпеки: Tomcat слухав 8080 порт на всіх інтерфейсах! Тобто не тільки на 127.0.0.1, але й на зовнішніх. Додавши номер порту http://serverdomain:8080/manager я й сам побачив на екрані запрошення пройти аутентифікацію.

Отже змушуємо Tomcat слухати лише localhost. Для цього у файлі conf/server.xml знаходимо рядки, що починаються з “<Connector ” і додаємо у цей XML тег атрибут address=”127.0.0.1″.

Після внесених змін матимемо такий вивід:

$ grep Connector server.xml | grep port=
 <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
 <Connector address="127.0.0.1" port="8009" protocol="AJP/1.3"
 redirectPort="8443" />

На порт 8443 не зважайте, адже його опис закоментований. Після перезапуску Томкату слід переконатися, що порти 8080, 8009 та 8005 слухаються лише на localhost:

$ netstat -na | grep :8080
tcp6       0      0 127.0.0.1:8080          :::*            LISTEN
$ netstat -na | grep :8009
tcp6       0      0 127.0.0.1:8009          :::*            LISTEN
$ netstat -na | grep :8005
tcp6       0      0 127.0.0.1:8005          :::*            LISTEN