برای تنظیم ساعت سرور لینوکس از chrony استفاده کنید: بسته را نصب کنید، سرورهای زمان را در فایل کانفیگ مشخص کنید، منطقه زمانی را درست بگذارید و با chronyc tracking مطمئن شوید ساعت هماهنگ است. ساعت درست فقط ظاهر ماجرا نیست؛ لاگها، گواهیهای SSL، رمزهای یکبارمصرف، احراز هویت Kerberos در Active Directory و کارهای زمانبندیشده همه به آن وابستهاند.
chrony در توزیعهای جدید، از جمله AlmaLinux و Rocky، پیشفرض است و در Ubuntu هم میتوان آن را نصب کرد. در Ubuntu بهطور پیشفرض systemd-timesyncd ساعت را همگام میکند که برای سرور ساده کافی است، ولی chrony دقت و گزارش بهتری میدهد و برای سروری که خودش سرور زمان شبکه است لازم است.
چرا تنظیم ساعت سرور لینوکس مهم است؟
- لاگهای چند سرور فقط وقتی قابل مقایسهاند که ساعت همه یکی باشد. بررسی حادثه امنیتی با ساعتهای ناهماهنگ تقریباً غیرممکن است.
- گواهی SSL با تاریخ اعتبار کار میکند. سروری که ساعتش عقب یا جلو باشد، گواهی معتبر را نامعتبر میبیند.
- در دامنه ویندوز، Kerberos بیش از پنج دقیقه اختلاف ساعت را نمیپذیرد و ورود کاربران خراب میشود.
- رمزهای یکبارمصرف مبتنی بر زمان (TOTP) با ساعت اشتباه رد میشوند.
- Cron و تایمرها زمان خود را از ساعت سیستم میگیرند؛ روش نوشتن آنها در آموزش Cron Job در لینوکس آمده است.
مرحله اول: ببینید وضعیت فعلی چیست
timedatectl
dateخروجی timedatectl منطقه زمانی، ساعت محلی، ساعت جهانی و وضعیت همگامسازی را نشان میدهد. اگر System clock synchronized: yes و NTP service: active را میبینید، ساعت همگام است.
مرحله دوم: منطقه زمانی در تنظیم ساعت سرور لینوکس
سرورها را معمولاً روی UTC نگه میدارند تا لاگها در همه جا یکسان باشند و با تغییر ساعت تابستانی دچار ابهام نشوند. اگر لازم است ساعت محلی نشان داده شود، منطقه را عوض کنید:
timedatectl list-timezones | grep -i tehran
sudo timedatectl set-timezone Asia/Tehranتغییر منطقه زمانی ساعت جهانی را عوض نمیکند، فقط نحوه نمایش را. برنامههایی که ساعت محلی میخوانند، مثل بعضی کارهای Cron، بعد از تغییر منطقه باید دوباره بررسی شوند.
مرحله سوم: نصب chrony
روی Ubuntu و Debian:
sudo apt update
sudo apt install chrony
sudo systemctl enable --now chronyروی AlmaLinux و Rocky:
sudo dnf install chrony
sudo systemctl enable --now chronydنام سرویس در Debian و Ubuntu chrony و در خانواده RHEL chronyd است. روی Ubuntu، با نصب chrony سرویس systemd-timesyncd خودکار غیرفعال میشود تا تداخل نداشته باشند.
مرحله چهارم: انتخاب سرور زمان
فایل کانفیگ در Ubuntu و Debian /etc/chrony/chrony.conf و در AlmaLinux و Rocky /etc/chrony.conf است. سرورهای زمان با خط pool یا server تعریف میشوند:
pool pool.ntp.org iburstگزینه iburst باعث میشود همگامسازی اولیه سریعتر انجام شود. اگر سرور شما به اینترنت آزاد دسترسی ندارد یا سازمان سرور زمان داخلی دارد، آدرس آن را بنویسید:
server 192.168.1.10 iburstبعد از ویرایش، سرویس را ریاستارت کنید: sudo systemctl restart chrony (یا chronyd). در شبکهای که دسترسی NTP به بیرون بسته است، یک سرور داخلی را مرجع بقیه قرار دهید و فقط همان را به منبع خارجی وصل کنید.
مرحله پنجم: بررسی همگامسازی
chronyc tracking
chronyc sources -vدر خروجی tracking مقدار System time نشان میدهد ساعت سرور چقدر با مرجع فرق دارد. در sources، علامت ^* جلوی یک سرور یعنی همین سرور منبع فعلی است. اگر هیچ سروری انتخاب نشده یا همه ستون Reach صفر هستند، دسترسی شبکه یا فایروال را ببینید؛ NTP روی پورت UDP شماره ۱۲۳ کار میکند.
تنظیم دستی ساعت در حالت اضطراری
اگر ساعت خیلی اختلاف دارد و فوری باید درست شود، میتوان یک بار آن را با chrony دستی پرید:
sudo chronyc makestepاین دستور ساعت را بلافاصله با مرجع هماهنگ میکند. جهش ناگهانی ساعت روی برنامههایی که به زمان حساساند، مثل دیتابیس و سرویسهای توزیعشده، میتواند اثر بگذارد؛ پس در ساعت کمکاری انجام دهید. تنظیم دستی ساعت با date -s بدون همگامسازی پایدار نیست و بعد از مدتی دوباره خطا جمع میشود.
سرور زمان داخلی برای شبکه
در شبکه سازمانی بهتر است همه سرورها و تجهیزات از یک یا دو سرور داخلی ساعت بگیرند. با chrony میتوانید یک سرور را مرجع بقیه کنید. در فایل کانفیگ همان سرور، اجازه دسترسی به زیرشبکه را بدهید:
allow 192.168.1.0/24و در فایروال، UDP پورت ۱۲۳ را فقط برای همان شبکه باز کنید. آدرس و ماسک را با شبکه خودتان تطبیق دهید؛ برای محاسبه ماسک میتوانید از ابزار محاسبه ساب نت استفاده کنید. در دامنه ویندوز، کنترلر دامنه نقش زمان را دارد و سرورهای عضو دامنه از آن ساعت میگیرند؛ آنها را جداگانه با chrony تنظیم نکنید مگر اینکه ساختار دامنه را بدانید.
ماشینهای مجازی
در ماشین مجازی، همگامسازی با میزبان ممکن است فعال باشد و با NTP تداخل کند. اگر ساعت یک VM مدام میپرد، ببینید ابزار مهمان، مثل VMware Tools یا QEMU Guest Agent، ساعت را همگام میکند یا نه، و فقط یک روش را فعال بگذارید. پس از بازگرداندن اسنپشات هم ساعت VM ممکن است عقب باشد؛ chronyc makestep آن را درست میکند.
خطاهای رایج
| نشانه | علت و راه حل |
|---|---|
System clock synchronized: no | سرویس خاموش است یا سرور زمان در دسترس نیست |
| همه منابع Reach صفر | پورت UDP 123 بسته است یا DNS سرور زمان حل نمیشود |
| ساعت بعد از ریاستارت عقب است | باتری ساعت سختافزار یا همگامسازی VM؛ hwclock و ابزار مهمان را ببینید |
| دو سرویس زمان با هم کار میکنند | timesyncd و chrony تداخل دارند؛ فقط یکی فعال بماند |
| خطای SSL با گواهی معتبر | ساعت سرور یا کلاینت اشتباه است؛ با ابزار بررسی SSL تاریخ گواهی را ببینید |
سوالات متداول
فرق NTP و chrony چیست؟
NTP پروتکل همگامسازی زمان است و chrony یکی از نرمافزارهایی است که آن را اجرا میکند. ntpd قدیمیتر است و chrony در شبکههای ناپایدار و ماشینهای مجازی معمولاً سریعتر همگام میشود.
ساعت سرور باید UTC باشد یا ساعت محلی؟
برای سرورها UTC رایجتر است. منطقه زمانی فقط نحوه نمایش را عوض میکند و ساعت جهانی ثابت میماند. اگر برنامهای ساعت محلی میخواهد، منطقه را برای همان تنظیم کنید.
آیا بدون اینترنت میشود ساعت را همگام نگه داشت؟
بله، با سرور زمان داخلی که خودش به منبع مطمئن یا ساعت سختافزاری GPS وصل است. بدون هیچ منبعی ساعت بهمرور منحرف میشود.
چند سرور زمان لازم است؟
دستکم سه منبع برای تشخیص منبع غلط توصیه میشود. با pool این کار خودکار انجام میشود.





