Security

VPS lưu trữ dữ liệu nội bộ công ty: Hướng dẫn thiết lập an toàn

Dữ liệu nội bộ của công ty đang nằm rải rác trong Google Drive, email, laptop của từng nhân viên. Đến lúc cần tìm một file quan trọng thì không ai nhớ nó ở đâu. Nếu bạn đang tìm một nơi tập trung, VPS lưu trữ dữ liệu nội bộ công ty là phương án nhiều doanh nghiệp nhỏ chọn: chi phí thấp, full root để tự cấu hình, và dữ liệu nằm trong tầm kiểm soát của mình. Hướng dẫn này sẽ đi từ khâu chọn cấu hình, thiết lập hệ thống, mã hóa, backup cho đến phân quyền truy cập, theo chuẩn mà các kỹ sư hệ thống vẫn áp dụng.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 LTS (bản LTS còn hỗ trợ đến 2029) với quyền root hoặc user sudo.
  • Đã cấu hình bảo mật SSH bằng key thay vì mật khẩu.
  • Một tên miền (không bắt buộc nhưng nên có) để truy cập qua HTTPS thay vì IP trần.
  • Hiểu cơ bản về dòng lệnh Linux: cd, ls, nano hoặc vim.

Vì sao doanh nghiệp nhỏ nên tự host dữ liệu nội bộ trên VPS

Chi phí để thuê VPS Linux đủ mạnh cho nhu cầu lưu trữ nội bộ chỉ từ khoảng 189.000đ/tháng. So với việc mua một NAS vật lý vài triệu đồng, hoặc trả phí Google Workspace tăng dần theo số nhân viên, VPS cho bạn toàn quyền quản trị ở mức chi phí thấp hơn nhiều.

Nhưng lợi ích lớn nhất không phải giá, mà là quyền kiểm soát. Dữ liệu của công ty nằm trên một máy chủ bạn quản trị, không nằm trên hạ tầng của bên thứ ba. Có thể giới hạn ai truy cập được gì, mã hóa toàn bộ ổ đĩa, và backup theo lịch bạn tự đặt. Đây là điều mà các dịch vụ lưu trữ công cộng không cho phép ở mức chi tiết này.

Điểm cần cân nhắc: bạn tự chịu trách nhiệm vận hành. Không có đội ngũ hỗ trợ của Google hay Microsoft đứng sau. Vì vậy, quy trình backup và phục hồi phải được thiết lập ngay từ đầu, trước khi có dữ liệu thật.

Bước 1 - Cài đặt hệ điều hành và cập nhật hệ thống

Sau khi nhận VPS từ nhà cung cấp với Ubuntu 24.04, đăng nhập bằng SSH và cập nhật toàn bộ gói phần mềm. Trên VPS mới, bước này quan trọng vì các bản vá bảo mật của kernel và thư viện có thể chưa được cài.

sudo apt update && sudo apt upgrade -y

Tiếp theo, cài đặt các gói cơ bản cần thiết cho một máy chủ lưu trữ: fail2ban để chặn brute-force SSH, unattended-upgrades để tự động vá lỗi bảo mật, và các công cụ hỗ trợ.

sudo apt install fail2ban unattended-upgrades rsync htop -y

Kích hoạt unattended-upgrades để hệ thống tự cài bản vá bảo mật hằng đêm, bạn không cần can thiệp thủ công.

sudo dpkg-reconfigure --priority=low unattended-upgrades

Chọn Yes khi được hỏi. Hệ thống bây giờ sẽ tự động cập nhật các gói liên quan đến bảo mật.

Verify: kiểm tra dịch vụ fail2ban đang chạy:

sudo systemctl status fail2ban

Output mong đợi: active (running).

Bước 2 - Tạo user riêng cho từng phòng ban

Một trong những sai lầm phổ biến nhất là dùng chung một tài khoản root cho tất cả nhân viên. Nếu một tài khoản bị lộ, toàn bộ dữ liệu công ty nằm trong tay kẻ tấn công. Thay vào đó, tạo user riêng cho từng người và nhóm theo phòng ban.

sudo groupadd marketing
sudo useradd -m -s /bin/bash -G marketing nhanvienA
sudo passwd nhanvienA

Giải thích: useradd tạo user với thư mục home (-m) và shell mặc định (-s /bin/bash), đồng thời thêm vào nhóm marketing. Tiếp theo, tạo thư mục dữ liệu và phân quyền theo nhóm.

sudo mkdir -p /srv/data/marketing
sudo chown root:marketing /srv/data/marketing
sudo chmod 770 /srv/data/marketing

chmod 770 nghĩa là chủ sở hữu và nhóm có đầy đủ quyền đọc, ghi, thực thi; người ngoài nhóm không có quyền gì. Đây là nguyên tắc tối thiểu: chỉ người cần truy cập mới có quyền truy cập.

Verify:

ls -la /srv/data/

Output phải hiển thị drwxrwx--- cho thư mục marketing với group sở hữu là marketing.

Bước 3 - Mã hóa dữ liệu nhạy cảm bằng LUKS

Hầu hết các VPS đều không mã hóa ổ đĩa ở tầng vật lý. Nếu nhà cung cấp gặp sự cố và tháo ổ cứng ra, dữ liệu của bạn có thể bị đọc. Với dữ liệu nội bộ công ty, đặc biệt là hợp đồng, thông tin nhân sự, tài chính, mã hóa là bắt buộc chứ không phải tùy chọn.

LUKS (Linux Unified Key Setup) là chuẩn mã hóa ổ đĩa phổ biến trên Linux. Trên VPS, nơi bạn không kiểm soát phần cứng, cách an toàn nhất là tạo một file container mã hóa bằng LUKS thay vì mã hóa toàn bộ ổ đĩa gốc (mã hóa ổ gốc trên VPS rất phức tạp vì cần nhập key qua console). Cách làm này đã được trình bày chi tiết trong bài mã hóa ổ đĩa VPS với LUKS, bạn có thể tham khảo thêm.

Tóm tắt nhanh: tạo một file 5GB, gán làm thiết bị loop, định dạng bằng LUKS, mở khóa và tạo filesystem.

sudo dd if=/dev/zero of=/root/encrypted-data.img bs=1M count=5120
sudo losetup /dev/loop0 /root/encrypted-data.img
sudo cryptsetup luksFormat /dev/loop0

Lệnh cryptsetup luksFormat sẽ hỏi bạn đặt passphrase. Hãy chọn một passphrase mạnh, khác với mật khẩu SSH, và lưu trữ nó ở nơi an toàn (ví dụ trong trình quản lý mật khẩu của công ty). Sau đó mở khóa và tạo filesystem:

sudo cryptsetup open /dev/loop0 encrypted-data
sudo mkfs.ext4 /dev/mapper/encrypted-data
sudo mkdir -p /mnt/encrypted
sudo mount /dev/mapper/encrypted-data /mnt/encrypted

Verify:

df -h /mnt/encrypted

Output hiển thị partition ~5GB được mount tại /mnt/encrypted. Từ bây giờ, mọi dữ liệu nhạy cảm phải được đặt trong thư mục này, không đặt ở nơi khác.

Lưu ý: file container này nên được backup riêng. Nếu mất nó, dữ liệu trong đó mất theo, dù bạn có bản sao ở nơi khác mà không có LUKS header.

Bước 4 - Cài đặt backup tự động bằng restic

Một VPS là một điểm thất bại riêng biệt. Ổ cứng hỏng, nhà cung cấp phá sản, người quản trị xóa nhầm thư mục... đều có thể xảy ra. Vì vậy, backup ra ngoài VPS là nguyên tắc bất di bất dịch. Restic là công cụ backup mã nguồn mở, hỗ trợ mã hóa đầu cuối, phù hợp để backup dữ liệu nhạy cảm lên S3 hoặc ổ cứng gắn ngoài.

sudo apt install restic -y
restic init --repo /mnt/backup-repo

Trước tiên, bạn cần một nơi lưu backup. Có thể là một VPS thứ hai, hoặc một bucket S3 tương thích. Nếu dùng S3, lệnh sẽ là:

export AWS_ACCESS_KEY_ID="your_key"
export AWS_SECRET_ACCESS_KEY="your_secret"
restic init --repo s3:s3.amazonaws.com/bucket-name/backup

Sau khi khởi tạo repository, tạo script backup tự động. File script đặt tại /usr/local/bin/backup.sh:

#!/bin/bash
export RESTIC_PASSWORD="strong-passphrase"
restic -r s3:s3.amazonaws.com/bucket-name/backup backup /srv/data /mnt/encrypted
restic -r s3:s3.amazonaws.com/bucket-name/backup forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6

Dòng forget giữ 7 bản backup hằng ngày, 4 hằng tuần, 6 hằng tháng, tự động xóa bản cũ. Điều này ngăn chi phí lưu trữ tăng vô hạn trong khi vẫn giữ được lịch sử phục hồi hợp lý.

Phân quyền cho script và thêm vào crontab:

sudo chmod +x /usr/local/bin/backup.sh
sudo crontab -e

Thêm dòng sau để chạy backup lúc 2 giờ sáng mỗi ngày:

0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Verify: chạy thử script lần đầu và kiểm tra snapshot:

sudo /usr/local/bin/backup.sh
restic -r s3:s3.amazonaws.com/bucket-name/backup snapshots

Output phải liệt kê ít nhất một snapshot với ID và thời gian. Đây là bằng chứng backup đang hoạt động, trước khi có dữ liệu thật.

Đối với quy trình backup hoàn chỉnh hơn, tham khảo bài backup tự động VPS lên S3 với restic.

Bước 5 - Giới hạn truy cập qua SSH và cấu hình firewall

VPS lưu trữ dữ liệu nội bộ công ty không nên mở cổng SSH với mật khẩu. Nếu ai đó đoán được mật khẩu, họ vào thẳng dữ liệu. Tắt xác thực bằng mật khẩu và chỉ cho phép đăng nhập bằng SSH key:

sudo nano /etc/ssh/sshd_config

Sửa hoặc thêm các dòng sau:

PasswordAuthentication no
PermitRootLogin prohibit-password
AllowUsers nhanvienA nhanvienB

AllowUsers giới hạn chỉ những user được liệt kê mới có thể SSH vào. Đây là lớp bảo vệ thêm ngoài việc tắt mật khẩu. Khởi động lại SSH:

sudo systemctl restart sshd

Quan trọng: trước khi ngắt phiên SSH hiện tại, mở một phiên SSH mới và kiểm tra đăng nhập bằng key hoạt động bình thường. Nếu không, bạn có thể bị khóa ngoài VPS.

Cấu hình UFW firewall, chỉ mở cổng SSH và HTTP/HTTPS nếu cần:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Verify:

sudo ufw status verbose

Output hiển thị OpenSSH, 80/tcp, 443/tcp với trạng thái ALLOW, và trạng thái Status: active.

Nếu bạn cần hướng dẫn chi tiết hơn về firewall, xem bài cấu hình UFW trên Ubuntu VPS hoặc fail2ban bảo vệ nhiều dịch vụ.

Xử lý lỗi thường gặp

1. Không SSH vào được sau khi sửa sshd_config

Nguyên nhân thường là cú pháp sai hoặc key chưa được thêm vào authorized_keys. Trước khi khởi động lại SSH, kiểm tra cú pháp:

sudo sshd -t

Nếu không có output, cú pháp đúng. Nếu có lỗi, sửa lại. Trong trường hợp đã bị khóa, hãy dùng console của nhà cung cấp VPS (thường có sẵn trên web panel) để sửa file.

2. LUKS container không mount được sau khi VPS khởi động lại

Vì đây là file loop device, bạn phải tự mount thủ công sau mỗi lần reboot. Tạo một systemd service hoặc thêm vào /etc/rc.local. Cách đơn giản:

sudo crontab -e

Thêm dòng:

@reboot sleep 10 && losetup /dev/loop0 /root/encrypted-data.img && cryptsetup open /dev/loop0 encrypted-data && mount /dev/mapper/encrypted-data /mnt/encrypted

Lưu ý: phương án này sẽ hỏi passphrase, do đó cần một keyfile. Bạn có thể tạo keyfile và thêm vào LUKS slot:

sudo dd if=/dev/urandom of=/root/luks-keyfile bs=1024 count=4
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/loop0 /root/luks-keyfile

Khi đó, lệnh mount có thể dùng --key-file. Tuy nhiên, hãy cân nhắc rủi ro: nếu kẻ tấn công chiếm được VPS và tìm thấy keyfile trong cùng hệ thống, mã hóa trở nên vô nghĩa. Đánh đổi giữa tiện lợi và bảo mật.

3. Backup restic báo lỗi "unable to open repository"

Lỗi này thường do biến môi trường RESTIC_PASSWORD không được đặt khi chạy qua cron. Trong script backup, đặt biến ngay đầu file như đã trình bày ở trên, và kiểm tra log:

cat /var/log/backup.log

Nếu lỗi liên quan đến quyền, hãy chạy script với quyền root trong crontab của root, không phải user thường.

Câu hỏi thường gặp

VPS lưu trữ dữ liệu nội bộ công ty có an toàn không?

An toàn nếu bạn cấu hình đúng: tắt SSH bằng mật khẩu, mã hóa dữ liệu bằng LUKS, backup ra ngoài và cập nhật bản vá bảo mật đều đặn. Không có hệ thống nào an toàn rất cao, nhưng với các biện pháp trên, rủi ro giảm xuống rất thấp so với việc lưu dữ liệu trên máy tính cá nhân.

Cấu hình VPS bao nhiêu RAM là đủ cho nhu cầu lưu trữ nội bộ?

Với nhu cầu lưu trữ file tĩnh và tài liệu, 2GB RAM là đủ cho vài chục user cùng truy cập. Nếu chạy thêm ứng dụng như Nextcloud hoặc database, nên dùng 4GB. Bạn có thể bắt đầu với VPS Linux gói nhỏ rồi nâng cấp sau.

Nên dùng VPS Việt Nam hay VPS nước ngoài để lưu trữ?

Với dữ liệu nội bộ công ty, tốc độ truy cập trong nước quan trọng. VPS Việt Nam có IPv4 thuộc dải Việt Nam, băng thông trong nước 100Mbps, giúp nhân viên truy cập nhanh hơn và dữ liệu nằm trong phạm vi pháp lý Việt Nam, dễ quản lý hơn cho doanh nghiệp.

Có cần mua thêm dịch vụ backup từ nhà cung cấp VPS không?

Snapshot của nhà cung cấp rất hữu ích để phục hồi nhanh, nhưng không thay thế backup riêng. Nếu nhà cung cấp gặp sự cố toàn hệ thống, snapshot cũng có thể mất. Luôn chạy backup ra bên ngoài bằng restic hoặc công cụ tương tự.

Dữ liệu nội bộ nên lưu trên VPS Linux hay Windows?

Nếu đội ngũ của bạn quen Linux, hãy dùng VPS Linux. Nếu công ty dùng toàn bộ hệ sinh thái Microsoft, VPS Windows dễ tích hợp Active Directory và chia sẻ file qua SMB. Xem thêm bài so sánh VPS Linux và Windows để chọn đúng.

Làm sao để nhân viên truy cập dữ liệu từ xa an toàn?

Không mở trực tiếp cổng dịch vụ lưu trữ ra internet. Dùng WireGuard VPN để nhân viên vào mạng nội bộ trước, rồi mới truy cập dữ liệu. Hướng dẫn thiết lập có trong bài dùng WireGuard trên VPS.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.