Summary: | Enable RPM signature verification | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Vitaly Chikunov <vt> |
Component: | rpm | Assignee: | placeholder <placeholder> |
Status: | NEW --- | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | alexey.tourbin, at, glebfm, imz, iv, lav, ldv, manowar, placeholder, vt |
Version: | unstable | ||
Hardware: | x86 | ||
OS: | Linux |
Description
Vitaly Chikunov
2021-07-31 03:04:44 MSK
Verifying individual signatures is redundant. When you update from a repo, its release file is signed. The release file references pkglist, and pkglist references individual packages. Since those references must be cryptographically-strong, there is no point in verifying the signatures of each individual package. The top-level signature covers it all. As an analogy, in git, you don't sign individual blobs. Есть, как минимум, два не покрытых сценария. 1) Инсталляция в обход `apt-get` через `rpm -i`. Например, в `epm` используется `rpm -U`. 2) Желание пользователя подтвердить принадлежность скачанного когда-то или откуда-то rpm'а. Коме того, если пакет в репозитории обновился, то pkglist уже не ссылается на этот rpm. (In reply to Vitaly Chikunov from comment #2) > Есть, как минимум, два не покрытых сценария. Наверняка найдутся и другие редкие сценарии. Например, для girar я сделал обёртку под названием alt-rpmkeys-checksig, которая поддерживает и rpm-4.0.4, и более новый rpm. > 1) Инсталляция в обход `apt-get` через `rpm -i`. Есть много способов испортить себе систему в обход `apt-get`. Просто не надо использовать `rpm -i` для обработки untrusted input. > Например, в `epm` используется `rpm -U`. В таком случае `epm` должен обеспечивать проверку того, что отдаётся на вход `rpm -U`. > 2) Желание пользователя подтвердить принадлежность скачанного когда-то или > откуда-то rpm'а. Коме того, если пакет в репозитории обновился, то pkglist > уже не ссылается на этот rpm. Пользователи, желающие странного, найдут способ этого добиться. (Ответ для Dmitry V. Levin на комментарий #3) > (In reply to Vitaly Chikunov from comment #2) > > Есть, как минимум, два не покрытых сценария. > > Наверняка найдутся и другие редкие сценарии. > Например, для girar я сделал обёртку под названием alt-rpmkeys-checksig, > которая поддерживает и rpm-4.0.4, и более новый rpm. > > > 1) Инсталляция в обход `apt-get` через `rpm -i`. > > Есть много способов испортить себе систему в обход `apt-get`. > Просто не надо использовать `rpm -i` для обработки untrusted input. > > > Например, в `epm` используется `rpm -U`. > > В таком случае `epm` должен обеспечивать проверку того, что отдаётся на вход > `rpm -U`. Как я понимаю, что сейчас мы имеем только доверие к репозиторию, это проверка на уровне apt. То есть подпись самого пакета не проверяется ни в каком случае. Существует ли способ включить для rpm эту проверку, чтобы можно было устанавливать доверенные пакеты, поставляемые вне репозиториев? То есть тут речь о сторонних поставщиках решений для ALT. (Ответ для Vitaly Lipatov на комментарий #4) > Существует ли способ включить для rpm эту проверку, чтобы можно было > устанавливать доверенные пакеты, > поставляемые вне репозиториев? Похоже, что для этого достаточно обнулить тег %__vsflags (записать туда 0x00000), и выставить ещё один тег --- %_keyringpath (например, в /var/lib/rpm), а затем по этому пути положить один или несколько файлов *.key, с публичными ключами в формате PGP (GPG). Они у нас лежат в пакете alt-gpgkeys. После этого программа rpmverify начинает работать как ожидается. Причём, в режиме -vv показывает информацию о контрольных суммах и подписях, результатах их проверки. # tail -n +486 /usr/lib/rpm/macros | head -2 %__vsflags 0x00000 %_keyringpath /var/lib/rpm gpg --import /usr/lib/alt-gpgkeys/pubring.gpg gpg --armor --export ff979dedda2773bb >/var/lib/rpm/alt-sisyphus.key # /usr/bin/rpmverify -vv zlib ... D: loading keyring from pubkeys in /var/lib/rpm/*.key ufdio: 1 reads, 2407 total bytes in 0.000002 secs D: added key /var/lib/rpm/alt-sisyphus.key to keyring D: read h# 231 Заголовок V4 RSA/SHA512 Signature, key ID da2773bb: OK D: ========== +++ zlib-1.3.1-alt1 x86_64/linux 0x0 D: read h# 75 Заголовок V4 RSA/SHA512 Signature, key ID da2773bb: OK D: Requires: libc.so.6(GLIBC_2.14)(64bit) ДА (db provides) D: Requires: libc.so.6(GLIBC_2.2.5)(64bit) ДА (db provides) D: Requires: libc.so.6(GLIBC_2.3.4)(64bit) ДА (db provides) D: Requires: libc.so.6(GLIBC_2.4)(64bit) ДА (db provides) D: Requires: rtld(GNU_HASH) ДА (db provides) D: Requires: rpmlib(PayloadIsLzma) ДА (rpmlib provides) D: Conflicts: libxml2 < 1:2.7.7 НЕT ......... /lib64/libz.so.1 ufdio: 2 reads, 117312 total bytes in 0.000096 secs ......... /lib64/libz.so.1.3.1 ......... /usr/share/doc/zlib-1.3.1 ufdio: 2 reads, 1002 total bytes in 0.000290 secs ......... d /usr/share/doc/zlib-1.3.1/LICENSE ufdio: 2 reads, 5317 total bytes in 0.000205 secs ......... d /usr/share/doc/zlib-1.3.1/README ... |