1. Tạo Dockerfile
File cấu hình phải được mở để chỉnh sửa. Đây là cấu hình mặc định của máy chủ TFTP.
Ở đây, TFTP_USERNAME được đặt thành tftp . Nó có nghĩa là máy chủ TFTP sẽ chạy với tư cách là tftp của người dùng .
TFTP_DIRECTORY được đặt thành /var/lib/tftpboot. Nó có nghĩa là /var/tftpboot là thư mục trên máy chủ này mà bạn có thể truy cập qua TFTP.
TFTP_ADDRESS được đặt thành : 69 và nó có nghĩa là TFTP sẽ chạy trên cổng 69 .
TFTP_OPTIONS được đặt thành –secure . Biến này đặt các tùy chọn TFTP. Có nhiều tùy chọn mà bạn có thể sử dụng để định cấu hình cách máy chủ TFTP sẽ hoạt động. Tùy chọn –secure có nghĩa là thay đổi thư mục TFTP thành thư mục được đặt trên biến TFTP_DIRECTORY khi bạn tự động kết nối với máy chủ TFTP. Đây là một tính năng bảo mật. Nếu bạn chưa đặt tùy chọn –secure , thì bạn sẽ phải kết nối với máy chủ TFTP và đặt thư mục theo cách thủ công. Đó là rất nhiều rắc rối và rất không an toàn.
Bây giờ, mình chỉ muốn thay đổi TFTP_DIRECTORY thành /var/tftpboot và thêm tùy chọn –create vào TFTP_OPTIONS . Nếu không có tùy chọn –create , bạn sẽ không thể tạo hoặc tải các file mới lên máy chủ TFTP. Bạn sẽ chỉ có thể cập nhật các file hiện có. Vì vậy, mình nghĩ tùy chọn –create rất quan trọng.
cat > Dockerfile << OEF
FROM ubuntu:20.04
RUN apt update
RUN apt install -y systemctl vim tftpd-hpa
RUN echo 'TFTP_USERNAME="tftp"' > /etc/default/tftpd-hpa
RUN echo 'TFTP_DIRECTORY="/var/tftpboot"' >> /etc/default/tftpd-hpa
RUN echo 'TFTP_ADDRESS=":69"' >> /etc/default/tftpd-hpa
RUN echo 'TFTP_OPTIONS="--secure --create"' >> /etc/default/tftpd-hpa
RUN mkdir /var/tftpboot && chown tftp:tftp /var/tftpboot
EXPOSE 69/udp
WORKDIR /var/tftpboot
ENTRYPOINT ["systemctl", "start"]
CMD ["tftpd-hpa"]
OEF
2. Build Docker image
docker build -t tftpd:ver1 --force-rm -f Dockerfile .
3. Hãy run Docker image này thử
docker run -p 69:69/udp -v /var/tftpboot:/var/tftpboot --name=tftp-server -it tftpd:ver1
Chúng ta có 1 container mới tên tftp-server đã được chạy
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fad88c0f4af0 tftpd:ver1 "systemctl start tft…" 23 seconds ago Up 23 seconds 0.0.0.0:69->69/udp, :::69->69/udp tftp-server
Chúng ta có kết quả port 69 của TFTP server đã listen
$ netstat -ulnp | grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 96871/docker-proxy
udp6 0 0 :::69 :::* 96877/docker-proxy
Nếu bạn không muốn chạy Docker thì hãy cài tftpd-hpa theo các bước dưới đây
1. Update hệ thống
apt update
2. Cài đặt tftpd-hpa
apt install tftpd-hpa -y
3. Sửa config
cat > /etc/default/tftpd-hpa << OEF
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
OEF
4. Hãy tạo thư mục TFTP
mkdir /var/tftpboot
5. Phân quyền thư mục TFTP
chown tftp:tftp /var/tftpboot
6. Khởi động tftpd-hpa
systemctl start tftpd-hpa
systemctl status tftpd-hpa
systemctl enable tftpd-hpa