Có thể cấp cho người dùng quyền truy cập sftp mà không cần truy cập shell? Nếu có, nó được thực hiện như thế nào?


29

Tôi có một loạt người dùng chỉ cần tải tệp lên homedirs đã đặt của họ. Tôi nghĩ rằng sftp sẽ đủ, nhưng tôi không muốn họ đăng nhập qua shell. Vì vậy, nó có thể? Nền tảng của tôi là centos 7, homedirs của người dùng được lưu trữ cho phép người dùng nói / cá nhân / $

Tôi đã tạo người dùng với các cài đặt này

useradd -m -d /personal/user1 -s /sbin/nologin

đã gán cho người dùng một mật khẩu, sau đó khi tôi sử dụng sftp để đăng nhập vào máy thì nó báo không thể kết nối.


scponly github.com/scponly/scponly/wiki chroot tùy chọn
user2497

Câu trả lời:


11

Chỉnh sửa của bạn /etc/ssh/sshd_configđể chứa:

Match User [SFTP user]
ForceCommand internal-sftp

Khởi động lại sshd. Nếu bạn có nhiều người dùng, hãy đặt tất cả chúng vào dòng người dùng phù hợp được phân tách bằng dấu phẩy như vậy:

Match User User1,User2,User3

Chìa khóa để cấu hình sftpđể không cho phép truy cập shell là giới hạn người dùng thông qua ForceCommand tùy chọn.


Ok tôi đã làm theo tất cả các bước nhưng nó đã không đăng nhập
Sollosa

2
@Sollosa Hãy thử Match User [SFTP user] ForceCommand internal-sftpchỉ với , không có công cụ chroot.
Martin Prikryl

@MartinPrikryl nó hoạt động Martin, cảm ơn, tôi vừa xóa tham số chrootdirectory & viola
Sollosa

1
Trên hết, bạn có thể chrootngười dùng để họ không thể điều hướng lên và ra khỏi "nhà tù" được xác định của bạn
ivanivan

37

Tôi thích thiết lập sau đây để quản lý quyền truy cập SSH, mà tôi sử dụng tại nơi làm việc để quản lý một nhóm người dùng trên một nhóm máy chủ nhỏ. Bảo mật và dễ quản lý là cao trong danh sách ưu tiên của tôi.

Các tính năng chính của nó là dễ dàng quản lý quyền SSH thông qua thành viên nhóm Unix, có các quyền được xác định chặt chẽ và được bảo mật theo mặc định.

Đang cài đặt

Cài đặt phần mềm (tùy chọn nhưng hữu ích):

yum install members   # or apt install members

Thêm nhóm:

addgroup --system allowssh
addgroup --system sftponly

Trong /etc/ssh/sshd_config, đảm bảo rằng các cài đặt sau đây là No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Và vào cuối /etc/ssh/sshd_config, thêm hai khổ thơ này:

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(đừng quên khởi động lại SSH sau khi chỉnh sửa tệp)

Giải trình

Vì vậy, tất cả những điều này làm gì?

  • Nó luôn vô hiệu hóa đăng nhập gốc, như một biện pháp bảo mật bổ sung.
  • Nó luôn vô hiệu hóa đăng nhập dựa trên mật khẩu (mật khẩu yếu là rủi ro lớn cho các máy chủ chạy sshd).
  • Nó chỉ cho phép đăng nhập (pubkey) cho người dùng trong allowsshnhóm.
  • Người dùng trong sftponlynhóm không thể nhận được vỏ qua SSH, chỉ SFTP.

Việc quản lý người có quyền truy cập sau đó được thực hiện đơn giản bằng cách quản lý thành viên nhóm (những thay đổi này có hiệu lực ngay lập tức, không yêu cầu khởi động lại SSH):

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

Lưu ý rằng người dùng sftp của bạn cần phải là thành viên của cả hai sftponly(để đảm bảo họ sẽ không nhận được vỏ) và allowssh(để cho phép đăng nhập ở vị trí đầu tiên).

Thêm thông tin

  1. Xin lưu ý rằng cấu hình này không cho phép đăng nhập mật khẩu ; tất cả các tài khoản cần sử dụng xác thực khóa công khai. Đây có lẽ là chiến thắng bảo mật lớn nhất mà bạn có thể nhận được với SSH, vì vậy tôi cho rằng nó đáng để nỗ lực ngay cả khi bạn phải bắt đầu ngay bây giờ.

    Nếu bạn thực sự không muốn điều này, thì hãy thêm PasswordAuthentication yesvào khổ Match Group allowsshthơ. Điều này sẽ cho phép cả pubkey và mật khẩu auth cho allowsshngười dùng.

  2. Cấu hình này giới hạn bất kỳ sftponlyngười dùng vào thư mục nhà của họ. Nếu bạn không muốn điều đó, hãy xóa ChrootDirectory %hchỉ thị.

    Nếu bạn làm muốn chroot để làm việc, điều quan trọng là thư mục home của người dùng (và bất kỳ thư mục trên nó) được sở hữu bởi root:rootvà không ghi được bởi nhóm / khác. Không có vấn đề gì khi các thư mục con của thư mục chính thuộc sở hữu của người dùng và / hoặc có thể ghi.

    Có, thư mục chính của người dùng phải thuộc sở hữu gốc và không thể chấp nhận được đối với người dùng. Đáng buồn thay, có những lý do tốt cho giới hạn này. Tùy thuộc vào tình huống của bạn, ChrootDirectory /homecó thể là một lựa chọn tốt.

  3. Đặt shell của sftponlyngười dùng /sbin/nologinlà không cần thiết cũng không gây hại cho giải pháp này, vì SSH ForceCommand internal-sftpghi đè lên trình bao của người dùng.

    Việc sử dụng /sbin/nologincó thể hữu ích để ngăn chặn họ đăng nhập thông qua các cách khác (bảng điều khiển vật lý, samba, v.v.).

  4. Thiết lập này không cho phép rootđăng nhập trực tiếp qua SSH; điều này tạo thành một lớp bảo mật bổ sung. Nếu bạn thực sự làm cần đăng nhập root trực tiếp, thay đổi PermitRootLoginchỉ thị. Cân nhắc đặt nó thành forced-commands-only, prohibit-passwordvà (như là phương sách cuối cùng) yes.

  5. Đối với các điểm thưởng, hãy xem việc hạn chế ai có thể suroot; thêm một nhóm hệ thống gọi là wheel, và thêm / kích hoạt auth required pam_wheel.sotrong /etc/pam.d/su.


2
Đây phải là câu trả lời được chấp nhận. Nó cung cấp giải pháp cũng như phá vỡ lý do đằng sau mỗi bước.
kemotep

1
Đây là một câu trả lời thực sự tuyệt vời với lời khuyên bảo mật bổ sung tuyệt vời nhưng tôi lo lắng cho những người dùng có hệ thống đang dựa vào đăng nhập mật khẩu, đăng nhập gốc, v.v ... Tất nhiên làm như vậy là không tốt nhưng có thể chuyển các thay đổi liên quan đến cải thiện bảo mật chung sang phần riêng để câu trả lời cho câu hỏi với những thay đổi tối thiểu có sẵn?
Josh Rumbut

1
@JoshRumbut Tôi không muốn viết lại câu trả lời cho nhận xét (rất chính xác) của bạn, một phần vì nó thực sự chỉ hiển thị My Way ™, và một phần với hy vọng rằng nó có thể là một loại thiết lập SSH mặc định an toàn theo quy tắc ví dụ mà nhiều người thấy hữu ích Như một sự thỏa hiệp, tôi đã cố gắng làm cho nó rõ ràng hơn rằng đăng nhập gốc và mật khẩu auth sẽ không hoạt động và tôi đã bao gồm các hướng dẫn cách bật lại chúng :)
marcelm

1
Câu trả lời tốt, imo những thiếu sót lớn nhất của các câu trả lời khác là không tính đến các khía cạnh bảo mật, chủ yếu là chroot. +1
Rui F Ribeiro

1
Chroot sẽ không hoạt động cho% h chung. Đáng ngạc nhiên, bạn được yêu cầu chown root:rootchmod og-w
kubanchot

1

chỉ cần thay đổi shell mặc định của chúng thành / sbin / nologin. Giả sử hầu hết các loại Linux:

# usermod -s /sbin/nologin username

Tôi đã thử nó, nhưng người dùng không thể đăng nhập qua sftp, tôi không biết tại sao. Tôi đang sử dụng centos btw.
Sollosa

@Sollosa Có thể là một vấn đề về quyền trong chroot sftp của bạn hoặc sshd_config có vấn đề. Bạn nên cập nhật câu hỏi của mình để bao gồm các quyền của thư mục chroot và sshd_config của bạn với bất kỳ thông tin nhạy cảm nào được xử lý lại.
Kefka

Tôi tin rằng (mặc dù tôi không thể kiểm tra ngay bây giờ) rằng điều này chỉ cho phép SFTP nếu có Subsystem sftp internal-sftp) (hoặc có thể ForceCommand internal-sftp). Nếu có chung Subsystem sftp /path/to/sftp-server, nologinsẽ ngăn chặn ngay cả SFTP.
Martin Prikryl

@MartinPrikryl Tôi đã hiểu nhầm câu hỏi chưa được chỉnh sửa ban đầu của họ là hỏi làm thế nào để vô hiệu hóa quyền truy cập shell cho người dùng trên một máy chủ sftp chức năng khác. Tôi đã thức được khoảng mười phút vào thời điểm đó vì vậy tôi không rõ ràng như tôi có thể cảm thấy. Mặc dù tôi không biết rằng máy chủ sftp yêu cầu người dùng phải có vỏ hợp lệ để hoạt động - điều đó có vẻ nguy hiểm. Tôi chỉ sử dụng sftp nội bộ theo thói quen vì đó là cách tôi luôn làm.
Kefka

Xem câu trả lời của tôi cho OpenSSH: Sự khác biệt giữa máy chủ nội bộ và máy chủ sftp (đặc biệt là phần ở cuối)
Martin Prikryl

0

bạn có thể sử dụng tftp. bất cứ điều gì trên ssh sẽ yêu cầu một số auth (key | pass).

trong khi tftp có thể được bảo mật, có thể đáng để xem lại quyết định cung cấp quyền truy cập vào bất cứ điều gì mà không cần xác thực.

http://manpages.ubfox.com/manpages/bionic/man1/tftp.1.html


2
Tôi nghĩ OP muốn người dùng (có lẽ có tên người dùng và mật khẩu) không thể sử dụng máy khách SSH thông thường để kết nối với máy chủ và thực thi các lệnh tùy ý, nhưng những người dùng tương tự có thể tải tệp lên qua SFTP.
John_ReinstateMonica
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.