Заметки в категории «Apple» :: Хранитель заметок

noteskeeper.ru

Персональный журнал для заметок Владимира Кузнецова

Заметки в категории «Apple»

Блокируем brute force атаки по SSH

Для решения этой задачи я использую скрипт denyhosts. Он периодически проверят указанный лог-файл на предмет записей о неудавшихся подключениях, и заносит IP-адреса в файл hosts.deny. Дальше ssh-демон при очередном подключении ищет IP-адрес в «черном» списке и разрывает связь, если он там есть.

Установка denyhosts

Начальная установка denyhosts очень проста. Распаковываем исходники и запускаем скрипт установки под root.

sudo python setup.py install

По умолчанию установка будет осуществлена в папку /usr/share/denyhosts. Там же будут пример конфигурационного файла. Копируем его.

cp denyhosts.cfg-dist denyhosts.cfg

Отредактируем denyhosts.cfg

SECURE_LOG = /private/var/log/secure.log
HOSTS_DENY = /etc/hosts.deny
LOCK_FILE = /var/run/denyhosts.pid
DAEMON_LOG = /var/log/denyhosts

Остальные параметры можете задать по своему усмотрению.

Теперь нужно скопировать и отредактировать управляющий скрипт

cp daemon-control-dist daemon-control

Переменные должны быть установлены следующие значения

DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"

Удостоверимся, что этот управляющий скрипт запускается.

chown root daemon-control
chmod 700 daemon-control

До запуска denyhosts нужно создать /etc/hosts.deny

touch /etc/hosts.deny

В целом все готово для запуска denyhosts.

daemon-control start

Если до этого вас уже недавно атаковали, то адреса злоумышленников будут тут же собраны и добавлены в hosts.deny.

Остановить denyhosts можно командой

daemon-control stop

В статье denyhosts on Mac OS X я нашел еще несколько полезных трюков.

Запуск при старте системы

В Mac OS X запуском различных программ и скриптов при старте системы занимается launchd. Проблема в том, что он не очень хорошо работает со скриптами, запускающими демонов. Launchd отслеживает момент, когда скрипт завершает свою работу и запускает его снова.

Модифицируем метод start управляющего скрипта daemon-control

def start(*args):
    cmd = "%s --daemon " % DENYHOSTS_BIN
    if args: cmd += ' '.join(args)

    print "starting DenyHosts:   ", cmd

    while True:
        os.system(cmd)
        time.sleep(5)

        while True:
            pid = getpid()
            if pid >= 0:
                time.sleep(300)
            else:
                break

Теперь его можно использовать в launchd. Создадим файл /Library/LaunchDaemons/net.hosts.deny.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>net.denyhosts</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/share/denyhosts/daemon-control2</string>
      <string>start</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>ServiceDescription</key>
    <string>Lauch denyhosts</string>
  </dict>
</plist>

Выполним следующую команду, чтобы запустить его

launchctl load /Library/LaunchDaemons/net.hosts.deny.plist

Ротация лог-файлов

Все, что нужно для ротации лог-файлов – это создать файл со следующим содержимым

# logfilename [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/denyhosts            640   5     *  $D0     BJ  /var/run/denyhosts.pid 15
#

Сжатие файлов на томах HFS+ в Snow Leopard

В Snow Leopard появилась поддержка сжатия на уровне файловой системы — HFS+ compression. Сжатие и распаковка данных происходит полностью прозрачно для всех программ, которые обращаются к таким файлам.

Текущий интерфейс Файндера или какой-либо другой системной программы с GUI не позволяет управлять компрессией. Однако, Apple все же предоставила способ сжимать и распаковывать файлы через командную строку.

У команды ditto в 10.6 появилось несколько опций. Например,

–hfsCompression

When copying files or extracting content from an archive,if the destination is an HFS+ volume that supports compression, all the content will be compressed if appropriate. This is only supported on Mac OS X 10.6 or later, and is only intended to be used in installation and backup scenarios that involve system files. Since files using HFS+ compression are not readable on versions of Mac OS X earlier than 10.6, this flag should not be used when dealing with non-system files or other user-generated content.

Значит, чтобы включить сжатие HFS+, нужно всего лишь выполнить в командной строке

ditto --hfsCompression [src] [dst]

В качестве [src] указывается файл или папка, которая будет сжиматься, а [dst] — путь, где будут размещены сжатые файлы. Команда не заменяет файлы, а создает их сжатые копии в другом месте.

Внимание! Нельзя сжимать файлы, если необходимо подключать этот том в предыдущих версиях Mac OS X. Старые версии не повредят такие файлы, так как они просто не будут доступны для чтения.

На практике выходит не плохая экономия места. Например, сжав папку Developer с загруженной документацией, удалось высвободить около 3Гб (это около 40% от исходного объема) на диске.

Установка предпочитаемого языка для программы

Замечательно, что программы для Mac OS X с минимальными затратами для разработчика можно перевести на любой язык мира. Только не всегда интерфейс с фразами на различных языках выглядит одинаково гармонично. Часто слова приходится сокращать, если они не помещаются в отведенные им места.

Все фразы интерфейса на различных языках находятся в файлах .lproj внутри пакета с приложением. Если удалить, например, ru.lproj, то программа лишится перевода на русский язык. Это так же неплохой способ сэкономить место на диске, которое занимает приложение. Вот только при очередном обновлении, а это особенно касается приложений от Apple, пакет с программой полностью заменяется и все файлы .lproj опять появляются.

Чтобы раз и навсегда выбрать предпочитаемый язык для какого-то конкретного приложения можно добавить соответствующее свойство через команду defaults. Во всей системе принято использовать свойство AppleLanguages для задания предпочитаемой последовательности языков.

defaults write -g AppleLanguages -array ru en de

Эта команда задает последовательность «Русский», «Английский», «Немецкий» для всей системы. Аналогичный эффект достигается в пульте «Язык и текст» настроек.

А если указать доменное имя программы, то список предпочитаемых языков будет сохранен только для нее.

defaults write com.apple.iTunes AppleLanguages -array en

Так мы указываем, что iTunes должен использовать только английский. Хочу подчеркнуть, что это свойство имеет тип «массив» даже если указывается только один язык.

Кстати, лично я запускаю iTunes только с английским интерфейсом, чтобы он не переводил мне названия жанров на русский язык, попутно модифицируя содержимое mp3 файлов.

Предпочтения удаляются командой

defaults delete com.apple.iTunes AppleLanguages

Оптимальный VNC-клиент для подключения к Mac OS X

В Mac OS X Leopard «из коробки» появилась возможность открывать общий доступ к экрану (Screen Sharing). Реализуется этот доступ на базе VNC.

Сначала я подключился, используя проверенный TightVNC, и был разочарован скоростью обновления экрана. Никакие настройки не помогли улучшить ситуацию. Меня насторожил тот факт, что в это время канал совершенно не был загружен, и я начал пробовать другие клиенты. UltraVNC показал точно такой же результат. Зато RealVNC сразу загрузил канал по максимуму и, как следствие, резко повысилась отзывчивость интерфейса.

Надо только не забыть включить режим «Full color», потому что VNC-сервер отказывается работать с меньшим количеством цветов.

А если вы хотите подключиться из Mac OS X к какому-либо VNC-серверу, то для этого выберите «Переход → Подключение к серверу…» в меню Finder и укажите, например, vnc://server.com в качестве адреса. Так же vnc://server.com можно набрать в адресной строке Safari.

Ускоряем кодеки для просмотра FullHD

Мой старенький Mac mini (1.66ГГц Intel Core Duo) всегда тормозил при воспроизведении FullHD фильмов. Максимум на что его хватало — это фильмы с разрешением 720p. Из-за особенностей большинства плееров и кодеков, используемых в них, для декодирования задействовалось только одно ядро процессора.

У проекта FFmpeg есть многопоточная версия FFmpeg-mt, которую можно и нужно использовать, например, в MPlayer для того, чтобы загрузить процессор работой по максимуму.

Итак, прежде чем приступить к сборке, нам понадобятся несколько инструментов:

  • Apple Developer Tools (так же есть на любом DVD с Mac OS X)
  • Subversion (консольная версия есть в комплекте Apple Developer Tools)
  • Git

Всю сборку я буду проводить на рабочем столе.

cd ~/Desktop/

Загружаем исходники MPlayer из репозитория.

svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

Загружаем исходники FFmpeg-mt.

git clone http://git.gitorious.org/ffmpeg/ffmpeg-mt.git

Теперь, чтобы использовать библиотеки FFmpeg-mt, заменим три папки libavcodec, libavformat и libavutil в исходниках MPlayer.

cd mplayer
rm -rf libavcodec libavformat libavutil
cp -R ../ffmpeg-mt/libavcodec .
cp -R ../ffmpeg-mt/libavformat .
cp -R ../ffmpeg-mt/libavutil .

Можно приступать к конфигурации и сборке проекта.

./configure --enable-menu --enable-apple-remote
make
sudo make install

Осталось сделать несколько косметических манипуляций. Нужно указать какой шрифт использовать для OSD и субтитров.

ln -s /Library/Fonts/Arial\ Unicode.ttf ~/.mplayer/subfont.ttf

Так же нужно немного отредактировать конфигурационный файл.

nano ~/.mplayer/config

В файле набираем:

lavdopts=threads=2:skiploopfilter=all
vf=yuy2
fs=yes

Эти настройки декодера предписывают ему использовать два потока и пропустить некоторые процедуры улучшения картинки. Так же для меня было оптимально использовать принудительную конвертацию видео в YUY2, что дает не большой прирост в скорости.

В целом обновленная версия показала прирост в производительности на 60% в сравнении с однопоточным декодером.

Обновление: отличный GUI MPlayer OSX Extended уже содержит сборку mplayer с многопоточным декодированием.

Удаляем старые архивы Time Machine

Дома в качестве системы резервного копирования я использую Time Machine. Она создает свои архивы на том же диске, где я размещаю данные — фильмы, музыку и т.п. Проблема начинается, когда свободное место подходит к концу и нужно принять решение о том, что же удалить, чтобы освободить место на диске.

Как вручную удалять архивы Time Machine, к великому сожалению, в официальной документации не написано. Были различные сообщения на форумах, что можно спокойно удалять старые папки и это не нарушит целостности архива. Но как-то нет особого доверия таким сообщениям, если речь идет о резервных копиях. Зато хорошо известен факт, что Time Machine сама отлично освобождает для себя место на диске, если это нужно для создания очередной копии. Этим способом и нужно воспользоваться.

Допустим нам нужно освободить на диске 5Гб. Для этого создаем файл требуемого размера в домашнем каталоге.

dd bs=1000000 count=5000 of=~/zero.bin if=/dev/zero

Параметр bs задает размер блока в байтах, а count — количество таких блоков.

Как показала практика, обычно, Time Machine освобождает примерно в 2 раза больше места, чем ей нужно. По этому, файл можно создать в 2 раза меньше.

Теперь запускаем создание внеочередной резервной копии. Как только заметите, что свободное место начнет увеличиваться, так сразу можно удалить наш файл. Если этого не сделать, то он окажется в резервной копии, и никакого выигрыша мы не получим.