
Kết nối SSH bằng key và cấu hình truy cập an toàn
Tạo SSH key từ Windows, Linux hoặc macOS, xác minh host key và kiểm tra phiên đăng nhập mới trước khi hạn chế đăng nhập mật khẩu trên Ubuntu Server.

Hiểu repository, cài và cập nhật gói trên Ubuntu Server, kiểm tra sau thay đổi và xử lý lỗi lock, DNS hoặc chữ ký mà không bỏ qua cơ chế xác minh.
APT giúp cài đặt và cập nhật phần mềm trên Ubuntu, nhưng một lệnh hoàn thành không bảo đảm dịch vụ vẫn hoạt động đúng. Người quản trị cần biết gói đến từ đâu, thay đổi nào sắp được áp dụng và cách xác nhận sau cập nhật. Bài này dùng Ubuntu Server 24.04 LTS, tập trung quy trình có kiểm tra thay vì gộp mọi thao tác vào một dòng lệnh tự động.
Repository cung cấp metadata cùng các gói phần mềm. APT dùng chỉ mục để tìm phiên bản và giải quyết dependency, sau đó phối hợp với dpkg để quản lý gói trên máy. Chữ ký của repository giúp xác minh metadata từ nguồn được tin cậy; nó không phải lời bảo đảm mọi phần mềm bên trong phù hợp nhu cầu hoặc không có lỗi.
Ubuntu 24.04 thường dùng định dạng deb822 trong /etc/apt/sources.list.d/ubuntu.sources. Máy nâng cấp từ phiên bản cũ hoặc dùng image tùy biến có thể khác. Kiểm tra thực tế trước khi sửa:
cat /etc/os-release
ls -l /etc/apt/sources.list.d
apt-cache policy
Không sao chép toàn bộ sources của distro khác vào Ubuntu để lấy một gói mới hơn. Kho khác release có thể kéo theo dependency không tương thích. Đối chiếu Ubuntu: Install and manage packages và hướng dẫn chính thức của nhà phát hành nếu cần repository bên thứ ba.
Ghi lại thời điểm, tên máy và dịch vụ bị ảnh hưởng. Xem dung lượng trống và tình trạng dpkg:
hostname
df -h / /var
sudo dpkg --audit
apt-cache policy curl
dpkg --audit không có thông báo thường là không phát hiện trạng thái gói bất thường theo kiểm tra đó; nó không thay thế kiểm tra chức năng ứng dụng. Dung lượng trống cần đủ cho tải gói, giải nén và dữ liệu phát sinh. Nếu đang đầy ổ, xử lý nguyên nhân trước khi cập nhật vì quá trình có thể dừng giữa chừng.
Với production, đọc release notes, có backup phù hợp và chọn cửa sổ bảo trì. Snapshot có thể hỗ trợ quay lại máy ảo nhưng không tự giải quyết tương thích dữ liệu đã thay đổi sau cập nhật. Khi ứng dụng dùng database, phương án khôi phục phải bao gồm dữ liệu và schema tương ứng.
sudo apt update
apt-cache policy curl
sudo apt install curl
curl --version
dpkg-query -W curl
apt update tải chỉ mục mới, chưa nâng cấp các gói đã cài. apt-cache policy cho biết phiên bản đã cài, candidate và nguồn. Khi chạy apt install, đọc danh sách gói mới, dependency, dung lượng và gói dự kiến bị gỡ trước khi xác nhận.
Sau cài, dùng công cụ theo chức năng cần thiết. curl --version chứng minh binary chạy được, chưa chứng minh DNS, TLS và endpoint ứng dụng đều ổn. Nếu cài một server như OpenSSH, cần kiểm tra unit, listener và kết nối từ client. Một số package có thể tự khởi động service ngay sau cài, nên đánh giá firewall và cấu hình trước khi đặt nó trên mạng công khai.
Trên các bài hướng dẫn tương tác, apt có đầu ra dễ đọc. Trong script, ưu tiên giao diện phù hợp như apt-get và xử lý exit code thay vì phân tích chuỗi thông báo theo ngôn ngữ hiển thị. Không thêm -y mặc định vào mọi ví dụ vì người học cần đọc kế hoạch thay đổi.

sudo apt update
apt list --upgradable
sudo apt-get -s upgrade
sudo apt upgrade
apt-get -s mô phỏng kế hoạch tại thời điểm kiểm tra. Nó không khóa vĩnh viễn phiên bản hay chứng minh nâng cấp thật sẽ thành công. upgrade có thể giữ lại một số gói khi cần kiểu thay đổi dependency khác; không chuyển ngay sang full-upgrade chỉ để làm danh sách trống.
full-upgrade có thể gỡ gói để giải quyết dependency. Đọc danh sách gỡ và xác định tác động trước khi chọn. Nếu gói thuộc runtime ứng dụng, driver hoặc thành phần quan trọng, đối chiếu hướng dẫn của nhà cung cấp. Bài này không bao gồm nâng cấp toàn bộ Ubuntu từ release này sang release khác.
Khi APT hỏi về file cấu hình đã sửa, xem khác biệt và cân nhắc tùy chỉnh đang dùng. Giữ file cũ có thể bỏ lỡ tùy chọn mới; dùng file mới có thể mất cấu hình cần thiết. Không chọn một đáp án cố định cho mọi máy.
Sau nâng cấp:
sudo dpkg --audit
systemctl --failed --no-pager
test -f /var/run/reboot-required && cat /var/run/reboot-required
Một số service có thể đã restart trong lúc cập nhật. Kiểm tra endpoint thực tế, log và kết nối của người dùng. Nếu có yêu cầu reboot, lên lịch và chuẩn bị console; reboot sẽ ngắt phiên và dừng dịch vụ tạm thời. Kernel mới đã cài không có nghĩa kernel đang chạy đã thay đổi, nên kiểm tra uname -r sau khởi động lại.
Khóa ngăn nhiều tiến trình cùng thay đổi cơ sở dữ liệu gói. Automatic updates có thể đang chạy, đặc biệt ngay sau boot. Kiểm tra tiến trình và dịch vụ liên quan:
ps -ef | grep -E '[a]pt|[d]pkg|[u]nattended'
systemctl status apt-daily.service apt-daily-upgrade.service --no-pager
Nếu có tiến trình hợp lệ đang làm việc, chờ và xem log thay vì xóa file lock. Xóa tên file không chứng minh tiến trình giữ khóa đã kết thúc, và có thể khiến hai tác vụ cùng can thiệp dữ liệu gói.
Nếu tác vụ đã dừng bất thường, trước tiên xác nhận không còn tiến trình quản lý gói hoạt động. Sau đó đọc lỗi và dùng các lệnh sửa trạng thái phù hợp:
sudo dpkg --configure -a
sudo apt-get -f install
Hai lệnh này có thể chạy script cấu hình hoặc đề xuất cài/gỡ dependency, không phải kiểm tra chỉ đọc. Chỉ chạy sau khi hiểu trạng thái, đọc đề xuất và có phương án với ứng dụng quan trọng. Khi lỗi lặp lại ở cùng một package, giữ thông báo đầy đủ để điều tra thay vì tiếp tục thử lệnh ngẫu nhiên.

Temporary failure resolving gợi ý vấn đề phân giải tên. Kiểm tra getent hosts cho đúng tên repository và route mạng. Thông báo chứng chỉ có thể liên quan đồng hồ, CA, proxy hoặc server đích. Kiểm tra thời gian và cấu hình mạng trước khi thay nguồn phần mềm.
Lỗi chữ ký hoặc khóa không được sửa bằng trusted=yes, bỏ kiểm tra xác thực hay tải khóa từ nguồn bất kỳ. Kiểm tra URL chính thức, fingerprint và hướng dẫn repository. Dùng phạm vi Signed-By theo tài liệu hiện hành thay vì cấp một khóa bên thứ ba quyền tin cậy quá rộng.
Nếu chỉ một mirror lỗi, ghi lại URL, release và kiến trúc. Đối chiếu trạng thái từ nhà cung cấp và cân nhắc mirror chính thức khác theo policy. Không trộn nguồn release khác vì thấy một bài hướng dẫn cũ dùng nó.
apt remove và apt purge có phạm vi khác nhau đối với cấu hình do package quản lý. Cả hai không có nghĩa mọi dữ liệu ứng dụng hay home của user sẽ bị xóa. Trước khi gỡ, xem mô phỏng và xác định dependency liên quan.
sudo apt-get -s remove curl
sudo apt-get -s autoremove
autoremove đề xuất gỡ dependency không còn được đánh dấu cần thiết theo cơ sở dữ liệu gói. Đọc danh sách vì phần mềm cài thủ công hoặc quy trình triển khai riêng có thể vẫn phụ thuộc vào chúng theo cách APT không biết. Không gắn autoremove -y sau mọi lần cập nhật.
Automatic security updates giảm công việc thủ công nhưng cần chính sách reboot, giám sát thất bại và kiểm tra tương thích. Đối chiếu Ubuntu Automatic updates trước khi cấu hình. Không tắt cơ chế này lâu dài chỉ vì từng gặp lock khi mở terminal.
Hoàn thành bài khi bạn giải thích được khác biệt update/upgrade, xác định nguồn của một gói, kiểm tra trạng thái sau thay đổi và biết thu thập lỗi thay vì bỏ qua kiểm tra chữ ký. Trên Debian có nhiều thao tác tương tự nhưng nguồn và policy khác; Rocky/AlmaLinux dùng hệ công cụ RPM/DNF, không áp dụng nguyên các lệnh APT.
Khi cần biết package nào vừa thay đổi, xem lịch sử APT và dpkg tại các file log tương ứng trong /var/log. Đối chiếu thời điểm với cửa sổ sự cố thay vì chỉ nhìn phiên bản hiện tại. Log có thể đã rotate hoặc bị giới hạn retention, nên nếu thiếu lịch sử cần ghi rõ phần chưa xác minh.
Hạ phiên bản package không phải phương án rollback luôn khả dụng. Repository có thể không còn giữ phiên bản cũ, cấu hình có thể đã được chuyển đổi và dữ liệu ứng dụng có thể không tương thích ngược. Với server quan trọng, chuẩn bị phương án khôi phục trước nâng cấp thay vì chờ có lỗi mới tìm cách quay lại. Trong lab, giữ ghi chép phiên bản trước và sau để luyện cách đối chiếu này.
Xem thêm Linux Essentials nếu cần ôn kiến thức nền trước khi thực hành.

Tạo SSH key từ Windows, Linux hoặc macOS, xác minh host key và kiểm tra phiên đăng nhập mới trước khi hạn chế đăng nhập mật khẩu trên Ubuntu Server.

Tạo tài khoản quản trị, user dịch vụ và thư mục dùng chung trên Ubuntu; chẩn đoán Permission denied theo user, đường dẫn, mode và chính sách truy cập.

Thực hành tạo systemd service trên Ubuntu, kiểm tra trạng thái, restart, reload và tự khởi động; tìm lỗi từ user, đường dẫn, quyền và log của dịch vụ.

Lọc log Linux theo service, thời gian và boot; phân biệt lỗi gốc với thông báo hệ quả, kiểm tra quyền đọc và xác nhận phục hồi sau khi sửa nguyên nhân.