Làm cách nào để buộc vòng / phút và yum không thành công nếu thiếu chữ ký GPG hoặc không thể xác minh được?


7

Làm cách nào tôi có thể buộc rpmyumthất bại nếu thiếu chữ ký GPG trong gói hoặc nếu không thì không thể xác minh do thiếu khóa? Đối với ví dụ dưới đây, giả sử RPM đã được ký nhưng khóa chưa được cài đặt.

Với RPM tôi thấy một cảnh báo, nhưng tôi muốn điều này thất bại để tôi buộc phải cài đặt khóa ký thủ công.

# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-c105b9de-4e0fd3a3 --> gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>)

# rpm -ivh http://yum.example.com/company-release-el-6.noarch.rpm
Retrieving http://yum.example.com/company-release-el-6.noarch.rpm
warning: /var/tmp/rpm-tmp.3VmFk2: Header V4 RSA/SHA1 Signature, key ID 3bd6ec30: NOKEY
Preparing...                ########################################### [100%]
    1:company-release     ########################################### [100%]

Với yum, tôi thấy không có cảnh báo nào liên quan đến thực tế là khóa ký không được cài đặt.

# yum install -vy http://yum.example.com/company-release-el-6.noarch.rpm

Có cờ bổ sung nào tôi có thể chuyển cho các lệnh này hoặc cài đặt cấu hình tôi có thể sửa đổi để thay đổi hành vi không? Hoặc tôi phải tải xuống RPM và chạy rpm --checksigtrước khi cài đặt?

Câu trả lời:


4

Điểm chính để hiểu về việc kiểm tra GPG cho các gói là chữ ký GPG được nhúng trong gói và các khóa GPG được lưu trữ trong rpmdb. Không có API an toàn để hỏi "Khóa X được ký với khóa nào", bạn chỉ có thể hỏi "Gói X có được ký với khóa trong rpmdb không" và "Khóa Y có tồn tại trong rpmdb không". Cũng lưu ý rằng điều này có nghĩa là một gói chỉ có thể được ký bằng một khóa và việc thay đổi chữ ký sẽ thay đổi các gói.

Yum thực hiện một số bước khi tải xuống gói từ kho lưu trữ được định cấu hình với "gpgcheck = 1" (mặc định).

  1. Sau khi gói đầu tiên từ kho lưu trữ được tải xuống, một lệnh "đơn giản là gói này được ký với một gpgkey đã biết" được thực hiện. Nếu có, không có gì được thực hiện. Nếu đó không phải là một cảnh báo được hiển thị cho người dùng. Đây hoàn toàn là thông tin.

  2. Trước khi giao dịch bắt đầu, hãy kiểm tra xem gói có được ký với một gpgkey đã biết không (gói đã được cài đặt trong rpmdb), nếu đó là gói hợp lệ và không có bước nào khác được thực hiện. Nếu không thì nó tiếp tục # 3.

  3. Yum tải xuống tất cả các tệp được cung cấp trong dữ liệu "gpgkey" cho kho lưu trữ mà gói đến từ đó. Yum phân tích cú pháp đó, bỏ qua bất kỳ khóa nào đã có trong rpmdb. Nếu không có chìa khóa mới, yum sẽ thất bại.

  4. Nếu có một "gpgddingy" được chỉ định cho kho lưu trữ, thì yum sẽ tải xuống tất cả các tệp được cung cấp trong dữ liệu "gpgddingy". Yum phân tích cú pháp đó, bỏ qua bất kỳ khóa nào đã có trong kho lưu trữ khóa gpg đó. Nếu không có gpgddingys được cài đặt sau khi phân tích tệp, yum sẽ thất bại. Nếu có gpgddingys mới, thì nếu chúng đã được nhập dưới dạng khóa CA cho một repo khác. chúng được nhập tự động. Nếu đây là tiem đầu tiên chúng ta đã thấy khóa CA này, người dùng sẽ được hỏi liệu anh ta có muốn cài đặt khóa không (trừ khi được đưa ra). Nếu anh ta nói không với bất kỳ khóa nào , yum sẽ thất bại (mặc dù tất cả các khóa đã nhập vẫn nằm trong khóa repo. Gpg).

  5. Nếu có ít nhất một "gpgddingy" hợp lệ, yum sẽ cố tải xuống tệp "gpgkey" .asc. Nếu điều đó không tồn tại, yum chuyển sang bước # 6 như thể không có gpgddingy. Nếu nó tồn tại thì "gpgkey" được kiểm tra dựa trên "gpgddingy" và nếu nó vượt qua nó được thêm vào rpmdb, nếu nó thất bại thì yum thất bại (mặc dù tất cả các khóa được nhập vẫn ở trong rpmdb).

  6. Nếu có gpgkey mới, thì người dùng sẽ được hỏi liệu anh ta có muốn cài đặt từng khóa không (trừ khi được đưa ra). Nếu anh ta nói không với bất kỳ chìa khóa nào , yum sẽ thất bại.

  7. Sau khi cài đặt bất kỳ khóa mới nào, yum một lần nữa kiểm tra chữ ký gói đối với các gpgkey trong rpmdb. Nếu thất bại, yum thất bại.


2

Đặt localpkg_gpgcheck=1trong /etc/yum.conf và đảm bảo bạn luôn yum để cài đặt rpms.

Nếu bạn có một vòng / phút trên hệ thống tập tin cục bộ, hãy làm

yum install <rpm-on-local-filesys>

Hãy chắc chắn rằng bạn cũng đặt những thứ này trong tất cả các repos trong /etc/yum.repos.d

gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/SOME-APPROVED-GPG-KEY

Như bạn đã đề cập, tốt nhất bạn sẽ thoát khỏi cài đặt qua vòng / phút là một cảnh báo và không có cách nào để định cấu hình nó để từ chối cài đặt trên khóa GPG không có mặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.