나는 단지 "물건"을 배우기 위해 집에 Ubuntu 서버를 설정했습니다. 조금 과장했는데도 SSD에 여유 공간이 남아 있었습니다. 내 컴퓨터에 백업할 수 있도록 친구에게 공간을 좀 줄 예정입니다. 그는 나에게도 같은 기회를 줄 것입니다. 이익! !
내 시스템의 요구 사항/설정은 다음과 같습니다.
사용자는 키 쌍을 사용하여 sshd를 통해서만 로그인할 수 있습니다. 이것이 내 시스템에서 SSH를 구성하는 방법입니다. 비밀번호 접근은 허용되지 않습니다.
추가 사용자는 쉘 액세스 권한을 가지거나 어떤 방식으로든 내 서버에서 명령을 실행해서는 안 됩니다.
- /mnt/copro에 있는 폴더에 대한 sshd 쓰기 및 읽기 권한만 부여하고 싶습니다. 그는 sshd를 통해 duplicati를 사용하여 백업을 만들 것입니다.
일반적으로 폴더는 (멍청한) 파일 서버로 액세스할 수 있어야 하지만 SSH를 통해 키 쌍을 통해서만 액세스할 수 있습니다.
몇 가지 조사를 했지만 전반적으로 만족스러운 답변을 찾지 못했거나 작동하는 솔루션에서 찾은 답변을 적절하게 결합할 수 없었습니다.
그래서 내 질문은 다음과 같습니다
- 쉘 액세스 없이 사용자를 생성하는 방법
- 내가 선택한 폴더에 대한 사용자 읽기/쓰기 액세스를 허용하려면 어떻게 해야 합니까?
- 특정 사용자의 개인 키를 어디에 저장합니까?
도움을 주셔서 감사합니다.
답변1
나는 당신이 SSH 서버로 OpenSSH를 사용하고 있다고 가정합니다. 나는 이것이 Ubuntu의 기본값이라고 생각합니다.
서류 사본실제로 SFTP 액세스만 필요하다는 점을 분명히 하면 이 작업이 더 쉬워집니다.
- 가장 중요한 것은 사용자와 일치 하는 섹션
Match User
또는Match Group
섹션을 설정하는 것 입니다(어떤 경우에는 외부 SFTP 서버를 사용할 수도 있습니다. 이는 실제로 모든 명령일 수 있습니다. 특정 항목에도 사용할 수 있습니다) . ) 다양한 리트윗도 차단하고 싶을 가능성이 높습니다. 불행하게도 더 많은 것을 추가하려면 SSH 업그레이드를 계속 지켜봐야 합니다. 마지막으로 원하는 것을 확인했습니다(일부는 기본값이 "아니요"입니다)./etc/ssh/sshd_config
ForceCommand
ForceCommand internal-sftp
git
AllowAgentForwarding no
AllowTCPForwarding no
AllowStreamLocalForwarding no
PermitTTY no
PermitTunnel no
PermitUserEnvironment no
PermitUserRC no
X11Forwarding no
먼저 파일 시스템 권한부터 시작합니다. 이는 귀하의 개인 파일을 보호해야 하며
$HOME
다른 사용자는 귀하의 콘텐츠를 읽을 수 없어야 합니다.그러나 누구나 읽을 수 있는 곳이 많이 있습니다(그러나 사용자가 읽을 수 있는지 여부는 별로 신경 쓰지 않을 것입니다
/bin/sh
. 물론 사용자는 배포판에서 다운로드할 수 있습니다). 전역적으로 쓰기 가능한 디렉토리도 있습니다(예/tmp
: ChrootDirectory를 사용하여 두 디렉토리를 모두 보호할 수 있지만 chroot 디렉토리는 루트가 소유해야 하며 사용자가 쓸 수 없어야 합니다(그렇지 않으면 큰 보안 문제가 될 수 있음). 그렇지 않습니다. 이는 허용되지 않습니다. 따라서 하나가 있는 경우ChrootDirectory /mnt/copro
이를 로 설정 하고 내부적으로 사용자가 소유하는0755 root:root
하나(또는 유사한 것)를 가져야 합니다./mnt/copro/data
보안상의 이유로 해당 이름은etc
다른 일반적인 최상위 디렉터리(bin
,usr
,lib
등)가 되어서는 안 됩니다.가장 간단한 방법은 인증 키 파일을 사용자의 홈 디렉토리(
~/.ssh/authorized_keys
다른 사용자와 마찬가지로)의 일반 위치에 두는 것입니다./mnt/copro
가능하다면 제한된 사용자가 자신의 홈 디렉토리에 기록하는 것을 허용하지 않는 것이 가장 좋기 때문에 이 홈 디렉토리는 외부에 위치해야 합니다$HOME
. 필요한 경우 블록AuthorizedKeysFile
내부에 대체 위치를 설정할 수 있습니다Match
.
PS: Duplicati는 다른 백엔드를 지원합니다. 따라서 Apache와 같은 설정에 더 익숙하다면 WebDAV 사용을 제안하고 싶을 수도 있습니다. 아니면 저장 공간이 많고 S3 호환 인터페이스 등을 제공할 수도 있습니다.
답변2
쉘 액세스 없이 사용자 계정을 생성하려면,
sudo adduser --shell /bin/false mysftpfriend
mysftpfriend에 대한 디렉토리 및 디렉토리 구조를 생성하고 액세스 가능하게 만들어야 합니다.
sudo mkdir -p /var/mysftpfriends/storage
액세스 권한을 부여하려면
sudo chown mysftpfriend:mysftpfriend /var/mysftpfriends/storage
mysftpfriends 디렉토리에 대한 전체 액세스(소유자 및 그룹 소유자)를 가지려면 루트를 설정하기만 하면 됩니다.
sudo chown root:root /var/mysftpfriends
sudo chmod 0766 /var/mysftpfriends
그룹 구성원은 읽기/쓰기가 가능하지만 실행할 수는 없습니다.
이제 SFTP 전용 SSH를 구성하려면 /etc/ssh/sshd_config
텍스트 편집기(nano 또는 vim)에서 엽니다.
sudo nano /etc/ssh/sshd_config
파일 끝에 다음 줄을 추가합니다.
Match User mysftpfriend
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/mysftpfriends
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
파일을 저장하고 편집기를 종료한 후 SSH를 다시 시작하십시오.
sudo service ssh restart
이제 콘솔에 ssh를 시도하고 파일 읽기/쓰기를 테스트하고 sftpfriend 사용자가 실행할 수 없는지 확인하십시오.
sftp mysftpfriend@myserver
모두 완료되었습니다!