凌峰创科服务平台

tftp服务器怎么开启 linux

使用 tftpd-hpa (推荐)使用 atftpd,并附上详细的步骤和防火墙配置。

tftp服务器怎么开启 linux-图1
(图片来源网络,侵删)

使用 tftpd-hpa (推荐)

tftpd-hpa 是一个流行的、功能丰富的 TFTP 服务器实现,适用于大多数现代 Linux 发行版。

第 1 步:安装 TFTP 服务器

以 Debian/Ubuntu 为例,使用 apt 安装:

sudo apt update
sudo apt install tftpd-hpa

以 CentOS/RHEL/Fedora 为例,使用 yumdnf 安装:

# 对于 CentOS/RHEL 7/8
sudo yum install tftp-server
# 对于 Fedora/CentOS Stream/RHEL 9
sudo dnf install tftp-server

第 2 步:创建 TFTP 根目录和测试文件

TFTP 服务器需要一个根目录,所有传输的文件都存放在这里,通常我们放在 /var/lib/tftpboot

tftp服务器怎么开启 linux-图2
(图片来源网络,侵删)
  1. 创建目录 (如果不存在):

    sudo mkdir -p /var/lib/tftpboot
  2. 设置目录权限: TFTP 服务器通常以 nobodytftp 用户身份运行,这个用户需要对目录有读写权限。

    # 将目录所有者改为 tftp 用户 (在 Debian/Ubuntu 上是 tftp,在 RHEL/CentOS 上是 nobody)
    # 对于 Debian/Ubuntu:
    sudo chown -R tftp:tftp /var/lib/tftpboot
    # 对于 RHEL/CentOS:
    sudo chown -R nobody:nobody /var/lib/tftpboot
    # 给予目录读写和执行权限 (x 对于进入目录至关重要)
    sudo chmod -R 777 /var/lib/tftpboot

    注意777 权限比较宽松,便于测试,在生产环境中,你应该根据最小权限原则设置更严格的权限,755

  3. 放入一个测试文件: 为了方便测试,我们可以在根目录里放一个文件。

    tftp服务器怎么开启 linux-图3
    (图片来源网络,侵删)
    echo "Hello from TFTP Server!" | sudo tee /var/lib/tftpboot/test.txt

第 3 步:配置 TFTP 服务器

编辑 TFTP 服务器的配置文件。

  • 对于 Debian/Ubuntu (tftpd-hpa): 配置文件是 /etc/default/tftpd-hpa,使用 nanovim 打开它:

    sudo nano /etc/default/tftpd-hpa

    修改或确保以下内容存在:

    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/var/lib/tftpboot"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="--secure --create"
    • --secure:这是一个非常重要的安全选项,它限制了 TFTP 客户端只能从 TFTP_DIRECTORY 目录中读取文件,并且不能写入到该目录之外。
    • --create:允许客户端创建新文件(即上传文件)。
  • 对于 RHEL/CentOS (xinetd 方式): 在较新的 RHEL/CentOS 版本中,tftp-server 通常由 xinetd 超级服务器管理。

    1. 编辑配置文件:
      sudo nano /etc/xinetd.d/tftp
    2. 找到 server_args 这一行,确保它指向你的 TFTP 根目录,disable 设置为 no
      service tftp
      {
          socket_type             = dgram
          protocol                = udp
          wait                    = yes
          user                    = root
          server                  = /usr/sbin/in.tftpd
          server_args             = -s /var/lib/tftpboot
          disable                 = no
          per_source              = 11
          cps                     = 100 2
          flags                   = IPv4
      }
      • server_args = -s /var/lib/tftpboot-s 选项指定了 TFTP 的根目录。

第 4 步:启动并启用 TFTP 服务

  • 对于 Debian/Ubuntu (systemd):

    # 重启 tftpd-hpa 服务以应用新配置
    sudo systemctl restart tftpd-hpa
    # 将服务设置为开机自启
    sudo systemctl enable tftpd-hpa
    # 检查服务状态
    sudo systemctl status tftpd-hpa
  • 对于 RHEL/CentOS (xinetd):

    1. 启用并启动 xinetd 服务:
      sudo systemctl enable --now xinetd
    2. 检查 xinetd 状态:
      sudo systemctl status xinetd

      tftp 服务没有生效,可以尝试重启 xinetd

      sudo systemctl restart xinetd

第 5 步:配置防火墙

Linux 系统的防火墙默认会阻止 TFTP 请求(UDP 端口 69)。

  • 对于使用 ufw (Uncomplicated Firewall) 的系统 (如 Ubuntu):

    # 允许 TFTP 服务 (它会自动开放 UDP 69 端口)
    sudo ufw allow tftp
    # 重新加载防火墙规则 (ufw allow 会自动加载)
    # sudo ufw reload
  • 对于使用 firewalld 的系统 (如 CentOS/RHEL/Fedora):

    # 添加永久规则,并立即生效
    sudo firewall-cmd --permanent --add-service=tftp
    sudo firewall-cmd --reload

第 6 步:测试 TFTP 服务器

另一台 Linux 机器上(或者在服务器上使用 localhost),安装 tftp 客户端工具(如果尚未安装):

# Debian/Ubuntu
sudo apt install tftp
# RHEL/CentOS
sudo yum install tftp

现在进行测试:

  1. 下载文件

    # 从服务器下载 test.txt 文件到当前目录
    tftp <你的服务器IP地址> -c get /test.txt

    检查当前目录下是否出现了 test.txt 文件,并用 cat test.txt 查看内容。

  2. 上传文件

    # 创建一个新文件用于上传
    echo "This is a test file for upload." > upload.txt
    # 将 upload.txt 上传到服务器的 /upload.txt
    tftp <你的服务器IP地址> -c put upload.txt /upload.txt

    然后回到 TFTP 服务器上,检查 /var/lib/tftpboot 目录下是否存在 upload.txt 文件。

如果以上命令都成功执行,那么你的 TFTP 服务器就配置成功了!


使用 atftpd

atftpd 是另一个 TFTP 服务器实现,它更注重性能和并发。

安装

# Debian/Ubuntu
sudo apt install atftpd
# RHEL/CentOS (可能需要 EPEL 源)
sudo yum install atftpd

配置

atftpd 的配置相对简单,通常通过命令行参数或启动脚本设置。

  1. 创建目录和文件 (与方法一相同)

  2. 创建 systemd 服务文件 (如果不存在) 在 /etc/systemd/system/ 目录下创建一个名为 atftpd.service 的文件:

    sudo nano /etc/systemd/system/atftpd.service
    ```如下:

    [Unit] Description=Advanced TFTP Server After=network.target

    [Service] Type=simple ExecStart=/usr/sbin/atftpd --daemon --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.255.8.8 --maxthread 100 --verbose=5 /var/lib/tftpboot Restart=on-failure

    [Install] WantedBy=multi-user.target

    
    这里的核心是 `ExecStart`,它指定了 TFTP 的根目录是 `/var/lib/tftpboot`。
  3. 启动并启用服务

    sudo systemctl daemon-reload
    sudo systemctl start atftpd
    sudo systemctl enable at
分享:
扫描分享到社交APP
上一篇
下一篇