원격 서버가 있고 다른 사용자( )가 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-sftp
ChrootDirectory /home
cd /
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 데몬보다 더 많은 제어 기능을 제공하는 것 같았으므로 다른 서버도 비슷한 기능을 제공할 것이라고 확신합니다. 나는 단지 최선의 선택이라고 믿기 때문에 노력하고 있는 것이 아닙니다.)