Chuyển tới nội dung chính

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:

  1. 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
  2. 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ền sudo.
    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)
  3. 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.
    # 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 sshd
    ⚠️ 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 PasswordAuthentication.
  4. Cấu hình Firewall (UFW/firewalld): Chỉ mở các cổng cần thiết.
    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
    Thành công: Server của bạn đã được bảo mật cơ bản hơn rất nhiều!

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 đề.

  1. Giám sát tài nguyên (CPU, RAM, Disk I/O):
    • top hoặc htop: Xem các tiến trình đang chạy, mức sử dụng CPU và RAM theo thời gian thực. htop cung 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
  2. 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.).
    journalctl -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ực
    💡 Mẹo: Khi debug, sử dụng tail -f hoặc journalctl -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.

  1. 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
  2. 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.

  1. 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.
  2. 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
  3. 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
  4. Khôi phục dữ liệu:
    # 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
    ⚠️ 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.

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 -xe hoặ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.
  • 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ặc du -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.

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!