TFTP 업로드 실패

TFTP 업로드 실패

Centos 5.4 서버에서 xinetd를 통해 TFTPD를 실행하고 있습니다. tftp를 통해 파일에 액세스할 수 있으므로 서비스가 제대로 실행되고 있다는 것을 알 수 있습니다. 그러나 파일을 업로드하려고 할 때마다 0 권한 거부 메시지가 표시됩니다.

이미 /tftpboot에 파일을 생성하고 권한을 666으로 설정했습니다.

내 tftpd 구성에는 자세한 로깅(-vvvv)이 있지만 /var/log/messages에 표시되는 것은 다음과 같습니다.

시작: tftp pid=20383 from=192.168.77.4

SELinux가 TFTPD 업로드를 방지할 수 있다는 언급을 본 적이 있지만 로그에 뭔가가 있을 것으로 예상됩니다. SELinux를 허용 모드로 설정했습니다.

어떤 아이디어가 있나요?

답변1

다음의 정보를 따랐습니다.http://grimwell.wikispaces.com/tftpd, selinux 정책을 제대로 적용하려면 "헹굼 및 반복"에 특히 주의를 기울이십시오. 몇 번 시도한 후에 모든 작업이 시작되었습니다. 즉, 업로드 및 새 파일 생성이 시작되었습니다.

간단히 말해서:

  • centos에 감사가 설치되어 있는지 확인하십시오. 그렇지 않으면 SELinux가 아무것도 기록하지 못할 수 있습니다!
  • -c -v -s /tftpbootxinetd.d/tftpd가 서버 args 라인에 있는지 확인하세요
  • tftp가 쓸 디렉토리에 777 권한이 있는지 확인하십시오.
  • tftp localhost를 수행하고 디렉토리에 파일을 넣으십시오.
  • 디렉토리의 파일을 터치하고 chmod 666을 누른 다음 tftp localhost를 통해 파일을 덮어쓰십시오.
  • grep tftp /var/log/audit/audit.log | audit2allow -m tftpwriteselinux 정책을 생성하려면 다음을 수행하십시오 . 정책에 쓰기 및 생성 줄이 포함되어 있는지 확인하십시오. 그렇지 않은 경우 감사 로그에 경고를 생성하기 위해 다시 작성하고 생성한 후 다시 시도하세요.
  • 다음을 사용하여 설치 가능한 정책을 만든 grep tftp /var/log/audit/audit.log | audit2allow -M tftpwrite다음 다음을 사용하여 설치합니다.semodule -i tftpwrite.pp
  • service xinetd reload그리고 tftp를 사용해 보세요.

화려한. 다른 사람들도 이것이 유용하다고 생각하길 바랍니다!

답변2

나는 이 문제에 대한 또 다른 더 나은 해결책을 찾았습니다. 나는 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         ..

답변3

-s 옵션을 사용하여 tftpd를 시작하시겠습니까? 일부 클라이언트는 이를 예상할 수 있습니다. 예를 들어 호출 foo된 파일을 업로드하는 것은 실제로 서버에서 /foo수행하기 위한 것입니다 . /tftpboot/foo추가하면 -s /tftpboot서버가 해당 디렉토리에 "chroot"를 수행하도록 지시합니다.

xinetd를 통하지 않고 수동으로 tftpd를 실행해 보고 출력이 무엇인지 확인하십시오. 또한 실행을 시도하여 strace열려고 하는 파일과 생성 중인 시스템 호출을 정확하게 확인할 수도 있습니다.

서버에 트래픽이 허용되는지 다시 확인 /etc/hosts.allow하고 확인하세요./etc/hosts.deny

SELinux의 경우 시스템 구성 방식에 따라 /var/log/audit/audit.logauditd를 활성화한 경우 로그인할 수 있습니다. 섹션 5를 참조하세요.이 페이지.

관련 정보