RHEL6의 SFTP 서버가 ls에서 연결 해제됨

RHEL6의 SFTP 서버가 ls에서 연결 해제됨

설명된 단계를 따랐습니다.여기chrooted SFTP 환경을 만듭니다. ls 명령을 제외하고는 모든 것이 정상입니다. 플래그와 함께 ls를 실행하면 즉시 연결이 끊어집니다.

PID를 추적하면 다음과 같은 결과가 나옵니다(이보다 더 좋을 수는 없습니다.

어떤 아이디어가 있나요? 나는 어찌할 바를 모르고 있다.

`Process 7071 attached - interrupt to quit
 select(5, [3], [], NULL, NULL)          = 1 (in [3])
 read(3, "\0\0\0\n\v\0\0\0\2\0\0\0\1/", 16384) = 14
 open("/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
 select(5, [3], [4], NULL, NULL)         = 1 (out [4])
 write(4, "\0\0\0\rf\0\0\0\2\0\0\0\4\0\0\0\0", 17) = 17
 select(5, [3], [], NULL, NULL)          = 1 (in [3])
 read(3, "\0\0\0\r\f\0\0\0\3\0\0\0\4\0\0\0\0", 16384) = 17
 getdents(5, /* 3 entries */, 32768)     = 80
 lstat("/.", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
 stat("/etc/localtime", 0x7fff44193d90)  = -1 ENOENT (No such file or directory)
 open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 open("/etc/group", O_RDONLY|O_CLOEXEC)  = -1 ENOENT (No such file or directory)
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 lstat("/..", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
 open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 open("/etc/group", O_RDONLY|O_CLOEXEC)  = -1 ENOENT (No such file or directory)
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 lstat("/attreport", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
 open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 open("/etc/group", O_RDONLY|O_CLOEXEC)  = -1 ENOENT (No such file or directory)
 socket(PF_FILE, SOCK_STREAM, 0)         = 4
 fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
 fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
 fcntl(4, F_SETFL, O_RDWR)               = 0
 connect(4, {sa_family=AF_FILE, path="/var/lib/pbis/.lsassd"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 getdents(5, /* 0 entries */, 32768)     = 0
 select(5, [3], [4], NULL, NULL)         = -1 EBADF (Bad file descriptor)
 sendto(7, "<83>Feb 27 22:02:23 sshd[7071]: "..., 66, MSG_NOSIGNAL, NULL, 0) = -1 EBADF (Bad file descriptor)
 close(7)                                = -1 EBADF (Bad file descriptor)
 socket(PF_FILE, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
 connect(4, {sa_family=AF_FILE, path="/dev/log"}, 110) = -1 ENOENT (No such file or directory)
 close(4)                                = 0
 exit_group(2)                           = ?
 Process 7071 detached

`

답변1

이는 결국 Likely Open의 문제가 되었습니다. "ls"는 sftp가 UID/GID를 구문 분석하려고 할 때 유일한 명령이며, 그렇게 할 때 동일한 작업을 수행하고 일단 작동하면 충돌이 발생합니다.

/etc/nsswitch.conf는 파일을 먼저 사용하도록 설정됩니다.

passwd:     files lsass
shadow:     files
group:      files lsass

그러나 어떤 이유에서든 여전히 같은 방식으로 진행됩니다. 해결 방법은 RHEL6의 경우 /opt/likewise/bin/lwconfig.txt에 있는 "RequireMembershipOf"에 올바른 그룹을 추가하는 것입니다.

답변2

동일한 문제가 있었지만 RHEL 5.5에서 실행되었습니다.
Openssh-server 5.x는 pbis AD 통합과 함께 내부 chroot 및 match 문을 사용합니다. 두 가지 해결책을 찾았습니다.

  1. 비밀번호 및 그룹 라인 변경 /etc/nsswitch.conf:

    passwd:     files lsass
    

    다음과 같이 보입니다:

    passwd:     files [UNAVAILABLE=return] lsass
    
  2. chroot 환경의 루트 디렉토리에 /etc/passwd파일을 생성합니다. /etc/group파일은 기본 파일 및 디렉터리 소유자에 대한 최소한의 기록만 유지하면 됩니다.

답변3

실행 중인 경우 에만 다음을 사용하도록 sftp구성할 수 있습니다.sshd내부 SFTP. sftp에는 최소 버전에 모든 명령이 내장되어 있습니다. chroot에는 명령만 필요합니다. /dev/null, 0, 무작위, 우랜덤일하다. ls내장 명령이기도 합니다.

더 이상 chroot에서 바이너리와 라이브러리를 최신 상태로 유지하려고 애쓰지 마세요...

답변4

ls나에게는 chroot 및 sftp 성공을 통해 sftp가 실패하는 유사한 오류가 / 및 내 chroot를 복사하여 해결되었습니다 . 서류는 필요하지 않은 것 같습니다. 원격 cifs 마운트를 루트로 변경했지만 변경이 필요하지 않은 것 같습니다.getetc/group/etc/passwd/dev/etc/nsswitch.conf

관련 정보