질문

질문

질문

SSH 서버를 시작하면 데비안도 자동으로 SFTP 서버를 시작합니다. 왜 이렇게 설계되었나요?

환경:

  • 리눅스 5.10.0-14-amd64 데비안 5.10.113-1 (2022-04-29) x86_64 GNU/Linux
  • ssh.service - OpenBSD 보안 셸 서버

배경

오늘 나는 깨달았다:

  • http 요청을 처리하고 싶을 때 웹 서버(Apache(2), Node.js 등)를 시작합니다.
  • SSH를 처리하고 싶을 때 SSH 서버를 시작합니다.
  • SFTP를 처리하고 싶을 때...데비안은 이미 SFTP 서버를 시작합니다.

그래서 조사를 좀 했고 이 기사에 따르면378313/default-sftp-server-in-debian-9-stretch, 나는 SFTP가 "(공개) SSH의 일부"로 시작된다는 것을 발견했습니다. 이는 완벽하게 이해되지만 우려 사항의 분리 등으로 인해 이상하게 느껴집니다.

Windows와 달리 데비안이 나에게 예상치 못한 일이나 추가적인 일을 해준다고 느낀 적이 없습니다. 하지만 오늘 나는 그것을 느꼈습니다. 결국 내가 말한 것은 systemctl restart ssh아니오입니다 systemctl restart ssh-and-also-ftp(후자의 명령은 만들어졌습니다).

나는 Unix/Linux와 그 철학을 처음 접했기 때문에 이 상황에 대한 좋은 설명을 주시면 감사하겠습니다.

답변1

SFTP는 아니지만확장 가능한 핵심 SSH 프로토콜, 이는 하나 이상의 공통 SSH 구현(OpenSSH)에 내장되어 있으므로 고려할 수 있습니다.표준 부품.

필요하지 않은 경우 에서 /etc/ssh/sshd_config제거되도록 변경하여 서버에서 이 기능을 비활성화할 수 있습니다 .Subsystemsftp-server

예를 들어 다음 줄은 sftp-serverSFTP 서비스를 처리하기 위한 외부 유틸리티를 정의합니다.

Subsystem sftp-server

이 줄은 SFTP 서비스의 내부 구현을 정의합니다.

Subsystem internal-sftp

이 줄을 제거하거나 주석 처리하면 SubsystemSFTP 서비스가 완전히 비활성화됩니다.

# Subsystem …

rsync(설치된 경우) 및 해당 버전과 같은 도구는 계속 실행되므로 SFTP 자체를 비활성화 해도 scp사용자가 클라이언트와 서버 간에 파일을 전송하는 것을 막을 수는 없습니다. (이전 버전은 scpSFTP와 독립적으로 작동합니다. 최신 버전은 SFTP를 사용하지만 이 플래그를 통해 이전 프로토콜을 강제로 사용할 수 있습니다 -O.) 고려해야 할 몇 가지 "사소한" 해결 방법도 있습니다 ssh remoteHost cat somefile > local_copy_of_somefile.

답변2

이상하게도 여기에 허용된 답변은 질문에 대한 답변을 제공하지 않습니다.

왜 이렇게 설계되었나요?

openssh의 SFTP 서버는 전통적인 데몬/서버가 아닙니다. SFTP를 요청하는 SSH 연결이 시작되면 인스턴스가 요청 시 실행됩니다.

SSH로 할 수 있는 일이 많이 있습니다. 이런 방식으로 설계한다는 것은 사람들이 SSH를 사용하여 다른 작업을 수행할 때 SFTP 서버에 오버헤드가 발생하지 않는다는 것을 의미합니다. 마찬가지로 ssh는 원격 터미널 세션을 제공하는 데 자주 사용되지만 자체 쉘을 구현하지는 않습니다.

리소스 효율성을 높이는 것 외에도 시스템을 모듈화하여 개발을 단순화합니다.

답변3

Debian 기반 시스템(Ubuntu 포함)에서 내장 서버를 비활성화하려면 sftp해당 행을 삭제하거나 주석 처리하는 것만으로는 sshd충분하지 않습니다. 이러한 시스템에는 컴파일 기본값이 있기 때문입니다(참고자료 참조).Subsystemsshd_configSubsystem sftp /usr/lib/openssh/sftp-serverman sshd_config

sshd_config다음 줄을 사용하여 이전 Ubuntu 16 시스템에서 SFTP를 성공적으로 비활성화했습니다.

Subsystem sftp /bin/false

.systemctl reload ssh; killall sftp-server

인용문 man sshd_config(Ubuntu 16 및 Ubuntu 22의 동일한 텍스트):
"Debian openssh-server 패키지는 sshd(8)의 기본 옵션이 아닌 /etc/ssh/sshd_config에서 여러 옵션을 표준으로 설정합니다
. ..)
하위 시스템 sftp /usr/lib/openssh/sftp-server"

관련 정보