Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite

Lines Club

Ищем достойных соперников.




Книги по Linux (с отзывами читателей)

Библиотека сайта или "Мой Linux Documentation Project"

Глава 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 может быть использован для:

  1. Отправки зашифрованных почтовых сообщений.
  2. Шифрования резервных копий файлов перед отправкой через сеть.
  3. Шифрования личных чувствительных файлов (например, файл, содержащий все Ваши пароли).

Инсталлированные файлы

> /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

Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют