단방향 scp를 설정하는 방법은 무엇입니까?

단방향 scp를 설정하는 방법은 무엇입니까?

원격 서버가 있고 다른 사용자( )가 scp 파일을 서버로 보낼 수 있도록 my.server.com허용하고 싶습니다 .stranger

표적:

  • stranger사용자에게 가능한 한 적은 액세스 권한을 부여하세요.
  • stranger로그인이 전혀 불가능해야합니다
  • 가능하다면 단방향 복제를 준비하십시오. 서버가 아닌 서버에만 파일을 복사할 수 있어야 합니다.

어떻게 해야 하나요?

편집: 교차 게시물을 모두 삭제했습니다. 문제는 여기에만 존재합니다. 도와주세요!

편집 2: 마침내 일반 전송을 하기로 결정했습니다 scp. @Lambert의 답변이 가장 완벽한 답변을 선택합니다. 당신의 도움을 주셔서 감사합니다!

답변1

언급한 모든 제한적인 사항이 포함된 모든 설정을 원한다면 ProFTPd를 사용하는 것이 좋습니다.

를 사용하면 sftp_module보안 세션만 허용할 수 있습니다. 바라보다http://www.proftpd.org/docs/contrib/mod_sftp.html기능 에 대한 sftp세부정보 입니다. 예제 구성은 페이지 하단 근처에 나열되어 있습니다.

DefaultRoot지시문을 사용하면 부여된 사용자를 자신의 디렉터리로 격리할 수 있습니다.

<LIMIT>구조를 사용하면 사용자가 파일을 검색할 수 없도록 허용하려는 FTP 명령을 제한할 수 있습니다 READ. 바라보다http://www.proftpd.org/docs/howto/Limit.html더 알아보기.

ProFTPd에서 구성을 설정할 때 2222 이외의 다른 포트 sftp에서 수신 대기하도록 할 수 있습니다 . ProFTPd에 대해 선택한 포트의 트래픽을 ssh허용하도록 방화벽 및/또는 라우터를 구성하십시오 . stranger또 다른 가능성은 sftp포트 22에서 ProFTPd의 모듈을 실행하고 ssh다른 포트에서 수신하도록 재구성하는 것입니다.

예시 구성은 다음과 같습니다.

<IfModule mod_sftp.c>
  <VirtualHost a.b.c.d>
    # The SFTP configuration
    Port 2222

    SFTPEngine on
    SFTPLog /var/log/proftpd_sftp.log

    # Configure the RSA, DSA, and ECDSA host keys, using the same host key
    # files that OpenSSH uses. 
    SFTPHostKey /etc/ssh_host_rsa_key
    SFTPHostKey /etc/ssh_host_dsa_key
    SFTPHostKey /etc/ssh_host_ecdsa_key

    <Limit READ>
      DenyAll
    </Limit>

    DefaultRoot ~ users,!staff

  </VirtualHost>
</IfModule>

노트: 이는 ProFTPd의 완전한 구성이 아니므로 필요에 맞게 ProFTPd 기본 구성을 검토하고 수정해야 합니다.


또 다른 가능성이 있습니다. OpenSSH를 사용하세요.

사용자를 생성 stranger하고 사용자의 비밀번호를 설정합니다.

useradd -m -d /home/stranger -s /bin/true stranger
passwd stranger

파일을 편집 /etc/ssh/sshd_config하고 다음 줄이 있는지 확인하고 없으면 추가하십시오.

Subsystem       sftp    internal-sftp

다음으로 하단에 Match 블록을 추가합니다 /etc/ssh/sshd_config.

Match User stranger
    ChrootDirectory  %h
    ForceCommand  internal-sftp -P read,remove
    AllowTcpForwarding no

노트: 사용자가 기존 파일을 덮어쓸 수 있습니다.

sshd데몬을 다시 시작하십시오 .

디렉터리 소유자를 /home/stranger다음으로 설정합니다 root.

chown root:stranger /home/stranger

노트:root ~ 해야 하다소유자이며 ChrootDirectory를 사용하는 경우 쓰기 권한이 있는 유일한 소유자일 수 있습니다. 또 다른 접근 방식은 줄 -d %u에 추가하고 설정하는 것일 수 있지만 사용자는 다음을 사용하여 다른 사용자 이름을 볼 수 있습니다.ForceCommand internal-sftpChrootDirectory /homecd /ls

사용자를 위한 업로드 디렉터리를 만듭니다.

mkdir /home/stranger/upload; chown stranger:stranger /home/stranger/upload

이제 stranger다음 명령을 사용하여 사용자로 로그인할 수 있습니다.

sftp stranger@somehost

파일을 업로드하면 문제가 없습니다.

sftp> put myfile
Uploading myfile to /upload/myfile
myfile                               100%   17     0.0KB/s   00:00    
sftp> get myfile
Fetching /upload/myfile to myfile
/upload/myfile                         0%    0     0.0KB/s   --:-- ETA
Couldn't read from remote file "/upload/myfile" : Permission denied

답변2

개인적으로, 파일을 서버에 복사하는 것이 목표라면 scp보다는 sftp를 선택하겠습니다. scp는 ssh 액세스를 가정하고, 쉘 액세스를 제공할 필요가 없다면 파일 전송을 위해 잠그지 않는 것이 가장 좋습니다.

그러니까 sftp. 몇 가지 조언. 일반 FTP를 비활성화하고 대신 액세스를 쉽게 제어할 수 있는 일부 프로그램을 실행하십시오. 또한 sftp를 사용하여 고유 포트에서 프로그램을 실행할 수도 있습니다. 예를 들어, 방금 서버에서 proftpd 구성을 마쳤고 작업이 제대로 수행됩니다. 사용자가 자신의 홈 디렉터리에 로그인하고 전체 트리를 탐색할 수 없도록 chroot 액세스를 수행할 수 있습니다. "cd"를 완전히 비활성화하는 등 허용되는 명령을 정의할 수도 있습니다. *nix 계정 외부에서 FTP 사용자를 제어할 수도 있으므로 실제로 사용자 계정이 아닌 FTP 컨텍스트에서만 이 사용자 계정을 생성할 수 있습니다.

또한 (벨트 및 멜빵 접근 방식의 경우) OS 수준에서 사용자의 홈 디렉터리(SFTP 세션이 연결될 위치)에 대한 권한을 변경하여 쓰기만 하고 읽을 수는 없도록 할 수 있습니다(그러나 다시 ftp 데몬을 사용할 수 있음). get 작업을 수행할 수 없도록 명령을 제한하는 proftpd와 같습니다.

나는 과거에 다른 FTP 서버를 사용해 본 적이 있으며(지금은 이름이 기억나지 않지만) 모두 기본 FTP 데몬보다 더 많은 제어 기능을 제공하는 것 같았으므로 다른 서버도 비슷한 기능을 제공할 것이라고 확신합니다. 나는 단지 최선의 선택이라고 믿기 때문에 노력하고 있는 것이 아닙니다.)

관련 정보