우분투에서 제한된 SFTP 서버를 설정하는 방법?


81

로그인시 공개 키 인증이 필요하지 않은 root, sudo, sftp 전용 사용자 계정을 설정하는 방법을 알고 싶습니다. 또한 sftp 전용 사용자의 홈 디렉토리를 설정하는 방법도 알고 싶습니다. 상위 레벨의 다른 디렉토리에 액세스 할 수 없습니다.

답변:


91

Ubuntu를 사용하는 호스트 시스템에서 ssh 서비스 설정을 시작하는 데 도움이되는 최상의 리소스는 OpenSSH 서버 입니다. 이를 통해 SSH 파일 전송 프로토콜 (SFTP (Secure File Transfer Protocol))을 사용하여 클라이언트 시스템의 SSH를 통해 파일을 액세스, 전송 및 관리 할 수 ​​있습니다.

솔루션 개요

  • Ubuntu OpenSSH server에서 호스트 컴퓨터에 설정을하면 사용자는 ssh사용자 이름과 암호 만 사용하여 클라이언트에서 호스트 서버로 연결할 수 있습니다 . 그러나 공개 키 인증을 권장합니다.

" SSH 서버를 설치하기 전에 강력한 암호 가 있는지 확인하십시오 ( 암호를 모두 비활성화 할 수 있습니다 )"

  • 호스트에서 생성 된 관리 사용자 계정에는 sudo 권한이 있고 호스트에서 생성 된 표준 사용자 계정에는 권한이 없습니다.

호스트에 OpenSSH 서버 설치 및 구성

호스트에 OpenSSH 서버를 설치하려면

sudo apt-get install openssh-server

호스트에 고정 IP 주소를 지정하면 안정적으로 연결할 수 있습니다.

nm-connection-editor

OpenSSH 서버를 구성하려면 "먼저 sshd_config 파일을 홈 디렉토리로 복사하거나 다음을 수행하여 / etc / ssh에서 읽기 전용 사본을 작성하여 백업하십시오."

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

" sshd_config파일을 백업 한 후에는 텍스트 편집기를 사용하여 다음과 같이 변경할 수 있습니다."

sudo -H gedit /etc/ssh/sshd_config

이러한 변경 사항을 적용하려면 호스트에서 ssh 서비스를 다시 시작해야합니다

sudo service ssh restart

다음 보안 조치를 고려하십시오

  • 라우터에서 포트 포워딩을 활성화하지 마십시오. 외부인이 라우터를 외부 포트 22 등에 연결하도록 요청하면 포트 포워딩을 활성화하지 않으면 라우터가 준수하지 않습니다.
  • 루트 로그인 비활성화 : 주석 처리 PermitRootLogin without-password; PermitRootLogin no호스트에 추가/etc/ssh/sshd_config
  • 비표준 SSH 포트를 선택하십시오 Port 22. Port <new-port-number>호스트에 추가/etc/ssh/sshd_config
  • 로컬 연결 만 허용 : 추가 ListenAddress 192.168.0.10
  • 특정 포트에서 특정 사용자 허용 : 호스트 추가 AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>또는 AllowUsers <username>@111.222.333.*호스트/etc/ssh/sshd_config
  • RSA 키 (암호없는) 연결 만 허용 : ~/.ssh/id_rsa.pub각 클라이언트 의 내용을 새로운 호스트 줄로 추가하십시오 ~/.ssh/authorized_keys. 그런 다음 PasswordAuthentication no호스트에 추가하십시오./etc/ssh/sshd_config
  • 공격자의 느리게 시도 : 호스트에서 ufw (복잡하지 않은 방화벽)를 사용하여 들어오는 연결을 10 / 분으로 제한합니다. sudo apt-get install ufw && sudo ufw limit OpenSSH
  • 자세한 내용은 SSH 액세스 보안 유지를 참조하십시오.

필요하다고 생각되면 파일 PasswordAuthentication에서 활성화 sshd_config하십시오.

문구가있는 줄을 찾아서 PasswordAuthentication읽습니다.

PasswordAuthentication yes

sshd_config파일을 저장 한 다음 호스트 ssh서비스 를 다시 시작 하십시오 .

sudo service ssh restart

인터넷 어디에서나 액세스해야하는 경우 로컬 라우터에서 포트 포워딩을 설정하여 트래픽을 OpenSSH 서버로 보내십시오.

포트 호스트 ssh서비스는 sshd_config파일 에서 수신 대기 하고이 포트를 목표로하는 TCP / UDP 트래픽을 OpenSSH 서버의 IP 주소로 전달하도록 라우터를 설정하십시오.

명령 줄 또는 터미널을 통해 호스트에 연결하고 로그인

  • <username>호스트에서 SFTP 쉘 터미널을 열려면 클라이언트에서 터미널을 열고 다음 명령을 입력하여 123.123.1.23호스트의 IP 주소로 바꾸십시오 .

    sftp <username>@123.123.1.23
    
    • 호스트의 OpenSSH 서버가 청취하는 포트 번호를 변경 한 경우 다음을 수행하십시오.

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • <username>호스트에서 SSH 쉘 터미널을 열려면 클라이언트에서 터미널을 열고 다음 명령을 입력하여 123.123.1.23호스트의 IP 주소로 바꾸십시오 .

    ssh <username>@123.123.1.23
    
    • 호스트의 OpenSSH 서버가 청취하는 포트 번호를 변경 한 경우 다음을 수행하십시오.

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

보다 시각적 인 SFTP 액세스를 위해 GUI 파일 관리자 (예 : 노틸러스)를 통해 호스트에 연결하고 로그인하여 파일 전송 가능

  1. 클라이언트에서 노틸러스 열기
  2. 파일> 서버에 연결을 선택하십시오.
  3. 유형: SSH
  4. 서버 : 호스트의 IP 주소를 입력하십시오
  5. 포트 : 호스트 sshd_config파일에 지정된 포트 번호
  6. 사용자 이름 : username
  7. 비밀번호 : password

여기에 이미지 설명을 입력하십시오

14.04에서 :

  1. 클라이언트에서 노틸러스 열기
  2. 서버에 연결
  3. 타입 :`ssh @ 123.123.1.23 :

홈 폴더 외부에서 파일 권한이 제한된 호스트에서 표준 사용자 계정 만들기

호스트에 적절한 파일 권한이 있으면 호스트에서 생성 한 각 표준 사용자 (dodo 권한 없음)가 /home/new_user디렉토리 를 소유 하지만 나머지 디렉토리 구조에 대해서는 권한이 제한됩니다.

  • 제한된 권한이 반드시 파일 이름과 디렉토리 구조를 볼 수 없다는 것을 의미하지는 않습니다.

도움이 되길 바랍니다.


9
대답은 매우 포괄적 인 것처럼 보이지만 실제로 OPs 질문의 가장 어려운 부분 인 "상위 레벨의 다른 디렉토리에 액세스 할 수없는 부분"에는 대답하지 못하는 것 같습니다. 위와 같이 구현하면 사용자는 대부분의 디렉토리 구조를 읽을 수 있습니다.
ostergaard

2
@ajostergaard의 의견을 확장하기 위해 일반적인 유닉스 사용자를 만들고 SSH 및 SFTP 액세스를 허용합니다. 루트가 아닌 일반 유닉스 사용자는 여전히 웹 서버 구성 등과 같은 매우 중요한 파일에 액세스하고 볼 수 있습니다. 이는 확실히 안전 하지 않으며 OP에서 요청한 제한을 충족시키지 않습니다.
Simon Woodside

50

1 단계 : OpenSSH 패키지가 설치되지 않은 경우 설치

sudo apt-get install openssh-server

2 단계 : SFTP 사용자를위한 별도의 그룹을 만듭니다.

sudo addgroup ftpaccess

3 단계 : /etc/ssh/sshd_config파일을 편집 하고 아래와 같이 변경합니다. 아래 줄을 찾아서 의견을 작성하십시오.

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

파일 끝에이 줄을 추가하십시오.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

4 단계 : sshd 서비스를 다시 시작하십시오.

sudo service ssh restart

5 단계 : ftpaccess 그룹의 사용자를 추가하고 비밀번호를 작성하십시오.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

6 단계 : 홈 디렉토리 권한 수정

sudo chown root:root /home/paul

7 단계 : 그룹 내부의 업로드 및 수정 권한을 위해 집 안에 디렉토리를 만듭니다.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

그게 다야.

참조 : 우분투에서 SFTP 설정


이것은 정답 인 것 같습니다. 나는 그것을 테스트하지는 않았지만 적어도 탐색 경로를 제한하는 주요 어려움을 언급했습니다.
Mohammed Noureldin

나는 그것을 테스트했고 홈 폴더에 대한 기본 권한으로 인해 너무 관대했습니다. 755입니다. 나는 sudo chmod 711홈 폴더에서 ftp를 www 폴더로만 허용했습니다. 지금까지는 좋은 것 같지만 다른 사람들이 소리를 낼 수 있습니다.
moodboom

0

Denyhosts 는 "jtd"에서 언급 한 것 이외의 다른 도구입니다. SSH 서버에 대한 반복 된 연결 시도를 자동으로 차단할 수 있습니다. 우분투 저장소에 설치할 수 있습니다.


패키지 거부 호스트는 자명 (10.04LTS) 및 정확한 (12.04LTS)에만 사용 가능합니다. packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB

Denyhosts는 Ubuntu 리포지토리에서 더 이상 사용할 수 없지만 다른 방법으로 설치할 수는 있지만 오랫동안 업데이트되지 않았습니다. 따라서 Denyhosts를 사용하는 것이 현명하지 않습니다.
Faizan Akram Dar

0

사용자에 대한 액세스 제한

여기서는 사용자가 파일 전송 만 수행하도록 허용하고 터미널 액세스를 비활성화합니다.

이를 위해 구성 파일의 맨 아래에 다음 코드를 추가하십시오.

$ sudo nano /etc/ssh/sshd_config

이제 파일이 열리고 코드를 붙여 넣습니다.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

대체 filemg사용자 이름. 그런 다음 파일을 저장하고 닫습니다.

그게 다야.

참조 : Ubuntu 16.04에서 SFTP를 사용하는 방법

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