Cho phép SFTP nhưng không cho phép SSH?


94

Tôi đang bắt đầu một công ty lưu trữ rất nhỏ cho một vài người bạn và khách hàng nhỏ, không có gì lớn.

Tôi muốn cho "khách hàng" của mình quyền quản lý các tệp của họ trên máy chủ. Tôi ghét FTP vì nó không an toàn và theo ý kiến ​​của tôi đã lỗi thời.

Vì vậy, tôi muốn cho phép người dùng của mình kết nối thông qua SFTP nhưng không cho phép họ kết nối thông qua SSH. (Tôi biết, tôi biết, SFTP đang sử dụng SSH). Nhưng tôi chỉ tự hỏi, liệu nó có thể?

Vì vậy, tôi sẽ không phải cài đặt dịch vụ FTP trên máy chủ và mọi thứ sẽ tuyệt vời!

Câu trả lời:


121

Bắt đầu với phiên bản 4.9 OpenSSH (không khả dụng trong centos 5.x nhưng tính năng ChrootDirectory đã được đăng nhập) có một internal-sftphệ thống con:

Subsystem sftp internal-sftp

Và sau đó chặn sử dụng khác:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Thêm người dùng của bạn vào sftponlynhóm. Bạn phải thay đổi homedirectory của người dùng thành /vì chroot và /home/usernên được sở hữu root. Tôi cũng sẽ đặt /bin/falselàm vỏ của người dùng.


Ồ Siêu tuyệt vời! Tôi sẽ kiểm tra điều này và quay lại đây để xác nhận. Cảm ơn rất nhiều!
Tommy B.

+1 cho điều ChrootDirectory!
Kyle Hodgson

1
Sau khi làm điều này, người dùng sftponly của tôi không thể truy cập bằng ssh và có thể kết nối bằng sftp. Tuy nhiên, nó không thể thấy bất kỳ tập tin nào cả! Mặc dù các tập tin này có quyền cho người dùng này. :-(
Emilio Nicolás

3
Trong trường hợp bạn muốn làm điều này và tìm một mục trong sshd_config của bạn với "/ usr / lib / openssh / sftp-server" đã tồn tại, hãy kiểm tra tại đây: serverfault.com/questions/660160/ tựa - Internal-sftp là "mới hơn , tốt hơn và dễ dàng hơn "
Xosofox 16/07/2015

19

Có một cái vỏ sò làm những gì này. Nó cũng có thể chroot .


Điều này sẽ trở nên tuyệt vời nếu bạn cần cả người dùng SFTP và người dùng SSH. Bạn chỉ cần thay thế shell trong / etc / passwd cho những người chỉ bị giới hạn ở SFTP.
Dragos

4

Thanh toán rssh là một vỏ giả cho phép sftp nhưng từ chối ssh

Tìm hiểu thêm về RSSH

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Bạn có thể định cấu hình rssh để cho phép / từ chối các hành vi khác nhau như sft, scp, v.v.


Đẹp. Đây là cách dễ nhất để cấu hình mà không cần chạm vào sshd_config. Chỉ cần thay đổi shell trong tập tin passwd và thực hiện.
Tomofumi

2

Bạn có thể sửa đổi / etc / passwd và cung cấp cho người dùng đó một vỏ giả để anh ta không thể sử dụng ssh.


11
Bạn đã kiểm tra điều này?
splattne

8
Khi tôi thử cài đặt shell thành /bin/falsessh hoặc sftp không hoạt động
Brad Mace

2
/ bin / false là không cho phép bất kỳ loại đăng nhập nào, đó không phải là cách tiếp cận chính xác ở đây. Câu trả lời được chấp nhận từ Rob Wouters 'là cách bạn chỉ giới hạn người dùng ở SFTP chứ không phải bằng cách thay đổi trình bao. Nếu bạn muốn thay đổi vỏ của @ Stone thì asnwer sẽ là một ý kiến ​​hay.
jwbensley

1
Vì vậy, shell nào nên được sử dụng giả sử / bin / bash không được chấp nhận và / bin / false hoặc / sbin / nologin từ chối truy cập?
Putnik

1

Tôi sử dụng phương pháp chỉ định shell người dùng là / bin / false như đã đề cập. Tuy nhiên, bạn phải đảm bảo rằng / bin / shell nằm trong / etc / shell. Sau đó, nó hoạt động ssh = không ftp = ok.

Tôi cũng sử dụng vsftpd và thêm
chroot_local_user = YES vào /etc/vsftpd/vsftpd.conf để ftp-ers không thể xem ngày khác sau đó.

Lợi thế cho những thay đổi đơn giản này là không có cấu hình gây phiền nhiễu cho ssh config cho mỗi người dùng.


1

Đừng quên tìm dòng UsePAM yesvà nhận xét nó:

#UsePAM yes

Nếu không vô hiệu hóa điều này, máy chủ SSH của bạn sẽ gặp sự cố khi tải lại / khởi động lại. Vì bạn không cần các chức năng ưa thích của PAM, điều này là tốt.


0

Cấu hình ssh để chỉ kích hoạt sftp cho một số người dùng đã chọn là một ý tưởng hay và nó hoạt động chính xác, miễn là bạn cài đặt scponlyhoặc rssh.

rsshhoạt động tốt, trừ khi bạn cần cấu hình nhà tù, trong trường hợp này, hãy cố gắng làm theo hướng dẫn được cung cấp bởi hướng dẫn CHROOT là điên rồ, dẫn đến "sao chép" phần lớn các tệp thực thi hệ thống và thư viện ngay bên dưới "mỗi tù nhân người dùng", bao gồm cả rsshchính vỏ. Đó là một phương pháp lãng phí không gian.

scponly cần một sự hiểu biết sâu sắc về cấu hình dẫn đến vấn đề từ chối đăng nhập trong trường hợp thiết lập tù.

Cách đơn giản để cho phép các chức năng "ftp" với chức năng hoạt động chính xác, hỗ trợ SSL / TLS cho các giao dịch và đăng nhập an toàn là sử dụng một VSFTPD "cũ nhưng hoạt động", cài đặt nhanh chóng và sạch sẽ và cung cấp tất cả các cấu hình khi cần và cuối cùng nhưng không kém phần quan trọng: nó hoạt động!

Maurizio.


0

Tất cả các câu trả lời là rất sai lầm đáng tiếc: xin vui lòng làm như sau:

  1. Đầu tiên tạo sftp người dùng và nhóm sftp

  2. Tạo thư mục riêng dưới dạng root cho các tệp SFTP: sudo mkdir -p /home/sftpdir

  3. Có tệp sshd_config đã thử nghiệm cho phép SSH qua cổng 22 nhưng cũng có SFTP trên cổng ngẫu nhiên vì lý do bảo mật
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Khởi động lại và kiểm tra trạng thái của dịch vụ sshd

    sudo dịch vụ sshd khởi động lại

    tình trạng dịch vụ sshd

  2. Tạo một tệp Shell. Thêm thực thi để lặp lại một tin nhắn thông báo

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Tài khoản này chỉ giới hạn truy cập SFTP."' | sudo tee -a / bin / sftponly

  3. Cấp quyền thực thi và nối vào tệp shell

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shell

  4. cuối cùng Kiểm tra và bạn không thể kết nối.

  5. Mẫu để sử dụng máy khách SFTP với khóa SSH và mức độ chi tiết cơ bản:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.