OpenSSH : internal-sftp와 sftp-server의 차이점


81

OpenSSH를 사용하여 SFTP를 설정하는 방법과 두 가지 방법이있는 이유는 무엇입니까? 그들 사이에 차이점이 있습니까?

첫 번째는 OpenSSH의 lib를 사용하고 두 번째는 "내부 사용"이라고 말 했으므로 OpenSSH입니까?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

답변:


94

모두 sftp-serverinternal-sftpOpenSSH를의 일부입니다. sftp-server독립형 바이너리입니다. internal-sftp는 다른 프로세스 (일반적으로 ) 를 실행하는 대신 sshdSFTP 서버 코드 내장을 사용 하도록 지시하는 구성 키워드 일뿐 입니다.sshdsftp-server


보기의 기능적인 관점에서, sftp-server그리고 것은 internal-sftp거의 동일하다. 그것들은 동일한 소스 코드로 만들어졌습니다.

주요 장점은 지시문internal-sftp 과 함께 사용될 때 지원 파일이 필요 없다는 것 입니다.ChrootDirectory

sshd_config(5)맨 페이지 에서 인용 :

  • 에 대한 Subsystem지침 :

    이 명령 sftp-server은 SFTP 파일 전송 서브 시스템을 구현합니다.

    또는 이름 internal-sftp이 처리중인 SFTP 서버를 구현합니다. 이렇게 ChrootDirectory하면 클라이언트에서 다른 파일 시스템 루트를 강제로 사용하여 구성을 단순화 할 수 있습니다.

  • 에 대한 ForceCommand지침 :

    명령을 지정 internal-sftp하면와 함께 사용될 때 지원 파일이 필요없는 프로세스 내 SFTP 서버를 강제로 사용합니다 ChrootDirectory.

  • 에 대한 ChrootDirectory지침 :

    ChrootDirectory사용자의 세션을 지원하는 데 필요한 파일과 디렉토리를 포함해야합니다. 대화 형 세션이 적어도 일반적으로 쉘, 필요 sh, 기본 /dev과 같은 노드를 null, zero, stdin, stdout, stderr, 및 tty장치. SFTP를 사용하는 파일 전송 세션의 경우 프로세스 내 sftp-server를 사용하는 경우 환경을 추가로 구성 할 필요가 없지만 로깅을 사용하는 세션 /dev/log은 일부 운영 체제의 chroot 디렉토리 내부에 필요할 수 있습니다 ( sftp-server자세한 내용 참조).

다른 internal-sftp하위 프로세스를 실행할 필요가 없으므로 성능 의 또 다른 장점이 있습니다.


internal-sftp독립보다 (? 2008 년의 OpenSSH 4.9p1) 훨씬 나중에 추가 된 sftp-server바이너리,하지만 지금 기본값입니다.

sftp-server새로운 설치 에 사용할 이유가 없다고 생각 합니다.


기능이 동일하고 위의 장점을 갖기 때문에 sshd자동으로 사용할 수있는 것처럼 보일 수 있습니다 . 그러나 차이점이있는 경우가 있습니다.internal-sftpsftp-serverinternal-sftp

몇 가지 예 :

  • 관리자는 로그인 셸 구성을 사용하여 특정 사용자가 로그인하지 못하도록 할 수 있습니다. internal-sftp로그인 셸이 더 이상 관여하지 않기 때문에 로그인으로 전환 하면 제한이 무시됩니다.

  • 사용 sftp-server바이너리 당신은 같은 몇 가지 해킹을 사용할 수 있습니다 (독립 과정 인) 에서 SFTP를 실행sudo .

  • SSH-1의 경우 (아직도 사용중인 경우) Subsystem지시문이 전혀 관련되지 않습니다. SSH-1을 사용하는 SFTP 클라이언트는 서버에게 서버가 어떤 바이너리를 실행해야하는지 명시 적으로 알려줍니다. 따라서 레거시 SSH-1 SFTP 클라이언트의 sftp-server이름은 하드 코딩되었습니다.



6

Authorized_key를 외부 sftp-server에 잠글 수 있습니다.

command = "/ usr / libexec / openssh / sftp-server"ssh-rsa AAAA… == user@host.com

그렇게하면 사용자는 sftp를 사용할 수 있지만 scp 또는 ssh는 할 수 없습니다.

$ sftp 호스트 : / etc / group / tmp
호스트에 연결하는 중 ...
/ etc / group을 / tmp / group으로 가져 오는 중
/ etc / group 100 % 870 0.9KB / s 00:00

다른 작업을 시도하면 중단됩니다.

$ scp 호스트 : / etc / group / tmp
신호 2에 의해 사망.

$ ssh 호스트 가동 시간
신호 2에 의해 사망.

아아, sshd_config를 수정하지 않으면 키를 chroot에 고정하는 쉬운 방법이 없습니다. 시스템 관리자의 개입없이 사용자가 할 수있는 것은 정말 멋진 일입니다.


3
ForceCommand internal-sftp같은 달성한다
ptman

편리한 방법은 chroot가 없으면 sshfs host:/home/user/.ssh ~/hackme나중에 마음이 바뀌면 모든 설정을 다시 열어 액세스 권한을 열어 편집 할 수 있다는 것 입니다.
sh1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.