Cách cài đặt SFTPGo trên Ubuntu 22.04

theanh

Administrator
Nhân viên
SFTPGo là máy chủ SFTP miễn phí, mã nguồn mở, đầy đủ tính năng và có thể cấu hình cao với hỗ trợ HTTP/S, FTP/S và WebDAV tùy chọn.
Một số backend lưu trữ được hỗ trợ: hệ thống tệp cục bộ, hệ thống tệp cục bộ được mã hóa, S3 (tương thích) Object Storage, Google Cloud Storage, Azure Blob Storage, các máy chủ SFTP khác.

Tất cả các tính năng được hỗ trợ đều được mô tả chi tiết trên trang dự án GitHub.

SFTPGo khả dụng cho nhiều Hệ điều hành bao gồm Linux, Windows, macOS, FreeBSD.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt SFTPGo trên hệ thống Ubuntu Ubuntu 22.04 và chúng ta sẽ khám phá các tính năng mới chính được giới thiệu trong v2.3.0.

Điều kiện tiên quyết​

  • Máy chủ Ubuntu 22.04.
  • Người dùng không phải root có quyền sudo.

Thiết lập Tường lửa UFW​

Vì lý do bảo mật, bạn nên cài đặt và cấu hình tường lửa UFW trong hệ thống của mình. Trước tiên, hãy cài đặt tường lửa UFW bằng lệnh sau:
Mã:
sudo apt install ufw -y
SFTPGo sử dụng các cổng TCP sau với cấu hình mặc định:
  • 2022 cho dịch vụ SFTP.
  • 8080 cho giao diện người dùng quản trị web.
Chúng ta cũng cần cho phép cổng OpenSSH để quản trị máy chủ.

Cho phép tất cả các cổng cần thiết bằng các lệnh sau:
Mã:
sudo ufw allow OpenSSH
sudo ufw allow 2022/tcp
sudo ufw allow 8080/tcp
Tiếp theo, hãy bật tường lửa UFW để khởi động sau khi hệ thống khởi động lại:
Mã:
sudo ufw enable
Kiểm tra trạng thái:
Mã:
sudo ufw status
Bạn sẽ nhận được kết quả sau:
Mã:
Trạng thái: đang hoạt động

Đến từ
-- ------ ----
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)

Cài đặt SFTPGo trên Ubuntu 22.04​

Bạn có thể cài đặt SFTPGo từ PPA của nó.

Bắt đầu bằng cách thêm PPA:
Mã:
sudo add-apt-repository ppa:sftpgo/sftpgo
sudo apt update
Cài đặt SFTPGo tiếp theo:
Mã:
sudo apt install sftpgo
Sau khi cài đặt, SFTPGo sẽ chạy với cấu hình mặc định và được cấu hình để tự động khởi động khi khởi động, hãy kiểm tra trạng thái của nó bằng lệnh sau:
Mã:
systemctl status sftpgo

Hoàn tất cài đặt SFTPGo​

Bây giờ, hãy mở trình duyệt web của bạn và truy cập trình hướng dẫn cài đặt SFTPGo bằng URL: "http://<your server ip/hostname:8080>/".
Bạn sẽ được chuyển hướng đến trang sau:



Cung cấp tên người dùng và mật khẩu quản trị viên của bạn và nhấp vào nút "Create Admin".
Quản trị viên mới tạo sẽ tự động đăng nhập để bạn có thể tạo người dùng SFTPGo của mình.

Để biết thêm chi tiết về cách tạo người dùng, bạn có thể xem Getting Started Guide.

Các tính năng mới trong v2.3.0​

Hãy cùng khám phá các tính năng mới chính được giới thiệu trong v2.3.0 trong các phần tiếp theo.

Nhóm​

Sử dụng nhóm giúp đơn giản hóa việc quản lý nhiều người dùng SFTPGo: bạn có thể chỉ định cài đặt một lần cho một nhóm, thay vì nhiều lần cho từng người dùng.

SFTPGo hỗ trợ hai loại nhóm:
  • nhóm chính
  • nhóm phụ
Một người dùng có thể là thành viên của một nhóm chính và nhiều nhóm phụ. Tùy thuộc vào loại nhóm, các cài đặt được kế thừa khác nhau.
Bạn có thể tìm thêm thông tin chi tiết bằng cách tham khảo tài liệu chính thức.

Chúng ta hãy xem một số ví dụ sử dụng ở đây.

Giả sử bạn có các yêu cầu sau:
  • mỗi người dùng phải bị giới hạn trong một thư mục gốc cục bộ chứa tên người dùng làm phần tử cuối cùng của đường dẫn, ví dụ /srv/sftpgo/data/<username>
  • đối với mỗi người dùng, kích thước tải lên tối đa cho một tệp duy nhất phải được giới hạn ở mức 1GB
  • mỗi người dùng phải có một thư mục ảo S3 khả dụng trong đường dẫn /s3<username> và mỗi người dùng chỉ có thể truy cập một "tiền tố" được chỉ định của thùng S3. Nó không được phép truy cập vào các tệp của người dùng khác
  • mỗi người dùng phải có một thư mục ảo S3 khả dụng trong đường dẫn /shared. Đây là thư mục được chia sẻ với những người dùng khác
  • một nhóm người dùng chỉ có thể tải xuống và liệt kê nội dung trong đường dẫn /shared trong khi một nhóm người dùng khác có quyền truy cập đầy đủ
Chúng ta có thể dễ dàng đáp ứng các yêu cầu này bằng cách xác định hai nhóm.

Từ Giao diện người dùng WebAdmin của SFTPGo, nhấp vào "Thư mục" rồi nhấp vào biểu tượng "+".

Tạo một thư mục có tên là "S3private".
Đặt dung lượng lưu trữ thành "AWS S3 (Tương thích)" và điền các tham số bắt buộc:
  • tên thùng
  • khu vực
  • thông tin xác thực: khóa truy cập và bí mật truy cập


Phần quan trọng là "Tiền tố khóa", đặt thành users/%username%/.



"Tiền tố khóa" hạn chế quyền truy cập vào thư mục con thùng đã chỉ định.
Trình giữ chỗ "%username%" sẽ được thay thế bằng tên người dùng được liên kết.

Tạo một thư mục khác có tên "S3shared" với cùng cài đặt như "S3private" nhưng lần này đặt "Tiền tố khóa" thành shared/.
"Tiền tố khóa" không có chỗ giữ chỗ, vì vậy thư mục sẽ hoạt động trên đường dẫn tĩnh không thay đổi dựa trên người dùng được liên kết.

Bây giờ hãy nhấp vào "Nhóm" rồi nhấp vào biểu tượng "+" và thêm một nhóm có tên là "Chính".

Đặt "Home Dir" thành /srv/sftpgo/data/%username%.



Giống như trước, chỗ giữ chỗ "%username%" sẽ được thay thế bằng tên người dùng được liên kết.

Thêm hai thư mục ảo vào nhóm này và đặt "Kích thước tải tệp tối đa" thành 1073741824 byte (1GB).



Thêm một nhóm mới và đặt tên là "SharedReadOnly", trong phần ACL, hãy đặt quyền cho đường dẫn /shared để cấp quyền chỉ đọc.



Thiết lập nhóm hiện đã hoàn tất.

Bây giờ chúng ta có thể tạo người dùng và đặt nhóm chính thành "Chính".
Đối với những người dùng cần quyền chỉ đọc vào đường dẫn /shared, chúng ta cũng phải đặt "SharedReadOnly" làm nhóm phụ.

Nhấp vào "Người dùng" rồi nhấp vào biểu tượng "+" và thêm người dùng có tên là "user1".



Người dùng này tuân thủ các hạn chế trên và có toàn quyền truy cập vào đường dẫn /shared.

Bây giờ hãy tạo "user2" tuân thủ các hạn chế trên và có quyền chỉ đọc vào /shared đường dẫn.



Bạn cũng có thể tạo nhiều người dùng cùng lúc bằng cách sử dụng tính năng mẫu.



Chỉ cần đặt tên người dùng, thông tin xác thực và tư cách thành viên nhóm.



Bây giờ bạn có thể đăng nhập bằng bất kỳ ứng dụng khách SFTP nào như FileZilla, WinSCP, v.v. và xác minh rằng các yêu cầu đã được đáp ứng.

Chia sẻ bên ngoài​

Chia sẻ tệp với người dùng bên ngoài mà không cần tài khoản SFTPGo là một yêu cầu phổ biến. Trong v2.3.0, tính năng này đã được cải thiện.
Các chế độ chia sẻ sau đây được hỗ trợ:
  • chỉ đọc
  • chỉ ghi
  • đọc và ghi
Chúng ta hãy xem chúng hoạt động như thế nào.
Đăng nhập vào Giao diện người dùng WebClient và tạo một thư mục mới có tên là "external_share".



Thêm một số tệp vào thư mục mới tạo.

Sau đó, chọn thư mục "external_share" và nhấp vào biểu tượng "Chia sẻ".



Màn hình "Thêm chia sẻ mới" sẽ xuất hiện, chọn phạm vi "Đọc".
Tùy chọn, bạn có thể giới hạn số lần chia sẻ có thể được sử dụng, bảo vệ chia sẻ bằng mật khẩu, giới hạn quyền truy cập theo địa chỉ IP nguồn, đặt ngày hết hạn tự động.



Sau đó, từ danh sách chia sẻ, hãy chọn chia sẻ bạn vừa tạo và nhấp vào biểu tượng "Liên kết". Một cửa sổ bật lên sẽ xuất hiện với hướng dẫn về cách sử dụng chia sẻ.



Bạn có thể tải xuống nội dung được chia sẻ dưới dạng tệp zip duy nhất hoặc bạn có thể duyệt chúng và tải xuống từng tệp.
Bạn có thể sao chép các liên kết này và gửi chúng cho khách hàng bên ngoài của mình.

Liên kết đến chia sẻ có thể duyệt sẽ xuất hiện như bạn có thể thấy trong màn hình sau.



Bây giờ, hãy chỉnh sửa chia sẻ và thay đổi phạm vi thành "Ghi".
Liên kết đến chia sẻ sẽ hiển thị màn hình sau.



Vì vậy, người dùng bên ngoài của bạn có thể tải lên tệp, nhưng họ không thể duyệt hoặc tải xuống nội dung được chia sẻ.
Nếu bạn muốn ngăn ghi đè lên các tệp hiện có, bạn có thể sử dụng quyền SFTPGo theo thư mục tiêu chuẩn.

Chỉnh sửa lại chia sẻ và thay đổi phạm vi thành "Đọc/Ghi".
Liên kết đến chia sẻ sẽ hiển thị màn hình sau.



Bây giờ người dùng bên ngoài có thể duyệt, tải xuống và thêm tệp mới vào thư mục chia sẻ.

Xây dựng thương hiệu​

Giao diện người dùng web SFTPGo có thể được tùy chỉnh để phù hợp với thương hiệu của bạn. Sau đây là phần cấu hình có liên quan trong /etc/sftpgo/sftogo.json:
Mã:
"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": []
 }
}
Hãy xem màn hình đăng nhập WebAdmin.



"Tên" mặc định là "SFTPGo WebAdmin" nên tiêu đề trang là "SFTPGo WebAdmin - Đăng nhập".
"Tên viết tắt" mặc định là "WebAdmin" nên trang đăng nhập hiển thị "WebAdmin - <Phiên bản SFTPGo>".
Bạn có thể tùy chỉnh favicon bằng cách đặt "favicon_path" và hình ảnh bên trái bằng cách đặt "login_image_path".
Nếu bạn đặt "disclaimer_name" và "disclaimer_path", một liên kết mới sẽ xuất hiện ở cuối trang đăng nhập. Bạn có thể sử dụng nó cho tuyên bố từ chối trách nhiệm pháp lý hoặc bất cứ điều gì khác.

Bạn có thể tùy chỉnh logo và nhãn ở góc trên bên trái của các trang cho người dùng đã đăng nhập bằng cách đặt "logo_path" và "short_name".



SFTPGo sử dụng chủ đề SB Admin2 tuyệt vời. Nếu bạn muốn thực hiện một số thay đổi nhỏ đối với chủ đề, bạn có thể đặt "extra_css" để trỏ đến đường dẫn của tệp CSS tùy chỉnh của mình.
Mặt khác, nếu bạn xây dựng lại CSS SB Admin 2, bạn có thể đặt "default_css" thành đường dẫn của CSS tùy chỉnh của mình. Bằng cách này, chúng ta tránh được việc tải chủ đề mặc định rồi ghi đè lên nó bằng các thay đổi của bạn.

Tất cả các đường dẫn được cấu hình (favicon_path, logo_path, v.v.) phải tương đối với "static_files_path".
Trên Linux, "static_files_path" mặc định là /usr/share/sftpgo/static, ví dụ, bạn có thể tạo thư mục "branding" và đặt các tài nguyên tùy chỉnh của mình vào đó.
Ví dụ, bạn có thể sao chép favicon của mình vào /usr/share/sftpgo/static/branding/favicon.ico và đặt "favicon_path" thành /branding/favicon.ico.

Bạn có thể ghi đè bất kỳ tùy chọn cấu hình nào bằng cách sử dụng các biến môi trường, ví dụ, đường dẫn favicon của quản trị viên web có thể được đặt bằng cách sử dụng SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATHbiến môi trường.
Bạn có thể tìm thấy thêm thông tin chi tiết về cách cấu hình SFTPGo bằng cách sử dụng biến môi trường tại đây.

Sau khi thay đổi tệp cấu hình, bạn cần khởi động lại dịch vụ SFTPGo để áp dụng các thay đổi.
Mã:
sudo systemctl restart sftpgo.service

OpenID Connect​

Nếu bạn có nhà cung cấp danh tính hiện tại, thì có khả năng nhà cung cấp đó hỗ trợ OpenID Connect tiêu chuẩn.

Bây giờ bạn có thể ánh xạ người dùng nhà cung cấp danh tính của mình với người dùng/quản trị viên SFTPGo và do đó bạn có thể đăng nhập vào SFTPGo WebClient và WebAdmin UI bằng nhà cung cấp danh tính của mình.

Người dùng SFTPGo cũng có thể được tự động tạo sau khi đăng nhập OpenID connect thành công bằng cách xác định móc trước khi đăng nhập. Bạn có thể định cấu hình các trường yêu cầu mã thông báo để có sẵn cho móc trước khi đăng nhập và sau đó triển khai logic tùy chỉnh của riêng bạn khi tạo/cập nhật người dùng SFTPGo trong móc.

Tài liệu SFTPGo chính thức giải thích các bước để tích hợp SFTPGo với Keycloak. Các nhà cung cấp danh tính khác như Google Identity, Azure Active Directory, Auth0, OneLogin đã được cộng đồng SFTPGo thử nghiệm và xác nhận là hoạt động.

Nhìn chung, bất kỳ nhà cung cấp danh tính OpenID Connect nào triển khai các thông số kỹ thuậtOpenID Connect Discovery đều có thể hoạt động.

ACME​

SFTPGo có ACME (Môi trường quản lý chứng chỉ tự động) tích hợp sẵn, do đó bạn có thể dễ dàng lấy và gia hạn chứng chỉ Let's encrypt TLS miễn phí cho SFTPGo Web UI và REST API, dịch vụ WebDAV và dịch vụ FTP.

Để có được chứng chỉ Let's Encrypt, bạn phải giải quyết thử thách xác thực tên miền do máy chủ ACME (Môi trường quản lý chứng chỉ tự động) đưa ra. Thử thách này xác minh quyền sở hữu của bạn đối với tên miền mà bạn đang cố gắng lấy chứng chỉ. Có nhiều loại thử thách khác nhau, SFTPGo hỗ trợ các loại thử thách "HTTP-01" và "TLS-ALPN-01".

Để có thể sử dụng giao thức ACME, bạn cần một tên miền hợp lệ được trỏ đến IP máy chủ của bạn.

Chúng ta hãy xem một cấu hình ví dụ, chúng tôi đưa ra các giả định sau:
  • chúng ta cần một chứng chỉ TLS cho tên miền "sftpgo.com"
  • chúng ta có một máy chủ web hiện đang chạy trên cổng "80" cho tên miền "sftpgo.com" và đường dẫn gốc web là /var/www/sftpgo.com
Mở tệp cấu hình SFTPGo /etc/sftpgo/sftpgo.json, tìm kiếm phần "acme" và thay đổi như sau:
Mã:
"acme": {
 "domains": ["sftpgo.com"],
 "email": "",
 "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
 }
}
Đảm bảo rằng người dùng "sftpgo" có thể ghi vào /var/www/sftpgo.com thư mục hoặc tạo trước thư mục /var/www/sftpgo.com/.well-known/acme-challenge với các quyền phù hợp.

Đăng ký tài khoản của bạn và lấy chứng chỉ bằng cách chạy lệnh sau:
Mã:
sudo -E su - sftpgo -m -s /bin/bash -c 'sftpgo acme run -c /etc/sftpgo'
Xong! Từ bây giờ, dịch vụ SFTPGo sẽ đảm nhiệm việc gia hạn tự động các chứng chỉ cho các miền đã cấu hình.
Theo mặc định, chứng chỉ được lưu trữ trong thư mục /var/lib/sftpgo/certs. Bây giờ bạn có thể cấu hình các dịch vụ SFTPGo để sử dụng các chứng chỉ này.
Ví dụ đối với giao diện người dùng web, hãy thay đổi tệp cấu hình SFTPGo /etc/sftpgo/sftpgo.json như sau:
Mã:
"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",
 .....
Khởi động lại dịch vụ SFTPGo để áp dụng thay đổi:
Mã:
sudo systemctl restart sftpgo.service
Bạn có thể bật TLS cho các dịch vụ khác theo cách tương tự.

Lọc địa chỉ IP​

SFTPGOPlugin lọc địa chỉ IP cho phép chấp nhận/từ chối kết nối dựa trên vị trí địa lý của địa chỉ IP của máy khách.

Plugin có thể đọc MaxMindGeoLite2Cơ sở dữ liệu GeoIP2. Bạn cần tải xuống cơ sở dữ liệu quốc gia ở định dạng MMDB.

Hãy xem một cấu hình ví dụ.
Chúng tôi đưa ra các giả định sau:
  • Plugin lọc Geo-IP nằm trong đường dẫn /usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64
  • Cơ sở dữ liệu quốc gia nằm trong đường dẫn /var/lib/sftpgo/GeoLite2-Country.mmdb
  • Chúng tôi chỉ muốn cho phép kết nối từ Ý
Mở tệp cấu hình SFTPGo/etc/sftpgo/sftpgo.json, tìm kiếm phần "plugins" và thay đổi như sau:
Mã:
"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
 }
]
Khởi động lại dịch vụ SFTPGo để áp dụng các thay đổi:
Mã:
sudo systemctl restart sftpgo.service
Xong!

Trong nhật ký SFTPGo, bạn sẽ thấy nội dung tương tự như thế này khi kết nối từ quốc gia bị từ chối đã từ chối:
Mã:
{"level":"debug","time":"2022-06-02T14:05:48.616","sender":"plugins.ipfilter.sftpgo-plugin-geoipfilter-linux-amd64","message":"[DEBUG] quốc gia không được phép: ip=XXX.XX.XXX.XXX quốc gia=NL"}
Các plugin SFTPGo khác có sẵn tại đây.

Hạn chế các tệp và thư mục dựa trên các mẫu shell​

SFTPGo hỗ trợ các bộ lọc mẫu giống như shell theo từng người dùng và theo từng thư mục: các tệp có thể được cho phép, từ chối và tùy chọn ẩn dựa trên các mẫu giống như shell.

Chúng ta hãy xem một số ví dụ.
Giả sử bạn muốn từ chối tất cả các tệp có phần mở rộng jpg và png trong một thư mục cụ thể.
Chọn người dùng cần sửa đổi, mở rộng phần "ACL" và thêm hạn chế mẫu giống như shell.



Theo cách này, các tệp có phần mở rộng png và jpg không thể được tải xuống hoặc tải lên nhưng vẫn hiển thị trong danh sách thư mục nếu đã có.
Bạn có thể ẩn chúng bằng cách đặt chính sách thành "Ẩn".



Chính sách "Ẩn" đã được giới thiệu trong v2.3.0.
 
Back
Bên trên