Нашим клиентам, равно как и нам, часто приходится обмениваться друг с другом электронной корреспонденцией. Более того, очень часто мы добавляем вложения в письма: снимки экранов, диктофонные записи, небольшие программы. Для того, чтобы прикрепить к email сразу несколько документов большинство из нас привыкло пользоваться архивами. Для упрощения этой задачи Apple добавила в контекстное меню Finder’а возможность быстро и просто создать zip-архив — опция «сжать». Мы и наши клиенты постоянно ею пользуемся. Но что делать, когда электронная переписка не зашифрована, а обменяться нам необходимо конфиденциальными данными? Правильно, защитить файлы паролем. Но подобной очевидной опции нам, преследуемым манией преследования заботящихся о безопасности данных, разработчики из Купертино уже не предоставили. Ниже мы попробуем найти несколько интересных решений для нашей задачи.
Запароленный архив из Терминала
Несмотря на то, что опции «сжать и защитить паролем» в Finder нет, тем не менее работать с безопасными архивами стандартная, входящая в любую Mac OS Утилита архивирования умеет. А в командной строке можно ввести соответствующие команды:
- Запускаем из папки служебных программ (или утилит, переведённых так на русский язык в последних версиях операционных систем) Терминал (быстро открыть родительскую папку можно выбрав в строке меню Finder Переход → Утилиты).
- Вводим нижеследующую команду с сохранением пробелов:
zip -erj ~/Desktop/archive.zip
- Хватаем и переносим в окно Терминала необходимую для сжатия и защиты паролем папку или файл. Команда в окне программы приобретёт примерно такой вид:
zip -erj ~/Desktop/archive.zip /Path/to/folder
- Нажимаем ввод, вводим и повторяем назначаемый пароль. Не пугайтесь, в окне Терминала пароль никогда не демонстрируется, вы не будете видеть символы, которые вводите.
Результатом успешного выполнения команды будет появление файла с названием archive.zip на вашем рабочем столе.
Зашифрованный образ диска в качестве службы Finder
Описанный выше способ кажется громоздким, и при необходимости отправлять защищённые файлы регулярно может быть неудобным. Более того, шифрование данных в архиве не самое удачное. Предпочитаемый Apple способ защиты данных в таких случаях — использование зашифрованного образа диска. Но стандартный метод создания таких «имиджев» тоже сложен и неочевиден, более того, минимальным размером создаваемого файла в специализированной программе, Дисковой утилите, составляет 10,5 МБ (!), а такое вложение пропустит не каждая электронная почта. Поэтому мы предлагаем создать простейшую службу с помощью программы Automator, которая добавит нам необходимую опцию в контекстное меню Finder’а.
- Запускаем программу Automator (найти её можно в папке «Программы» или вызвав в строке меню Finder Переход → Программы).
- В открывшемся диалоговом окне выбираем создание службы, значок большой шестерёнки.
- В поле «служба получает» выбираем «файлы и папки» и указываем Finder в качестве программы.
- В поле «Действия» Автоматора находим «Новый образ диска» и перетягиваем его из левой половины окна программы в правую (воспользуйтесь поиском, найти в списке возможных действий сходу будет нелегко).
- В качестве размера образа диска выбираем «По размеру содержимого» и отметьте галочкой чекбокс «Зашифровать». Вы можете указать фиксированное название для зашифрованного архива, удобнее оставить имя без изменений, в этом случае оно будет генерироваться на основании входящих данных, по имени шифруемых файлов. По умолчанию местом создания файла выбран ваш рабочий стол, его можно поменять на любую другую папку.
- В последнем поле «Выполнив» выбираем «Извлечь и вернуть образ файла». Это приведёт к нашей цели, файлы будут сложены в образ диска и в момент его извлечения зашифрованы вашим паролем
- Для удобства можно добавить последним действие «Показать объекты Finder» (действие ищется привычно справа и перетягивается в левую половину окна программы). Эта опция будет автоматически открывать в файловом менеджере папку, содержащую наш с вами шифрованный «имидж».
- Сохраняем службу. В качестве её названия можно указать «Сохранить в зашифрованном образе диска».
Созданная и сохранённая служба будет мгновенно доступна в контекстном меню Finder и вы можете сразу же проверить её работу, щелкнув по любому файлу или папке вспомогательной кнопкой мыши/трекпада и выбрав свежесозданную опцию.
Отметку «Запомнить пароль в связке ключей» для безопасности лучше снять
Запароленный архив в качестве службы Finder
— Стоп, стоп, стоп, полегче! А если мы пересылаем файлы по электронной почте пользователям операционной системы MS Windows, они смогут открыть зашифрованный образ диска?
— Нет. Они будут доступны только владельцам компьютеров Apple.
— Но как тогда быть? Первый способ громоздкий, второй элегантен, но нам не подходит…
— Ок. Создадим отдельную службу для запароленных архивов.
Собственно в сеансе разговора с самим собой мы всё уже решили, теперь попробуем реализовать и эту задачу:
- Запускаем программу Automator (найти её можно в папке «Программы» или вызвав в строке меню Finder Переход → Программы).
- В открывшемся диалоговом окне выбираем создание службы (значок большой шестерёнки).
- В поле «служба получает» выбираем «файлы и папки» и указываем Finder в качестве программы.
- В поле «Действия» находим «Запустить AppleScript» и перетягиваем его из левой половины окна программы в правую (воспользуйтесь поиском, найти в списке возможных действий сходу будет нелегко).
- Всё, что будет в окне вставленного действия стираем и заменяем следующим кодом:
on run {input, parameters}
set dialogResults to display dialog "Введите имя архива:" default answer "Архив" buttons {"OK", "Cancel"} default button "OK"
if button returned of dialogResults is "OK" then
set passwd to "x"
set passwd_2 to "y"
repeat while passwd ≠ passwd_2
tell application "System Events"
activate
set passwd to text returned of (display dialog "Введите безопасный пароль:" default answer "" buttons {"OK", "Cancel"} default button "OK" with hidden answer)
set passwd_2 to text returned of (display dialog "Пожалуйста, введите пароль повторно:" default answer "" buttons {"OK", "Cancel"} default button "OK" with hidden answer)
end tell
end repeat
set archiveName to text returned of dialogResults
tell application "Finder"
set archiveFileName to archiveName & ".zip"
-- Append on a number if file exists.
set suffix to 1
set theFileExists to true
repeat while theFileExists
try
set archiveFile to ((container of (item 1 of input) as Unicode text) & archiveFileName)
if exists file archiveFile then
set archiveFileName to archiveName & suffix & ".zip"
set suffix to suffix + 1
else
set theFileExists to false
end if
end try
end repeat
end tell
set itemStr to ""
repeat with thisItem in input
set itemPath to quoted form of (POSIX path of thisItem)
tell application "Finder"
set parentFolder to POSIX path of (container of thisItem as alias)
set itemName to name of thisItem
set itemStr to itemStr & quoted form of itemName & " "
end tell
end repeat
if (the last character of itemStr is " ") then set itemStr to characters 1 thru ((length of itemStr) - 1) of itemStr as string
set zipFile to quoted form of POSIX path of (parentFolder & archiveFileName)
set cmd to "cd " & quoted form of parentFolder & " ; zip -P " & passwd & " -r " & zipFile & " " & itemStr & " -x *.DS_Store"
do shell script cmd
end if
return
end run
- Для удобства можно добавить последним действие «Показать объекты Finder» (действие ищется привычно справа и перетягивается в левую половину окна программы). Эта опция будет автоматически открывать в файловом менеджере папку, содержащую наш с вами запароленный архив.
- Сохраняем службу. В качестве её названия можно указать «Сжать и защитить паролем».
Также как и в прошлом случае служба станет моментально доступна в контекстном меню Finder и можно будет опробовать её работу. Обращаем ваше внимание, что если вы заботитесь о максимальной безопасности пересылаемых файлов, то предпочтительнее их упаковывать всё-таки в зашифрованный образ диск (рассмотренный чуть ранее вариант), а не в запароленный архив.
Благодарим Кристофера Кесслера, не оставляющего нас наедине с нашими вопросами и подсказавшего два первых рассмотреных нами решения задачи. Также благодарим пользователей ThomasMyers, chocky, jelockwood, чьими совместными усилиями был написан позаимстованный нами c Mac OS X Hints AppleScript.