설명된 단계를 따랐습니다.여기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 문을 사용합니다. 두 가지 해결책을 찾았습니다.
비밀번호 및 그룹 라인 변경
/etc/nsswitch.conf
:passwd: files lsass
다음과 같이 보입니다:
passwd: files [UNAVAILABLE=return] lsass
chroot 환경의 루트 디렉토리에
/etc/passwd
파일을 생성합니다./etc/group
파일은 기본 파일 및 디렉터리 소유자에 대한 최소한의 기록만 유지하면 됩니다.
답변3
실행 중인 경우 에만 다음을 사용하도록 sftp
구성할 수 있습니다.sshd
내부 SFTP. sftp에는 최소 버전에 모든 명령이 내장되어 있습니다. chroot에는 명령만 필요합니다. /dev/null, 0, 무작위, 우랜덤일하다. ls
내장 명령이기도 합니다.
더 이상 chroot에서 바이너리와 라이브러리를 최신 상태로 유지하려고 애쓰지 마세요...
답변4
ls
나에게는 chroot 및 sftp 성공을 통해 sftp가 실패하는 유사한 오류가 / 및 내 chroot를 복사하여 해결되었습니다 . 서류는 필요하지 않은 것 같습니다. 원격 cifs 마운트를 루트로 변경했지만 변경이 필요하지 않은 것 같습니다.get
etc/group
/etc/passwd
/dev
/etc/nsswitch.conf