browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

Шифруємось. Шифрування файлів під Linux

Posted by on 26 Червня 2013

encrypt your siteУявімо ситуацію, коли ви розробили під Linux унікальний web-інтерфейс, написали для нього якусь програмуліну і кучу потрібних скриптів. Все це чудово працює і радує вас і замовників даного творіння.

Але може статися так, що  “чисто випадково” носій даних (жорсткий диск, SSD, SD-карта) із усіма вашими php файлами і скриптами потрапляє в чужі руки.  Наприклад кінцевий користувач вашого ембеддед девайса просто захоче поцікавитись вмістом SD-карти із дистрибутивом Linux і вашою програмуліною, вставивши її у карт-рідер. Під Windows (о да!) він нічого цікавого не побачить – лише кілька кілобайт із файлами завантажувального сектора. Продвинуті юсери Linux  (о ні!) у папці /var/www/ (чи будь-якій іншій) зможуть ознайомитись із вашим PHP кодом і при потребі підправити його на свій розсуд. Також їм будуть доступні всі паролі до MySQL сервера,  зовнішніх баз даних, і т.п. І це не є гуд!

Порившись в Інтернеті я наштовхнувся на декілька методів захисту від подібних досліджень:

no thief

– Застосовувати своє унікальне шифрування файликів, або просто довести іх до максимально нечитабельної форми. Варіант не сподобався через мороку із реалізацією і “собі ж гірше буде”

– Можливо шифрувати весь диск або розділ, який розшифровується на момент старту ОС. Непоганий, але значно падає  продуктивність, що критично для вбудованих міні-серверів.

– Я знайшов утилітку ecryptfs, яка шифрує окремі каталоги і монтує їх у розшифрованому вигляді при потребі. І вона мене поки влаштовує.

ecryptfs

Ecryptfs  шифрує файлову систему вибраного вами каталогу униможливлюючи перегляд файлів (і назв файлів при потребі). Щоб розшифрувати каталог вам потрібно знати пароль або мати файл-ключ, бажано на зовнішньому носії, наприклад на флешці.

 

Наведу приклад шифрування каталогу /var/www/  де у мене власне і знаходиться web-інтерфейс написаний на PHP.

Ставимо  утиліту:

> apt-get install ecryptfs-utils lsof

Тепер шифруємо:

>mount -t ecryptfs /var/www/ /var/www/Select key type to use for newly created files: 1) passphrase

 2) tspi

Selection: 1

Passphrase:

Select cipher:

 1) aes: blocksize = 16; min keysize = 16; max keysize = 32

 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56

 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24

 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32

 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32

 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16

Selection [aes]:

Select key bytes:

 1) 16

 2) 32

 3) 24

Selection [16]:

Enable plaintext passthrough (y/n) [n]:

Enable filename encryption (y/n) [n]: y

Filename Encryption Key (FNEK) Signature [bd381e456b7cc96]:

Attempting to mount with the following options:

  ecryptfs_unlink_sigs

  ecryptfs_fnek_sig=bd381e4426b7cc96

  ecryptfs_key_bytes=16

  ecryptfs_cipher=aes

  ecryptfs_sig=bd381e456b7cc96

WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],

it looks like you have never mounted with this key

before. This could mean that you have typed your

passphrase wrong.

 Would you like to proceed with the mount (yes/no)? : yes

Would you like to append sig [bd381e456b7cc96] to

[/root/.ecryptfs/sig-cache.txt]

in order to avoid this warning in the future (yes/no)? : yes

Successfully appended new sig to user sig cache file

Mounted eCryptfs

Опції шифрування  залишив стандартні, лише увімкнув шифрування назв файлів і каталогів – Enable filename encryption (y/n) [n]: y

Тепер наші файлики на диску виглядатимуть приблизно так:

>ls /var/www/
ECRYPTFS_FNEK_ENCRYPTED.FWbMNTpJP5tkdEQSOed356BDDoYeN0.fLHk93RXt-
ECRYPTFS_FNEK_ENCRYPTED.FWbMNTpJP5tkdEQSOed356BDDoYeN0.fLHk97vIZL
ECRYPTFS_FNEK_ENCRYPTED.FWbMNTpJP5tkdEQSOed356BDDoYeN0.fLHk983SH
ECRYPTFS_FNEK_ENCRYPTED.FWbMNTpJP5tkdEQSOed356BDDoYeN0.fLHk994Yk

Щоб мати можливість все це розшифрувати знову ж таки запускаємо утиліту у ecryptfs із наступними параметрами:

>mount -t ecryptfs /var/www/ /var/www/ -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=y,passphrase_passwd=Ваш пароль

Все чудово працює.

Єдине, що я виявив один прикрий момент. Не знаю чи це баг чи фіча утіліти, але після команди розшифрування папки у логах /var/log/messages з’явиться наступний неприємний запис “ecryptfs_parse_options: eCryptfs: unrecognized option [passphrase_passwd=Ваш пароль]“!  Що підло викриває ваш пароль шифрування.

Щоб цього позбутися можливо відразу витирати останню  стрічку даного логу, наприклад за допомогою наступної команди:

sed -i ‘$ d’ /var/log/messages

 

Користуйтеся. Приємної роботи!

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.