ssh đường hầm chỉ truy cập


31

Có thể cấu hình ssh (trên linux) để chỉ cho phép truy cập vào đường hầm không? Người dùng có thể thiết lập đường hầm nhưng không thể lấy tệp shell / access?

Câu trả lời:


42

Có, chỉ cần sử dụng /bin/falsenhư shell và hướng dẫn người dùng bắt đầu quá trình SSH đường hầm mà không thực hiện bất kỳ lệnh từ xa nào (tức là -Ncờ cho OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

Ừm, nếu người dùng không sử dụng -N, họ có quyền truy cập shell. Điều này thực sự không giải quyết được vấn đề và nguy hiểm.
mlissner

12
@mlissner: Không, nếu bạn có /bin/falseshell, bạn sẽ không có quyền truy cập shell, vì mọi phiên đăng nhập sẽ chấm dứt ngay lập tức.
Sven

10

Trong tệp .ssh / ủy quyền của người dùng, hãy đặt một cái gì đó như sau:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Vì vậy, về cơ bản, các điều khiển của bạn sẽ ở phía trước khóa công khai ssh của người dùng được phân tách bằng khoảng trắng. Trong ví dụ này, các kết nối sử dụng khóa chung cụ thể sẽ chỉ được phép thực hiện chuyển tiếp cổng SSH tới máy chủ MySQL của 192.168.1.10 và máy chủ web 10.0.0.16 và sẽ không được gán shell (không có pty). Bạn đang hỏi cụ thể về tùy chọn "không có pty", nhưng những cái khác cũng có thể hữu ích nếu người dùng chỉ có nghĩa vụ đào hầm đến các máy chủ cụ thể.

Nhìn vào trang man cho sshd để biết thêm tùy chọn cho tệp ủy quyền .

Lưu ý rằng trải nghiệm của người dùng có thể trông hơi kỳ lạ: khi họ ssh in, nó sẽ trông giống như phiên đang bị treo (vì họ không nhận được một pty). Vậy là được rồi. Nếu người dùng đã chỉ định chuyển tiếp cổng với, ví dụ: "-L3306: 192.168.1.10: 3306", việc chuyển tiếp cổng sẽ vẫn có hiệu lực.

Trong mọi trường hợp, hãy thử xem.


6
Đây là lời khuyên nguy hiểm ; no-ptykhông ngăn chặn truy cập shell, nó chỉ không cho shell một pty. Nó không hiển thị lời nhắc (nghĩa là "dường như bị treo"), nhưng bạn vẫn có thể đưa ra các lệnh tốt. Bạn cần command="..."tùy chọn trong .ssh/authorized_keysnếu bạn muốn hạn chế quyền truy cập shell từ đó.
Aleksi Torhamo

@AleksiTorhamo là chính xác, nhưng đây là một sự khởi đầu; bạn cũng phải đặt shell thành / usr / sbin / nologin hoặc / bin / false trong / etc / passwd để hạn chế hoàn toàn shell. Tôi đã chỉnh sửa mục trên để phản ánh điều đó, cùng với lời khuyên của Aleks.
Jamieson Becker

4

Cung cấp cho người dùng một vỏ chỉ cho phép họ đăng xuất như /bin/press_to_exit.sh

#! / bin / bash
đọc -n 1 -p "Nhấn phím bất kỳ để thoát"

Bằng cách này, anh ta có thể đăng nhập miễn là anh ta muốn, với các đường hầm hoạt động, nhưng không chạy bất kỳ lệnh nào. Ctrl-cđóng kết nối.


3
Tôi nghĩ rằng ít nhất trên lý thuyết, người dùng sẽ có thể nhấn CTRL + C vào đúng thời điểm (giữa dòng 1 và 2) và kết thúc với một vỏ bash đầy đủ.
andreas-h

2

Chỉ định một vỏ không cho phép người dùng đăng nhập.

ví dụ

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

sẽ ngăn họ nhận được dấu nhắc shell và cho họ thời gian chờ là 60 giây - nếu không có kết nối nào hoạt động trong 60 giây thì nó sẽ thoát và do đó ngắt kết nối chúng hoàn toàn (tăng số lượng theo yêu cầu).

Họ cũng không thể thực thi một lệnh từ xa, bởi vì lớp vỏ đó sẽ không cho phép họ.


4
Hầu hết các cài đặt linux đã đi kèm với một cái gì đó cho điều đó. / sbin / nologin, hoặc / bin / false hoặc tương tự.
Rory

1
Ctrl-C sẽ làm gì trong ví dụ trên?
Arjan

Arjan: Vì tập lệnh được sử dụng làm trình bao, Ctrl-C sẽ có tác dụng tương tự như " logout" trên tập lệnh thông thường.
grawity

2
Tôi thực sự thích phản hồi của bá tước, với tùy chọn "-N", nhưng nếu bạn muốn cung cấp cho người dùng của mình một thông điệp hữu ích, thân thiện, thông tin - và ngăn họ rời khỏi các kết nối SSH ở mọi nơi - thì một tập lệnh tùy chỉnh rất hay và rõ ràng về nó đang làm gì vậy
JRG

2
@jrg Cuộc thảo luận này đã cũ và bạn có thể đã thay đổi quyết định :) nhưng IMHO thật nguy hiểm khi đưa ra các kịch bản shell thủ công. Hiện đã có /sbin/nologin, bạn có thể tùy chỉnh với một tin nhắn thân thiện với người dùng /etc/nologin.txt.
dr01

0

Giải pháp của tôi là cung cấp cho người dùng chỉ có thể tạo đường hầm, không có vỏ tương tác , để đặt lớp vỏ đó trong / etc / passwd thành / usr / bin / tun_shell .

Chỉ cần tạo tệp thực thi / usr / bin / tun_shell với một vòng lặp vô hạn .

Ngoài ra, sử dụng các tùy chọn AllowGroupsMatch Group.

Giải thích đầy đủ tại đây: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
Người dùng có thể thoát khỏi chương trình thực thi bằng cách nào đó và thoát khỏi trình bao. Bạn có hoàn toàn tin tưởng rằng thực thi của bạn sẽ không cho phép làm điều này?
dr01

2
@ dr01 Thành thật mà nói, tôi không chắc đây có an toàn 100% không. Tôi đoán khi bạn thoát khỏi tệp thực thi, phiên SSH cũng bị thoát. Tôi sẽ nghiên cứu thêm về điều này và có thể bình luận lại ở đây.
Daniel W.
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.