- 1 1. Giới thiệu
- 2 2. Cài đặt vsftpd
- 3 3. Cấu hình cơ bản
- 4 4. Tăng cường bảo mật
- 5 5. Hỗ trợ tên file tiếng Nhật
- 6 6. Thiết lập chế độ Passive và Firewall
- 7 7. Cấu hình theo user
- 8 8. Kiểm tra hoạt động
- 9 9. Khắc phục sự cố thường gặp
- 10 10. Tổng kết
1. Giới thiệu
Xây dựng máy chủ FTP trên Ubuntu là một giải pháp rất thiết thực cho các nhà phát triển và quản trị viên muốn truyền tải file hiệu quả. Đặc biệt, khi muốn thiết lập môi trường chia sẻ file đơn giản tại nhà hoặc trong công ty, FTP (File Transfer Protocol) là lựa chọn dễ cài đặt và sử dụng.
Máy chủ FTP là gì?
Máy chủ FTP là phần mềm chuyên dụng cho phép truyền nhận file qua Internet hoặc mạng LAN. Người dùng có thể sử dụng phần mềm FTP client để kết nối với server, thực hiện upload hoặc download file một cách dễ dàng.
Mặc dù hiện nay các phương thức bảo mật như SFTP hoặc SCP đã trở nên phổ biến, nhưng FTP vẫn được nhiều người chọn vì sự đơn giản và nhẹ, đặc biệt phù hợp cho mạng nội bộ hoặc mục đích sử dụng đơn giản.
Vai trò của máy chủ FTP trên Ubuntu
Ubuntu là một bản phân phối Linux được nhiều người ưa chuộng, cũng rất phù hợp để sử dụng làm máy chủ. Việc xây dựng máy chủ FTP trên Ubuntu giúp chia sẻ file dễ dàng giữa nhiều thiết bị và người dùng.
Các trường hợp ứng dụng thực tế:
- Truyền file lên máy chủ web
- Kết nối với thiết bị IoT như Raspberry Pi
- Chia sẻ tài liệu nội bộ công ty
Kết hợp Ubuntu và máy chủ FTP mang lại khả năng quản lý file linh hoạt và hiệu quả.
Mục tiêu và đối tượng của bài viết
Bài viết này sẽ hướng dẫn chi tiết cách xây dựng máy chủ FTP trên Ubuntu một cách dễ hiểu, đặc biệt dành cho:
- Người đã quen với thao tác cơ bản trên Ubuntu nhưng mới sử dụng FTP
- Người muốn dựng máy chủ FTP cho mục đích nội bộ hoặc công việc đơn giản
- Người quan tâm đến bảo mật và lỗi hiển thị ký tự tiếng Nhật trong tên file
Làm theo các bước dưới đây, bạn sẽ xây dựng được môi trường FTP vừa an toàn vừa thực tiễn. Tiếp theo, chúng ta bắt đầu từ cài đặt “vsftpd” – phần mềm FTP phổ biến nhất cho Ubuntu.
2. Cài đặt vsftpd
Khi thiết lập máy chủ FTP trên Ubuntu, phần mềm được sử dụng phổ biến nhất là vsftpd (Very Secure FTP Daemon). Đúng như tên gọi, đây là máy chủ FTP được thiết kế chú trọng bảo mật, nhẹ và ổn định, nên được dùng rộng rãi trong doanh nghiệp, trường học.
Phần này sẽ hướng dẫn cài đặt vsftpd trên Ubuntu và cách khởi động/dùng tự động dịch vụ.
Cài đặt vsftpd
Đầu tiên, hãy sử dụng hệ thống quản lý gói (APT) của Ubuntu để cài đặt vsftpd theo thứ tự sau:
sudo apt update
sudo apt install vsftpd
sudo apt update
: Cập nhật thông tin gói mới nhất.sudo apt install vsftpd
: Cài đặt gói vsftpd.
Sau khi cài đặt, vsftpd
sẽ tự động được khởi động.
Kiểm tra trạng thái dịch vụ
Để kiểm tra vsftpd đã hoạt động đúng chưa, dùng lệnh sau:
sudo systemctl status vsftpd
Nếu hiển thị “active (running)” là máy chủ FTP đang hoạt động tốt.
Kiểm tra và bật chế độ tự khởi động
Thông thường, vsftpd sẽ được kích hoạt tự động ngay sau khi cài đặt, nhưng bạn nên kiểm tra lại để chắc chắn.
sudo systemctl enable vsftpd
Lệnh này đảm bảo dịch vụ vsftpd sẽ tự động khởi động khi máy chủ bật lại.
Đừng quên cấu hình tường lửa (UFW)
Nếu bạn bật UFW (Uncomplicated Firewall) trên Ubuntu, hãy mở các cổng FTP sau:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
Lệnh trên cho phép truy cập cổng 20 (data) và 21 (command) – cổng tiêu chuẩn của FTP.
Sau đó, hãy reload UFW để áp dụng thay đổi:
sudo ufw reload
3. Cấu hình cơ bản
Sau khi cài đặt vsftpd, bước tiếp theo là chỉnh sửa file cấu hình để tùy biến máy chủ FTP phù hợp với mục đích sử dụng. File cấu hình vsftpd cho phép kiểm soát chi tiết, tuy nhiên mặc định nhiều chức năng bị hạn chế nên cần kích hoạt thủ công các tính năng cần thiết.
Phần này sẽ giải thích các mục cấu hình cơ bản tiêu biểu.
Vị trí file cấu hình
File cấu hình chính của vsftpd nằm tại:
/etc/vsftpd.conf
Để chỉnh sửa, hãy sử dụng lệnh sau:
sudo nano /etc/vsftpd.conf
Sau khi thay đổi, cần khởi động lại vsftpd để áp dụng.
sudo systemctl restart vsftpd
Cho phép ghi (upload v.v.)
Mặc định, vsftpd không cho phép upload hay chỉnh sửa file qua FTP. Để bật tính năng ghi, thêm dòng sau vào cấu hình:
write_enable=YES
Với cấu hình này, người dùng có thể upload/xóa/sửa file trong thư mục home của mình.
Cho phép đăng nhập bằng user local
Để đăng nhập bằng tài khoản user trên Ubuntu qua FTP, hãy bật cấu hình sau:
local_enable=YES
Cài đặt này cho phép user có trong /etc/passwd
đăng nhập bằng FTP.
Cho phép hiển thị danh sách thư mục
Nếu FTP client không thể hiển thị danh sách file/thư mục, hãy kiểm tra các dòng dưới:
listen=YES
listen_ipv6=NO
Đặc biệt trong môi trường không dùng IPv6, hãy đảm bảo listen_ipv6=NO
.
Cấu hình thông báo banner khi đăng nhập (tuỳ chọn)
Có thể cấu hình tin nhắn hiển thị khi user đăng nhập FTP:
ftpd_banner=Welcome to your custom Ubuntu FTP server!
Thông báo này phù hợp để cung cấp thông tin quản trị hoặc lưu ý tới người dùng.
Cho phép chuyển file ở chế độ ASCII (nếu cần)
Để truyền file text (ví dụ script có dòng kết thúc kiểu Windows), cấu hình sau:
ascii_upload_enable=YES
ascii_download_enable=YES
Thông thường truyền ở chế độ binary là đủ, nhưng có thể kích hoạt nếu cần thiết.
Như vậy, điểm đặc trưng của cấu hình vsftpd là cần chỉ định rõ những gì được phép. Sau khi chỉnh sửa xong, nhớ khởi động lại vsftpd để áp dụng thay đổi.
Phần tiếp theo sẽ giải thích chi tiết về cấu hình bảo mật nâng cao, đặc biệt quan trọng nếu vận hành FTP qua Internet.
4. Tăng cường bảo mật
FTP rất tiện lợi nhưng không mã hóa nội dung truyền tải, nên có thể tiềm ẩn rủi ro bảo mật. Đặc biệt khi sử dụng qua Internet, cấu hình bảo mật là bắt buộc.
Dưới đây là các biện pháp bảo mật tiêu biểu với vsftpd.
Giới hạn phạm vi truy cập của user với chroot
Việc cho phép user FTP truy cập ra ngoài thư mục home là nguy hiểm. Do đó cần cấu hình chroot để giới hạn user chỉ trong thư mục home.
Bật hai dòng sau:
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_local_user=YES
: user chỉ có thể ở trong thư mục home.allow_writeable_chroot=YES
: cần thiết khi thư mục home cho phép ghi.
Nếu thiếu, sẽ gặp lỗi “500 OOPS: vsftpd: refusing to run with writable root inside chroot”.
Giới hạn user có thể đăng nhập
Nếu để tất cả user local có thể login FTP, có nguy cơ rò rỉ dữ liệu. Hãy cấu hình whitelist user:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
Ghi tên các user được phép vào /etc/vsftpd.userlist
(mỗi user 1 dòng):
sudo nano /etc/vsftpd.userlist
(Ví dụ)
ftpuser1
ftpuser2
Chỉ các user liệt kê mới được login FTP.
Kích hoạt mã hóa FTPS (SSL/TLS)
FTP mặc định truyền thông tin (ID, password, dữ liệu) ở dạng text nên rất dễ bị nghe lén. Hãy dùng FTPS (FTP over SSL/TLS) để mã hóa kết nối.
Đầu tiên tạo chứng chỉ SSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Tiếp theo, thêm cấu hình vào vsftpd.conf
:
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
Lúc này, client có thể chọn chế độ “FTPS explicit” để kết nối.
Vô hiệu hóa chức năng không dùng đến
Để tăng bảo mật, hãy vô hiệu hóa các tính năng không sử dụng:
anonymous_enable=NO
Cấm user anonymous đăng nhập (mặc định là NO, nhưng nên chỉ rõ).
Những thiết lập trên giúp máy chủ vsftpd trên Ubuntu đảm bảo an toàn cơ bản.
Nếu vận hành qua Internet, bắt buộc phải bật FTPS.
Tiếp theo sẽ hướng dẫn xử lý lỗi font khi truyền file tên tiếng Nhật.
5. Hỗ trợ tên file tiếng Nhật
Khi gửi nhận file qua FTP, đôi khi tên file tiếng Nhật bị lỗi ký tự (font lỗi), nhất là khi truyền giữa Windows và Ubuntu do khác biệt encoding.
Phần này sẽ hướng dẫn các biện pháp tránh lỗi font với vsftpd.
Nguyên nhân chính gây lỗi font
Chủ yếu do 3 nguyên nhân:
- Locale của Ubuntu không phải UTF-8
- Cài đặt encoding trên FTP client không trùng
- vsftpd không chạy ở chế độ UTF-8
Cần xác nhận và chỉnh lại cả 3 yếu tố.
Kiểm tra và cài đặt locale UTF-8 trên Ubuntu
Dùng lệnh sau kiểm tra locale:
locale
Kết quả mẫu:
LANG=ja_JP.UTF-8
Nếu LANG
hoặc LC_ALL
chưa phải UTF-8, chuyển bằng:
sudo update-locale LANG=ja_JP.UTF-8
source /etc/default/locale
Hoặc tạo locale nếu cần:
sudo locale-gen ja_JP.UTF-8
Kiểm tra thiết lập UTF-8 trên vsftpd
vsftpd mặc định hỗ trợ UTF-8, nhưng nên kiểm tra:
utf8_filesystem=YES
Dù không có dòng này, nếu hệ thống chạy UTF-8 thì thường không sao.
Tuy nhiên, một số phiên bản vsftpd cũ sẽ cần dòng này.
Cài đặt trên FTP client (ví dụ FileZilla)
Cài đặt này cực kỳ quan trọng. Với FileZilla:
- Mở “Site Manager”
- Chọn kết nối cần chỉnh
- Chọn tab “Charset”
- Chọn “Use custom charset” và nhập
UTF-8
Nhờ đó client sẽ đọc tên file đúng encoding, tránh lỗi font.
Lưu ý khi upload từ OS khác
Nếu upload file từ Windows dùng encoding khác như Shift_JIS, tên file có thể lỗi ngay khi upload.
Khi đó, hãy đổi tên file sang UTF-8 trước khi upload. Có thể dùng lệnh convmv
trên command line.
Tóm tắt
Khi sử dụng FTP với file tiếng Nhật, hãy đảm bảo cả server và client đều dùng UTF-8.
Trên Ubuntu hãy đặt chuẩn UTF-8, trên client (như FileZilla) hãy chọn đúng charset để tránh mọi lỗi font.
Tiếp theo sẽ giải thích về cấu hình passive mode và firewall – rất cần thiết nếu dùng FTP qua router hoặc cloud.
6. Thiết lập chế độ Passive và Firewall
Khi vận hành máy chủ FTP qua Internet hoặc trong môi trường NAT (sau router), thường gặp lỗi như “kết nối được nhưng không hiển thị danh sách file” hoặc “truyền dữ liệu thất bại”. Nguyên nhân chủ yếu là do chế độ hoạt động của FTP (Active/Passive) và cấu hình firewall chưa đúng.
Phần này sẽ hướng dẫn cách bật passive mode trên vsftpd và mở port trên firewall.
Passive mode là gì?
FTP có hai chế độ kết nối:
- Active mode: Server sẽ chủ động kết nối ngược về client
- Passive mode: Chỉ client kết nối tới server (tốt cho NAT/firewall)
Hiện nay nên ưu tiên Passive mode. Cần cấu hình rõ trên vsftpd.
Kích hoạt passive mode trên vsftpd
Thêm/Chỉnh các dòng sau vào /etc/vsftpd.conf
:
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
Thiết lập này cho phép vsftpd dùng port 40000-50000 cho kết nối dữ liệu (có thể tùy ý đổi dải port).
Chỉ định IP ngoài khi dùng NAT
Nếu server nằm sau router/NAT, hãy chỉ định địa chỉ IP public như sau:
pasv_address=203.0.113.45
Thay IP trên bằng địa chỉ thực tế của server.
Cấu hình firewall (UFW)
Mở các port cần thiết trên UFW:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
20/tcp
: Data channel (Active mode)21/tcp
: Command channel (login/gửi lệnh)40000:50000/tcp
: Dải port cho passive mode
Sau đó reload UFW:
sudo ufw reload
Lưu ý khi dùng trên cloud (AWS, GCP, Azure…)
Khi dùng cloud, cần mở port cả ở OS và security group của cloud.
Ví dụ AWS:
→ Mở port 21
và 40000-50000
TCP trong Security Group.
Tóm tắt
Để FTP hoạt động ổn định, cấu hình passive mode và mở port phù hợp là bắt buộc.
Nếu dùng từ mạng ngoài, đa phần lỗi timeout hay không truyền được file là do cấu hình thiếu bước này.
Tiếp theo sẽ hướng dẫn phân quyền và giới hạn cho từng user FTP.
7. Cấu hình theo user
Khi vận hành FTP thực tế, thường cần cấp quyền hoặc thư mục riêng biệt cho từng user (ví dụ, mỗi phòng ban hoặc từng nhân viên có folder riêng, không xem được file người khác).
Phần này sẽ hướng dẫn cách quản lý cấu hình vsftpd theo từng user.
Tạo user chuyên dụng cho FTP
Tạo user FTP với home directory riêng:
sudo adduser ftpuser1
User này sẽ có thư mục /home/ftpuser1
. Nếu chỉ dùng cho FTP, có thể vô hiệu hóa shell:
sudo useradd -m -s /usr/sbin/nologin ftpuser2
Phân quyền thư mục home
Với chroot, nên phân quyền như sau:
/home/ftpuser1/
├── files/ ← thư mục cho phép upload
Thiết lập quyền:
sudo mkdir /home/ftpuser1/files
sudo chown ftpuser1:ftpuser1 /home/ftpuser1/files
sudo chmod 755 /home/ftpuser1
Root của user (/home/ftpuser1
) không cho phép ghi, chỉ files/
được ghi, đảm bảo an toàn.
Cố định user vào thư mục bằng chroot
Như phần bảo mật, thêm vào vsftpd.conf
:
chroot_local_user=YES
allow_writeable_chroot=YES
Ngăn không cho user truy cập vùng của user khác.
Dùng file cấu hình riêng cho từng user (chi tiết nâng cao)
vsftpd cho phép cấu hình riêng biệt cho từng user. Ví dụ phân vùng root, quyền upload riêng:
user_config_dir=/etc/vsftpd_user_conf
Tạo thư mục và file cấu hình:
sudo mkdir /etc/vsftpd_user_conf
sudo nano /etc/vsftpd_user_conf/ftpuser1
Ví dụ nội dung:
local_root=/home/ftpuser1/files
write_enable=YES
Như vậy, ftpuser1
chỉ nhìn thấy /home/ftpuser1/files
và quyền ghi đọc được thiết lập riêng biệt.
Lưu ý khi dùng chung SFTP
Nếu đồng thời dùng SFTP (qua OpenSSH) và vsftpd, cấu hình shell, group,… nên quản lý tách biệt.

Tóm tắt
vsftpd cho phép phân quyền, thư mục và hạn chế cho từng user cực kỳ linh hoạt.
Quản lý đúng giúp bảo mật và tiện lợi tối đa.
Tiếp theo là hướng dẫn kiểm tra hoạt động của FTP server.
8. Kiểm tra hoạt động
Sau khi hoàn tất cài đặt và cấu hình, bước cực kỳ quan trọng là kiểm tra thực tế máy chủ FTP có hoạt động đúng không.
Phần này sẽ hướng dẫn kiểm tra kết nối qua dòng lệnh và bằng FTP client GUI.
Kiểm tra kết nối trên máy chủ (dòng lệnh)
Dùng lệnh ftp
để thử kết nối:
ftp localhost
Khi hiện prompt đăng nhập, nhập tên user/password đã tạo:
Name (localhost:username): ftpuser1
Password: ********
Có thể thử các lệnh cơ bản:
ls # Xem danh sách file
cd files # Đổi thư mục
put test.txt # Upload file
get test.txt # Download file
Nếu thao tác thành công là server FTP đã hoạt động đúng.
Lưu ý: Một số bản Ubuntu mới bỏ ftp
, có thể dùng lftp
hoặc ncftp
thay thế.
Kiểm tra với client GUI (ví dụ FileZilla)
Với người dùng phổ thông hoặc cần kiểm tra sâu, dùng FileZilla rất tiện lợi. Các bước:
Cách kết nối với FileZilla:
- Mở FileZilla, vào “Site Manager”
- Tạo “Site mới”
- Nhập thông tin như sau:
Mục | Nội dung |
---|---|
Host | IP hoặc domain server |
Protocol | FTP – File Transfer Protocol |
Encryption | Explicit FTP over TLS (nếu dùng FTPS) |
Login Type | Normal |
User | Tên user (ví dụ ftpuser1) |
Password | Password của user |
- Click “Connect” để thử kết nối
Nếu thấy được danh sách file là thành công. Hãy thử upload/download file để kiểm tra thêm.
Các lỗi thường gặp khi kết nối FTP
Lỗi | Điểm kiểm tra |
---|---|
Không kết nối được | Kiểm tra firewall và mở port đủ |
Login thất bại (530 Login incorrect) | Kiểm tra user/pass, userlist đúng chưa |
Không hiển thị danh sách file | Passive mode đã bật chưa, port đã mở chưa |
Lỗi font tên file | Kiểm tra cấu hình UTF-8 trên server/client |
Kiểm tra log trạng thái
Nếu vẫn lỗi, hãy kiểm tra log của vsftpd:
cat /var/log/vsftpd.log
Hoặc log hệ thống:
sudo journalctl -u vsftpd
Nhờ log sẽ biết “ai”, “khi nào”, “làm gì”, “lỗi ở đâu”.
Một số mẹo khác
- Kết nối chập chờn: Kiểm tra firewall hoặc phần mềm antivirus trên client.
- Bị giới hạn do bảo mật: Kiểm tra SELinux hoặc AppArmor (Ubuntu thường dùng AppArmor).
Tóm tắt
Lỗi FTP thường có quy luật. Cứ kiểm tra tuần tự file cấu hình, user, firewall, log là sẽ tìm ra nguyên nhân.
Phần tiếp theo sẽ trình bày các lỗi và cách xử lý thực tế khi vận hành FTP.
9. Khắc phục sự cố thường gặp
Kể cả đã cài xong, khi vận hành thực tế có thể gặp lỗi do cấu hình mạng, phân quyền, bảo mật v.v…
Dưới đây tổng hợp các lỗi phổ biến và cách xử lý cho người mới.
Các lỗi thường gặp và cách khắc phục
Lỗi: 530 Login incorrect
Nguyên nhân:
- User hoặc password nhập sai
- User chưa có trong
/etc/vsftpd.userlist
(nếu dùng whitelist)
Cách xử lý:
- Kiểm tra lại thông tin đăng nhập
- Nếu cấu hình
userlist_deny=NO
, hãy thêm user vào/etc/vsftpd.userlist
Lỗi: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Nguyên nhân:
- Khi bật chroot mà thư mục home được phép ghi
Cách xử lý:
- Thêm dòng
allow_writeable_chroot=YES
vàovsftpd.conf
- Hoặc phân chia thư mục home chỉ đọc, tạo thư mục con
files/
cho phép ghi
Lỗi: Không hiển thị danh sách file (timeout)
Nguyên nhân:
- Chưa bật passive mode hoặc chưa mở đủ port
- Dùng NAT mà chưa set
pasv_address
Cách xử lý:
- Cấu hình passive mode trong
vsftpd.conf
:
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
- Mở port 21 và 40000-50000 trên firewall và cloud security group
Lỗi: Tên file tiếng Nhật bị lỗi font
Nguyên nhân:
- Client không dùng UTF-8
- Server chưa đặt locale UTF-8
Cách xử lý:
- Cài đặt
ja_JP.UTF-8
trên Ubuntu, tạo locale bằnglocale-gen
- Chọn charset “UTF-8” trên FTP client (FileZilla, v.v…)
Lỗi: vsftpd không khởi động
Nguyên nhân:
- Sai cú pháp trong file cấu hình
- Xung đột port hoặc lỗi khởi động
Cách xử lý:
- Kiểm tra lại cú pháp, chú thích, lỗi chính tả
- Xem log
/var/log/vsftpd.log
vàjournalctl -xe
để tra cứu lỗi chi tiết
Tận dụng log khi xử lý sự cố
Luôn xem log khi lỗi:
cat /var/log/vsftpd.log
Hoặc log hệ thống:
sudo journalctl -u vsftpd
- Kết nối chập chờn: Kiểm tra firewall hoặc antivirus bên client.
- Bị hạn chế do bảo mật: Kiểm tra SELinux hoặc AppArmor (Ubuntu dùng AppArmor mặc định).
Tóm tắt
Lỗi khi vận hành FTP thường có mẫu số chung. Cứ kiểm tra cấu hình, user, firewall và log là sẽ tìm ra nguyên nhân.
Phần tiếp theo là tổng kết và các lưu ý khi vận hành dài hạn.
10. Tổng kết
Bài viết đã hướng dẫn chi tiết cách dựng máy chủ FTP trên Ubuntu sử dụng vsftpd (Very Secure FTP Daemon) từ cơ bản đến nâng cao, phù hợp cả cho người mới bắt đầu.