وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

رفع خطای EXPKEYSIG در اوبونتو؛ کلید منقضی مخزن را چطور به‌روز کنیم؟

آموزش تشخیص مخزن دارای امضای منقضی، بررسی ساعت و جایگزینی امن کلید امضای مخزن در اوبونتو.

انتشار:
توسط تیم فنی نت‌آرام
۸ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله رفع خطای EXPKEYSIG در اوبونتو؛ کلید منقضی مخزن را چطور به‌روز کنیم؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
وقتی apt update را روی اوبونتو اجرا می‌کنید، کنار نام یک مخزن پیام EXPKEYSIG دیده می‌شود. برنامه APT با این پیام می‌گوید امضای دریافت‌شده با کلیدی همراه است که از نظر آن منقضی شده است. تا این موضوع حل نشود، اطلاعات تازه آن مخزن قابل اعتماد نیست و ممکن است سیستم از فهرست قبلی استفاده کند.
این خطا دلیل نمی‌شود بررسی امضا را خاموش کنیم. اول باید بفهمیم کدام مخزن خطا داده و آیا ساعت سرور درست است؛ بعد کلید همان مخزن را از منبع رسمی و به روش مناسب آن به‌روز کنیم. کلید عمومی مانند رمز ورود شما نیست، ولی اعتماد به کلید اشتباه می‌تواند راه نصب بسته دستکاری‌شده را باز کند.
برای این راهنما به SSH و دسترسی sudo نیاز دارید. دستورهای مثال برای Ubuntu و APT هستند. مخزن Docker فقط یک نمونه واقعی برای توضیح مراحل است؛ اگر خطا مربوط به مخزن دیگری است، کلید Docker را جایگزین کلید آن مخزن نکنید.

۱. خطا مربوط به کدام مخزن است؟

ابتدا فهرست مخزن‌ها را به‌روزرسانی کنید:
کد / دستورsudo apt-get update
خط حاوی EXPKEYSIG، شناسه کلید و نشانی مخزن نزدیک به آن را یادداشت کنید. برای مثال اگر نشانی مربوط به download.docker.com باشد، باید تنظیم مخزن Docker را پیدا کنید. اگر مخزن رسمی Ubuntu یا یک نرم‌افزار دیگر خطا داده، مسیر آن متفاوت خواهد بود.
پیام‌های مشابه را یکی نگیرید: NO_PUBKEY به پیدا نشدن کلید لازم اشاره دارد؛ EXPKEYSIG به امضایی با کلید منقضی مربوط است؛ پیام انقضای Release file می‌تواند به زمان اعتبار اطلاعات مخزن یا ساعت سرور مربوط باشد. همچنین تمام شدن دستور با چند سطر Hit به معنی موفقیت همه مخزن‌ها نیست؛ هشدارهای انتهای خروجی را هم بخوانید.

۲. ساعت و نسخه سیستم را کنترل کنید

کد / دستورdate -u
این دستور زمان UTC سرور را نشان می‌دهد. آن را با یک منبع زمانی معتبر مقایسه کنید؛ اختلاف منطقه زمانی به‌تنهایی مشکل نیست، چون این خروجی UTC است. وضعیت ساعت را هم ببینید:
کد / دستورtimedatectl status
اگر زمان واقعاً غلط است، تنظیم همگام‌سازی زمان را با توجه به محیط سرور اصلاح کنید. در سیستمی که سرویس زمان مناسبی در اختیار دارد، دستور زیر درخواست فعال شدن همگام‌سازی را می‌دهد:
کد / دستورsudo timedatectl set-ntp true
سپس دوباره timedatectl status و date -u را اجرا کنید. فعال بودن گزینه لزوماً یعنی زمان با موفقیت همگام شده نیست؛ وضعیت همگام‌سازی و دسترسی سرویس زمان را نیز ببینید. در بعضی ماشین‌ها یا کانتینرها ساعت توسط میزبان مدیریت می‌شود و این دستور داخل مهمان کار نمی‌کند. اگر ساعت را اصلاح کردید، sudo apt-get update را دوباره اجرا کنید؛ اگر خطا رفع شد نیازی به تعویض کلید نیست.
نسخه Ubuntu را برای پیدا کردن دستور سازگار در مستند سازنده ببینید:
کد / دستورcat /etc/os-release

۳. فایل تنظیم و محل کلید را پیدا کنید

برای مثال مخزن Docker، این دستور فایل‌هایی را که نشانی آن را دارند نشان می‌دهد:
کد / دستورgrep -R -n -F 'download.docker.com' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
اگر آدرس مخزن شما چیز دیگری است، عبارت جست‌وجو را با نام دامنه همان مخزن عوض کنید. خروجی می‌تواند شامل اطلاعات خصوصی یک مخزن سازمانی باشد؛ آن را بدون حذف اطلاعات محرمانه منتشر نکنید.
فایل نمایش‌داده‌شده را بخوانید. در فرمت قدیمی .list، گزینه signed-by= داخل خط deb می‌آید؛ در فرمت جدید .sources معمولاً خطی با نام Signed-By: وجود دارد. این گزینه می‌تواند مسیر فایل کلید، اثرانگشت یا حتی کلید داخل فایل تنظیمات باشد. برای دیدن فایل نمونه Docker، فقط اگر همین مسیر در خروجی شما وجود داشت:
کد / دستورcat /etc/apt/sources.list.d/docker.sources
اگر مقدار مؤثر Signed-By: /etc/apt/keyrings/docker.asc است، نمونه مرحله بعد قابل استفاده است. اگر فایل شما docker.list است، مسیر دیگری دارد، یا کلید توسط یک بسته در /usr/share/keyrings مدیریت می‌شود، دستور جایگزینی نمونه را بدون تطبیق اجرا نکنید. چند ورودی یکسان با تنظیم‌های ناسازگار هم می‌توانند خطای دیگری بسازند؛ حذف کورکورانه فایل‌ها راه تشخیص نیست.

۴. نمونه عملی: نوسازی کلید مخزن رسمی Docker

این بخش فقط وقتی مناسب است که آدرس مخزن و مسیر Signed-By واقعاً همان موارد بالا باشند. راهنمای رسمی نصب Docker در Ubuntu نشانی کلید https://download.docker.com/linux/ubuntu/gpg و مسیر /etc/apt/keyrings/docker.asc را معرفی می‌کند. پیش از استفاده، صفحه رسمی را در مرورگر بررسی کنید؛ شرکت‌ها ممکن است نشانی یا روش کلید را تغییر دهند.
مطمئن شوید ابزارهای لازم موجودند:
کد / دستورcommand -v curl command -v gpg
اگر یکی پیدا نشد، باید بسته مربوط را از مخزن معتبر و قابل استفاده سیستم نصب کنید. در صورتی که مخزن معتبر هم مشکل دارد، صحت ساعت و روش بازیابی همان مخزن را حل کنید؛ بسته ناشناس از اینترنت نصب نکنید.
در همان نشست SSH یک فایل موقت بسازید و کلید را با بررسی معمول HTTPS دریافت کنید:
کد / دستورkeytmp=$(mktemp) curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o "$keytmp"
اگر curl خطا داد یا فایل خالی بود، ادامه ندهید. در این مثال از دور زدن بررسی گواهی استفاده نمی‌کنیم. محتوای کلید و اثرانگشت آن را ببینید:
کد / دستورtest -s "$keytmp" && gpg --show-keys --with-fingerprint "$keytmp"
تاریخ انقضا و اثرانگشت کامل کلید اصلی و زیرکلیدها را بخوانید. اگر سازنده اثرانگشت جدید را از مسیر قابل اعتماد منتشر کرده یا سازمان شما اثرانگشت معتبر دارد، آن را کامل مقایسه کنید؛ چند رقم آخر شناسه کافی نیست. دریافت از آدرسی که مستند رسمی با HTTPS معرفی کرده به شناخت منبع کمک می‌کند، ولی جای مقایسه مستقل اثرانگشت را نمی‌گیرد. اگر منبع، اثرانگشت یا وضعیت اعتبار برای شما قابل تأیید نیست، کلید را نصب نکنید.
قبل از جایگزینی، از فایل کلید فعلی نسخه پشتیبان بگیرید. دو دستور زیر فقط برای حالتی است که فایل فعلی وجود دارد:
کد / دستورsudo install -d -m 0700 /root/apt-key-backups sudo cp -an /etc/apt/keyrings/docker.asc /root/apt-key-backups/docker.asc.before
گزینه -n مانع رونویسی نسخه قبلی با همان نام می‌شود. مطمئن شوید بکاپ واقعاً با فایل فعلی یکسان است:
کد / دستورsudo cmp /etc/apt/keyrings/docker.asc /root/apt-key-backups/docker.asc.before
خروجی خالی و کد موفقیت یعنی دو فایل یکسان‌اند. اگر فایل بکاپ قبلاً وجود داشته و متفاوت است، نام بکاپ تازه انتخاب کنید و قبل از ادامه یکسان بودنش را دوباره بررسی کنید. اگر فایل فعلی از ابتدا وجود ندارد، علت مسیر اشتباه یا نبودن فایل را جداگانه بررسی کنید.
پس از تأیید منبع و اعتبار کلید جدید، آن را در مسیر همان مخزن قرار دهید:
کد / دستورsudo install -m 0644 "$keytmp" /etc/apt/keyrings/docker.asc
مجوز ۰۶۴۴ امکان خواندن کلید عمومی توسط کاربر _apt را فراهم می‌کند. این کار برای فایل .asc نمونه است؛ یک فایل متنی ASCII را به‌جای keyring باینری .gpg ننویسید. برای فرمت و مسیر دیگر از دستور رسمی همان سازنده استفاده کنید.
حالا مجدداً اجرا کنید:
کد / دستورsudo apt-get update
باید مخزن مربوط بدون هشدار امضای منقضی دریافت شود. اگر هنوز EXPKEYSIG هست، بررسی کنید آیا کلید دریافت‌شده واقعاً اعتبار به‌روز دارد، آیا مخزن دیگری همان خطا را می‌دهد و آیا فایل Signed-By همان مسیری است که تغییر دادید. اگر سازنده هنوز مخزن را با کلید منقضی امضا می‌کند، جایگزین کردن دوباره همان فایل مشکل سمت سازنده را حل نمی‌کند.
اگر پس از تغییر مشخص شد کلید جدید اشتباه است، در شرایطی که بکاپ مرحله قبل تأیید شده، می‌توانید فایل قبلی را برگردانید:
کد / دستورsudo install -m 0644 /root/apt-key-backups/docker.asc.before /etc/apt/keyrings/docker.asc
این دستور فقط وضعیت قبلی را برمی‌گرداند؛ اگر کلید قبلی منقضی بوده است، هشدار نیز ممکن است برگردد. دوباره به منبع و مستندات سازنده مراجعه کنید.

۵. اگر خطا مربوط به Ubuntu یا مخزن دیگری است

کلید آرشیو رسمی Ubuntu معمولاً با بسته ubuntu-keyring مدیریت می‌شود. ابتدا نسخه نصب‌شده و نسخه پیشنهادی را ببینید:
کد / دستورapt-cache policy ubuntu-keyring
اگر یک منبع رسمی و امضاشده سالم، نسخه به‌روز این بسته را ارائه می‌دهد، می‌توانید پس از تأیید منبع با sudo apt-get install ubuntu-keyring آن را نصب یا به‌روز کنید و دوباره APT را آزمایش کنید. اگر خود منبع رسمی قابل احراز نیست، از روش بازیابی معتبر همان نسخه Ubuntu یا مدیر سرور کمک بگیرید؛ گزینه پذیرش بسته بدون امضا را فعال نکنید.
برای مخزن شخص ثالث، مستند همان سازنده را برای به‌روزرسانی بسته keyring یا دریافت کلید جدید دنبال کنید. اگر دیگر از آن مخزن استفاده نمی‌کنید، ابتدا برنامه‌های وابسته را بشناسید و سپس همان ورودی را طبق روش مدیریت تنظیمات خود موقتاً غیرفعال کنید؛ پاک کردن یک فایل کلید مشترک ممکن است چند مخزن را تحت تأثیر قرار دهد.

۶. تأیید نهایی

در پایان خروجی کامل sudo apt-get update را بخوانید و مطمئن شوید همان مخزن دیگر هشدار امضا ندارد. اگر پیام به جای امضا درباره اتصال شبکه یا IPv6 است، مسیر جداگانه‌ای دارد و راهنمای گیر کردن apt به دلیل IPv6 را ببینید. هنگام نصب یا ارتقای واقعی نیز منبع بسته و فهرست تغییرات را مرور کنید.
این روش برای Ubuntu روی سرور مجازی ایران و سرور اختصاصی ایران کاربرد دارد. توضیح رسمی روش تعیین کلید برای هر منبع در مستند sources.list اوبونتو آمده است.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام