Kinh Nghiệm Thực Chiến Vận Hành Linux Server
Giới Thiệu
Vận hành một máy chủ Linux không chỉ đơn thuần là cài đặt và chạy các ứng dụng. Đó là một quá trình liên tục đòi hỏi sự hiểu biết sâu sắc về hệ thống, kỹ năng xử lý sự cố nhanh chóng và tư duy bảo mật vững chắc. Bài viết này sẽ chia sẻ những kinh nghiệm thực chiến quan trọng, giúp bạn tự tin hơn trong việc quản lý và duy trì các máy chủ Linux trong môi trường sản xuất. Chúng ta sẽ đi từ những cấu hình cơ bản đến các kỹ thuật giám sát và xử lý vấn đề thường gặp.
📋 Thời gian: 25 phút | Độ khó: Trung bình
Yêu Cầu
Để tận dụng tối đa bài viết này, bạn nên có:
- Kiến thức cơ bản về Linux command line.
- Hiểu biết về các khái niệm mạng cơ bản (IP, port, firewall).
- Quyền truy cập root hoặc sudo trên một máy chủ Linux (có thể là máy ảo hoặc VPS) để thực hành.
Các Bước Thực Hiện
Bước 1: Cấu Hình Ban Đầu và Bảo Mật Cơ Bản
Bảo mật là ưu tiên hàng đầu khi thiết lập bất kỳ máy chủ nào. Ngay sau khi cài đặt hệ điều hành, hãy thực hiện các bước sau:
- Cập nhật hệ thống: Luôn đảm bảo hệ điều hành và các gói phần mềm được cập nhật lên phiên bản mới nhất để vá các lỗ hổng bảo mật.
sudo apt update && sudo apt upgrade -y # Đối với Debian/Ubuntu
# sudo yum update -y # Đối với CentOS/RHEL - Tạo người dùng không phải root và cấp quyền sudo: Không nên sử dụng tài khoản
rootđể làm việc hàng ngày. Hãy tạo một người dùng mới và cấp quyềnsudo.sudo adduser yourusername # Tạo người dùng mới
sudo usermod -aG sudo yourusername # Thêm người dùng vào nhóm sudo (để có quyền root tạm thời) - Cấu hình SSH an toàn:
- Thay đổi cổng SSH mặc định (22): Giúp giảm thiểu các cuộc tấn công quét cổng tự động.
- Vô hiệu hóa đăng nhập bằng tài khoản root: Buộc người dùng phải đăng nhập bằng tài khoản thường và sau đó sử dụng
sudo. - Sử dụng xác thực bằng khóa SSH (SSH Key-based authentication): An toàn hơn nhiều so với mật khẩu.
⚠️ Quan trọng: Đảm bảo bạn đã sao chép SSH key cũng khai của mình lên server và kiểm tra đăng nhập bằng key trước khi vô hiệu hóa# Chỉnh sửa file cấu hình SSH
sudo nano /etc/ssh/sshd_config
# Tìm và thay đổi các dòng sau:
# Port 2222 # Thay 22 bằng một cổng khác, ví dụ 2222
# PermitRootLogin no # Vô hiệu hóa đăng nhập root
# PasswordAuthentication no # Vô hiệu hóa đăng nhập bằng mật khẩu (chỉ cho phép key-based)
# Lưu và thoát, sau đó khởi động lại dịch vụ SSH
sudo systemctl restart sshdPasswordAuthentication. - Cấu hình Firewall (UFW/firewalld): Chỉ mở các cổng cần thiết.
✅ Thành công: Server của bạn đã được bảo mật cơ bản hơn rất nhiều!
sudo apt install ufw -y # Cài đặt UFW nếu chưa có (trên Debian/Ubuntu)
sudo ufw allow 2222/tcp # Cho phép cổng SSH mới của bạn
sudo ufw allow http # Cho phép HTTP (cổng 80)
sudo ufw allow https # Cho phép HTTPS (cổng 443)
sudo ufw enable # Bật firewall
sudo ufw status verbose # Kiểm tra trạng thái firewall
Bước 2: Giám Sát Tài Nguyên và Log Hệ Thống
Giám sát là chìa khóa để phát hiện sớm các vấn đề.
- Giám sát tài nguyên (CPU, RAM, Disk I/O):
tophoặchtop: Xem các tiến trình đang chạy, mức sử dụng CPU và RAM theo thời gian thực.htopcung cấp giao diện thân thiện hơn.free -h: Kiểm tra dung lượng RAM trống/đã sử dụng.df -h: Kiểm tra dung lượng đĩa trống/đã sử dụng.iostat: Giám sát hiệu suất I/O của đĩa.
htop # Yêu cầu cài đặt: sudo apt install htop
free -h
df -h - Kiểm tra Log hệ thống: Log là nhật ký ghi lại mọi hoạt động và lỗi của hệ thống.
journalctl: Công cụ mạnh mẽ để xem log của systemd./var/log/: Thư mục chứa các file log truyền thống (syslog, auth.log, apache2/error.log, nginx/access.log, v.v.).
💡 Mẹo: Khi debug, sử dụngjournalctl -u nginx.service -f # Xem log của dịch vụ Nginx theo thời gian thực
tail -f /var/log/syslog # Xem các dòng log mới nhất của syslog
cat /var/log/auth.log # Xem log liên quan đến xác thựctail -fhoặcjournalctl -fđể xem log theo thời gian thực, giúp bạn nhanh chóng phát hiện vấn đề khi chúng xảy ra.
Bước 3: Quản Lý Dịch Vụ và Tiến Trình
Hiểu cách quản lý các dịch vụ (services) và tiến trình (processes) là rất quan trọng.
- Quản lý dịch vụ với
systemctl(systemd): Hầu hết các bản phân phối Linux hiện đại sử dụng systemd để quản lý dịch vụ.sudo systemctl status apache2 # Kiểm tra trạng thái của dịch vụ Apache
sudo systemctl start nginx # Khởi động dịch vụ Nginx
sudo systemctl stop postgresql # Dừng dịch vụ PostgreSQL
sudo systemctl restart php7.4-fpm # Khởi động lại dịch vụ PHP-FPM
sudo systemctl enable redis # Bật dịch vụ Redis khởi động cùng hệ thống
sudo systemctl disable mysql # Tắt dịch vụ MySQL không khởi động cùng hệ thống - Tìm và Kill tiến trình:
ps aux: Liệt kê tất cả các tiến trình đang chạy.grep: Lọc kết quả tìm kiếm.kill: Dừng một tiến trình bằng PID (Process ID).
ps aux | grep myapp # Tìm kiếm tiến trình có tên 'myapp'
# Kết quả sẽ hiển thị PID ở cột thứ hai. Ví dụ:
# user 1234 0.0 0.1 123456 1234 ? Sl Oct26 0:01 /usr/bin/myapp
sudo kill 1234 # Dừng tiến trình với PID là 1234
sudo kill -9 1234 # Buộc dừng tiến trình (sử dụng khi kill thông thường không hiệu quả)
Bước 4: Sao Lưu và Khôi Phục Dữ Liệu
Không có kế hoạch sao lưu, dữ liệu của bạn luôn trong tình trạng nguy hiểm.
- Tầm quan trọng của sao lưu: Mọi dữ liệu quan trọng trên server cần được sao lưu định kỳ và lưu trữ an toàn ở nơi khác.
- Sử dụng
tarđể nén và sao lưu:# Sao lưu thư mục /var/www/html và nén lại
sudo tar -czvf /backup/website_backup_$(date +%Y%m%d).tar.gz /var/www/html
# -c: tạo archive, -z: nén gzip, -v: hiển thị tiến trình, -f: chỉ định tên file archive - Sao lưu cơ sở dữ liệu (ví dụ PostgreSQL):
# Sao lưu database 'mydatabase' của PostgreSQL
sudo su - postgres -c "pg_dump mydatabase > /backup/mydatabase_$(date +%Y%m%d).sql"
# Hoặc cho MySQL:
# sudo mysqldump -u root -p mydatabase > /backup/mydatabase_$(date +%Y%m%d).sql - Khôi phục dữ liệu:
⚠️ Cảnh báo: Luôn kiểm tra các bản sao lưu của bạn bằng cách thử khôi phục chúng trên một môi trường riêng biệt để đảm bảo chúng hoạt động.
# Giải nén và khôi phục thư mục /var/www/html từ bản sao lưu
sudo tar -xzvf /backup/website_backup_20231027.tar.gz -C /
# -x: giải nén, -C: chỉ định thư mục đích
Troubleshooting
Dưới đây là một số vấn đề thường gặp và cách xử lý nhanh:
- Không thể SSH vào server:
- Kiểm tra kết nối mạng của bạn và của server.
- Kiểm tra xem dịch vụ SSH có đang chạy không:
sudo systemctl status sshd. - Kiểm tra firewall trên server xem cổng SSH có được mở không (ví dụ:
sudo ufw status). - Kiểm tra file
/etc/ssh/sshd_configđể đảm bảo cấu hình đúng (cổng,PermitRootLogin,PasswordAuthentication). - Nếu sử dụng SSH key, kiểm tra quyền của file key trên máy cục bộ (
chmod 400 ~/.ssh/id_rsa) và trên server (chmod 700 ~/.ssh,chmod 600 ~/.ssh/authorized_keys).
- Server chạy chậm hoặc đơ:
- Sử dụng
htopđể xác định tiến trình nào đang tiêu tốn nhiều CPU hoặc RAM nhất. - Kiểm tra
df -hđể xem dung lượng đĩa có bị đầy không. - Kiểm tra
journalctl -xehoặc các file log trong/var/logđể tìm lỗi ứng dụng hoặc hệ thống. - Nếu server có nhiều I/O, sử dụng
iostatđể kiểm tra hiệu suất đĩa.
- Sử dụng
- Dung lượng đĩa đầy:
- Sử dụng
df -hđể xác định phân vùng nào đầy. - Sử dụng
du -sh /*hoặcdu -sh /var/*(với sudo) để tìm các thư mục lớn. Tập trung vào/var/log,/tmp,/var/www/html, hoặc các thư mục chứa database/upload. - Xóa các file log cũ, file tạm không cần thiết, hoặc các bản sao lưu cũ.
- ⚠️ Cẩn trọng khi xóa file: Luôn kiểm tra kỹ trước khi xóa bất kỳ file nào trên server sản xuất.
- Sử dụng
Kết Luận
Vận hành Linux server là một hành trình học hỏi không ngừng. Những kinh nghiệm thực chiến được chia sẻ ở trên là nền tảng vững chắc để bạn quản lý máy chủ một cách hiệu quả và an toàn.
Best Practices quan trọng cần nhớ:
- Bảo mật là trên hết: Luôn ưu tiên các biện pháp bảo mật từ khâu cấu hình ban đầu.
- Giám sát liên tục: Thiết lập công cụ giám sát và kiểm tra log thường xuyên để phát hiện sớm vấn đề.
- Sao lưu định kỳ: Không bao giờ bỏ qua việc sao lưu và kiểm tra khả năng khôi phục.
- Tự động hóa: Khi quản lý nhiều server, hãy cân nhắc sử dụng các công cụ tự động hóa như Ansible, Chef, Puppet để tiết kiệm thời gian và giảm thiểu lỗi.
- Học hỏi và thực hành: Thế giới Linux luôn thay đổi, hãy luôn cập nhật kiến thức và thực hành thường xuyên để nâng cao kỹ năng của mình.
Chúc bạn thành công trong hành trình vận hành Linux server của mình!