Резервное копирование системы с помощью виртуализации
Обновлено: 29.06.2025
Иначе статью можно назвать "создание резервных копий приложений, а не только данных".
Представьте ситуацию: компьютер бухгалтера глючит (а иначе с компьютером бухгалтера быть не может!). На нем (на этом компьютере) установлена кучища программ, восстанавливать которые можно дня три, а то и больше. А работать бухгалтеру надо без перерывов, и ему лучше ничего не трогать еще года три, ждать тотального краха. Что делать? Старый бекап системы не подойдет - ежеквартально программы обновляются, добавляются и поэтому старый образ системы, сделанный на свежеустановленную систему, не подойдет.
Неплохо было бы сделать так, чтобы оставить все старое и одновременно сделать все новым. Как раз в такой ситуации можно сделать виртуальную копию пока еще работающего компьютера, проверить ее работоспособность. (например, на компьютере администратора). Потом снести все на компе бухгалтера, поставить свежую систему и запускать на этой свежей системе виртуальную машину до тех пор, пока работа плавно не перетечет на хостовую машину. При этом гостевую можно и оставить (это по сути работающий бекап бухгалтерии!) в архиве - ведь это просто файл, правда, размером гигов в 20, но кого это сейчас волнует.
Итак, идея ясна. Реализация ее тоже не сложна. Для этого будем использовать две бесплатно распространяемые программы: Oracle VirtualBox и Paragon Go Virtual.
Шаг 1: создаем виртуальную копию работающего компьютера
Для создания виртуальной копии компьютера используем программу Paragon Go Virtual. Эта программа доступна для скачивания с сайта http://www.paragon-software.com/home/go-virtual/ бесплатно. Требуется только сообщить имя и email - на этот email придет письмо с серийным номером. После установки программы потребуется перезагрузить компьютер.
Интерфейс программы предельно прост - всего две кнопки на основном окне. Выбираем "P2V" (physical to virtual). Необходимо будет выбрать тип будущей виртуальной машины - мы выбираем Oracle VirtualBox.
Процесс копирования займет некоторое время, можно попить чайку. В конце программа создаст как минимум два файла: диск C и файл настроек с расширением OVF. Если вы создаете копию компьютера с несколькими дисками, файлов будет больше. Созданные образы дисков будут в формате VMDK (VMWare). Но VirtualBox с ними прекрасно работает.
Шаг 2: импортируем созданную копию в Virtual Box
Для чистоты эксперимента скопируем получившиеся файлы на другой компьютер (условно назовем его компьютером админа). Если на компьютере админа еще нет VirtualBox (!!! ахтунг !!!) ставим его немедленно.
В главном окне программы VirtualBox выбираем меню "файл" - "Импорт конфигурации" и выбираем файл с расширением OVF, созданный Paragon Go Virtual в шаге 1. VirtualBox сам поймет, что делать дальше.
Примечание: перед тем, как проделывать эту операцию, посмотрите в настройках VirtualBox, куда он будет складывать файлы дисков и настроек виртуальных машин - файлы будут немалые по размеру, а по умолчанию, путь будет на системный диск, что не всегда удобно.
В процессе создания виртуальной машины VirtualBox скопирует файлы жестких дисков, созданных Paragon Go Virtual. После того, как VirtualBox закончит процесс импорта, файлы созданные Go Virtual можно удалить (сначала проверьте, что виртуальная машина запускается!).
Шаг 3: финиш
Скорее всего, все это вы проделываете на работе, поэтому будьте внимательны при запуске виртуальной машины - ведь если сетевой адаптер VirtualBox стоит в режиме моста, ваша копия реально работающего компьютера в сети может вызвать конфликты. Я обычно делаю так: до запуска виртуальной машины вообще отключаю сеть в настройках этой машины в консоли главного окна VirtualBox. От греха. Подключаю в качестве CD VBoxGuestAdditions.iso и после загрузки виртуальной машины устанавливаю дополнения (для интеграции мыши, подстройке размера экрана и др.). Обратите внимание, что Windows нужно дать некоторое время на то, чтобы он обновил список оборудования и установил новые драйверы экрана и пр. Потребуется перезагрузка гостевой виртуальной машины.
Все. Вы создали реально работающую копию компьютера и можете делать на ней все, что пожелаете.
Обратите внимание на то, что такой способ можно рассматривать как продвинутый вариант создания резервных копий. Например, можно считать, что мы создаем резервную копию не данных, а уже настроенных и готовых к работе приложений.
Уменьшение объема диска виртуальной машины формата VMDK (VMWare)
Как правило, на постоянно использующемся компьютере установлено больше программ, чем это необходимо для хранения в виртуальной машине. Ну в самом деле, зачем вам нужны Gimp, ICQ, Skype, ImageViewer или медиа проигрыватель а также "Мои документы" и "Моя музыка"? Долой все лишнее. Диск виртуальной машины и так будет, скорее всего не менее 10 Гб, а тут еще и хлам.
Хорошо, запустили вы виртуальную машину, удалили ненужные программы, а файл-то vdisk.vmdk (например) размер свой не уменьшил. Хорошо, если не увеличил. Вы удалили 3 Гб хлама, а размер меньше не стал?
Файл диска создается в формате VMware. Компания VMware вместе с продуктами VMware Server и VMware Workstation поставляет консольную утилиту для работы с виртуальными дисками vmware-vdiskmanager. Эта утилита является мощным средством преобразования виртуальных дисков. Найти утилиту vdiskmanager можно в папке, куда установлены продукты VMware Server или VMware Workstation. Т.е. достаточно установить триальную версию WMware Workstation и найти в ее папке файл vmware-vdiskmanager.
Использование этой утилиты в нашем случае простое: vmware-vdiskmanager.exe -k <путь до вашего файла vdisk.vmdk>.
В моем случае это позволило уменьшить размер с 22 Гб до 14 Гб!
Если устанавливать VMware нет желания, можете попробовать скачать архив с этой утилитой отсюда (856 кб, MD5: CF48CF9B69EA712E7B7B8C94EFA7AB49). В архиве сама утилита и две библиотеки, необходимые для ее работы. По крайней мере, с ключом "-k". Надеюсь, что этого хватит и не потребуется установка полного дистрибутива VMware.
Adobe Flash Player MSI
Обновлено: 29.06.2025
Один из самых уязвимых компонентов любой сети являются веб броузеры пользователей. Как бы вы не настраивали брандмауэр, достаточно открыть обычную на первый взгляд страницу и произвольный код выполниться на рабочей станции. Флеш проигрыватель Adobe Flash Player встроен практически в любую систему и потому часто становится целью злоумышленников. Самый правильный метод борьбы с этой проблемой - установка регулярных обновлений.
Если вы желаете распространять регулярные обновления флеш проигрывателя Adobe Flash Player в локальной сети, можете скачивать готовые MSI файлы со страницы на сайте adobe: http://www.adobe.com/products/flashplayer/fp_distribution3.html
Скачиваем MSI файлы и далее по инструкции "Автоматическая установка программ в домене Windows".
Извлечь Adobe MSI из EXE
Обновлено: 29.06.2025
Для распространения программ с помощью Active Directory и групповых политик во многих случаях необходимо иметь файл MSI (*.msi) и, иногда, дополнительные файлы. Далеко не всегда можно найти эти самые MSI-файлы.
Для того, чтобы распространить (и в последствии регулярно обновлять) программу Adobe Reader, необходимо сделать несколько простых действий:
- Скачать с сайта adobe.com нужный дистрибутив Adobe Reader (в моем случае это был AdbeRdr930_ru_RU.exe) в, например, c:\downloads.
-
Переходим в эту директорию и извлекаем файлы установки:
> cd C:\Downloads
> AdbeRdr930_ru_RU.exe -nos_o"C:\Downloads\ExtractedAdobeFiles" -nos_ne
где- -nos_o"C:\Downloads\ExtractedAdobeFiles" - куда извлечь файлы. Обратите внимание на отсутствие пробела между -nos_o и именем папки в кавычках.
- -nos_ne - указание на то, что будет произведено только извлечение файлов, а не установка программы.
- Соглашаемся на распаковку файла.
-
Теперь в папке "
C:\Downloads\ExtractedAdobeFiles
" у вас будут находиться файлы для установки по сети. - Ну а что делать с файлами MSI вы можете прочитать в статье Автоматическая установка программ в домене Windows.
Статья обновлена 28.02.2011 в соответствии с официальным руководством.
SELinux в CentOS
Обновлено: 29.06.2025
Security Enhanced Linux - SELinux разработан в агенстве национальной безопасности (NSA) в 2000 году. Проект распространяется по лицензии GPL. Основной целью проекта является достижение такого уровня защищенности компьютерной системы, чтобы можно было спокойно использовать ее в военных и правительственных организациях. SeLinux являет собой дополнительное расширение к ядру, целью которого является увеличение его защищенности и возможность строго и гибко регулировать права доступа к системе для конкретных пользователей.
Какая логика работы мне нужна?
getsebool -a
покажет вам все варианты защиты, которые вы можете изменить. При активированном selinux вы увидите список, который даст вам информацию о необходимости конфигурировать логику защиты заданных сервисов.
|
Для того чтобы посмотреть активирован или нет SELinux введите: # sestatus
Соответственно: enforsing - принудительный режим permissive - режим предупреждения |
Примечание: Вы не можете изменять все политики перечисленные ниже, а только те, которые вам выдал getsebool -a. Список показанный ниже выдан system-config-selinux и показывает все политики, которые могут быть использованы в зависимости от установленных пакетов |
Пример: SELinux не позволит вашему httpd демону взаимодействовать с LDAP сервером на той же машине. Вы должны иметь возможность аутентифицироваться на LDAP. Вы знаете, что интересующие вас политики содержат слово httpd.
[root@localhost ~]# getsebool -a | grep httpd allow_httpd_anon_write --> off allow_httpd_bugzilla_script_anon_write --> off allow_httpd_mod_auth_pam --> off allow_httpd_nagios_script_anon_write --> off allow_httpd_squid_script_anon_write --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_network_connect --> off httpd_can_network_connect_db --> off httpd_can_network_relay --> off httpd_disable_trans --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> on httpd_rotatelogs_disable_trans --> off httpd_ssi_exec --> off httpd_suexec_disable_trans --> off httpd_tty_comm --> on httpd_unified --> on
httpd_can_network_connect вызывает интерес - давайте сравним со списком ниже.
httpd_can_network_connect (HTTPD Service):: Allow HTTPD scripts and modules to connect to the network. (Разрешить HTTPD скриптам и модулям подключения к сети).
Похоже, это то что нам нужно ...
setsebool -P httpd_can_network_connect on
Оказалось именно это и нужно. Вуаля - все работает.
![]() |
system-config-selinux - графический интерфейс для управления настройками политик SELinux. Если у вас имеется GUI (графический интерфейс пользователя), то хорошей идеей будет установить данный пакет и вносить изменения с помощью него. Это можно сделать следующим образом: yum install policycoreutils-gui |
Список политик SELinux
acct_disable_trans (SELinux Service Protection)
allow_cvs_read_shadow (CVS)
allow_daemons_dump_core (Admin)
allow_daemons_use_tty (Admin)
allow_execheap (Memory Protection)
allow_execmem (Memory Protection)
allow_execmod (Memory Protection)
allow_execstack (Memory Protection)
allow_ftpd_full_access (FTP)
allow_ftpd_anon_write (FTP)
allow_ftpd_use_cifs (FTP)
allow_ftpd_use_nfs (FTP)
allow_gpg_execstack (Memory Protection)
allow_gssd_read_tmp (NFS)
allow_httpd_anon_write (HTTPD Service)
allow_httpd_mod_auth_pam (HTTPD Service)
allow_httpd_sys_script_anon_write (HTTPD Service)
allow_java_execstack (Memory Protection)
allow_kerberos (Kerberos)
allow_mount_anyfile (Mount)
allow_mounton_anydir (Mount)
allow_mplayer_execstack (Memory Protection)
allow_nfsd_anon_write (NFS)
allow_polyinstantiation (Polyinstatiation)
allow_ptrace (Compatibility)
allow_rsync_anon_write (rsync)
allow_smbd_anon_write (Samba)
allow_ssh_keysign (SSH)
allow_unconfined_execmem_dyntrans (Memory Protection)
allow_user_mysql_connect (Databases)
allow_user_postgresql_connect (Databases)
allow_write_xshm (XServer)
allow_ypbind (NIS)
allow_zebra_write_config (Zebra)
amanda_disable_trans (SELinux Service Protection)
amavis_disable_trans (SELinux Service Protection)
apmd_disable_trans (SELinux Service Protection)
arpwatch_disable_trans (SELinux Service Protection)
auditd_disable_trans (SELinux Service Protection)
automount_disable_trans (Mount)
avahi_disable_trans (SELinux Service Protection)
bluetooth_disable_trans (SELinux Service Protection)
canna_disable_trans (SELinux Service Protection)
cardmgr_disable_trans (SELinux Service Protection)
ccs_disable_trans (SELinux Service Protection)
cdrecord_read_content (User Privs)
ciped_disable_trans (SELinux Service Protection)
clamd_disable_trans (SELinux Service Protection)
clamscan_disable_trans (SELinux Service Protection)
clvmd_disable_trans (SELinux Service Protection)
comsat_disable_trans (SELinux Service Protection)
courier_authdaemon_disable_trans (SELinux Service Protection)
courier_pcp_disable_trans (SELinux Service Protection)
courier_pop_disable_trans (SELinux Service Protection)
courier_sqwebmail_disable_trans (SELinux Service Protection)
courier_tcpd_disable_trans (SELinux Service Protection)
cpucontrol_disable_trans (SELinux Service Protection)
cpuspeed_disable_trans (SELinux Service Protection)
cron_can_relabel (Cron)
crond_disable_trans (Cron)
cupsd_config_disable_trans (Printing)
cupsd_disable_trans (Printing)
cupsd_lpd_disable_trans (Printing)
cvs_disable_trans (CVS)
cyrus_disable_trans (SELinux Service Protection)
dbskkd_disable_trans (SELinux Service Protection)
dbusd_disable_trans (SELinux Service Protection)
dccd_disable_trans (SELinux Service Protection)
dccifd_disable_trans (SELinux Service Protection)
dccm_disable_trans (SELinux Service Protection)
ddt_client_disable_trans (SELinux Service Protection)
devfsd_disable_trans (SELinux Service Protection)
dhcpc_disable_trans (SELinux Service Protection)
dhcpd_disable_trans (SELinux Service Protection)
dictd_disable_trans (SELinux Service Protection)
direct_sysadm_daemon (Admin)
disable_evolution_trans (Web Applications)
disable_games_trans (Games)
disable_mozilla_trans (Web Applications)
disable_thunderbird_trans (Web Applications)
distccd_disable_trans (SELinux Service Protection)
dmesg_disable_trans (SELinux Service Protection)
dnsmasq_disable_trans (SELinux Service Protection)
dovecot_disable_trans (SELinux Service Protection)
entropyd_disable_trans (SELinux Service Protection)
fcron_crond (Cron)
fetchmail_disable_trans (SELinux Service Protection)
fingerd_disable_trans (SELinux Service Protection)
freshclam_disable_trans (SELinux Service Protection)
fsdaemon_disable_trans (SELinux Service Protection)
ftpd_disable_trans (FTP)
ftpd_is_daemon (FTP)
ftp_home_dir (FTP)
global_ssp (Admin)
gpm_disable_trans (SELinux Service Protection)
gssd_disable_trans (NFS)
hald_disable_trans (SELinux Service Protection)
hide_broken_symptoms (Compatibility)
hostname_disable_trans (SELinux Service Protection)
hotplug_disable_trans (SELinux Service Protection)
howl_disable_trans (SELinux Service Protection)
hplip_disable_trans (Printing)
httpd_builtin_scripting (HTTPD Service)
httpd_can_network_connect_db (HTTPD Service)
httpd_can_network_connect (HTTPD Service)
httpd_can_network_relay (HTTPD Service)
httpd_disable_trans (HTTPD Service)
httpd_enable_cgi (HTTPD Service)
httpd_enable_ftp_server (HTTPD Service)
httpd_enable_homedirs (HTTPD Service)
httpd_rotatelogs_disable_trans (SELinux Service Protection)
httpd_ssi_exec (HTTPD Service)
httpd_suexec_disable_trans (HTTPD Service)
httpd_tty_comm (HTTPD Service)
httpd_unified (HTTPD Service)
hwclock_disable_trans (SELinux Service Protection)
i18n_input_disable_trans (SELinux Service Protection)
imazesrv_disable_trans (SELinux Service Protection)
inetd_child_disable_trans (SELinux Service Protection)
inetd_disable_trans (SELinux Service Protection)
innd_disable_trans (SELinux Service Protection)
iptables_disable_trans (SELinux Service Protection)
ircd_disable_trans (SELinux Service Protection)
irqbalance_disable_trans (SELinux Service Protection)
iscsid_disable_trans (SELinux Service Protection)
jabberd_disable_trans (SELinux Service Protection)
kadmind_disable_trans (Kerberos)
klogd_disable_trans (SELinux Service Protection)
krb5kdc_disable_trans (Kerberos)
ktalkd_disable_trans (SELinux Service Protection)
kudzu_disable_trans (SELinux Service Protection)
locate_disable_trans (SELinux Service Protection)
lpd_disable_trans (SELinux Service Protection)
lrrd_disable_trans (SELinux Service Protection)
lvm_disable_trans (SELinux Service Protection)
mailman_mail_disable_trans (SELinux Service Protection)
mail_read_content (Web Applications)
mdadm_disable_trans (SELinux Service Protection)
monopd_disable_trans (SELinux Service Protection)
mozilla_read_content (Web Applications)
mrtg_disable_trans (SELinux Service Protection)
mysqld_disable_trans (Databases)
nagios_disable_trans (SELinux Service Protection)
named_disable_trans (Name Service)
named_write_master_zones (Name Service)
nessusd_disable_trans (SELinux Service Protection)
NetworkManager_disable_trans (SELinux Service Protection)
nfsd_disable_trans (NFS)
nfs_export_all_ro (NFS)
nfs_export_all_rw (NFS)
nmbd_disable_trans (Samba)
nrpe_disable_trans (SELinux Service Protection)
nscd_disable_trans (Name Service)
nsd_disable_trans (SELinux Service Protection)
ntpd_disable_trans (SELinux Service Protection)
oddjob_disable_trans (SELinux Service Protection)
oddjob_mkhomedir_disable_trans (SELinux Service Protection)
openvpn_disable_trans (SELinux Service Protection)
pam_console_disable_trans (SELinux Service Protection)
pegasus_disable_trans (SELinux Service Protection)
perdition_disable_trans (SELinux Service Protection)
portmap_disable_trans (SELinux Service Protection)
portslave_disable_trans (SELinux Service Protection)
postfix_disable_trans (SELinux Service Protection)
postgresql_disable_trans (Databases)
pppd_can_insmod (pppd)
pppd_disable_trans (pppd)
pppd_disable_trans (pppd)
pppd_for_user (pppd)
pptp_disable_trans (SELinux Service Protection)
prelink_disable_trans (SELinux Service Protection)
privoxy_disable_trans (SELinux Service Protection)
ptal_disable_trans (SELinux Service Protection)
pxe_disable_trans (SELinux Service Protection)
pyzord_disable_trans (SELinux Service Protection)
quota_disable_trans (SELinux Service Protection)
radiusd_disable_trans (SELinux Service Protection)
radvd_disable_trans (SELinux Service Protection)
rdisc_disable_trans (SELinux Service Protection)
readahead_disable_trans (SELinux Service Protection)
read_default_t (Admin)
read_untrusted_content (Web Applications)
restorecond_disable_trans (SELinux Service Protection)
rhgb_disable_trans (SELinux Service Protection)
ricci_disable_trans (SELinux Service Protection)
ricci_modclusterd_disable_trans (SELinux Service Protection)
rlogind_disable_trans (SELinux Service Protection)
rpcd_disable_trans (SELinux Service Protection)
rshd_disable_trans (SELinux Service Protection)
rsync_disable_trans (rsync)
run_ssh_inetd (SSH)
samba_enable_home_dirs (Samba
samba_share_nfs (Samba)
allow_saslauthd_read_shadow (SASL authentication server)
saslauthd_disable_trans (SASL authentication server)
scannerdaemon_disable_trans (SELinux Service Protection)
secure_mode (Admin)
secure_mode_insmod (Admin)
secure_mode_policyload (Admin)
sendmail_disable_trans (SELinux Service Protection)
setrans_disable_trans (SELinux Service Protection)
setroubleshootd_disable_trans (SELinux Service Protection)
slapd_disable_trans (SELinux Service Protection)
slrnpull_disable_trans (SELinux Service Protection)
smbd_disable_trans (Samba)
snmpd_disable_trans (SELinux Service Protection)
snort_disable_trans (SELinux Service Protection)
soundd_disable_trans (SELinux Service Protection)
sound_disable_trans (SELinux Service Protection)
spamassassin_can_network (Spam Assassin)
spamd_disable_trans (spam Protection)
spamd_enable_home_dirs (spam Protection)
spammassasin_can_network (spam Protection)
speedmgmt_disable_trans (SELinux Service Protection)
squid_connect_any (Squid)
squid_disable_trans (Squid)
ssh_keygen_disable_trans (SSH)
ssh_sysadm_login (SSH)
staff_read_sysadm_file (Admin)
stunnel_disable_trans (Universal SSL tunnel)
stunnel_is_daemon (Universal SSL tunnel)
swat_disable_trans (SELinux Service Protection)
sxid_disable_trans (SELinux Service Protection)
syslogd_disable_trans (SELinux Service Protection)
system_crond_disable_trans (SELinux Service Protection)
tcpd_disable_trans (SELinux Service Protection)
telnetd_disable_trans (SELinux Service Protection)
tftpd_disable_trans (SELinux Service Protection)
transproxy_disable_trans (SELinux Service Protection)
udev_disable_trans (SELinux Service Protection)
uml_switch_disable_trans (SELinux Service Protection)
unlimitedInetd (Admin)
unlimitedRC (Admin)
unlimitedRPM (Admin)
unlimitedUtils (Admin)
updfstab_disable_trans (SELinux Service Protection)
uptimed_disable_trans (SELinux Service Protection)
use_lpd_server (Printing)
use_nfs_home_dirs (NFS)
user_canbe_sysadm (User Privs)
user_can_mount (Mount)
user_direct_mouse (User Privs)
user_dmesg (User Privs)
user_net_control (User Privs)
user_ping (User Privs)
user_rw_noexattrfile (User Privs)
user_rw_usb (User Privs)
user_tcp_server (User Privs)
user_ttyfile_stat (User Privs)
use_samba_home_dirs (Samba)
uucpd_disable_trans (SELinux Service Protection)
vmware_disable_trans (SELinux Service Protection)
watchdog_disable_trans (SELinux Service Protection)
winbind_disable_trans (Samba)
write_untrusted_content (Web Applications)
xdm_disable_trans (SELinux Service Protection)
xdm_sysadm_login (XServer)
xend_disable_trans (SELinux Service Protection)
xen_use_raw_disk (XEN)
xfs_disable_trans (SELinux Service Protection)
xm_disable_trans (SELinux Service Protection)
ypbind_disable_trans (NIS)
yppasswdd_disable_trans (NIS)
ypserv_disable_trans (SELinux Service Protection)
ypxfr_disable_trans (NIS)
zebra_disable_trans (SELinux Service Protection)
httpd_use_cifs (HTTPD Service)
httpd_use_nfs (HTTPD Service)
samba_domain_controller (Samba)
samba_export_all_ro (Samba)
samba_export_all_rw (Samba)
webadm_manage_users_files (HTTPD Service)
webadm_read_users_files (HTTPD Service)
***************************
Источник: http://www.centos.name
Управление пользователями 3proxy
Обновлено: 29.06.2025
Как создать список пользователей
Список пользователей задается с помощью команды users.
users USERDESC ...
С помощью одной команды можно задать несколько пользователей, можно давать несколько команд users. USERDESC - описание пользователя. Описание пользователя состоит из трех полей разделенных : (двоеточием) - имени (login) типа пароля и пароля. Например:
users admin:CL:bigsecret test:CL:password test1:CL:password1 \ users "test2:CR:$1$lFDGlder$pLRb4cU2D7GAT58YQvY49." users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63
В примере выше символ "\" означает, что перевода строки на самом деле нет.
Обратите внимание на двойные кавычки - они необходимы для второго пользователя, т.к. в его пароле встречается знак $, который для файла 3proxy.cfg означает включение другого файла. Поддеживается следующие типы паролей:
- тип не указан - использовать системную авторизацию для данного пользователя (пока не реализовано).
- CL - пароль в открытом тексте
- CR - пароль в формате crypt() (только MD5)
- NT - пароль в формате NT в шестнадцатеричной кодировке
NT и crypt пароли могут быть использованы для импорта учетных записей из Windows/Samba и Unix соответственно (для Windows можно использовать утилиты семейства pwdump). Учетные записи удобно хранить в отдельном файле (в таком случае можно хранить их построчно в формате, типичном для файлов паролей). Включить файл можно с помощью макроса $:
users $/etc/.3proxypasswd
или
users $"c:\Program Files\3proxy\passwords"
Шифрованные NT и crypt пароли можно создавать с помощью утилиты mycrypt.
Список пользователей един для всех служб. Разграничение доступа по службам необходимо производить с помощью списков доступа.
Как ограничить доступ пользователей к ресурсам
Для построения списков доступа используются команды allow, deny и flush. Команды имеют следующую структуру:
allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist> deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist> flush
Команда flush используется для сброса существующего списка доступа (это необходимо для того, чтобы можно было задать различные списки доступа для различных служб). allow служит для разрешения соединения, deny - для запрета соединения. Команда parent используется в качестве расширения команды allow для управления перенаправлениями соединений (о перенаправлении см. Как управлять перенаправлениями). В момент установки исходящего соединения просматривается список доступа и находится первая запись, соответствующая запрошенному клиентом соединению. Если запись соттветствует allow - соединение разрешается, deny - запрещается. Если список пуст, то соединение разрешается. Если список не пуст, но подходящей записи нет, то соединение запрещается. При этом:
- <userlist> - список логинов пользователей через запятую
- <sourcelist> - список сетей клиентов через запятую. Сеть задается в формате xxx.yyy.zzz.mmm/l, где l - длина маски сети (количество ненулевых байт). Например, 192.168.1.0/24 соответствует сети с маской 255.255.255.0.
- <targetlist> - список сетей назначения через запятую
- <targetportlist> - список портов назначения через запятую. можно задать диапазон портов через -, например, 80,1024-65535
-
<commandlist> - список команд, через запятую, для которых применяется правило:
CONNECT - установить исходящее TCP соединение (например, SOCKSv4/5, POP3 proxy, и т.д.)
BIND - разрешить входящее TCP соединение (SOCKSv5)
UDPASSOC - создать UDP-ассоциацию (SOCKSv5)
ICMPASSOC - создать ICMP-ассоциацию (не реализовано)
HTTP_GET - HTTP GET запрос (HTTP proxy)
HTTP_PUT - HTTP PUT запрос (HTTP proxy)
HTTP_POST - HTTP POST запрос (HTTP proxy)
HTTP_HEAD - HTTP HEAD запрос (HTTP proxy)
HTTP_CONNECT - HTTP CONNECT запрос (HTTP proxy)
HTTP_OTHER - другой HTTP запрос (HTTP proxy)
HTTP - соответствует любому HTTP запросу кроме HTTP_CONNECT (HTTP proxy)
HTTPS - тоже, что HTTP_CONNECT (HTTP proxy)
FTP_GET - FTP get запрос
FTP_PUT - FTP put запрос
FTP_LIST - FTP list запрос
FTP - соответствует любому FTP запросу
ADMIN - доступ к интерфейсу администрирования - <weekdays> задает список дней недели, 1 соответствует понедельнику, 0 или 7 - воскресенье. 1-5 означает с понедельника по пятницу (включительно). 1,3,5 задает нечетные дни недели.
- <timeperiodslist> список интервалов дня в формате ЧЧ:ММ:СС-ЧЧ:ММ:СС, например, 00:00:00-08:00:00,17:00:00-24:00:00 задает нерабочее время.
Примеры использования листов доступа можно найти в файле 3proxy.cfg.sample.
***
Источник: SECURITYVULNS.RU
Управление службами 3proxy
Обновлено: 29.06.2025
- Как запустить конкретную службу (HTTP, SOCKS и т.д)
- Как повесить службу на определенный интерфейс или порт
- Ограничить доступ к службе 3proxy
Как запустить конкретную службу (HTTP, SOCKS и т.д)
3proxy поставляется в двух вариантах: как набор отдельных модулей (proxy, socks, pop3p, tcppm, udppm) и как универсальный прокси-сервер (3proxy). Универсальный прокси сервер - это законченная программа, которой не требуются отдельные модули.
Отдельный модуль управляется только из командной строки. Поэтому для отдельного модуля не поддерживаются многие функции, такие как управление доступом и ротация журнала. Запуск модуля осуществляется из командной строки. Например,
$/sbin/socks -l/var/log/socks.log -i127.0.0.1
запускает SOCKS на порту 127.0.0.1:1080 с ведением журнала /var/log/socks.log.
Справку по опциям командной строки можно получить запустив модуль с ключом -?.
Если используется 3proxy, то запускаемые службы указываются в файле 3proxy.cfg. Файл 3proxy.cfg просматривается 3proxy построчно, каждая строка рассматривается как управляющая команда. Синтаксис команд описан в 3proxy.cfg.sample. Например,
log /var/log/3proxy.log D rotate 30 internal 127.0.0.1 external 192.168.1.1 proxy socks pop3p -l/var/log/pop3proxy
запускает 3 службы - PROXY, SOCKS и POP3 Proxy. Каждая слушает на интерфейсе 127.0.0.1 порт по-умолчанию (3128 для proxy, 1080 для socks и 110 для pop3p). Журналы всех служб кроме pop3p ведутся в файле /var/log/3proxy.log, который ежедневно меняется. Хранятся 30 последних файлов. Для pop3p ведется отдельный журнал /var/log/pop3proxy (см. Как настроить ведение журнала).
Как повесить службу на определенный интерфейс или порт
Опция -i позволяет указать внутренний интерфейс, -p - порт (пробелы в опциях не допускаются). Например, чтобы служба proxy висела на порту 8080 интерфейсов 192.168.1.1 и 192.168.2.1 необходимо дать команды
proxy -p8080 -i192.168.1.1 proxy -p8080 -i192.168.2.1
Ограничить доступ к службе 3proxy
Во-первых, для ограничения доступа необходимо указать внутренний интерфейс, на котором прокси-сервер будет принимать соединения. Внутренний интерфейс указывается с помощью команды internal в файле конфигурации или с помощью ключа -i конкретного модуля. (см. Как запустить конкретную службу (HTTP, SOCKS и т.д)). Отсутствие указания внутреннего интерфейса может привести к тому, что ваш прокси будет открытым.
Указание внешнего интерфейса (т.е. IP, с которого сервер будет устанавливать внешние соединения) так же является полезным. Для этого служит команда external и ключ -e соответственно. Для универсального прокси возможна дополнительная авторизация доступа с помощью имени/пароля, NetBIOS имени пользователя и по спискам доступа (по IP клиента, IP и порту назначения, см. Как ограничить доступ пользователей к ресурсам). Тип авторизации устанавливается командой auth в файле конфигурации.
auth none
Отсутствие какой-либо авторизации. Списки доступа не проверяются.
auth iponly
Будет идти проверка по списку доступа с использованием IP клиента, IP и номера порта назначения.
auth nbname
Перед проверкой по списком доступа будет произведена попытка получить NetBIOS имя клиента. Для этого используется NetBIOS код службы messager (0x03). Если имя определить не удалось (служба messager для Windows NT/2000/XP или WinPopUP для 95/98/ME не запущена), то имя будет считаться пустым. Далее следует проверка по спискам доступа. Данный тип авторизации не зависит от платформы сервера (т.е. прокси сервер, запущенный под Unix, сможет определять NetBIOS имена). Его рекомендуется использовать в однородных сетях, где у всех клиентов установлена Windows NT/2000/XP и пользователи не имеют доступа к привелегированным учетным записям. Этот вид авторизации не является надежным.
auth strong
Проверяется имя и пароль, переданные пользователем при подключении к прокси. Данный вид авторизации работает только с proxy и socks. Необходимо задание списка пользователей (см Как создать список пользователей). Соединения от неизвестных пользователей не принимаются. После проверки имени пользвоателя и пароля происходит проверка списков доступа.
Для разных служб можно установить различные типы авторизации, например,
auth none pop3p auth iponly proxy auth strong socks
не накладывает ограничений на использование POP3 Proxy, производит проверку по спискам доступа для пользователей HTTP Proxy и требует авторизации с именем и паролем для SOCKS.
С версии 0.6 возможно использвоать двойную авторизацию, например,
auth iponly strong allow * * 192.168.0.0/16 allow user1,user2 proxy
будет использовать авторизацию только в том случае, если не удалось пропустить пользователя с авторизаций iponly, т.е. для доступа к ресурсам 192.168.0.0/16 авторизация не требуется.
С версии 0.6 так же можно использвоать кэширование авторизации (имени пользователя) с целью повышения производительности. Использовать кэширование для strong практически не имеет смысла, она полезно для nbname и авторизации через внешние плагины, типа WindowsAuthentication. Кэширование настраивается командой authcache с двумя параметрами - типом кэширования и временем, на которое кэшируется пароль. Возможные типы: ip - после успешной авторизации в течение времени кэширования все запросы пришедшие с того же адреса считаются запросами от того же пользователя, name - после успешной авторизации от пользователя с тем же именем требуют указания имени, но реально аутентификации не производится, ip,name - запрос должен придти от того же IP и с тем же именем. user,password - имя и пароль пользователя сверяются с кэшированными. Возможны и другие сочетания. Для авторизации должен использоваться специальный метод авторизации - cache. Пример:
authcache ip 60 auth cache strong windows proxy -n
Кэширование влияет на безопасность доступа. Ни в коем случае не следует использовать кэширование для доступа к критичным ресурсам, в частности к интерфейсу администрирования.
***
Источник: SECURITYVULNS.RU
Интеграция Sun VirtualBox с основной системой
Обновлено: 29.06.2025
Многим известна виртуальная машина Sun VirtualBox. За последние несколько месяцев про нее написано столько обзоров и статей, что ее пора бы включить в основной состав Windows! Но есть у VirtualBox функция, про которую знают не все - это интеграция дисплея виртуальной машины с хостовой (основной) машиной.
Выглядит это следующим образом: пусть у вас есть основная система Windows 7 с установленной программой VirtualBox. В VirtualBox у вас установлена виртуальная машина с Windows XP SP3. Вам бывает частенько необходимо запустить программу, установленную в виртуальной Windows XP SP3, но работать с отдельным окном виртуальной машины, переключаясь на остальные программы основной Windows 7 неудобно! Что делать? Сочетание клавиш "Хост + L" в запущенной виртуальной машине коренным образом исправит ситуацию.
Было:
Стало (VirtualBox работает в режиме интеграции дисплея):
Почувствуйте разницу! Запустили рабочий компьютер, запустили (если не запускается автоматически) виртуальную машину - и вуаля, работайте с удобством! Ну а уж про преимущества виртуальных машин я промолчу - про это и так все знают. Удачи!
Автоматическая установка программ в домене Windows
Обновлено: 29.06.2025
Автор
Иванов Илья, http://bozza.ru, апрель 2010
Вступление
Если в домене Windows установлен WSUS, админ рад и спокоен - дескать, все, обновления ставятся на автомате, трафик снизился, бегать по компам не надо и пр. В принципе, все осталость то же самое, но ведь не все используют в работе Microsoft Outlook или Internet Explorer (хотя 8-ка очень неплоха). Есть много людей, привыкших работать с почтовиком The Bat!, броузером Opera или Mozilla. Если встает вопрос об обновлениях - либо это головняк админу в виде беготни к каждому компьютеру для обновления всем, скажем, Opera, либо юзеры должны сидеть под админами (пускай и локальными, не доменными).
Естественно, ни первый, ни второй способы - не выход. Значит, надо иметь возможность автоматически устанавливать программы на рабочих станциях, причем желательно делать это до того, как пользователь вошел в систему - ведь если он вошел, он уже не захочет перезагружать машину и т.п. Надо ставить пользователя перед фактом - программа, его любимая Opera, уже обновлена и админа не колбасит, что версия 10.10 почему-то нравится меньше, чем предыдущая. Просто вышло обновление, и его надо применить. Без вариантов.
Самый распространенный вариант ответа на вопрос - КАК? - Конечно, через Active Directory! - скажет вам любой специалист или просто сисадмин. А как через AD? - спросите вы. А вам скажут - ?! Вы не знаете, как через AD? Да там же просто, через policy! - но больше вам скорее сего ничего не скажут, потому что для большинства советчиков этот вопрос такой же неясный, как и для вас. И вам ничего не останется, как гуглить до потери пульса, потому что найти огромный фолиант на тему "как развернуть office 2007" в сети корпорации не проблема, а вот просто и в двух словах - редко что найдете. Не без гордости могу сказать, что данная статья как раз одна из немногих кратких и "без наворотов", попадавшихся мне.
Установка программ из MSI
Все изложенное далее относится к работе с инсталляционными пакетами типа MSI (расширение .msi). Файлы MSI есть (или их можно извлечь) для многих программ (Adobe Acrobat, The Bat, Opera, Firefox и пр.).
Предположим, мы хотим автоматически установить (а по мере выхода обновлений, устанавливать обновления) броузер Firefox. Файл msi для Firefox можно взять здесь (в новом окне).
Настройку шаблона .adm я пропущу, т.к. далеко не всегда это нужно, а еще чаще этот шаблон фиг найдешь. В итоге - дефолтные настройки (либо, если будем ставить поверх старой версии - настройки будут сохранены). Шаблон .adm нам не нужен.
Распределяем права доступа
Предполагаю, что все учетные записи компьютеров (кроме контроллеров домена) находятся в OU "OU Office Computers".
Примечание 1:
Почему лучше не использовать исходное размещение компьютеров (Computers - Компьютеры домена в оснастке Active Directory Users and Computers)? Мне удобнее в дальнейшем управлять политиками для групп компьютеров. К тому же, когда я посещал курсы Microsoft, я видел, что на контроллерах доменов в тестовых системах и в "боевых", настроенных специалистами Microsoft, используются практически только отдельно созданные OU, а не базовые. Я для себя решил повторять опыт специалистов. Пока мне от этого только удобнее. Естественно, ИМХО.
Примечание 2:
Не всем пользователям нужен Firefox (как не всем нужен The Bat, Opera и пр.). Поэтому создадим в "OU Office Computers" отдельную группу компьютеров, на которые будет установлен Firefox. Для ясности назовем группу GFirefoxComputers. Отмечу, что это будет именно группа, а не вложенное OU!
Расшариваем какую-либо папку на сервере (на рисунке это SoftwareDistibution, а не Mozilla Firefox, как может показаться) и даем группе GFirefoxComputers доступ на чтение, админу - полный доступ (не компьютеру админа, а пользователю - все-таки вы должны иметь возможность по сети заливать на шару файлы ;)).
Вообще, для проверки того, как все вообще работает, можно обойтись и без группы GFirefoxComputers. Просто для того, чтобы сразу не усложнять себе жизнь, и не пенять на групповые политики, если что пойдет не так ;)
Политика правит миром!
На контроллере домена запускаем редактор групповой политики GPMC.MSC:
... и создаем связанную только с нашим OU "OU Office Computers" групповую политику под названием "Firefox 3.6.3 rus":
... редактируем нашу политику "Firefox 3.6.3 rus":
Готовим дистрибутив Firefox для развертывания в сети
В разделе "User Configuration" -> "Software settings" -> "Software Installation" щелкаем правой мышкой и создаем новый объект для установки - наш будущий инсталлятор Firefox.
Выбираем файл MSI, заботливо положенного чьими-то руками в расшаренную папку. Важно: выбирать надо сетевой путь до файла, а не локальный, ведь юзера будут получать доступ к вашей инсталляшке не локально на сервере, а по сети.
Выбираем "Assigned" (Назначенный):
На этом работа с веткой "Software Installation" закончена.
Закрываем все открытые окна на сервере (если не помешает другим задачам, естественно), Пуск -> Выполнить -> gpupdate /force
Установка на рабочих станциях
Далее достаточно просто перезагрузить рабочие станции, чтобы автоматически установился Firefox ДО того, как появится окно для ввода логина/пароля. Иными словами, пользователь будет не в силах чего-то не установить, забыть и пр. Поэтому этот способ так хорош. Вы удаленно решаете, что будет установлено / обновлено на рабочих станциях.
Windows XP бывает не с первой перезагрузки "принимает" нове политики, поэтому можно подойти к юзеру, выполнить команду "gpupdate /force" (не обязательно под админом) и перезагрузить его компьютер.
Обязательно проверьте установку на своем / тестовом компьютере ДО того, как юзеры придут следующим утром, включат компьютеры... а вдруг косяк? Поэтому хотя бы первый раз сначала испытайте на себе.
Дополнительно
Теперь на любой новый компьютер, введенный в состав подразделения OU Office Computers будет установлена последняя версия броузера Firefox. Вам даже не придется ничего делать. Просто и очень полезно. Таким же образом можно устанавливать практически любой софт, включая Adobe Reader, Adobe Flash Player (которые в обычной ситуации требуют административных прав для установки), The Bat... да мало ли софта у вас в локальной сети, поддерживать который в актуальном состоянии одна из обязанностей системного администратора.
Нюанс: если вы уже установили какой-либо пакет, в нашем случае Firefox 3.6.3 rus, а через некоторое время вам потребуется его обновить (т.к. рано или поздно выйдет новая версия броузера), сначала удалите политику по установке Firefox 3.6.3, после чего создайте новую. Потом "gpudate /force" и вперед!
Авторизация Squid в домене Windows 2003
Обновлено: 29.06.2025
Введение
Многие небольшие организации используют домены Windows для управления учетными записями пользователей. Но далеко не все устанавливают у себя платные решения на ISA Server, Kerio WinRoute или др. Также можно сказать, что многие небольшие организации привлекают (за неимением своего) стороннего специалиста для настройки доступа в интернет с возможностью контроля доступа сотрудников (кто-что скачал и т.п.). В таких случаях часто имеет место настройка Squid на базе Linux / FreeBSD.
Удобство работы, простота и доступность Squid привлекает к себе многих, но как разрешить ходить в интернет только определенным сотрудникам, причем, желательно, поудобнее этим процессом управлять?
Вариант 1: настроить Squid на фильтрацию по IP-адресу. В небольшом офисе из 2-5 машин это может быть удобным, но если машин 20 и более? Все равно будет ротация машин (замена на новые, сотрудники могут меняться местами и пр.). При этом неизбежно для одного и того же человека IP-адрес будет меняться. Поэтому это хоть и простой вариант, но не самый удобный.
Вариант 2: уж коль мы вначале статьи решили, что наша сеть с контроллером домена Windows 2003, намного удобнее управлять доступом в интернет, управляя учетными записями пользователей из домена. Проблема в том, что Squid, хоть и поддерживает эту возможность, реализация ее не совсем очевидная, по крайней мере, вы уже должны были не раз и не два встретить на формах кучу вариантов, причем часто в обсуждении пишут о больших сложностях. Особенно, что касается внедрения авторизации через samba. Я сам, пролистав несколько таких руководств с кучей листингов и скриптов, отказался от мысли сразу ломиться в бой. Вместо этого я решил разделить задачу на два этапа, причем максимально проще и без скриптов по 50 строк каждый:
1 этап: проверка работы авторизации squid в домене;
2 этап: внедрение этого способа в рабочий squid.
Проверка авторизации Squid в домене Windows 2003
Для начала проверим, как вообще работает авторизация Squid в домене Windows. Нам будет нужен файл "squid_ldap_auth". В зависимости от операционной системы прокси-сервера, этот файл может быть в разных местах, у меня в CentOS он находиться по адресу:
/usr/lib/squid/squid_ldap_auth
Теперь создадим отдельное организационное подразделение в домене Windows 2003:
В русском варианте примерно тоже самое, только вместо "Organization Unit" будет "Подразделение".
Создадим в этом подразделении двух пользователей: SquidWebAccess (пароль "squid") и testuser (пароль "12345"). Права для этих пользователей - минимальные.
Пользователь SquidWebAccess нужен для того, чтобы от его имени Squid мог обращаться к контроллеру домена для проверки существования других пользователей. Естественно, пароль от этого пользователя должен быть неизвестен пользователям вашей сети.
Пользователь testuser - это имитация реального пользователя.
На этом этапе возникнет вопрос - а с чего это в уже настроенной структуре пользователей домена с отработанными политиками безопасности и пр. делать отдельного пользователя в новом OU, а не использовать текущие учетные данные? Ответ: можно использовать и те учетные записи, которые уже настроены. Но при этом теряется малая часть гибкости: если надо будет запретить пользователю доступ к интернет (за провинность, например), в моем случае не придется отключать его основную учетную запись домена. Я просто отключу учетную запись для доступа в интернет. Можно спорить, что удобнее, что нет. Мне удобнее разделить доступ в интернет от доступа к файлам и пр.
Заходим на прокси-сервер (где Squid) и вводим команду (в одну строку, у меня разделены символом \):
/usr/lib/squid/squid_ldap_auth -v 3 -R -D SquidWebAccess@domain.local -w squid \
-b "ou=InternetUsers,dc=domain,dc=local" -f "sAMAccountName=%s" 192.168.1.2
где
считаем, что домен называется "domain.local"
-D SquidWebAccess@domain.local - полное имя пользователя для возможности Squid сравнить введенные данные пользователя с теми, которые мы задали пользователю testuser
-w squid - пароль пользователя SquidWebAccess
-b "ou=InternetUsers,dc=domain,dc=local" - полный путь до места хранения учетных записей пользователей для доступа в интернет. Заметьте, что использовать свои учетные записи (в т.ч. учетную запись администратора домена) для доступа в интернет не выйдет! Можете это считать дополнительной опцией безопасности.
192.168.1.2 - ip-адрес контроллера домена Windows 2003.
После выполнения команды вводим:
testuser 12345
В ответ должны получить OK. Если нет, то ищем, описать все возможные варианты проблем - задача нереальная.
Если все OK, то переходим ко второму этапу: внедряем авторизацию squid в домене уже в самом прокси-сервере Squid, а не в тестовом варианте.
Авторизация Squid в домене Windows 2003
Для настройки авторизации в Squid, нам нужно изменить только squid.conf.
# LDAP-авторизация
# В одну строку, или разделяйте символом \
auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -R -D SquidWebAccess@domain.local -w squid \
-b "ou=InternetUsers,dc=domain,dc=local" -f "sAMAccountName=%s" 192.168.1.2
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute
acl ldap-auth proxy_auth REQUIRED
http_access allow ldap-auth
http_access allow localhost
http_access deny all
Остальные настройки Squid трогать не надо. Перезапустите Squid:
/sbin/service squid restart
Stopping squid: ........[ OK ]
Starting squid: ........[ OK ]
Наслаждайтесь :) Про подсчет трафика с учетом такой авторизации напишу позже.
Скорость перебора паролей на CPU и GPU
Обновлено: 29.06.2025
(с) Иван Голубев, http://www.golubev.com 29 мая 2009 г. «косметическая» правка 14 августа 2009 г. |
Вычисления на GPU в последнее время стали очень популярными во всех областях, где есть возможность их использовать. Одним из таких направлений является криптография, более узко – подбор / перебор паролей. К сожалению, реальные результаты работы (как обычно это и бывает) приукрашаются в маркетинговых целях, так что становится не очень ясно, какой на самом деле выигрыш от использования GPU в этой области.
Длинные объяснения заканчиваются краткими выводами (которые, вероятно, и стОит прочитать при первом ознакомлении с этой статьёй).
На что тратится время при переборе паролей.
Если с десять лет назад каждый разработчик пытался придумать какой-то свой, оригинальный алгоритм шифрования (но, так как почти никто не был экспертом в области криптографии, подавляющее большинство таких «оригинальных» алгоритмов ломались в момент), то теперь с этим стало гораздо проще. Практически везде используются проверенные и стандартные схемы.
Для шифрования сначала необходимо преобразовать пароль в ключ заданного вида и размера (этап хэширования), а потом уже с помощью этого ключа собственно зашифровать данные (с помощью любого надёжного алгоритма вроде AES).
Для хэширования ещё совсем недавно массово использовался MD5, но (после обнаружения уязвимостей в алгоритме) его довольно быстро заменил SHA1. С SHA1 в данный момент уже тоже не совсем всё гладко (сложность нахождения коллизии составляет примерно 2^63, а недавно ещё и заявили о снижении этого числа до 2^52), но при использовании его в каком-нибудь «обрамлении» вроде PBKDF2 сложность (а, точнее, легкость) нахождения коллизии уже не так важна.
Один очень важный момент: при проверке паролей определяющей чаще всего является именно скорость хэширования, а не скорость шифрования. Практически везде сейчас используется так называемое «key strengthening», то есть усиление ключа путём добавления сложности на этапе генерации пароль -> ключ. Вместо одного преобразования SHA1 можно выполнить 10000, подавая результат первой итерации как вход на вторую и т.д. Для валидных паролей, которые собственно проверяются один раз, разница незаметна – генерится ключ 0.01 мс или 10 мс совсем не важно. А вот для задачи перебора паролей, когда проверяются миллиарды комбинаций, это уже очень ощутимо. Если, например, какой-то пароль можно подобрать за месяц, то он явно не стойкий. Однако, если использовать схему «усиления ключа» с дополнительными 10000 итераций, то на подбор того же самого пароля уйдёт уже не месяц, а 830 лет, что переводит пароль в разряд довольно устойчивых.
Алгоритм PBKDF2, описанный в RFC 2898, сейчас является одним из самых популярных для «key strengthening» и используется во многих приложениях. Рекомендуемый минимум итераций в нём составляет 1000 (а одна итерация требует выполнения двух SHA1_Transform действий, о которых ниже).
В некоторых случаях для проверки валидности пароля вообще не надо расшифровывать файл. Например, появившееся в WinZip 9 сильное шифрование на основе AES 128 & 256 bit на самом деле до AES доходит только в случае абсолютной правильности проверяемого пароля. Во всех остальных случаях выполняется только PBKDF2, который в свою очередь использует только SHA1. В RAR 3.x до AES доходим после 262144 итераций SHA1. Так что на фоне такого количества SHA1 инициализация и расшифровка нескольких байт с помощью AES занимает мизерные доли процентов от общих вычислений. В MS Office 2007 используется 50 000 итераций SHA1, в WPA, как и в WinZip, PBKDF2, но уже с количеством итераций 4096.
В PDF9 Adobe сильно промахнулся с новым алгоритмом, взяв одну итерацию SHA256 вместо 50-ти MD5 + 20x RC4, что ускорило скорость перебора паролей по сравнению с предыдущей версией практически на два порядка. Но валидация пароля после хэширования не требует никакого шифрования, так что и тут важна только скорость SHA256.
Правильный алгоритм шифрования делает невозможным сокращение пространства перебора для ключей. То есть, чтобы найти, например, 128-ми битный ключ надо перебрать 2^128 == 3.4 * 10^38 вариантов. Если допустить, что один компьютер перебирает один миллиард вариантов в секунду, у нас есть миллиард компьютеров и мы располагаем миллиардом лет, то за это время мы сможем проверить всего лишь 10^9 * 10^9 * 10^9 * 60 с * 60 м * 24 ч * 365.25 д ~= 3.16 * 10^34 вариантов, меньше 1/10000 требуемого диапазона.
Пример неудачного алгоритма шифрования: в классическом zip используются 96-ти битные ключи. Несмотря на прошедшие уже 20 лет с момента создания алгоритма, эти ключи до сих пор невозможно перебрать «в лоб». Однако, имея часть незашифрованного файла, можно провести так называемую plaintext attack, при этом сложность перебора упадёт с 2^96 всего до 2^38, что составляет всего пару часов работы для современного компьютера.
Все «сильные» алгоритмы шифрования (AES, Blowfish, etc) не позволяют провести plaintext атаку и не позволяют сократить пространство перебора. Так что единственная возможность получить доступ к зашифрованным файлам – знать правильный пароль.
Вывод: используемый алгоритм шифрования практически никак не влияет на скорость перебора паролей. Хороший алгоритм просто обеспечивает невозможность подбора ключа «в лоб». А вот уже для перебора паролей главным является именно преобразование пароля в ключ, а за это отвечают алгоритмы хэширования (MD5, SHA1), а не алгоритмы шифрования (AES, Blowfish).
Значение «количество итераций» мало что говорит.
MD5, SHA1 (и его потомки в виде SHA256, 384, 512) очень похожи. На входе есть состояние хэша (128 бит для MD5, 160 бит на SHA1) и блок данных размером в 512 бит (64 байт). На выходе, после операции хэширования, получаем новое состояние хэша. Это сердце алгоритма, функция обычно называется MD5_Transform, SHA1_Transform, etc.
Важно заметить, что размер блока является константой, всегда хэшируются именно 64 байта. Если подать на вход 1 байт, то он будет дополнен до 64 путём добавления нулей, символа-терминатора и 8-ми байтового значения длины блока. То есть, подать отдельно на вход хэш-функции 64 раза по 1 байту или один раз 64 байта – абсолютно одинаково в плане скорости обработки (не считая того, что при подаче 64 байт придётся символ-терминатор и значение длины обрабатывать уже в следущем блоке).
Для некоторых алгоритмов пишется количество итераций как количество вызовов функции по обновлению хэша. Но не всякое обновление ведёт к вызову Transform функции. Данные накапливаются в буфере и отдаются на Transform блоками по 64 байта. Например для RAR 3.x количество итераций равно 262144, но количество обрабатываемых блоков будет равно ((длина_пароля * 2 + 8 + 3) * 262144) / 64. Что, например, для паролей длиной в 4 символа составит 77824 (+ещё 17 дополнительных блоков для создания IV для AES).
Для алгоритма PBKDF2 требуется на каждую итерацию обработать 2 блока плюс ещё 2 для инициализации. Иными словами, для проверки одного пароля WinZip/AES (где количество итераций равно 1000) надо выполнить 2002 операции SHA1_Transform.
В Office 2007 используется 50 000 итераций и обрабатывается блок в 20 байт. Но подаются эти байты каждый раз отдельно, поэтому выходит именно 50 000 вызовов SHA1_Transform, а не 50000*20/64 = 15 625.
Что даёт приведение количества итераций к количеству блоков для Transform? Так как время вычисления хэша не зависит от данных в блоке и является константой, зная время хэширования одного блока и количество блоков, можно легко посчитать общее время хэширования. Также легко оценить, насколько быстрее или медленнее разные алгоритмы генерации паролей относительно друг друга.
Например, на основе рассчётов выше выходит, что скорость перебора паролей WinZip/AES в ~39 раз быстрее, чем 4-х символьных паролей в RAR 3.x. А скорость перебора паролей для Office 2007 в 25 раз ниже, чем для WinZip/AES. Точность этих вычислений, конечно, приблизительная. Для сложных алгоритмов инициализации блока данных (как в RAR 3.x) такая оценка может давать заметную ошибку. Но в большинстве случаев достаточно знать только порядок величины, а не абсолютное значение.
Вывод: Количество «виртуальных» итераций в алгоритме мало что значит. Для оценки скорости надо знать количество 64-х байтных блоков, использованных при хэшировании. Зная это значение, общую скорость обработки легко получить просто умножив это значение на время обработки одного блока данных.
Насколько быстро можно хэшировать?
Теперь нас интересует вопрос, насколько же быстро можно обработать один 64-х байтный блок данных. Операции, используещиеся в Transform функции, самые простейшие – логические OR, XOR, NOT, AND, арифметическое сложение, сдвиги. Все действия производятся над 32-х битными целыми. Один блок данных легко помещается в кэш L1 любого из современных процессоров, так что скорость работы с памятью, её размер, размер L2 или RPM дискового накопителя не играет никакой роли. Иными словами, скорость перебора находится в прямой зависимости от скорости целочисленного ALU и практически никак не зависит от всего остального. У какого же из современных процессоров с этим лучше всего?
Процессоры.
Так как хэширование разных паролей никак не зависит друг от друга, то очень выгодно использовать какой-нибудь SIMD набор инструкций для их параллельной обработки. Лучше всего подходит SSE2 (хотя и от «старого» MMX до сих пор есть польза), позволяющий выполнять какую-либо операцию сразу с четырьмя 32-х битными операндами. В своем первом воплощении в Pentium 4 со скоростью работы SSE2 инструкций было не всё гладко (например, пересылки регистр->регистр стоили 6 тактов, а выполнение OR всего 2), но уже тогда выигрыш от их применения был вполне ощутимым. В данный же момент реализация SSE2 в Intel Core архитектуре просто великолепна: можно выполнить 3 операции за такт, причём результат будет готов уже на следующем такте (latency == 1 такт). То есть, пиковая производительность у Core составляет 12 операций с 32-х битными целыми за такт. Хотя не все операции можно выполнять на этой пиковой скорости.
Несмотря на появление новых ревизий ядра, перехода с 65nm на 45nm и, наконец, выхода Core i7, никаких заметных изменений в целочисленном ALU не произошло. Поэтому Core i7 работает практически также, как и его 65nm предок Core 2. Производительность зависит только от частоты, поэтому, например, Q6600 разогнанный до 3-х Ггц (что является вполне обычной практикой) будет ровно на 3/2.66 = 12.7% быстрее, чем Core i7 920 на штатной частоте (не считая turbo burst). Стоимость же Core i7, включая материнскую плату и память DDR3 заметно выше, чем у «старых» систем на Core 2 65/45nm.
Ситуация с AMD несколько хуже. Даже сейчас существует ещё довольно много систем с процессором Athlon XP. В своё время он очень хорошо конкурировал с P4, но вот SSE2 в нём нет. В архитектуре K8 AMD сделала поддержку SSE2, но в самом примитивном виде: 128-ми битные инструкции разбивались на две половинки и запускались на 64-х битном ALU. Что приводило к тому, что разницы между MMX кодом и SSE2 практически не было.
С появлением K10 (или Phenom) AMD наконец сделала поддержку SSE2 более достойным образом, однако Core 2 она заметно уступает. K10 может выполнить до 2-х операций с 4-мя 32-х битными целыми за такт, а результат операции будет готов только через такт (latency == 2 такта). То есть, пиковая производительность составляет 8 операций с 32-х битными целыми за такт. Что это означает в плане сравнения K10 vs Core 2: процессор от AMD будет в среднем в 1.5 раза медленнее, если мы сможем выстроить инструкции таким образом, чтобы latency не была лимитирующим фактором. В некоторых алгоритмах, учитывая ограниченное количество XMM регистров, сделать это очень непросто, а то и невозможно.
С другой стороны, не все операции Core 2 может выполнять на уровне «три за такт». Сложений можно выполнить только два, а сдвигов вообще один. K10 же умеет сдвигать два XMM регистра за такт, но уже с latency в 3 такта. Поэтому реальное соотношение производительности Core 2 vs K10 плавает где-то в районе 1.25-2x. K10 всегда медленней на задачах, которые зависят только от скорости SSE2 ALU, но может быть быстрее на алгоритмах со множеством чтений из памяти и отсутствием логических операций.
Phenom II, появившийся не так давно, отличается от просто Phenom'а гораздо меньше, чем Core i7 от Core 2 45nm. Но стоит, конечно, дороже.
Важно заметить, что в данный момент использование SSE2 является обязательным при параллельной обработке данных. Логическая операция над 32-х битным регистром или над 128-ми битным xmm регистром, содержащим четыре 32-х битных значения, выполняется за абсолютно одинаковое время. Считать на Core 2 без SSE2 это всё равно что взять GPU и отключить на нём ¾ всех потоковых процессоров.
Также, задача перебора паролей идеально распараллеливается, так как нет никакой зависимости между данными. Поэтому производительность растёт линейно в зависимости от частоты и количества ядер. Нет никакого смысла использовать «быстрый» двухядерник, если есть возможность задействовать «медленный» четырёхядерник. Иными словами, Q6600 на частоте 2.4Ггц будет работать как 4*2.4 = 9.6Ггц, а E8600 3.33 Ггц только как 3.33 * 2 = 6.66Ггц. Разница в скорости в 1.5 раза, а разница в цене примерное такая же, но в другую сторону.
Вывод: Лучшим процессором для перебора паролей в данный момент является Intel Core Quad. По соотношению цена / производительность выгоднее модели Core 2 65/45nm. Стоимость систем на Core i7 выше, а частота ничуть не лучше, чем у «старых» Core 2. Процессоры от AMD заметно отстают на SSE2 целочисленных вычислениях и при этом разница в цене между Core 2 и Phenom ничуть не компенсирует этого отставания. SSE2 обязательно к употреблению, иначе возможности современных процессоров просто не раскрыть.
Так всё-таки насколько быстро можно хэшировать?
Подробные рассчёты затрагивают слишком много деталей и требуют отдельной статьи, поэтому рассмотрим кратко только MD5. MD5_Transform состоит из 64 итераций. В каждой итерации используются похожие операции. Подробное описание можно найти, например тут – http://en.wikipedia.org/wiki/MD5.
Очень грубо скорость по количеству используемых операций можно оценить так:
Intel Core |
F |
G |
H |
I |
Логические (L) |
4 |
4 |
3 |
4 |
Сложение (A) |
4 |
4 |
4 |
4 + CMP |
Сдвиги (S) |
2 |
2 |
2 |
2 |
Пересылки (M) |
2 |
2 |
2 |
1 |
Возможное группирование инструкций |
SAL SAL AML AML |
SAL SAL AML AML |
SAL SAL AML AM. |
SAL SAL AML ACL |
256 / 4 = 64 тактов на один блок |
4 * 16 |
4 * 16 |
4 * 16 |
4 * 16 |
Ради сравнения – то же самое для AMD K10:
AMD K10 |
F |
G |
H |
I |
Логические (L) |
4 |
4 |
3 |
4 |
Сложение (A) |
4 |
4 |
4 |
4 + CMP |
Сдвиги (S) |
2 |
2 |
2 |
2 |
Пересылки (M) |
2 |
2 |
2 |
1 |
Возможное группирование инструкций |
SA SA AM AM LL LL |
SA SA AM AM LL LL |
SA SA AM AM LL L. |
SA SA AM AL CL LL |
376 / 4 = 94 тактов на один блок |
6 * 16 |
6 * 16 |
5.5 * 16 |
6 * 16 |
Конечно такая оценка не учитывает много разных факторов, однако подходит чтобы быстро понять, насколько быстро теоретически можно выполнять MD5_Transform. Опытные же результаты, как обычно, выглядят похуже. Но не так уж сильно:
MD5_Transform 72 такта в 64-х битном режиме.
MD5_Transform 90 тактов в 32-х битном режиме.
MD5_Transform в простейшей реализации на SSE2 при обработке всего 4-х блоков за раз 128 тактов.
SHA1_Transform 175 тактов в 32-х битном режиме, 162 такта в 64-х битном.
С SHA256 точного значения нет (так как используется SHA256 значительно реже), но SHA256_Transform займёт как минимум 425 тактов. Присутствие значительного бОльшего количества сдвигов и сложений скорее всего увеличит это значение.
Использование 64-х битного режима позволяет задействовать в два раза больше XMM регистров, что, в свою очередь, помогает решить проблемы с latency. Особенно сильно это влияет на MD5, где операций очень мало, так что постоянно приходится ждать результаты предыдущих вычислений, если обрабатывать всего 4 блока данных за раз.
Теоретические и практические результаты.
Ну и наконец сводная таблица, ради которой всё и затевалось. Сравнение скоростей для различных видов паролей. Были использованы:
- crark http://www.crark.net
- Advanced Archive Password Recovery http://www.elcomsoft.com/archpr.html
- Elcomsoft Wireless Security Auditor http://www.elcomsoft.com/ewsa.html
- Advanced PDF Password Recovery http://www.elcomsoft.com/apdfpr.html
- BarsWF http://3.14.by/en/md5
- Мои эксперименты с GPU, в том числе http://www.golubev.com/rargpu.htm (Хотя ARCHPR на самом деле тоже является «моим экспериментом»).
Скорость замерялась на одном ядре Intel Core 2 Q6600 @ 2.4Ггц, ATI HD4850 на штатной частоте 625Мгц, nVidia GTX 260 /w 192SP тоже на штатной частоте 1.242Ггц.
Алгоритм |
Количество блоков |
Требуется тактов |
Теоретическая скорость |
Практическая скорость |
ATI HD4850 |
x |
GTX 260 |
x |
RAR 3.x passlen = 4 |
(4 * 2 + 11) * 4096 + 17 = 77841 x SHA1 |
13 622 175 |
176 |
160(ARCHPR) 168 (crark) |
3120 |
19.5 |
2080 |
12.4 |
RAR 3.x passlen = 6 |
(6 * 2 + 11) * 4096 + 17 = 94225 x SHA1 |
16 489 375 |
145 |
134 (ARCHPR) |
2625 |
19.5 |
1695 |
12.6 |
WinZip AES |
(1000 + 1) * 2 = 2002 x SHA1 |
350350 |
6850 |
6700 |
135K |
20.1 |
- |
- |
WPA |
(4096 + 1) * 2 * 2 = 16388 x SHA1 |
2867900 |
836 |
820 |
14К |
17 |
9800 |
12 |
MS Office 2007 |
50005 x SHA1 |
8750875 |
274 |
94 |
- |
- |
3300 |
37.5 |
PDF9 |
1 x SHA256 |
- |
- |
5.09M |
- |
- |
74.4M |
14.6 |
MD5 single hash |
1 x MD5 * (45/64) |
51 |
47M |
44.5M |
891M |
20 |
563M |
12.7 |
Как видно, соотношение скоростей на GPU к скорости на CPU довольно однообразное. ATI HD4850 примерно в 20 раз быстрее одного ядра Q6600 на частоте 2.4Ггц, GTX 260 примерно в 12 раз. Значение 37.5 для Office 2007 появилось только из-за неоптимизированного CPU кода (забавно что для Office 2007 используется SSE2, но настолько неудачно, что лучше бы вообще не использовался). Скорость перебора на GPU зависит только от частоты работы ALU (всё как с CPU), скорость памяти и объём ничего не значат. Зная разницу в частоте и количество SP можно довольно точно оценить производительность разных GPU одного семейства.
Сравнивать напрямую по цене CPU и GPU довольно глупо – видеокарта не может работать самостоятельно, да и CPU тоже. Системы с двумя и более процессорами сразу уводят нас на другой уровень цен, в то время как нет никакого экономического смысла рассматривать эти (серверные) процессоры с большим L2 кэшем для задач перебора паролей. С GPU же ограничивающим фактором является количество PCI-E разъёмов на материнской плате. На самых простейших платах он всего один, на большинстве – два. Материнские платы с 4-мя разъёмами уже довольно редки. Причём нужно не только 4 разъёма, но ещё и место под сами карты – занимают-то они обычно 2 слота. 4 раза по 2 слота встречается, судя по всему, только у MSI K9A2 Platinum. Есть 6-ти слотовый P6T6 WS Revolution, но там могут поместиться только «одинарные» карты.
Похоже, собрать систему с 4-мя ATI HD4870x2 невозможно в принципе (неплохое описание всех возникающих проблем тут: http://forums.guru3d.com/showthread.php?p=2862271). Системы с 4-мя двойными nVidia картами существуют (например http://fastra.ua.ac.be/en/specs.html), но проблем и там хватает. Начиная с мощного блока питания и корпуса, куда можно всё нормально поместить и заканчивая установкой драйверов.
В итоге получается такой список с точкой отсчёта производительности на 4-х ядрах Q6600 на частоте 2.4Ггц:
Название |
Частота, кол-во ядер |
Соотношение |
Цена CPU или GPU |
Общая цена системы |
E2160 |
1.8 x 2 |
0.38x |
? |
<$300 |
Q6600 |
2.4 x 4 |
1x |
$220 |
~$600 |
nVidia 8600 GT |
1.188 x 32 |
0.5x |
? |
~$650 |
nVidia 9800 GT |
1.242 x 112 |
1.75x |
$120 |
~$720 |
ATI HD4770 |
0.75 x 640 |
5x |
$100 |
~$700 |
ATI HD4850 |
0.625 x 800 |
5x |
$120 |
~$720 |
nVidia GTX295 |
1.242 x 240 x 2 |
7.5x |
$500 |
~$1200 |
ATI HD4870x2 |
0.75 x 800 x 2 |
12x |
$400 |
~$1100 |
4x ATI HD4770 |
0.75 x 640 x 4 |
20x |
$400 |
~$1200 |
2x ATI HD4870x2 |
0.75 x 800 x 2 x 2 |
24x |
$800 |
~$1600 |
4x nVidia GTX295 |
1.242 x 240 x 2 x 4 |
30x |
$2000 |
>$3000 |
TACC1441 FPGA |
? |
2.4x |
$4000 |
~$4500 |
Для систем с медленными GPU (вроде 8600 GT) имеет смысл считать производительность как CPU+GPU (что тут сделано не было). Для быстрых же GPU процессор будет загружен дополнительными рассчётами и синхронизацией задач, так что считать дополнительно на нём просто не имеет смысла. В некоторых случаях четырёхядерного процессора может и не хватить для систем с 8-ю GPU.
Как видно, самым интересным решением в плане цена/производительность является связка из 4-х HD4770. Однако, опять же, требуется материнская плата, где можно разместить 4 такие карты – несмотря на то, что HD4770 одночиповая карта, система охлаждения занимает дополнительный слот.
TACC1441 приведён для примера в качестве «железного» решения. Это плата на основе FPGA, поддерживается ПО от AccessData (http://www.forensic-computers.com/TACC1441.php). Как видно, никакой конкуренции современным GPU он составить не может.
Осталась одна «маленькая» проблема – практическое полное отсутствие ПО для карт ATI. Карты от nVidia поддерживаются в ElcomSoft's Distributed Password Recovery, а вот с ATI пока всё совсем плохо.
Вывод: прирост в производительности от использования одного GPU примерно 4х-5ти кратный по сравнению с современной четырёхядерной системой. Карты от ATI заметно быстрее при той же цене, однако для них практически нет ПО. При росте количества GPU в системе нелинейно растут проблемы – появляется потребность в мощном блоке питания, специальном корпусе, эффективной системе охлаждения и т.д.
А почему такой маленький прирост?!
TACC1441 обещает 60-ти кратный прирост. EDPR декларирует 100x и 200x. Почему же тут получилось «только» 30? Ответ прост: маркетологи и пиарщики тоже работают. Сравнивая неоптимизированный CPU код на системе начального уровня с top решением на 4xGTX295 можно получить совершенно потрясающий результат. Например такой: E2160 1.8Ггц vs 4xGTX295 для документа MS Office 2007 в EDPR == прирост в 229 раз!
Вывод: всегда полезно думать самому.
Какие пароли можно считать стойкими?
Алгоритм |
Длина |
Набор символов |
Количество вариантов |
Время перебора на «обычной системе» Q6600 + HD4770 |
Время перебора на системе 4xGTX295 |
Время перебора на суперкластере 100x 4xGTX295 |
RAR 3.x |
4 |
Латинские маленькие + большие + цифры + спецсимволы |
96^4 = 84934656 |
7.6 часов |
1.5 часа |
45 сек |
RAR 3.x |
6 |
Латинские маленькие + большие + цифры + спецсимволы |
96^6 = 782757789696 |
8 лет |
1.33 лет |
5 дней |
WPA |
8 |
Латинские маленькие + большие + цифры |
62^8 = 218340105584896 |
495 лет |
82 лет |
300 дней |
WinZip 9+ |
8 |
Латинские маленькие + большие + цифры |
62^8 = 218340105584896 |
51 год |
8.5 лет |
31 год |
Вывод: неутешительный для brute-force атаки. При правильно выбранном пароле из 8-ми символов подобрать его в осмысленное время просто невозможно.

Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.
Последние комментарии
Популярно:
Разделы статей:
Подскажите. подключение с ПК все работает все ок. Делал по вашей мурзилке.
Но при подключе...