システム情報:
Linux ravi-Inspiron-N5010 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10
20:08:14 UTC 2015 i686 i686 i686 GNU/Linux
Ubuntu 14.04.2 LTSを使用します。
Tftp localhostの実行に苦労しています。
試した:
root@ravi-Inspiron-N5010:/home/ravi/Desktop# service tftpd-hpa restart
tftpd-hpa stop/waiting
tftpd-hpa start/running
root@ravi-Inspiron-N5010:/home/ravi/Desktop# service tftpd-hpa status
tftpd-hpa start/running
今、私はエラーが発生します:
root@ravi-Inspiron-N5010:/home/ravi/Desktop# tftp 127.0.0.1
tftp> put test
Error code 2: Access violation
tftp>
私が入れようとしているファイルの許可は:
root@ravi-Inspiron-N5010:/home/ravi/Desktop# ls -ld test
-rwxrwxrwx 1 ravi ravi 0 Mar 21 20:09 test
/ tftpbootフォルダーの許可:
root@ravi-Inspiron-N5010:/# ls -ld tftpboot/
drwxrwxrwx 2 nobody root 4096 Mar 15 15:34 tftpboot/
追加情報
root@ravi-Inspiron-N5010:/home/ravi/Desktop# nano /etc/xinetd.d/tftp
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot -s
disable = no
}
この問題の解決を手伝ってください。
Tftpを介して配置するファイルは、宛先ディレクトリに存在し、上書きできる許可を持っている必要があります。インスタンスの場合、test
は/tftpboot
に存在する必要があります。
理由はtftpのマニュアルページのバグセクションで確認できます。
私はtftpを介して新しいファイルを置く方法を解決するのに苦労していますが、それでも方法がわかりません。
syslog
を確認すると、次のことがわかります。
tftpd: serving file from /srv/tftp
基本的にバグがあり、あなたのケースではすべてのファイルをフォルダー/tftpboot
から/srv/tftp
に移動する必要があります(存在しない場合はフォルダー/srv/tftp
を作成します)。 777パーミッションと内部のすべてのファイルに対して、xinetd
を再起動すると動作します!
Leondgarseが言及したように、設定で新しいファイルを直接アップロードすることはできません。ただし、次のようにserver_argsに「-c」を追加できます。
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = -c -s /tftpboot
disable = no
}
詳細については、「in.tftpd」のマニュアルページを参照してください。
--create, -c
Allow new files to be created. By default, tftpd will only allow upload of files that already exist. Files are created with default permissions allow‐
ing anyone to read or write them, unless the --permissive or --umask options are specified.
これは、14.04の/etc/inetd.conf
にtftp
サーバー設定があるためです。
#BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
この行をコメントアウトして、再試行できます。
ここから入手しました: http://www.beer.org/blog/tftpd-and-xinetd-on-ubuntu.html
Dayanand AmbawadeによるUbuntu 14.0.4でのTFTPDサーバーのトラブルシューティング
ステップ-1:/etc/inetd.confを編集
tftp dgram udp wait nobody/usr/sbin/tcpd /usr/sbin/in.tftpd/srv/tftpboot
ステップ-2:tftpdのスクリプトを書く
Sudo nano /etc/xinetd.d/tftp
サービスtftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /srv/tftpboot -s
disable = no
}
ステップ-3:ディレクトリを作成し、権限を設定します
Sudo mkdir /srv/tftpboot
Sudo echo "Test TFTP Server" > /srv/tftpboot/test.txt
Sudo chmod 777 -R /srv/tftpboot
Sudo chown -R nobody.root /srv/tftpboot
ステップ-4:サービスの開始
Sudo service xinetd restart
Sudo service inetutils-inetd restart
ステップ5:サーバーのテスト
echo "get test.txt" | tftp 127.0.0.1
cat test.txt
Test TFTP Server
うまくいけば、これで問題が解決するでしょう。よろしく
私の場合、(Debian 9.9)/etc/inetd.confを編集し、次の行を変更することで解決します:
tftp dgram udp wait nobody/usr/sbin/tcpd /usr/sbin/in.tftpd / srv/tftp
沿って
tftp dgram udp wait nobody/usr/sbin/tcpd /usr/sbin/in.tftpd / tftpboot
ファイル「/etc/xinetd.d/tftp」は読み取っていませんでした。
これがTFTPの設計に関係するものかどうかはわかりませんが、putを実行するとファイルを作成できません。
解決:
事前にファイルを作成し、777権限を付与します。転送を再度実行すると、動作するはずです。
ファイルモードビットを確認してください。
私の場合、tftpルートディレクトリは/opt/tftpboot/
です
ls -l
コマンドを使用すると、ファイルモードが600であることがわかりました。匿名でこのファイルを取得するためにtftpにアクセスしようとすると、アクセス違反が報告されます。
これがこのエラーの原因である可能性があります。しかし、それには別の理由があるかもしれません。