Tftp

哪個 tftp 伺服器正在執行

  • January 21, 2014

我需要找出tftp正在執行的伺服器/守護程序,以便編輯它的配置並查看錯誤日誌。

我發現有一個 tftpd 服務正在執行:

# netstat -tupln | grep ftp
udp        0      0 0.0.0.0:69              0.0.0.0:*                           7915/in.tftpd
# ps aux | grep ftp
root      7915  0.0  0.0   2704   296 ?        Ss   22:10   0:00 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /tftpboot

我試圖編輯它的配置(注意使用者名nobody):

# nano /etc/xinetd.d/tftp
# cat /etc/xinetd.d/tftp
service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = -v -s /tftpboot
disable         = no
}

但是重新啟動 tftpd 時,沒有任何變化:

# kill 7915
# ps aux | grep ftp
root     16815  0.0  0.0   2704   124 ?        Ss   22:31   0:00 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /tftpboot

所以我嘗試編輯另一個配置文件:

# nano /etc/inetd.conf
# cat /etc/inetd.conf
# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard                stream  tcp     nowait  root    internal
#discard                dgram   udp     wait    root    internal
#daytime                stream  tcp     nowait  root    internal
#time           stream  tcp     nowait  root    internal

#:STANDARD: These are standard services.

#:BSD: Shell, login, exec and talk are BSD protocols.

#:MAIL: Mail, news and uucp services.

#:INFO: Info services

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp            dgram   udp4    wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot

#:RPC: RPC based services

#:HAM-RADIO: amateur-radio services

#:OTHER: Other services

然後嘗試重新啟動:

# kill 16815
# ps aux | grep ftp
root     18287  0.0  0.0   2704   120 ?        Ss   22:34   0:00 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /tftpboot

但正如你所見,一切都沒有改變。

我已經修剪了上面的輸出以獲得更好的可讀性。

那麼我如何知道正在執行哪個 tftp 守護程序以及配置文件和錯誤日誌是什麼?


編輯#1(2014 年 1 月 21 日,07:33 UTC):

回複評論員 @“Mark Plotnick”

# ps -efl|grep tftp
1 S root     18287     1  0  80   0 -   676 poll_s Jan20 ?        00:00:00 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /tftpboot
0 S root     19271 10638  0  80   0 -  1097 pipe_w 11:36 pts/1    00:00:00 grep --color=auto tftp
# ps -p 1
 PID TTY          TIME CMD
   1 ?        00:00:03 init

回復回复者@“slm”

在將它們導入 Ubuntu 12.04 後,我已經執行了您編寫的命令:

# dpkg --list | grep tftp
ii  atftp                                        0.7.dfsg-11                                      advanced TFTP client
ii  tftp                                         0.17-18ubuntu2                                   Trivial file transfer protocol client
rc  tftpd                                        0.17-18ubuntu2                                   Trivial file transfer protocol server
ii  tftpd-hpa                                    5.2-1ubuntu1                                     HPA's tftp server
# dpkg --listfiles tftpd-hpa
/.
/usr
/usr/sbin
/usr/sbin/in.tftpd
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/doc
/usr/share/doc/tftpd-hpa
/usr/share/doc/tftpd-hpa/README
/usr/share/doc/tftpd-hpa/README.security
/usr/share/doc/tftpd-hpa/README.Debian
/usr/share/doc/tftpd-hpa/copyright
/usr/share/doc/tftpd-hpa/examples
/usr/share/doc/tftpd-hpa/examples/sample.rules
/usr/share/doc/tftpd-hpa/examples/tftpd-hpa.preseed
/usr/share/doc/tftpd-hpa/changelog.Debian.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/tftpd-hpa
/etc
/etc/init
/etc/init/tftpd-hpa.conf
/etc/init.d
/usr/share/man/man8/tftpd.8.gz
/etc/init.d/tftpd-hpa
# dpkg --status tftpd-hpa
Package: tftpd-hpa
Status: install ok installed
Priority: extra
Section: net
Installed-Size: 137
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Source: tftp-hpa
Version: 5.2-1ubuntu1
Depends: debconf (>= 0.5) | debconf-2.0, upstart-job, libc6 (>= 2.11), libwrap0 (>= 7.6-4~), adduser
Suggests: syslinux-common
Conflicts: atftpd, tftpd
Conffiles:
/etc/init/tftpd-hpa.conf 3647737c313ad1968b8463388ded2d26
Description: HPA's tftp server
Trivial File Transfer Protocol (TFTP) is a file transfer protocol, mainly to
serve boot images over the network to other machines (PXE).
.
tftp-hpa is an enhanced version of the BSD TFTP client and server. It
possesses a number of bugfixes and enhancements over the original.
.
This package contains the server.
Homepage: http://www.kernel.org/pub/software/network/tftp/
Original-Maintainer: Daniel Baumann <daniel.baumann@progress-technologies.net>
# /usr/sbin/in.tftpd --version
tftp-hpa 5.2, with remap, with tcpwrappers
# sudo lsof -p $(pgrep -n "in.tftpd")
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/tlvlab/.gvfs
     Output information may be incomplete.
COMMAND    PID USER   FD   TYPE     DEVICE SIZE/OFF     NODE NAME
in.tftpd 18287 root  cwd    DIR       0,20        0  9575553 /
in.tftpd 18287 root  rtd    DIR        8,1     4096        2 /
in.tftpd 18287 root  txt    REG        8,1    35008   270805 /usr/sbin/in.tftpd
in.tftpd 18287 root  mem    REG        8,1    47040 28836074 /lib/i386-linux-gnu/libnss_files-2.15.so
in.tftpd 18287 root  mem    REG        8,1    42652 28836073 /lib/i386-linux-gnu/libnss_nis-2.15.so
in.tftpd 18287 root  mem    REG        8,1    30520 28836075 /lib/i386-linux-gnu/libnss_compat-2.15.so
in.tftpd 18287 root  mem    REG        8,1    92016 28836060 /lib/i386-linux-gnu/libnsl-2.15.so
in.tftpd 18287 root  mem    REG        8,1  1734120 28836077 /lib/i386-linux-gnu/libc-2.15.so
in.tftpd 18287 root  mem    REG        8,1    35032 28836781 /lib/i386-linux-gnu/libwrap.so.0.7.6
in.tftpd 18287 root  mem    REG        8,1   134344 28836067 /lib/i386-linux-gnu/ld-2.15.so
in.tftpd 18287 root    0u   CHR        1,3      0t0     1029 /dev/null
in.tftpd 18287 root    1u   CHR        1,3      0t0     1029 /dev/null
in.tftpd 18287 root    2u   CHR        1,3      0t0     1029 /dev/null
in.tftpd 18287 root    3u  unix 0xf0030d80      0t0  2154638 socket
in.tftpd 18287 root    4u  IPv4    2154641      0t0      UDP *:tftp

日誌文件的路徑可能是/var/log/syslog(文件/etc/syslog.conf不存在)。

此設置tftpd由超級伺服器管理xinetd。因此,您列出的配置文件是tftpdxinetd.

我正在使用 Fedora 19,但可以使用與其他發行版的包管理器類似的方法來執行類似的結果。

tftpd 的包叫什麼名字?

使用 RPM 很容易找到。

$ rpm -qa | grep tftp
tftp-server-0.49-2.el5.centos

所以在 CentOS 5.x 上,這個包叫做 `tftp-server。它還顯示了版本,但我們稍後會介紹。

安裝中包含哪些文件?

在包管理器的幫助下,另一個簡單的方法。

$ rpm -ql tftp-server
/etc/xinetd.d/tftp
/tftpboot
/usr/sbin/in.tftpd
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz

**注意:**沒有其他配置文件,所以這個版本的所有配置tftpd都是通過命令行完成的。注意這一點很重要,因為這告訴我們必須更改服務文件tftpd,. 另請注意,它有一個手冊頁,如果我們也不確定要設置/取消設置什麼切換,這將很有幫助。xinetd``/etc/xinetd.d/tftp``tftpd

什麼版本?

您可以通過多種方式獲取此資訊。最簡單的方法是從包管理器中獲取它。

$ rpm -qi tftp-server
Name        : tftp-server                  Relocations: (not relocatable)
Version     : 0.49                              Vendor: CentOS
Release     : 2.el5.centos                  Build Date: Sat 26 Sep 2009 12:28:27 PM EDT
...

我們通常也可以從工具本身獲得它。

$ /usr/sbin/in.tftpd --version
tftp-hpa 0.49, with remap, with tcpwrappers

手冊頁

值得注意的一個開關是詳細程度開關。

  --verbose, -v
         Increase  the  logging  verbosity  of tftpd.  This flag can be 
         specified multiple times for even higher verbosity.

因此,您可以添加更多-v開關以在日誌中獲得更詳細的輸出,特別是這些行:

server          = /usr/sbin/in.tftpd
server_args     = -s /tftpboot -vv

記錄?

查看手冊頁,除了詳細程度開關之外,似乎沒有任何其他開關。因此,鑑於此,以及這是一項服務的事實,日誌記錄可能在CentOS 上xinetd的預設 syslog 日誌中。/var/log/messages在其他發行版 (Debian/Ubuntu) 上,此文件通常稱為/var/log/syslog.

您可以syslog在其配置文件中查看我的日誌記錄在哪裡,more /etc/syslog.conf.

還有什麼?

您還可以在緊要關頭lsof找出特定程序正在使用哪些文件。因此,您也許可以通過此方法找出給定程序正在使用的配置文件。雖然守護程序通常會打開配置,讀取它,然後關閉它,但您也可能會獲得好運。

同樣對於按需啟動的服務,就像xinetd基於服務的情況一樣,這些服務通常不會執行,直到有人嘗試訪問它們,所以甚至可能沒有程序可以詢問。

這是一個httpd(即 Apache)的範例,只是為了效果。

$ sudo lsof -p $(pgrep -n http) | head -7
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
httpd   3832 apache  cwd    DIR  252,0     4096       2 /
httpd   3832 apache  rtd    DIR  252,0     4096       2 /
httpd   3832 apache  txt    REG  252,0   332264 1355575 /usr/sbin/httpd
httpd   3832 apache  mem    REG  252,0   144776 2031805 /lib64/ld-2.5.so
httpd   3832 apache  mem    REG  252,0   614992 3473627 /lib64/libm-2.5.so
httpd   3832 apache  mem    REG  252,0   129984 2031683 /lib64/libpcre.so.0.0.1

引用自:https://unix.stackexchange.com/questions/110157