SFTP는 허용하지만 SSH는 허용하지 않습니까?


94

나는 작은 친구와 작은 고객을 위해 아주 작은 호스팅 회사를 시작하고 있습니다.

"클라이언트"에게 서버에서 파일을 관리 할 수있는 권한을 부여하고 싶습니다. FTP가 안전하지 않아서 싫어하며 제 의견으로는 쓸모가 없습니다.

따라서 사용자가 SFTP를 통해 연결할 수는 있지만 SSH를 통해 연결할 수는 없습니다. SFTP가 SSH를 사용하고 있다는 것을 알고 있습니다. 그러나 나는 단지 궁금했다. 가능합니까?

따라서 서버에 FTP 서비스를 설치할 필요가 없으며 모든 것이 훌륭합니다!

답변:


121

버전 4.9부터 OpenSSH (centos 5.x에서 사용할 수 없지만 ChrootDirectory 기능이 백 포트 됨)에는 internal-sftp서브 시스템이 있습니다.

Subsystem sftp internal-sftp

그런 다음 다른 용도를 차단하십시오.

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

사용자를 sftponly그룹에 추가하십시오 . /chroot 로 인해 사용자의 홈 디렉토리를 변경 /home/user해야하며의 소유 여야합니다 root. 또한 /bin/false사용자의 쉘로 설정 했습니다.


와! 대단해! 이것을 테스트하고 여기에 다시 와서 확인합니다. 고마워요!
Tommy B.

ChrootDirectory에 +1!
Kyle Hodgson

1
이 작업을 수행 한 후 내 sftponly 사용자는 ssh로 액세스 할 수 없으며 sftp로 연결할 수 있습니다. 그러나 어떤 파일도 볼 수 없습니다! 그럼에도 불구하고 이러한 파일에는이 사용자에 대한 권한이 있습니다. :-(
Emilio Nicolás

3
"/ usr / lib / openssh / sftp-server"가 이미있는 sshd_config에서 항목을 찾으려면 여기를 확인하십시오 : serverfault.com/questions/660160/…-internal-sftp 는 "newer" 더 좋고 쉬워
졌습니다

19

쉘이 scponly에 이 작업을 수행 무슨 일이. 그것은 수 chroot를 너무.


SFTP 사용자와 SSH 사용자가 모두 필요한 경우에 유용합니다. SFTP로만 제한된 쉘의 경우 / etc / passwd에서 쉘을 교체하기 만하면됩니다.
Dragos 2019

4

sftp를 허용하지만 ssh를 거부하는 가짜 셸인 Checkout rssh

RSSH에 대한 추가 정보

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

sft, scp 등과 같은 다른 동작을 허용 / 거부하도록 rssh를 구성 할 수 있습니다.


좋은. 이것은 sshd_config를 전혀 건드리지 않고 구성하는 가장 쉬운 방법입니다. passwd 파일에서 쉘을 변경하고 완료하십시오.
Tomofumi

2

/ etc / passwd를 수정하고 ssh를 사용할 수 없도록 사용자에게 가짜 셸을 제공 할 수 있습니다.


11
이것을 테스트 했습니까?
splattne

8
쉘을 /bin/falsessh sftp 둘 다로 설정 하지 않을 때
Brad Mace

2
/ bin / false는 모든 종류의 로그인을 허용하지 않으므로 올바른 방법이 아닙니다. Rob Wouters의 대답은 셸을 변경하지 않고 사용자를 SFTP로만 제한하는 방법입니다. 쉘을 바꾸고 싶다면 @Stone의 asnwer가 좋은 생각입니다.
jwbensley

1
따라서 / bin / bash가 허용되지 않고 / bin / false 또는 / sbin / nologin이 액세스를 거부한다고 가정하면 어떤 쉘을 사용해야합니까?
Putnik

1

언급 한대로 사용자 쉘을 / bin / false로 지정하는 방법을 사용합니다. 그러나 / bin / shell이 ​​/ etc / shells에 있는지 확인해야합니다. 그런 다음 ssh = no ftp = ok로 작동합니다.

또한 vsftpd를 사용하고이
chroot_local_user = YES를 /etc/vsftpd/vsftpd.conf에 추가하여 ftp-ers가 다른 날짜를 볼 수 없도록합니다.

이러한 간단한 변경의 이점은 각 사용자마다 구성을 ssh하는 성가신 구성이 아닙니다.


1

행을 찾아서 UsePAM yes주석 처리하는 것을 잊지 마십시오 .

#UsePAM yes

이를 비활성화하지 않으면 SSH 서버가 다시로드 / 다시 시작할 때 충돌합니다. PAM의 멋진 기능이 필요하지 않으므로 괜찮습니다.


0

일부 선택된 사용자 만 SFTP를 사용하도록 ssh를 구성하는 것은 좋은 생각이며 제대로하면 당신이 중 하나를 설치하는 것이 제공하는 작품 scponly이나 rssh.

rssh감옥을 구성 할 필요가없는 한 잘 작동합니다.이 경우 CHROOT 설명서에서 제공하는 지시 사항을 따르십시오 rssh. 쉘 자체를 포함하여 시스템 실행 파일의 많은 부분과 라이브러리를 "각 사용자 감옥"바로 아래에 "복사" 합니다. 공간 낭비 방법입니다.

scponly 감옥 설정의 경우 로그인 거부 문제가 발생하는 구성에 대한 깊은 이해가 필요합니다.

감옥에서 올바르게 작동하는 "ftp"기능을 허용하고 보안 트랜잭션 및 로그인에 대한 SSL / TLS 지원을 제공하는 간단한 방법은 빠르고 깔끔하게 설치하고 필요에 따라 모든 구성 기능을 제공하는 "오래된 작동"VSFTPD를 사용하는 것입니다. 그러나 적어도 : 그것은 작동합니다!

모리 치오.


0

불행히도 모든 답변이 잘못 오도되었습니다. 다음을 수행하십시오.

  1. 먼저 sftp 사용자 및 그룹 sftp를 작성하십시오.

  2. SFTP 파일의 루트로 별도의 디렉토리를 작성하십시오. sudo mkdir -p /home/sftpdir

  3. 보안상의 이유로 포트 22를 통한 SSH와 임의 포트의 SFTP를 허용하는 테스트 된 sshd_config 파일이 있어야합니다.
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. sshd 서비스의 재시작 및 상태 확인

    sudo 서비스 sshd 다시 시작

    서비스 sshd 상태

  2. 쉘 파일을 작성하십시오. 알림 메시지를 반영하는 실행 추가

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "이 계정은 SFTP 액세스로만 제한됩니다."'| sudo 티 -a / bin / sftponly

  3. 실행 권한 부여 및 쉘 파일에 추가

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly"| sudo 티 -a / etc / shells

  4. 마지막으로 테스트하면 연결할 수 없습니다.

  5. SSH 키 및 기본 상세 정보와 함께 SFTP 클라이언트를 사용하기위한 템플리트 :

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.