
|
 |
Коментар от: Beco vlk__at__lcpe[ точка ]uni-sofia[ точка ]bg |
Дата: 19-12-2004 |
[ Други коментари] |
Цитирам:
****************************************
При Gentoo си има md5(sum) проверка. Което мисля е достатъчно да по/за -твърди , че кода/пакета е този , който трябва да бъде (непроменен). Може и да не е толкова съвършено , колкото представяш сегашната версия на RPМ, но опрелдено не е " "к'ъв да е пач" от някъде си " .!
****************************************
Ммммм.. не искам да влизам в тежък спор но..
Една MD5 или SHA1 сума може да се използва само за да се провери дали файла е цял и не е повреден. Но да се установи идентичността му е невъзможно по този метод.
Представи си сега, че аз успея да пробия огледалото, от което ти сваляш файловете, да поставя фалшив пакет (примерно OpenSSH, който съм модифицирал за да мога да влизам в системата ти). Какъв е проблемът аз да изчисля MD5 сумата на файловете и да ги сложа във файла със сумите. Щом за теб MD5 сумата е меродавно доказателство за идентичността на файл или блок данни, то трябва да направиш сериозна преоценка на знанията си. И според мен твоята система е супер несигурна - ако ти предлагаш примерно на мен хостинг в/у твоята система, аз ще подмина офертата ти с усмивка, защото твоята система няма никаква идентичност.
По същата логика няма нито една система с Debian, която да е доказано автентична. Чак сега в Debian се появява система за електронно подписване на пакети (и то още е unstable).
Истината е следната. Една MD5 сума без електронен подпис върху нея е най-измамното нещо, което има на света. Не само това, тя е подвеждаща, защото върху нея няма никаква идентификация на това кой я е извършил. Затова при електронното подписване на един файл се изчислява MD5 или SHA1 сумата и получения резултат се подписва с RSA или DSA частен ключ (проверката се прави с публичния ключ в OpenPGP сертификата на подписващия). Такъв подпис има смисъл.
Сега се връщаме на пакетната система и смъсъла от интегация.
Имаме два варианта на реализация:
1) Подписва се файла с MD5 сумите на пакетните файлове (архиви)
Примерната схема може да се представи така:
Дистрибутора прозивежда архивен файл (примерно tar.gz). Изчислява електронния подпис на файла и го прибавя в общ файл или в отделен файл (т.е. за всеки архивен файл има друг отделен файл, който е примерно с наставка .asc и съдържа електронния подпис). Друг вариант на тази схема е дистрибутора да поддържа файл, в който се прибавят изчислените MD5 или SHA1 сумите на произведените от него архивни файлове. Той подписва електронно този файл.
Как потребителят трябва да процедира? Потребителят процедира по следния начин: сдобива се с файла, който съдържа MD5 или SHA1 сумите и електронния подпис върху него, или с електронния подпис към архивите, които е в отделен файл за всеки архивен файл. Проверява електронния подпис и след това инсталира.
Тук следва една много основна слабост на тази схема. Не може да се следи състоянието на файловете от архива след като те бъдат инсталирани в системата. Т.е. примерно инсталраш OpenSSH, но след това не можеш да кажеш дали файла /usr/sbin/sshd примерно не е подменен в собствената ти систама - да, можеш да вземш пак архива, който го съдържа, да извадиш този файл и да го сравниш като MD5 или SHA1 сума с този в твоята система. За целта ще трябва да имаш локално копие на всички пакети, ако искаш да можеш да следиш състоянието на файловете от пакета.
Една малко по-лесна поправка е след инсталирането на файловете от архива, за всеки архив да се прави файл, който да съдържа MD5 или SHA1 сумите на файловете екстрктирани от архива. Това решение си е доста тромавично, освен това ще ти се налага да подписваш електронно всеки файл.. при обовняване на системата.. ще се скъсаш да си въвеждаш паролата за частния ключ.
Накратко този вариант е малко не съвсем в час с технологиите и принципите за бързина. При него има опасност от наследени козии, но не мога да пиша цяла нощ за това.
2) Вариантът на пакетната система RPM
Съставя се CPIO архив с "жива" файлова система (т.е. 1:1 както тя ще бъде копирана спрямо посочения от администратора относителен спрямо "/" път). Прави се интегриран подпис над CPIO архива и останалите файлове (инфо, пре и постинсталационни скриптове) и този подпис остава в пакета. Т.е. това не е допълнителен файл или допълнителен запис в някакъв единен файл. М/у другото на всеки файл от "живата" файлова система в CPIO се прави MD5 сума и тя се подпива - информацията за това се намира също в RPM файла.
Потребителят трябва да процедира така: снабдява се с OpenPGP сертфиката на дистрибутора на пакета, инсталира го в специална база (BerkeleyDB формат), която е интегрирана в RPM пакетната система на локалната машина. При инсталацията се прави проверка на електронния подпис интегриран в пакета и при несъотетствие не се разрешава инсталиране. Цялата информация за MD5 сумите на инсталираните в системата файлове се влага в базата с данни на RPM системата.
След това много лесно и бързо може да се направи пълен анализ на автентичността на инсталираните файлове и много лесно да се забележи подмяната.
Специално за RPM.. Хайде да направим един тест за проверка на интеграцията.. Примерно за пакета bind:
$ rpm -q -vv --verify bind
D: opening db index /var/lib/rpm/Packages rdonly mode=0x0
D: locked db index /var/lib/rpm/Packages
D: opening db index /var/lib/rpm/Name rdonly mode=0x0
D: opening db index /var/lib/rpm/Pubkeys rdonly mode=0x0
D: read h# 750 Header sanity check: OK
D: ========== DSA pubkey id b44269d04f2a6fd2
D: read h# 713 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: ========== +++ bind-9.2.4-2 i386/linux 0x1
D: opening db index /var/lib/rpm/Depends create mode=0x0
D: opening db index /var/lib/rpm/Basenames rdonly mode=0x0
D: read h# 752 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: /bin/bash YES (db files)
D: Requires: /bin/sh YES (db files)
D: Requires: /bin/sh YES (cached)
D: Requires: /bin/sh YES (cached)
D: Requires: /bin/sh YES (cached)
D: Requires: /bin/sh YES (cached)
D: Requires: /bin/sh YES (cached)
D: read h# 778 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: /bin/usleep YES (db files)
D: opening db index /var/lib/rpm/Providename rdonly mode=0x0
D: read h# 207 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: bind-utils YES (db provides)
D: read h# 15 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: chkconfig YES (db provides)
D: Requires: config(bind) = 20:9.2.4-2 YES (added provide)
D: Requires: config(bind) = 20:9.2.4-2 YES (db provides)
D: read h# 72 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: fileutils YES (db provides)
D: read h# 11 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: glibc >= 2.2 YES (db provides)
D: read h# 931 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: grep YES (db provides)
D: Requires: libc.so.6 YES (db provides)
D: Requires: libc.so.6(GLIBC_2.0) YES (db provides)
D: Requires: libc.so.6(GLIBC_2.1) YES (db provides)
D: Requires: libc.so.6(GLIBC_2.1.1) YES (db provides)
D: Requires: libc.so.6(GLIBC_2.1.3) YES (db provides)
D: Requires: libc.so.6(GLIBC_2.3) YES (db provides)
D: read h# 80 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libcrypto.so.4 YES (db provides)
D: read h# 206 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libdns.so.16 YES (db provides)
D: Requires: libisc.so.7 YES (db provides)
D: Requires: libisccc.so.0 YES (db provides)
D: Requires: libisccfg.so.0 YES (db provides)
D: Requires: liblwres.so.1 YES (db provides)
D: Requires: libnsl.so.1 YES (db provides)
D: Requires: libpthread.so.0 YES (db provides)
D: Requires: libpthread.so.0(GLIBC_2.0) YES (db provides)
D: Requires: rpmlib(CompressedFileNames) <= 3.0.4-1 YES (rpmlib provides)
D: Requires: rpmlib(PartialHardlinkSets) <= 4.0.4-1 YES (rpmlib provides)
D: Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 YES (rpmlib provides)
D: read h# 87 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: sed YES (db provides)
D: read h# 922 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: shadow-utils YES (db provides)
D: Requires: textutils YES (db provides)
D: opening db index /var/lib/rpm/Conflictname rdonly mode=0x0
D: closed db index /var/lib/rpm/Depends
......... c /etc/logrotate.d/named
......... c /etc/rc.d/init.d/named
..?...... c /etc/rndc.conf
........C c /etc/rndc.key
S.5....T. c /etc/sysconfig/named
......... /usr/sbin/dns-keygen
......... /usr/sbin/dnssec-keygen
......... /usr/sbin/dnssec-makekeyset
......... /usr/sbin/dnssec-signkey
......... /usr/sbin/dnssec-signzone
......... /usr/sbin/lwresd
......... /usr/sbin/named
......... /usr/sbin/named-bootconf
......... /usr/sbin/named-checkconf
......... /usr/sbin/named-checkzone
......... /usr/sbin/rndc
......... /usr/sbin/rndc-confgen
......... /usr/share/doc/bind-9.2.4
......... d /usr/share/doc/bind-9.2.4/CHANGES
......... d /usr/share/doc/bind-9.2.4/COPYRIGHT
......... d /usr/share/doc/bind-9.2.4/README
......... /usr/share/doc/bind-9.2.4/arm
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM-book.xml
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch01.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch02.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch03.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch04.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch05.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch06.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch07.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch08.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch09.html
......... d /usr/share/doc/bind-9.2.4/arm/Bv9ARM.html
......... d /usr/share/doc/bind-9.2.4/arm/Makefile
......... d /usr/share/doc/bind-9.2.4/arm/Makefile.in
......... d /usr/share/doc/bind-9.2.4/arm/README-SGML
......... d /usr/share/doc/bind-9.2.4/arm/isc.color.gif
......... d /usr/share/doc/bind-9.2.4/arm/nominum-docbook-html.dsl
......... d /usr/share/doc/bind-9.2.4/arm/nominum-docbook-html.dsl.in
......... d /usr/share/doc/bind-9.2.4/arm/nominum-docbook-print.dsl
......... d /usr/share/doc/bind-9.2.4/arm/nominum-docbook-print.dsl.in
......... d /usr/share/doc/bind-9.2.4/arm/validate.sh
......... d /usr/share/doc/bind-9.2.4/arm/validate.sh.in
......... /usr/share/doc/bind-9.2.4/misc
......... d /usr/share/doc/bind-9.2.4/misc/Makefile
......... d /usr/share/doc/bind-9.2.4/misc/Makefile.in
......... d /usr/share/doc/bind-9.2.4/misc/dnssec
......... d /usr/share/doc/bind-9.2.4/misc/format-options.pl
......... d /usr/share/doc/bind-9.2.4/misc/ipv6
......... d /usr/share/doc/bind-9.2.4/misc/migration
......... d /usr/share/doc/bind-9.2.4/misc/migration-4to9
......... d /usr/share/doc/bind-9.2.4/misc/options
......... d /usr/share/doc/bind-9.2.4/misc/rfc-compliance
......... d /usr/share/doc/bind-9.2.4/misc/roadmap
......... d /usr/share/doc/bind-9.2.4/misc/sdb
......... d /usr/share/man/man5/named.conf.5.gz
......... d /usr/share/man/man5/rndc.conf.5.gz
......... d /usr/share/man/man8/dnssec-keygen.8.gz
......... d /usr/share/man/man8/dnssec-makekeyset.8.gz
......... d /usr/share/man/man8/dnssec-signkey.8.gz
......... d /usr/share/man/man8/dnssec-signzone.8.gz
......... d /usr/share/man/man8/lwresd.8.gz
......... d /usr/share/man/man8/named-checkconf.8.gz
......... d /usr/share/man/man8/named-checkzone.8.gz
......... d /usr/share/man/man8/named.8.gz
......... d /usr/share/man/man8/rndc-confgen.8.gz
......... d /usr/share/man/man8/rndc.8.gz
......... /var/named
missing /var/named/data
missing /var/named/slaves
......... /var/run/named
D: closed db index /var/lib/rpm/Pubkeys
D: closed db index /var/lib/rpm/Conflictname
D: closed db index /var/lib/rpm/Providename
D: closed db index /var/lib/rpm/Basenames
D: closed db index /var/lib/rpm/Name
D: closed db index /var/lib/rpm/Packages
Задачка-закачка:) Открийте кои файлове са променени:) Ясно си личи...
Хайде сега да проверим контекстната интеграция със SELinux за този пакет:
# rpm -q --fscontext bind
/etc/logrotate.d/named system_u:object_r:etc_t
/etc/rc.d/init.d/named system_u:object_r:initrc_exec_t
/etc/rndc.conf system_u:object_r:named_conf_t
/etc/rndc.key user_u:object_r:etc_t
/etc/sysconfig/named system_u:object_r:etc_t
/usr/sbin/dns-keygen system_u:object_r:sbin_t
/usr/sbin/dnssec-keygen system_u:object_r:sbin_t
/usr/sbin/dnssec-makekeyset system_u:object_r:sbin_t
/usr/sbin/dnssec-signkey system_u:object_r:sbin_t
/usr/sbin/dnssec-signzone system_u:object_r:sbin_t
/usr/sbin/lwresd system_u:object_r:named_exec_t
/usr/sbin/named system_u:object_r:named_exec_t
/usr/sbin/named-bootconf system_u:object_r:sbin_t
/usr/sbin/named-checkconf system_u:object_r:sbin_t
/usr/sbin/named-checkzone system_u:object_r:sbin_t
/usr/sbin/rndc system_u:object_r:ndc_exec_t
/usr/sbin/rndc-confgen system_u:object_r:sbin_t
/usr/share/doc/bind-9.2.4 system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/CHANGES system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/COPYRIGHT system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/README system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM-book.xml system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch01.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch02.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch03.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch04.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch05.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch06.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch07.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch08.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.ch09.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Bv9ARM.html system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Makefile system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/Makefile.in system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/README-SGML system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/isc.color.gif system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/nominum-docbook-html.dsl system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/nominum-docbook-html.dsl.in system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/nominum-docbook-print.dsl system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/nominum-docbook-print.dsl.in system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/validate.sh system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/arm/validate.sh.in system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/Makefile system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/Makefile.in system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/dnssec system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/format-options.pl system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/ipv6 system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/migration system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/migration-4to9 system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/options system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/rfc-compliance system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/roadmap system_u:object_r:usr_t
/usr/share/doc/bind-9.2.4/misc/sdb system_u:object_r:usr_t
/usr/share/man/man5/named.conf.5.gz system_u:object_r:man_t
/usr/share/man/man5/rndc.conf.5.gz system_u:object_r:man_t
/usr/share/man/man8/dnssec-keygen.8.gz system_u:object_r:man_t
/usr/share/man/man8/dnssec-makekeyset.8.gz system_u:object_r:man_t
/usr/share/man/man8/dnssec-signkey.8.gz system_u:object_r:man_t
/usr/share/man/man8/dnssec-signzone.8.gz system_u:object_r:man_t
/usr/share/man/man8/lwresd.8.gz system_u:object_r:man_t
/usr/share/man/man8/named-checkconf.8.gz system_u:object_r:man_t
/usr/share/man/man8/named-checkzone.8.gz system_u:object_r:man_t
/usr/share/man/man8/named.8.gz system_u:object_r:man_t
/usr/share/man/man8/rndc-confgen.8.gz system_u:object_r:man_t
/usr/share/man/man8/rndc.8.gz system_u:object_r:man_t
/var/named system_u:object_r:named_zone_t
/var/named/data system_u:object_r:named_cache_t
/var/named/slaves system_u:object_r:named_cache_t
/var/run/named system_u:object_r:named_var_run_t
Ако желаем да променим контекста - няма проблеми, има опция --recontext
Редактиран на: 19-12-2004@18:30
|
<< Към: Към: Към: Към: Към: Към: Към: Към: Ше | Към: Към: Към: Към: Към: Към: Към: Към: Къ >> |
|
 |
|
|
|
|
|
|