Yêu cầu cơ bản cho máy chủ FTP
Để triển khai một máy chủ FTP trên hệ thống Linux nhúng, cần đáp ứng các yêu cầu sau:
- Phải có cơ chế xác thực tài khoản người dùng.
- Người dùng chỉ được truy cập trong một thư mục gốc cố định, không được phép di chuyển lên thư mục cấp cao hơn (ví dụ: /data/share).
- Không cho phép truy cập ẩn danh (anonymous) vì lý do bảo mật.
- Có thể cần thiết lập quyền chỉ đọc (read-only).
Lựa chọn giải pháp
ftpd tích hợp trong BusyBox
Trước tiên, có thể xem xét sử dụng ftpd có sẵn trong BusyBox. Cấu hình trong file /etc/inetd.conf sẽ trông như sau:
ftp stream tcp nowait root /usr/sbin/ftpd ftpd -w /data/share
Sau đó, khởi động lại thiết bị.
Tuy nhiên, sau khi tìm hiểu về các tùy chọn cấu hình của ftpd, ta thấy rằng nó chỉ hỗ trợ truy cập ẩn danh. Do đó, giải pháp này không đáp ứng được yêu cầu xác thực tài khoản.
vsftpd
vsftpd là một lựa chọn phù hợp hơn vì nó hỗ trợ cả xác thực người dùng và giới hạn quyền truy cập vào thư mục.
Cách chuyển giao (Porting) vsftpd
Tải mã nguồn
Tải mã nguồn từ trang chủ của vsftpd, ví dụ phiên bản vsftpd-3.0.3.tar.gz, và giải nén.
Cấu hình và biên dịch
Cần điều chỉnh file Makefile để sử dụng trình biên dịch chéo (cross-compiler) cho kiến trúc ARM.
# Mở file Makefile
vim Makefile
# Thay đổi biến CC
# CC = gcc
CROSS_COMPILE = arm-linux-gnueabihf-
CC = $(CROSS_COMPILE)gcc
Sau đó, tiến hành biên dịch:
make
Lưu ý: Trước khi chạy lệnh make, hãy đảm bảo rằng trình biên dịch arm-linux-gnueabihf-gcc đã được thêm vào biến môi trường PATH.
Cài đặt lên thiết bị nhúng
Sau khi biên dịch thành công, sao chép file thực thi vsftpd vào thư mục /usr/sbin trên thiết bị nhúng và cấp quyền thực thi. Đồng thời, sao chép file cấu hình vsftpd.conf vào thư mục /etc.
cp vsftpd /path/to/target/usr/sbin/
chmod +x /path/to/target/usr/sbin/vsftpd
cp vsftpd.conf /path/to/target/etc/
chown root:root /path/to/target/etc/vsftpd.conf
Khởi động dịch vụ:
vsftpd &
Lúc này, máy chủ FTP đã có thể truy cập, nhưng vẫn cần điều chỉnh thêm để đáp ứng các yêu cầu cụ thể.
Cấu hình vsftpd
Các tùy chọn cấu hình chính cần thiết trong file /etc/vsftpd.conf như sau:
# Vô hiệu hóa truy cập ẩn danh
anonymous_enable=NO
# Cho phép người dùng cục bộ đăng nhập
local_enable=YES
# Thay đổi thư mục gốc sau khi đăng nhập, mặc định là thư mục home của người dùng
local_root=/data/ftp_root
# Không cho phép chuyển sang thư mục cấp cao hơn
chroot_local_user=YES
# Kích hoạt danh sách người dùng bị giới hạn trong thư mục của mình
chroot_list_enable=YES
# (mặc định theo sau)
chroot_list_file=/etc/vsftpd/chroot_list
Tạo người dùng mới
Sử dụng các lệnh sau để tạo người dùng FTP mới:
# Tạo người dùng ftp_user, với thư mục home là /data/ftp_user
useradd -d /data/ftp_user ftp_user
# Đặt mật khẩu cho người dùng ftp_user
passwd ftp_user
Cập nhật quyền hạn cho người dùng:
# Hạn chế người dùng ftp_user chỉ có thể sử dụng FTP, không thể telnet
usermod -s /sbin/nologin ftp_user
# Khôi phục quyền truy cập shell cho người dùng ftp_user (nếu cần)
# usermod -s /bin/bash ftp_user
# Thay đổi thư mục home của người dùng ftp_user
usermod -d /data/ftp_user ftp_user
Sau khi hoàn tất các bước trên, khởi động lại dịch vụ vsftpd để áp dụng các thay đổi.