Tùy chọn lệnh SSH ủy quyền: nhiều lệnh?


15

Author_keys có tùy chọn lệnh = "..." giới hạn khóa cho một lệnh. Có cách nào để hạn chế một khóa cho nhiều lệnh không? Ví dụ: có regex ở đó hoặc chỉnh sửa một số tệp cấu hình khác?

Câu trả lời:


9

Không. Không phải là lệnh "được phép", mà là lệnh "bắt buộc" (dưới dạng tùy chọn ForceCommand ).

Khả năng duy nhất là sử dụng các phím khác nhau cho các lệnh khác nhau hoặc đọc các tham số từ đó stdin.


24

Bạn chỉ có thể có một lệnh cho mỗi khóa, bởi vì lệnh đó là cưỡng bức.

Nhưng bạn có thể sử dụng một tập lệnh bao bọc. Lệnh được gọi lấy dòng lệnh gốc làm biến môi trường $SSH_ORIGINAL_COMMANDmà nó có thể đánh giá.

Ví dụ: đặt cái này vào ~/.ssh/allowed-commands.sh:

#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

case "$SSH_ORIGINAL_COMMAND" in
    "systemctl restart cups")
        systemctl restart cups
        ;;
    "shutdown -r now")
        shutdown -r now
        ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

Sau đó tham khảo nó ~/.ssh/authorized_keysvới

command="/home/user/.ssh/allowed-commands.sh",…

Hữu ích. Có thể đáng để làm rõ hơn rằng chính sshd đã thêm SSH_ORIGINAL_COMMAND(per man sshd) để nó có sẵn trong các tập lệnh. Ngoài ra để đưa ra một ví dụ cho các tập lệnh tự động cho phép các mẫu nhất định SSH_ORIGINAL_COMMANDchạy. Xem thêm unixwars.blogspot.com/2014/12/getting-sshorigencommand.html
Cedric Knight

7

Trong SSH tuyệt vời , The Secure Shell: The Definitive Guide book của O'Reilly, trong chương tám, có một ví dụ hay được đưa ra bằng cách sử dụng một tập lệnh như sau:

#!/bin/sh

/bin/echo "Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit"

/bin/echo "Your choice:"

read ans

while [ "$ans" != "q" ]
do
   case "$ans" in
      1)
         /bin/date
         ;;
      2)
         /usr/bin/who
         ;;
      3)
         /usr/bin/top
         ;;
      q)
         /bin/echo "Goodbye"
         exit 0
         ;;
      *)
         /bin/echo "Invalid choice '$ans': please try again"
         ;;
   esac
   /bin/echo "Your choice:"
   read ans
done
exit 0

Sử dụng điều này trong .authorized_keystập tin của bạn như:

command="/path/to/your/script.sh" <ssh-key>

... cung cấp cho bạn điều này khi làm ssh:

Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit
Your choice:

Nhưng kịch bản như vậy về cơ bản bị phá vỡ scp, sftpvà tất cả những thứ khác bạn có thể thấy hữu ích một ngày nào đó.
Jakuje

3
@Jakuje Điều này không hợp lệ cho commandtùy chọn nói chung?
gf_

1

Các cách tiếp cận khác sử dụng ví dụ như trình bao bị hạn chế cho người dùng đã cho hoặc sử dụng trình bao bọc hạn chế các lệnh đối với các tệp / tập lệnh được tìm thấy trong một thư mục cụ thể, do đó cho phép tăng danh sách các lệnh mà không thay đổi trình bao bọc.

Một bài viết khác mô tả một tập lệnh chung, cũng cho phép các đối số dòng lệnh cho các lệnh được phép, nhưng cho phép khóa chúng với các quy tắc được thể hiện dưới dạng các biểu thức thông thường.

Ví dụ này sẽ được thể hiện theo cách sau:

command="only systemctl shutdown"

Và một .onlyrulestệp sẽ được tạo với nội dung này:

\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}

Ưu điểm của phương pháp 'duy nhất' này là không cần phải viết các tập lệnh riêng cho từng người dùng và tình huống.


Vấn đề với việc thay đổi shell là nó sẽ áp dụng cho tất cả các lần đăng nhập, ngay cả những người có khóa không có ý định bị hạn chế. Ngoài ra, nếu bạn chỉ đăng nhập shell và không có quyền truy cập của quản trị viên, bạn không thể thay đổi shell được cấu hình của mình thành bất cứ điều gì bạn muốn. Nhưng bạn vẫn có thể chỉnh sửa tệp ủy quyền của bạn.
kasperd

Bạn có thể sử dụng một "vỏ hạn chế" như mộtForcedCommand
Georg Lehner

Đối với tôi, trong trường hợp tài khoản đang được sử dụng là tài khoản người dùng bình thường và các hành động được yêu cầu là đặc quyền, người ta có thể dựa vào sudo để thực hiện kiểm tra và đặt tùy chọn lệnh ủy quyền thành "sudo $ SSH_ORIGINAL_COMMAND" không?
Steve Dee
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.