我无法让 TFTP 在我的系统上正常工作。我已经设置了/etc/default/tftpd-hpa
像所有内容一样的/srv/tftp/
权限(也)但是,每当我执行 a 时,我都会超时(并且我在本地主机上连接到 127.0.0.1)。我认为 TFTP 没有在某处记录,是吗?任何有关如何调试此问题的帮助将不胜感激!777
/srv/
get test
编辑#1
这是在 (K)Ubuntu 系统上,/srv
其内容由 拥有root:root
,我现在将其更改为,nobody:nogroup
但我仍然得到相同的超时:
$ ls -la
total 12
drwxrwxrwx 3 nobody nogroup 4096 Nov 5 08:47 .
drwxrwxrwx 3 nobody nogroup 4096 Nov 5 2013 ..
drwxrwxrwx 2 nobody nogroup 4096 Nov 5 2013 artifacts
-rwxrwxrwx 1 nobody nogroup 0 Nov 5 08:48 test
-rw-r--r-- 1 reg reg 0 Nov 5 08:47 vx.bin
reg@ubuntu:/srv/tftp$tftp 127.0.0.1
tftp> get test
Transfer timed out.
编辑#2
在意识到似乎没有tftp
运行实例后,我尝试启动它#tftp
,然后 Ubuntu 告诉我,我应该apt-get install cobbler
安装 cobbler,这就是我所做的,然后我再次尝试并得到以下结果:
# tftpd
Traceback (most recent call last):
File "/usr/sbin/tftpd", line 51, in <module>
import tornado.ioloop as ioloop
ImportError: No module named tornado.ioloop
root@ubuntu:/srv#
我想知道这是什么意思,有什么线索吗?
答案1
我最近不得不自己处理这个问题几次,这些是我问自己解决问题的问题:
- tftpd 是从 xinetd 运行还是作为独立的守护进程运行?
- 您需要更改/etc/hosts.allow 或hosts.deny
- SELinux 是否已启用(使用“getenforce”命令检查)?
- 主机防火墙是否正在运行? (服务 iptables 状态)
- 您确定 tftpd 正在使用的目录作为数据目录吗?
- 您尝试“获取”的文件实际上存在吗?
我的赌注是以上几点的结合。例如防火墙和 SELinux 以及数据目录位置。
您不希望 /srv 以模式 0777 打开。并且您也不需要对 tftp 数据目录执行此操作。您只需要世界可读的文件。除非您将文件放到服务器上。在这种情况下,您必须提前创建文件,并在编写文件时使它们全局可写。
祝你好运!
答案2
我最终跟随本指南这说明openbsd-inetd
也应该安装它,并且我还必须RUN_DAEMON="yes"
在 tftp 配置文件中进行设置/etc/default/tftpd-hpa
。
更新#1
上面的链接不再有效,所以我在这里找到了一个替代方案,标题为: 在 Ubuntu 12.04 LTS 上运行 TFTP 服务器(精确)更新。
答案3
我刚刚在 Debian Jessie 上遇到了这个问题:“传输超时。”。
在 中/etc/default/tftpd-hpa
,有一行地址:TFTP_ADDRESS="0.0.0.0:69"
。
将其替换为完整的服务器地址。例如:
TFTP_ADDRESS="192.168.99.10:69"
并重新启动守护进程。这似乎已经为我解决了。
Debian 中的此变量将--address
选项设置为守护进程。您可能需要在不同的发行版上进行不同的设置,但最终您应该在执行以下操作时看到地址ps x
:
# ps x | grep tftp
3988 ? Ss 0:00 /usr/sbin/in.tftpd --listen --user tftp --address 192.168.99.10:69 --secure /docs/tftp-pxe
看起来像是服务器或客户端中的错误。
答案4
如果这是 CentOS/Fedora,您可以像这样从 TFTP 启用详细消息传递。在配置文件中/etc/xinetd.d/tftp
,将 server_args 变量更改为:
server_args = -v -v -l /var/log/tftpd
请务必重新启动服务器。您可以添加其他-v
开关以使其更加详细。