Làm thế nào tôi có thể giới hạn một người dùng trên máy chủ SSH cho phép họ chỉ các đặc quyền cho SSH đường hầm ? tức là họ không thể chạy các lệnh ngay cả khi họ đăng nhập qua SSH.
Các máy chủ Linux của tôi là Ubuntu 11.04 và OpenWrt.
Làm thế nào tôi có thể giới hạn một người dùng trên máy chủ SSH cho phép họ chỉ các đặc quyền cho SSH đường hầm ? tức là họ không thể chạy các lệnh ngay cả khi họ đăng nhập qua SSH.
Các máy chủ Linux của tôi là Ubuntu 11.04 và OpenWrt.
Câu trả lời:
Về phía máy chủ, bạn có thể hạn chế điều này bằng cách đặt vỏ người dùng của họ thành /bin/true
. Điều này sẽ cho phép họ xác thực, nhưng thực tế không chạy bất cứ thứ gì vì họ không có vỏ để chạy nó. Điều này có nghĩa là họ sẽ bị giới hạn ở bất kỳ tập hợp con nào mà SSH có thể cung cấp cho họ. Nếu nó cung cấp cổng chuyển tiếp, họ vẫn có thể làm điều đó.
Về phía khách hàng, bạn có thể sẽ muốn kết nối với -N
. Điều này ngăn máy khách khỏi HỎI cho một lệnh từ xa như shell, nó chỉ dừng lại sau khi phần xác thực được thực hiện. Cảm ơn các bình luận viên đã chỉ ra điều này.
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
.
Điều sau đây có lợi thế là các chuyển tiếp ổ cắm của đại lý X11 và SSH cũng không được phép, điều này vẫn có thể được cho phép theo cách của Calebs. Một lợi thế khác là, nếu người dùng có thể thay đổi shell mặc định của mình thông qua bất kỳ cách nào khác, điều này vẫn sẽ hạn chế quyền truy cập SSH của anh ta chỉ chuyển tiếp TCP.
Đặt những điều sau vào /etc/ssh/sshd_config
:
Match User that-restricted-guy
AllowTcpForwarding yes
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
để cho phép người dùng that-restricted-guy
chuyển tiếp bất kỳ kết nối TCP nào thông qua máy hỗ trợ SSH của bạn (kết nối với máy này, cũng như localhost
và thậm chí kết nối từ máy này sang các máy khác).
Nếu bạn muốn nó thậm chí còn hạn chế hơn (đó là một ý tưởng tốt), bạn cũng có thể làm như sau:
Match User even-more-restricted-guy
PermitOpen 127.0.0.1:12345
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
Điều này sẽ cho phép người dùng even-more-restricted-guy
chỉ chuyển tiếp các kết nối tới cổng TCP 127.0.0.1 12345 (vì nó được hiển thị thông qua máy hỗ trợ SSH của bạn).
Khi người dùng kết nối bình thường, bây giờ anh ta sẽ bị ngắt kết nối ngay lập tức vì /bin/false
lệnh sẽ được kích hoạt mà không thoát ra ngay lập tức với mã 1. Nếu bạn muốn tránh điều này và giữ kết nối chuyển tiếp của bạn mở, hãy thêm -N
cờ vào ssh
lệnh. Điều này sẽ không cố thực hiện bất kỳ lệnh nào nhưng vẫn cho phép thiết lập chuyển tiếp TCP.
Một ví dụ về lệnh chuyển tiếp sẽ hoạt động trong thiết lập sau:
ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine
Bạn có thể kiểm soát những gì mọi người có thể làm trong ssh bằng cách kết hợp các nhóm giả sử phiên bản ssh của bạn đủ mới để hỗ trợ nó (openssh 5.x +).
Về cơ bản, chúng tôi đối xử với họ như thể họ là người dùng sftp, nhưng cho phép chuyển tiếp tcp và tùy ý chỉ định các điểm đến mà họ có thể chuyển tiếp. Nếu bạn cung cấp cho họ một thư mục chính nhưng không tạo bất kỳ thư mục nào trong đó, họ không thể chuyển bất kỳ tệp nào vì họ sẽ không được phép làm như vậy.
Match Group nicepeople
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
GatewayPorts no
ChrootDirectory /opt/dummy_location/%u
ForceCommand internal-sftp
AllowTcpForwarding yes
PermitOpen 192.168.0.8:22
PermitOpen 192.168.0.5:8080
# Or leave out the PermitOpen to allow forwarding to anywhere.
HostbasedAuthentication no
RhostsRSAAuthentication no
AllowAgentForwarding no
Banner none
Bạn có thể lặp lại những khối Nhóm đối sánh này cho mỗi nhóm mà bạn muốn cung cấp các hành vi hoặc hạn chế khác nhau.
Bạn có thể kiểm soát thêm nơi người này có thể truy cập mạng bằng iptables
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT
Điều này giả định nhóm "người đẹp" GID là 500.
Một số tùy chọn ssh ở trên có sẵn trong các phiên bản openssh cũ hơn, nhưng không nằm trong phần Match Group. Match Group rất hạn chế trong OpenSSH 4.x trở về trước.