웹사이트 검색

Ubuntu 22.04에 SFTPGo를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. UFW 방화벽 설정\n
  3. Ubuntu 22.04에 SFTPGo 설치
  4. SFTPGo 설치 완료
  5. v2.3.0의 새로운 기능
    1. 그룹
    2. 외부 공유
    3. 브랜딩
    4. OpenID 연결
    5. 애크미
    6. Geo-IP 필터링\n
    7. 셸 패턴을 기반으로 파일 및 디렉토리 제한\n

    SFTPGo는 HTTP/S, FTP/S 및 WebDAV 지원(선택 사항)이 포함된 완전한 기능을 갖춘 구성 가능한 무료 오픈 소스 SFTP 서버입니다.
    여러 스토리지 백엔드 지원: 로컬 파일 시스템, 암호화된 로컬 파일 시스템, S3(호환) 개체 스토리지 , Google Cloud Storage, Azure Blob Storage, 기타 SFTP 서버.

    지원되는 모든 기능은 GitHub 프로젝트 페이지에 자세히 설명되어 있습니다.

    SFTPGo는 Linux, Windows, macOS, FreeBSD를 포함한 많은 운영 체제에서 사용할 수 있습니다.
    이 자습서에서는 Ubuntu Ubuntu 22.04 시스템에 SFTPGo를 설치하는 방법과 v2.3.0에 도입된 주요 새 기능을 살펴봅니다.

    전제 조건

    • Ubuntu 서버 22.04.
    • sudo 권한이 있는 루트가 아닌 사용자.\n

    UFW 방화벽 설정

    보안상의 이유로 시스템에 UFW 방화벽을 설치하고 구성하는 것이 좋습니다. 먼저 다음 명령을 사용하여 UFW 방화벽을 설치합니다.

    sudo apt install ufw -y

    SFTPGo는 기본 구성으로 다음 TCP 포트를 사용합니다.

    • 2022 SFTP 서비스용.
    • 웹 관리 사용자 인터페이스용 8080.

    또한 서버 관리를 위해 OpenSSH 포트를 허용해야 합니다.

    다음 명령을 사용하여 필요한 모든 포트를 허용합니다.

    sudo ufw allow OpenSSH
    sudo ufw allow 2022/tcp
    sudo ufw allow 8080/tcp

    다음으로 시스템 재부팅 후 UFW 방화벽이 시작되도록 활성화합니다.

    sudo ufw enable

    상태 확인:

    sudo ufw status

    다음과 같은 결과가 표시됩니다.

    Status: active

    To Action From
    -- ------ ----
    OpenSSH ALLOW Anywhere
    2022/tcp ALLOW Anywhere
    8080/tcp ALLOW Anywhere
    OpenSSH (v6) ALLOW Anywhere (v6)
    2022/tcp (v6) ALLOW Anywhere (v6)
    8080/tcp (v6) ALLOW Anywhere (v6)

    Ubuntu 22.04에 SFTPGo 설치

    PPA에서 SFTPGo를 설치할 수 있습니다.

    PPA를 추가하여 시작하십시오.

    sudo add-apt-repository ppa:sftpgo/sftpgo
    sudo apt update

    다음으로 SFTPGo를 설치합니다.

    sudo apt install sftpgo

    설치 후 SFTPGo는 이미 기본 구성으로 실행되고 부팅 시 자동으로 시작되도록 구성되어 있어야 합니다. 다음 명령을 사용하여 상태를 확인하십시오.

    systemctl status sftpgo

    SFTPGo 설치 완료

    이제 웹 브라우저를 열고 URL "http:///"을 사용하여 SFTPGo 설치 마법사에 액세스합니다.
    다음 페이지로 리디렉션됩니다.

    관리자 사용자 이름과 비밀번호를 입력하고 "관리자 만들기" 버튼을 클릭하세요.
    새로 만든 관리자는 자동으로 로그인되므로 SFTPGo 사용자를 만들 수 있습니다.

    사용자 생성에 대한 자세한 내용은 시작 안내서를 참조하십시오.

    v2.3.0의 새로운 기능

    다음 섹션에서 v2.3.0에 도입된 주요 새 기능을 살펴보겠습니다.

    여러 떼

    그룹을 사용하면 여러 SFTPGo 사용자의 관리가 간소화됩니다. 각 개별 사용자에게 여러 번이 아니라 그룹에 설정을 한 번 할당할 수 있습니다.

    SFTPGo는 두 가지 유형의 그룹을 지원합니다.

    • 기본 그룹
    • 보조 그룹

    사용자는 기본 그룹 및 많은 보조 그룹의 구성원이 될 수 있습니다. 그룹 유형에 따라 설정이 다르게 상속됩니다.
    자세한 내용은 공식 문서를 참조하세요.

    여기에서 몇 가지 사용 예를 살펴보겠습니다.

    다음과 같은 요구 사항이 있다고 가정합니다.

    • 각 사용자는 경로의 마지막 요소로 사용자 이름을 포함하는 로컬 홈 디렉토리로 제한되어야 합니다(예: /srv/sftpgo/data/).\n
    • 사용자당 단일 파일의 최대 업로드 크기는 1GB로 제한되어야 합니다.\n
    • 각 사용자는 /s3 경로에서 사용 가능한 S3 가상 폴더가 있어야 하며 각 사용자는 S3 버킷의 지정된 "접두사"에만 액세스할 수 있습니다. 다른 사용자 파일에 액세스할 수 없어야 합니다.\n
    • 각 사용자는 /shared 경로에서 사용 가능한 S3 가상 폴더를 가지고 있어야 합니다. 다른 사용자와 공유하는 폴더입니다.\n
    • 사용자 그룹은 다른 사용자 그룹이 전체 액세스 권한을 갖는 동안 /shared 경로의 콘텐츠만 다운로드하고 나열할 수 있습니다.\n

    두 그룹을 정의하여 이러한 요구 사항을 쉽게 충족할 수 있습니다.

    SFTPGo WebAdmin UI에서 "Folders"를 클릭한 다음 "+" 아이콘을 클릭합니다.

    "S3private"라는 폴더를 생성합니다.
    스토리지를 "AWS S3(호환)"로 설정하고 필수 매개변수를 입력합니다.

    • 버킷 이름
    • 지역
    • 자격 증명: 액세스 키 및 액세스 비밀

    중요한 부분은 "Key Prefix"이며 users/%username%/로 설정합니다.

    "키 접두사"는 지정된 버킷 하위 폴더에 대한 액세스를 제한합니다.
    자리 표시자 "%username%"는 연결된 사용자 이름으로 대체됩니다.

    "S3private"와 동일한 설정으로 "S3shared"라는 또 다른 폴더를 생성하지만 이번에는 "Key Prefix"를 shared/로 설정합니다.
    "Key Prefix"에는 자리 표시자가 없으므로 폴더는 연결된 사용자에 따라 변경되지 않는 정적 경로에서 작동합니다.

    이제 "그룹"을 클릭한 다음 "+" 아이콘을 클릭하고 "기본"이라는 이름의 그룹을 추가하십시오.

    "홈 디렉터리"를 /srv/sftpgo/data/%username%로 설정합니다.

    이전과 마찬가지로 자리 표시자 "%username%"는 연결된 사용자 이름으로 대체됩니다.

    이 그룹에 두 개의 가상 폴더를 추가하고 "최대 파일 업로드 크기"를 1073741824바이트(1GB)로 설정합니다.

    새 그룹을 추가하고 이름을 "SharedReadOnly"로 지정하고 ACL 섹션에서 읽기 전용 액세스 권한이 부여되도록 /shared 경로에 대한 권한을 설정합니다.

    이제 그룹 설정이 완료되었습니다.

    이제 사용자를 만들고 기본 그룹을 "기본"으로 설정할 수 있습니다.
    /shared 경로에 대한 읽기 전용 액세스가 필요한 사용자의 경우 "SharedReadOnly"를 보조 그룹으로 설정해야 합니다.

    "Users"를 클릭한 다음 "+" 아이콘을 클릭하고 "user1"이라는 사용자를 추가합니다.

    이 사용자는 위의 제한 사항을 준수하며 /shared 경로에 대한 전체 액세스 권한이 있습니다.

    이제 위의 제한 사항을 준수하고 /shared 경로에 대한 읽기 전용 액세스 권한이 있는 "user2"를 만듭니다.

    템플릿 기능을 사용하여 동시에 여러 사용자를 생성할 수도 있습니다.

    사용자 이름, 자격 증명 및 그룹 구성원을 설정하기만 하면 됩니다.

    이제 FileZilla, WinSCP 등과 같은 SFTP 클라이언트로 로그인하고 요구 사항이 충족되는지 확인할 수 있습니다.

    외부 공유

    SFTPGo 계정 없이 외부 사용자와 파일을 공유하는 것은 일반적인 요구 사항입니다. v2.3.0에서 이 기능이 개선되었습니다.
    다음 공유 모드가 지원됩니다.

    • 읽기 전용
    • 쓰기만
    • 읽고 쓰기

    작동 방식을 살펴보겠습니다.
    WebClient UI에 로그인하고 "external_share"라는 이름의 새 디렉터리를 만듭니다.

    새로 생성된 디렉토리에 일부 파일을 추가합니다.

    그런 다음 "external_share" 폴더를 선택하고 "공유" 아이콘을 클릭합니다.

    "새 공유 추가" 화면이 나타나면 "읽기" 범위를 선택합니다.
    선택적으로 공유를 사용할 수 있는 횟수를 제한하고, 암호로 공유를 보호하고, 소스 IP 주소로 액세스를 제한하고, 자동 만료 날짜를 설정할 수 있습니다.

    그런 다음 공유 목록에서 방금 만든 공유를 선택하고 "링크" 아이콘을 클릭합니다. 공유 사용 방법에 대한 지침이 있는 팝업 창이 나타납니다.

    공유 콘텐츠를 단일 zip 파일로 다운로드하거나 찾아보고 파일별로 다운로드할 수 있습니다.
    이러한 링크를 복사하여 외부 고객에게 보낼 수 있습니다.

    다음 화면에서 볼 수 있는 것처럼 탐색 가능한 공유에 대한 링크가 나타납니다.

    이제 공유를 편집하고 범위를 "쓰기"로 변경합니다.
    공유에 대한 링크는 다음 화면을 표시합니다.

    따라서 외부 사용자는 파일을 업로드할 수 있지만 공유 콘텐츠를 찾아보거나 다운로드할 수는 없습니다.
    기존 파일을 덮어쓰지 않으려면 표준 SFTPGo 디렉터리별 권한을 사용할 수 있습니다.

    공유를 다시 편집하고 범위를 "읽기/쓰기"로 변경합니다.
    공유에 대한 링크는 다음 화면을 표시합니다.

    따라서 이제 외부 사용자는 공유 디렉토리에 새 파일을 탐색, 다운로드 및 추가할 수 있습니다.

    브랜딩

    SFTPGo 웹 UI는 브랜드에 맞게 맞춤설정할 수 있습니다. 다음은 /etc/sftpgo/sftogo.json의 관련 구성 섹션입니다.

    "branding": {
    "web_admin": {
    "name": "",
    "short_name": "",
    "favicon_path": "",
    "logo_path": "",
    "login_image_path": "",
    "disclaimer_name": "",
    "disclaimer_path": "",
    "default_css": "",
    "extra_css": []
    },
    "web_client": {
    "name": "",
    "short_name": "",
    "favicon_path": "",
    "logo_path": "",
    "login_image_path": "",
    "disclaimer_name": "",
    "disclaimer_path": "",
    "default_css": "",
    "extra_css": []
    }
    }

    WebAdmin 로그인 화면을 살펴보십시오.

    기본 \이름\은 \SFTPGo WebAdmin\이므로 페이지 제목은 \SFTPGo WebAdmin - 로그인\입니다.
    기본 \짧은 이름\은 \WebAdmin\이므로 로그인은 페이지에 "WebAdmin - "이 표시됩니다.
    "favicon_path"를 설정하여 파비콘을 사용자 정의할 수 있고 "login_image_path"를 설정하여 왼쪽의 이미지를 사용자 정의할 수 있습니다.
    설정하는 경우 "disclaimer_name" 및 "disclaimer_path", 로그인 페이지 하단에 새 링크가 나타납니다. 법적 면책 조항 또는 기타 용도로 사용할 수 있습니다.

    "logo_path" 및 "short_name"을 설정하여 로그인한 사용자의 페이지 왼쪽 상단에 있는 로고 및 레이블을 사용자 정의할 수 있습니다.

    SFTPGo는 뛰어난 SB Admin2 테마를 사용합니다. 테마를 약간 변경하려는 경우 사용자 정의 CSS 파일의 경로를 가리키도록 "extra_css"를 설정할 수 있습니다.
    반면에 SB Admin 2 CSS를 다시 빌드하는 경우 다음을 수행할 수 있습니다. "default_css"를 사용자 지정 CSS의 경로로 설정합니다. 이렇게 하면 기본 테마를 로드한 다음 변경 내용으로 재정의하는 것을 방지할 수 있습니다.

    구성된 모든 경로(favicon_path, logo_path 등)는 "static_files_path"에 상대적이어야 합니다.
    Linux에서 기본 "static_files_path"는 /usr/share/sftpgo/static입니다. 예를 들어 "branding" 디렉토리를 만들고 여기에 사용자 지정 리소스를 배치할 수 있습니다.
    예를 들어 favicon을 /usr/share/sftpgo/static/branding/favicon.ico에 복사하고 "favicon_path"를 /branding/favicon.ico로 설정할 수 있습니다.

    환경 변수를 사용하여 구성 옵션을 재정의할 수 있습니다. 예를 들어 SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH 환경 변수를 사용하여 웹 관리자 파비콘 경로를 설정할 수 있습니다.
    환경 변수를 사용하여 SFTPGo를 구성하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

    구성 파일을 변경한 후 변경 사항을 적용하려면 SFTPGo 서비스를 다시 시작해야 합니다.

    sudo systemctl restart sftpgo.service

    오픈아이디 커넥트

    기존 ID 공급업체가 있는 경우 OpenID Connect 표준을 지원할 가능성이 높습니다.

    이제 ID 공급자 사용자를 SFTPGo 관리자/사용자에 매핑할 수 있으므로 ID 공급자를 사용하여 SFTPGo WebClient 및 WebAdmin UI에 로그인할 수 있습니다.

    SFTPGo 사용자는 사전 로그인 후크를 정의하여 성공적인 OpenID 연결 로그인 후에 자동으로 생성될 수도 있습니다. 사전 로그인 후크에서 사용할 수 있도록 토큰 클레임 필드를 구성한 다음 후크 내에서 SFTPGo 사용자를 생성/업데이트할 때 고유한 사용자 지정 논리를 구현할 수 있습니다.

    공식 SFTPGo 문서는 SFTPGo를 Keycloak과 통합하는 단계를 설명합니다. Google Identity, Azure Active Directory, Auth0, OneLogin과 같은 다른 ID 공급자는 SFTPGo 커뮤니티에서 테스트했으며 작동하는 것으로 확인되었습니다.

    일반적으로 OpenID Connect 검색 사양을 구현하는 모든 OpenID Connect ID 제공업체가 작동해야 합니다.

    절정

    SFTPGo에는 ACME(자동 인증서 관리 환경)가 내장되어 있어 SFTPGo 웹 UI 및 REST API, WebDAV 서비스 및 FTP 서비스에 대한 무료 Lets encrypt TLS 인증서를 쉽게 얻고 갱신할 수 있습니다.

    Lets Encrypt 인증서를 얻으려면 ACME(자동 인증서 관리 환경) 서버에서 발급한 도메인 유효성 검사 문제를 해결해야 합니다. 이 챌린지는 인증서를 얻으려는 도메인의 소유권을 확인합니다. 다양한 챌린지 유형이 존재하며 SFTPGo는 "HTTP-01" 및 "TLS-ALPN-01" 챌린지 유형을 지원합니다.

    ACME 프로토콜을 사용하려면 서버 IP를 가리키는 유효한 도메인 이름이 필요합니다.

    구성 예를 살펴보겠습니다. 다음과 같이 가정합니다.

    • "sftpgo.com" 도메인에 대한 TLS 인증서가 필요합니다.\n
    • "sftpgo.com" 도메인의 "80" 포트에서 이미 실행 중인 기존 웹 서버가 있으며 웹 루트 경로는 /var/www/sftpgo.com입니다.\n

    SFTPGo 구성 파일 /etc/sftpgo/sftpgo.json을 열고 "acme" 섹션을 검색하여 다음과 같이 변경합니다.

    "acme": {
    "domains": ["sftpgo.com"],
    "email": "<you email address here>",
    "key_type": "4096",
    "certs_path": "/var/lib/sftpgo/certs",
    "ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
    "renew_days": 30,
    "http01_challenge": {
    "port": 80,
    "proxy_header": "",
    "webroot": "/var/www/sftpgo.com"
    },
    "tls_alpn01_challenge": {
    "port": 0
    }
    }

    "sftpgo" 사용자가 적절한 권한으로 /var/www/sftpgo.com 디렉토리에 쓸 수 있거나 /var/www/sftpgo.com/.well-known/acme-challenge 디렉토리를 미리 생성할 수 있는지 확인하십시오. .

    다음 명령을 실행하여 계정을 등록하고 인증서를 얻습니다.

    sudo -E su - sftpgo -m -s /bin/bash -c 'sftpgo acme run -c /etc/sftpgo'

    완료! 이제부터 SFTPGo 서비스는 구성된 도메인에 대한 인증서의 자동 갱신을 처리합니다.
    인증서는 기본적으로 /var/lib/sftpgo/certs 디렉토리에 저장됩니다. 이제 이러한 인증서를 사용하도록 SFTPGo 서비스를 구성할 수 있습니다.
    예를 들어 웹 UI의 경우 SFTPGo 구성 파일 /etc/sftpgo/sftpgo.json을 다음과 같이 변경합니다.

    "httpd": {
    "bindings": [
    {
    "port": 9443,
    "address": "",
    "enable_web_admin": true,
    "enable_web_client": true,
    "enable_https": true,
    "certificate_file": "/var/lib/sftpgo/certs/sftpgo.com.crt",
    "certificate_key_file": "/var/lib/sftpgo/certs/sftpgo.com.key",
    .....

    변경 사항을 적용하려면 SFTPGo 서비스를 다시 시작하십시오.

    sudo systemctl restart sftpgo.service

    비슷한 방식으로 다른 서비스에 대해 TLS를 활성화할 수 있습니다.

    Geo-IP 필터링

    SFTPGO Geo-IP 필터링 플러그인을 사용하면 클라이언트 IP 주소의 지리적 위치에 따라 연결을 수락/거부할 수 있습니다.

    플러그인은 MaxMind GeoIP2 데이터베이스를 읽을 수 있습니다. MMDB 형식의 국가 데이터베이스를 다운로드해야 합니다.

    예시 구성을 살펴보겠습니다.
    우리는 다음과 같이 가정합니다.

    • Geo-IP 필터링 플러그인은 /usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64 경로에 있습니다.\n
    • 국가 데이터베이스는 /var/lib/sftpgo/GeoLite2-Country.mmdb 경로에 있습니다.
    • 이탈리아로부터의 연결만 허용하려고 합니다.\n

    SFTPGo 구성 파일 /etc/sftpgo/sftpgo.json을 열고 "plugins" 섹션을 검색하여 다음과 같이 변경합니다.

    "plugins": [
    {
    "type": "ipfilter",
    "cmd": "/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64",
    "args": ["serve", "--db-file", "/var/lib/sftpgo/GeoLite2-Country.mmdb", "--allowed-countries", "IT"],
    "sha256sum": "",
    "auto_mtls": true
    }
    ]

    변경 사항을 적용하려면 SFTPGo 서비스를 다시 시작하십시오.

    sudo systemctl restart sftpgo.service

    완료!

    거부된 국가의 연결이 거부되면 SFTPGo 로그에 다음과 같은 내용이 표시됩니다.

    {"level":"debug","time":"2022-06-02T14:05:48.616","sender":"plugins.ipfilter.sftpgo-plugin-geoipfilter-linux-amd64","message":"[DEBUG] country not allowed: ip=XXX.XX.XXX.XXX country=NL"}

    다른 SFTPGo 플러그인은 여기에서 사용할 수 있습니다.

    쉘 패턴을 기반으로 파일 및 디렉토리 제한

    SFTPGo는 패턴 필터와 같은 사용자별 및 디렉토리별 셸을 지원합니다. 파일은 패턴과 같은 셸을 기반으로 허용, 거부 및 선택적으로 숨길 수 있습니다.

    몇 가지 예를 살펴보겠습니다.
    특정 디렉터리에서 확장자가 jpg 및 png인 모든 파일을 거부한다고 가정해 보겠습니다.
    수정할 사용자를 선택하고 "ACLs" 섹션을 확장한 다음 셸과 같은 패턴 제한.

    이렇게 하면 확장자가 png 및 jpg인 파일을 다운로드하거나 업로드할 수 없지만 이미 있는 경우 디렉토리 목록에 계속 표시됩니다.
    정책을 "숨김"으로 설정하여 숨길 수 있습니다.

    \숨김\ 정책은 v2.3.0에서 도입되었습니다.