Библиотека сайта rus-linux.net
Глава 13. Программы обеспечения безопасности (управление и ограничения)
Linux GnuPG
Краткий обзор
Шифрование данных это бесценная возможность, которая сильно увеличивает конфиденциальность работы. Утилиты, подобные GnuPG, делают намного больше, чем просто шифруют почтовые сообщения. Они могут быть использованы для всех видов шифрования данных и их использование может быть ограничено только Вашей фантазией. RPM-пакет GnuPG уже может быть инсталлирован на Вашем компьютере, но эта версия не является последней и поэтому мы рекомендуем инсталлировать последний релиз, соответствующий Вашему серверу и архитектуре CPU.
Согласно официальному README-файлу пакета GnuPG:
GnuPG это GNU-утилита для безопасной передачи информации и хранения данных. Она может быть использована для шифрования данных и создания цифровых сигнатур. GnuPG включает продвинутый менеджер ключей и совместима с OpenPGP Internet-стандартом, описанным в RFC2440. Так как GnuPG не использует каких-либо патентованных алгоритмов, она не может быть совместима с PGP2. PGP 2.x использует только IDEA (запатентован) и RSA (который был запатентован в США до 20 сентября 2000).
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
GnuPG версии 1.0.1.
Пакеты.
Домашняя страница GnuPG:
http://www.gnupg.org,
Вы должны скачать: gnupg-1.0.1.tar.gz.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции GnuPG и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > GnuPG1
find /* > GnuPG2
diff GnuPG1 GnuPG2 > GnuPG
Раскройте архив:
[root@deep /]# cp gnupg-version.tar.gz /var/tmp [root@deep /]# cd /var/tmp [root@deep tmp]# tar xzpf gnupg-version.tar.gz
Компиляция и оптимизация
Переместитесь в новый каталог GnuPG и выполните следующие команды:
CC="egcs" CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \ -march=pentiumpro -fomit-frame-pointer -fno-exceptions" ./configure --prefix=/usr --enable-shared [root@deep gnupg-1.0.1]# make [root@deep gnupg-1.0.1]# make check [root@deep gnupg-1.0.1]# make install [root@deep gnupg-1.0.1]# strip /usr/bin/gpg
Команда make компилирует исходные коды в исполняемые двоичные файлы, команда make check запускает все тесты, входящие в пакет, команда make install инсталлирует исполняемые и сопутствующие им файлы в определенный каталог. Команда strip будет уменьшать размер, увеличивая производительность программы.
Очистка после работы.
[root@deep /]# cd /var/tmp [root@deep tmp]# rm -rf gnupg-version/ gnupg-version.tar.gz
Команда rm, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции GnuPG. Она также удалит архив .tar.gz.
Команды
Ниже приведены команды из тех, что мы часто используем в регулярной работе, но их существует много больше. Читайте страницы руководства (man) для получения большей информации.
Создание ключа
Прежде всего, если мы используем GnuPG в первый раз, для включения возможностей шифрования необходимо создать новую пару ключей (публичный и персональный).
Шаг 1.
Для создания новой пары ключей используйте следующую команду:
[root@deep /]# gpg --gen-key gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: /root/.gnupg: directory created gpg: /root/.gnupg/options: new options file created gpg: you have to start GnuPG again, so it can read the new options file This asks some questions and then starts key generation.
Шаг 2.
Мы вновь запускаем GnuPG следующей командой:
[root@deep /]# gpg --gen-key
gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: /root/.gnupg/secring.gpg: keyring created gpg: /root/.gnupg/pubring.gpg: keyring created Please select what kind of key you want: (1) DSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) Your selection? 1 DSA keypair will have 1024 bits. About to generate a new ELG-E keypair. minimum keysize is 768 bits default keysize is 1024 bits highest suggested keysize is 2048 bits What keysize do you want? (1024) 2048 Do you really need such a large keysize? y Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 correct (y/n)? Y You need a User-ID to identify your key; the software constructs the user id from Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: Gerhard Mourani Email address: gmourani@videotron.ca Comment: [Press Enter] You selected this USER-ID: "Gerhard Mourani <gmourani@videotron.ca>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. +++++..+++++++++++++++..+++++.++++++++++++++++++++++++++++++++++++++++ ..++++++++++.+++++++++++++++++++++++++.+++++++++++++++...+++++++++++++ ++++++++++++.+++++..+++++>+++++...+++++++++++++++>+++++.......>+++++ .......<+++++..........................+++++^^^^ public and secret key created and signed.
Новая пара ключей (общедоступный и личный) успешно созданы в домашнем каталоге пользователя root (~/root).
Импортирование ключей
Как только мы создали нашу пару ключей, мы можем начать добавлять в нашу публичную базу ключей все ключи, которые мы получили от третьих лиц, чтобы в будущем использовать их для шифрования и опознания связи.
Для импортирования публичных ключей в базу данных ключей используйте команду:
[root@deep /]# gpg --import <file>
Например:
[root@deep /]# gpg --import redhat2.asc gpg: key DB42A60E: public key imported gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: Total number processed: 1 gpg: imported: 1
Вышеприведенная команда будет добавлять все новые ключи в базу данных и будет обновлять все уже существующие ключи. Важно заметить, что GnuPG не импортирует не самоподписанные (self-signed) ключи. В вышеприведенном примере мы импортируем файл redhat.asc, содержащий публичный ключ компании Red Hat, взятый с Интернет-сайта Red Hat.
Подписание ключей
Когда Вы импортировали ключи в свою базу данных публичных ключей и Вы точно уверенны, что третье лицо, чей ключ Вы положили, действительно то, за кого себя выдает, Вы можете подписать этот ключ. Подписание ключа удостоверяет, что Вы точно знаете его владельца.
Для подписания ключа компании Red Hat, который Вы добавили выше, используйте команду:
[root@deep /]# gpg --sign-key <UID>
Например:
[root@deep /]# gpg --sign-key RedHat pub 1024D/DB42A60E created: 1999-09-23 expires: never trust: -/q sub 2048g/961630A2 created: 1999-09-23 expires: never (1) Red Hat, Inc <security@redhat.com> pub 1024D/DB42A60E created: 1999-09-23 expires: never trust: -/q Fingerprint: CA20 8686 2BD6 9DFC 65F6 ECC4 2191 80CD DB42 A60E Red Hat, Inc <security@redhat.com> Are you really sure that you want to sign this key with your key: "Gerhard Mourani <gmourani@videotron.ca>" Really sign? y You need a passphrase to unlock the secret key for user: "Gerhard Mourani <gmourani@videotron.ca>" 1024-bit DSA key, ID E92D6C97, created 1999-12-30 Enter passphrase:
ЗАМЕЧАНИЕ. Вы должны подписывать ключ только когда абсолютно уверены, что ключ действительно настоящий! Вы никогда не должны подписывать ключ, базирующийся на любых предположениях.
Шифрование и дешифрование
После инсталляции, импортирования, подписания и конфигурирования мы можем начать шифровать и расшифровывать данные.
Для шифрования и подписания данных для пользователя RedHat, ключ которого мы добавили выше, используйте следующую команду:
[root@deep /]# gpg -sear RedHat <file>
Например:
[root@deep /]# gpg -sear RedHat message-to-RedHat.txt You need a passphrase to unlock the secret key for user: "Gerhard Mourani (Open Network Architecture) <gmourani@videotron.ca>" 1024-bit DSA key, ID BBB4BA9B, created 1999-10-26 Enter passphrase:
Аргументы, которые использовались, обозначают следующее: s подписание (уменьшение риска что кто-то попытается представиться Вами, очень полезно подписывать все, что Вы шифруете), e шифрование, a создание ASCII-защищенного вывода (.asc-файлы, готовые для отправки по почте), r шифрование имени идентификатора пользователя и <file> это сообщение, которое Вы хотите зашифровать.
Для расшифровки данных используйте следующую команду:
[root@deep /]# gpg -d <file>
Например:
[root@deep /]# gpg -d message-to-Gerhard.asc You need a passphrase to unlock the secret key for user: "Gerhard Mourani (Open Network Architecture) <gmourani@videotron.ca>" 2048-bit ELG-E key, ID 71D4CC44, created 1999-10-26 (main key ID BBB4BA9B) Enter passphrase:
Где -d означает расшифровку и <file> сообщение, которое Вы хотите расшифровать. Важно, чтобы публичный ключ отправителя сообщения, которое мы хотим расшифровать, был в нашей базе ключей, или ничего работать не будет.
Экспортирование вашего публичного ключа
Вы можете расширить Ваши горизонты экспортируя и распространяя свой публичный ключ. Это можно сделать, публикуя его на Вашей домашней странице, через доступные серверы ключей в Интернете или другими способами. GnuPG имеет несколько полезных опций, чтобы помочь Вам опубликовать публичный ключ.
Для извлечения Вашего публичного ключа в ASCII-защищенный вывод используйте команду:
[root@deep /]# gpg --export --armor > Public-key.asc
где --export для извлечения Вашего публичного ключа из зашифрованного файла, --armor создать ASCII-защищенный вывод, который Вы можете отправлять, публиковать или выкладывать на веб-странице, а >Public-key.asc говорит, что результат надо поместить в файл с именем Public-key.asc.
Проверка signature
Когда Вы извлекли публичный ключ и экспортировали его, каждый, кто знает или получит его, может захотеть убедиться, что полученные от Вас данные действительно от Вас.
Для проверки сигнатуры зашифрованных данных используйте команду:
[root@deep /]# gpg --verify <Data>
Опция --verify будет проверять сигнатуру, а <Data> зашифрованный файл, который Вы хотите проверить.
Некоторые области применения GnuPG
GnuPG может быть использован для:
- Отправки зашифрованных почтовых сообщений.
- Шифрования резервных копий файлов перед отправкой через сеть.
- Шифрования личных чувствительных файлов (например, файл, содержащий все Ваши пароли).
Инсталлированные файлы
> /usr/bin/gpg > /usr/lib/gnupg > /usr/lib/gnupg/rndunix > /usr/lib/gnupg/rndegd > /usr/lib/gnupg/tiger > /usr/man/man1/gpg.1 > /usr/share/gnupg > /usr/share/gnupg/options.skel
Установка поддержки квот в Linux-системе
Краткий обзорКвота это административная утилита для мониторинга и ограничения использования дискового пространства пользователями и группами на каждой файловой системе. Существует два возможных способа ограничения использования дисков. Первый, это число inode (число файлов), которым может владеть пользователь или группа. Второй, число дисковых блоков (суммарное пространство в килобайтах), которое может выделяться в использование пользователю или группе. При помощи квот, системный администратор принуждает пользователя не расходовать неограниченный объем дискового пространства. Эта программа оперирует отдельно каждым пользователем и каждой файловой системой, поэтому для каждой файловой системы нужно определять квоты отдельно.
Создание ядра с поддержкой квот
Первое, что Вам необходимо сделать, это создать ядро с поддержкой квот. В ядре 2.2.14 надо удостовериться, что Вы ответили Y на вопрос:
Filesystems Quota support (CONFIG_QUOTA) [N/y/?] Y
ЗАМЕЧАНИЕ. Если при компиляции ядра Вы руководствовались соответствующей главой из этой книги, то поддержка квот у Вас включена.
Модификация файла /etc/fstab
Файл /etc/fstab содержит информацию обо всех файловых системах, инсталлированных на Вашем Linux-сервере. Квоты должны быть включены в нем, чтобы их можно было использовать. Так как квоты должны быть определены для каждой файловой системы независимо, и каждая файловая система описывается в файле /etc/fstab в отдельной строке, то квота должна быть установлена для каждой строки, где Вы хотите включить их поддержку. Используя программу квотирования, в зависимости от Ваших нужд, Вы можете включить квоты только для групп, пользователей или тех и других одновременно. Для всех нижеприведенных примеров мы используем каталог /home, размещенный в разделе /dev/sda6.
Возможность 1.
Для включения квот для пользователей на определенной файловой системы, отредактируйте файл /etc/fstab (vi /etc/fstab) и добавьте опцию "usrquota" в четвертое поле после слова "defaults" или любой другой опции. Например:
/dev/sda6 /home ext2 defaults 1 2 (как пример: слово defaults) /dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)
Должен будет читаться:
/dev/sda6 /home ext2 defaults,usrquota 1 2 /dev/sda6 /home ext2 nosuid,nodev,usrquota 1 2
Возможность 2.
Для включения квот для групп на определенной файловой системы, отредактируйте файл /etc/fstab (vi /etc/fstab) и добавьте опцию "grpquota" в четвертое поле после слова "defaults" или любой другой опции. Например:
/dev/sda6 /home ext2 defaults 1 2 (как пример: слово defaults) /dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)
Должен будет читаться:
/dev/sda6 /home ext2 defaults,grpquota 1 2 /dev/sda6 /home ext2 nosuid,nodev,grpquota 1 2
Возможность 3.
Для включения квот для пользователей и групп на определенной файловой системы, отредактируйте файл /etc/fstab (vi /etc/fstab) и добавьте опции "usrquota, grpquota" в четвертое поле после слова "defaults" или любой другой опции. Например:
/dev/sda6 /home ext2 defaults 1 2 (как пример: слово defaults) /dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)
Должен будет читаться:
/dev/sda6 /home ext2 defaults,usrquota,grpquota 1 2 /dev/sda6 /home ext2 nosuid,nodev,usrquota,grpquota 1 2
Создание файлов квот (quota.user и quota.group)
После модификации файла /etc/fstab, чтобы квоты начали действовать, в корневой каталог соответствующей файловой системы (например, /home) помещается файл quota.user, если Вы хотите использовать пользовательские квоты, quota.group, для групповых квот, или тот и другой для комбинированных квот. Владельцем обоих файлов всегда является root.
Шаг 1.
Для создания файлов quota.user и/или quota.group, как root перейдите в корневой каталог раздела, где Вы хотите активизировать квоты (например, /home), и создайте файл quota.user и/или quota.group, для этого выполните следующие команды:
[root@deep /]# touch /home/quota.user [root@deep /]# touch /home/quota.group [root@deep /]# chmod 600 /home/quota.user [root@deep /]# chmod 600 /home/quota.group
Команда touch будет создавать новые пустые файлы в каталоге home с именами quota.user и quota.group. Команда chmod будет устанавливать права доступа к этим файлам на чтение-запись только для root.
ЗАМЕЧАНИЕ. Оба файла quota.user и quota.group, должны принадлежать root, с правами на чтение-запись только для владельца.
Шаг 2.
Сейчас мы должны инициализировать файлы quota.user и quota.group в корневом каталоге файловой системы, чтобы не получать сообщений об ошибках о квотах во время перезагрузки сервера.
Для инициализации файлов quota.user и/или quota.group, используйте следующие команды:
[root@deep /]# edquota -u wahib [root@deep /]# edquota -g wahib
Вышеприведенные команды необходимы только для инициализации файлов quota.user и/или quota.group, команда edquota (-u) будет редактировать квоты для пользователя wahib, а (-g) будет редактировать квоты для группы. Заметим, что Вы должны редактировать существующие в Вашей системе UID/GID, чтобы инициализация файлов прошла успешно.
Шаг 3.
После того как Вы закончили устанавливать необходимые опции в файле /etc/fstab, создали и инициализировали файлы quota.users и/или quota.group, Вы должны перезагрузить систему, чтобы внесенные изменения в файлы /etc/fstab, quota.user и/или quota.group вступили в силу. Для перезагрузки системы используйте следующую команду:
[root@deep /]# reboot
Назначение квот для пользователей и групп
После того, как система перезагрузилась, Вы можете назначить квоты пользователям и группам пользователей. Это операция осуществляется при помощи команды edquota.
Программа edquota
Edquota это редактор квот, который создает временный файл с текущими дисковыми квотами, используемый пользователем root для их установки для пользователей и групп пользователей. Нижеприведенный пример покажет как установить квоты для пользователя и группы пользователей.
Установка квоты для пользователя
Предположим, для примера, что у Вас есть пользователь с именем wahib. Следующая команда вызывает редактор vi, чтобы изменить и установить квоты для пользователя wahib на каждый раздел, где включены квоты:
Шаг 1
Для редактирования и модификации квот для пользователя wahib используйте следующую команду:
[root@deep /]# edquota -u wahib Quotas for user wahib: /dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0) inodes in use: 5, limits (soft = 0, hard = 0)
После выполнения этой команды, Вы увидите на экране строки, связанные с пользователем wahib: "blocks in use:" отображает общее число блоков (в килобайтах), расходуемых пользователем на разделе, "inodes in use:" отображает общее число файлов, которое имеет пользователь на разделе. Эти параметры (blocks in use и inodes in use) контролируются и устанавливаются автоматически системой, и Вы не можете установить или изменить их.
Шаг 2
Назначим 5 MB квоту для пользователя wahib, изменив следующие параметры в редакторе vi:
Quotas for user wahib: /dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0) inodes in use: 5, limits (soft = 0, hard = 0)
Должнор будет читаться:
Quotas for user wahib: /dev/sda6: blocks in use: 6, limits (soft = 5000, hard = 0) inodes in use: 5, limits (soft = 0, hard = 0)
soft limit (soft=) определяет максимальное количество дискового пространства, которое пользователь может иметь. hard limit (hard=) определяет абсолютное ограничение использования пользоватлем дискового пространства. Пользователь не может превзойти его. Следует заметить, что hard limit работает только, когда установлен параметр grace period.
Параметр grace period
Параметр grace period позволяет Вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами. Например, этот параметр может быть использован для предупреждения пользователей о новой политике, которая установит дисковую квоту в 5 MB на их домашний каталог через 7 дней. Вы можете установить это значение в 0 дней (по умолчанию) для любого отрезка времени. Чтобы изменить это требуется два следующих шага (в моем примере я принимаю 7 дней).
Шаг 1.
Редактируем значение по умолчанию параметра "период любезности" (grace period), используя следующую команду:
[root@deep /]# edquota -t
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 0 days, file grace period: 0 days
Шаг 2.
Модифицируем "период любезности" (grace period) до 7 дней. Измените или установите следующие параметры в редакторе vi:
Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/sda6: block grace period: 0 days, file grace period: 0 days
Должно будет читаться:
Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/sda6: block grace period: 7 days, file grace period: 7 days
Замечание. Команда edquota -t редактирует параметр soft time limits для каждой файловой системы с включенными квотами.
Назначение квот для отдельных групп
Предположим, например, что у Вас есть группа с именем webusers. Следующая команда вызовет редактор vi для редактирования квот для группы webusers на каждой файловой системе, где квоты вообще разрешены:
[root@deep /]# edquota -g webusers Quotas for group webusers: /dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0) inodes in use: 6, limits (soft = 0, hard = 0)
Процедура такая же, как и при назначении квот для пользователей, как описано выше, Вы должны модифицировать параметр soft= и записать изменения.
Назначение квот для групп пользователей с теми же значениями
Программа edquota имеет специальную опцию (-p), которая назначает квоты для групп пользователей с некоторым значением, назначенным при инициализации пользователя. Допустим, Вы хотите назначить пользователям UID, которых начинаются с 500, то же значение, что и для пользователя wahib. Сперва, мы редактируем квоты для пользователя wahib, а затем выполняем следующую команду:
[root@deep /]# edquota -p wahib `awk -F: '$3>499 {print $1}' /etc/passwd`
Программа edquota будет дублировать квоты, которые установлены для пользователя wahib, на всех пользователей с UID больше 499 из файла /etc/passwd.
Дополнительная документация
Чтобы получить больше информации, читайте следующие страницы руководства:
$ man edquota (8) редактирование пользовательских квот
$ man quota (1) вывод информации об использовании диска и ограничениях
$ man quotacheck (8) сканирование файловой системы диска
$ man quotactl (2) манипулирование дисковыми квотами
$ man quotaon, quotaoff (8) включение или выключение квот на файловой системе
$ man repquota (8) суммирование квот на файловой системе
$ man rquota (3) осуществление квот на удаленной машине
Команды
Ниже приведены команды из тех, что мы часто используем в регулярной работе, но их существует много больше. Читайте страницы руководства (man) для получения большей информации.
Quota
Quota выводит информацию об использовании диска и ограничениях в файловой системе.
Для получения информации об использовании диска и ограничениях пользователя wahib используйте команду:
[root@deep /]# quota -u wahib Disk quotas for user wahib (uid 501): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6001* 6000 0 none 7 0 0
Для получения информации о групповых квотах группы, членом которой является пользователь используйте команду:
[root@deep /]# quota -g wahib Disk quotas for group wahib (gid 501): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 5995* 5000 0 none 1 0 0
ЗАМЕЧАНИЕ. Если групповые квоты не установлены для заданного
пользователя, Вы получите следующее сообщение:
Disk quotas for group wahib (gid 501): none
Repquota
Repquota создает полную информацию об использовании дискового пространства и о квотах на заданной файловой системе. Также она печатает для каждого пользователя текущее количество файлов и объем используемого дискового пространства (в килобайтах). Здесь приведен пример информации, полученной от команды repquota:
[root@deep /]# repquota -a Block limits File limits User used soft hard grace used soft hard grace Roo -- 21 0 0 4 0 0 Named -- 6 0 0 5 0 0 Admin -- 388657 0 0 21 21 0 0 Wahib -- 6001 0 0 7 0 0 Block limits File limits User used soft hard grace used soft hard grace root -- 21 0 0 4 0 0 named -- 6 0 0 5 0 0 admin -- 388657 0 0 2121 0 0 wahib -- 6001 6000 0 none 7 0 0