web-dev-qa-db-ja.com

TFTPアップロードの失敗

Centos 5.4サーバーでxinetdを介してTFTPDを実行しています。 tftp経由でファイルにアクセスできるので、サービスは正常に動作しています。しかし、ファイルをアップロードしようとするたびに、0 Permission deniedメッセージが表示されます。

/ tftpbootにファイルをすでに作成し、権限を666に設定しました。

私のtftpd構成には詳細なログ(-vvvv)がありますが、/ var/log/messagesに表示されるのは次のとおりです。

開始:tftp pid = 20383 from = 192.168.77.4

SELinuxがTFTPDのアップロードを防ぐことができるとの言及をいくつか見ましたが、ログに何かが表示されることを期待しています。 SELinuxをpermissiveモードに設定しています。

何か案は?

6
dunxd

http://grimwell.wikispaces.com/tftpd の情報に従い、selinuxポリシーを適用するために「すすぎと繰り返し」に特に注意を払いました。数回試行した後、すべてが機能し始めました-アップロード、および新しいファイルの作成。

要するに:

  • centosに監査がインストールされていることを確認してください。そうしないと、SELinuxが何もログに記録しない可能性があります。
  • xinetd.d/tftpdがサーバーのargs行に-c -v -s /tftpbootを持っていることを確認してください
  • tftpが書き込むディレクトリに777の権限があることを確認してください
  • tftp localhostを実行し、ディレクトリにファイルを配置してみます
  • ディレクトリ内のファイルをタッチし、chmod 666を実行してから、tftp localhostを介してファイルを上書きします
  • seLinuxポリシーを作成するには、grep tftp /var/log/audit/audit.log | audit2allow -m tftpwriteを実行します。ポリシーに書き込み行と作成行が含まれていることを確認してください。そうでない場合は、書き込みと作成を再試行して監査ログにアラートを生成し、再試行してください。
  • grep tftp /var/log/audit/audit.log | audit2allow -M tftpwriteを使用してインストール可能なポリシーを作成し、semodule -i tftpwrite.ppを使用してインストールします
  • service xinetd reloadそしてtftpを使用してみてください。

素晴らしい。他の人がこれが役に立つことを願っています!

4
dunxd

この問題に対する別のより良い解決策を見つけました。 selinuxのポリシーファイルを書いた人がtftpのアップロードが必要だとは思わなかったので、掘り下げてみました。ここではまだ参照されていないものをインターネット上で見つけることはできませんでしたが、selinuxポリシーを検索することで、tftp書き込み用にシステム上にすでにある別のセキュリティコンテキストを見つけることができました。/tftpbootのコンテキストを変更すると、問題が修正されました。

# sesearch -a | grep tftpdir  |grep tftpd_
   allow tftpd_t tftpdir_t : file { read getattr }; 
   allow tftpd_t tftpdir_t : dir { read getattr search }; 
   allow tftpd_t tftpdir_t : lnk_file { read getattr }; 
   allow tftpd_t tftpdir_rw_t : file { ioctl read write create getattr setattr lock append unlink link rename }; 
   allow tftpd_t tftpdir_rw_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir }; 
   allow tftpd_t tftpdir_rw_t : lnk_file { read create getattr setattr unlink link rename }; 
# ls -Z /tftpboot/ -a
drwxrwxrwx  root root system_u:object_r:tftpdir_t      .
drwxr-xr-x  root root system_u:object_r:root_t         ..
# chcon -t tftpdir_rw_t /tftpboot
# ls -Z /tftpboot/ -a
drwxrwxrwx  root root system_u:object_r:tftpdir_rw_t   .
drwxr-xr-x  root root system_u:object_r:root_t         ..
4
mtinberg

-sオプションを指定してtftpdを起動していますか?一部のクライアントはこれを期待しているかもしれません。 fooというファイルを/fooにアップロードすることは、実際にはサーバー上の/tftpboot/fooを対象としています。 -s /tftpbootを追加すると、基本的に、そのディレクトリに対して「chroot」を実行するようサーバーに指示します。

手動でtftpdを実行してみてください。 xinetd経由ではなく、出力を確認します。 straceで実行してみて、どのファイルが開こうとしているか、どのシステムがそれを呼び出しているかを正確に確認することもできます。

/etc/hosts.allow/etc/hosts.denyを再確認して、サーバーへのトラフィックが許可されていることを確認します。

SELinuxに関しては、システムの構成方法によっては、auditdを有効にしている場合、/var/log/audit/audit.logにログを記録している可能性があります。 このページ のセクション5を参照してください。

3
bjlaub