Vỏ Openssh tùy chỉnh


8

Môi trường là Ubuntu Server 12.04

Tôi muốn tạo một người dùng trên một máy chủ chỉ có thể ssh vào một shell chạy đuôi -f trên một tệp nhật ký và đóng phiên sau khi chương trình kết thúc (ctrl + c).

Có cách nào để đạt được điều này?

Câu trả lời:


8

Để được mô tả, nó sẽ không phải là ctrl + c, nhưng SIGHUP(gần với ctrl + d) sẽ giết chết ứng dụng.

Về cơ bản, bạn có thể đặt bất cứ thứ gì bạn muốn vào vỏ của người dùng /etc/passwd. Chỉ cần thay thế mặc định trên dòng passwd của người dùng (có thể /bin/bash) bằng một chương trình khác. Chương trình đó có thể là một tập lệnh, chẳng hạn như /usr/bin/tail_log_file, với các nội dung này, được sở hữu bởi root: root, với umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

Bạn có thể sử dụng một số trình thông dịch khác ngoài rbash, nhưng nên sử dụng trình bao hạn chế trong các trường hợp như vậy.

Để cực kỳ khoa trương về nó, bạn nên thêm đường dẫn của tập lệnh /etc/shells, nhưng tôi thường thấy nó vẫn hoạt động.

Cũng nên nhớ rằng người dùng có khả năng có thể đặt tập lệnh ở chế độ nền hoặc sử dụng một số tùy chọn ( ssh username@host bash) và vẫn có được trình bao. Nếu bạn muốn hạn chế người dùng theo những cách như vậy, quyền hệ thống tập tin tốt là giải pháp thực sự duy nhất.


hoạt động tuyệt vời, cảm ơn rất nhiều vì trả lời nhanh chóng và chính xác của bạn.
Ablue

2
Lý do duy nhất bạn muốn thêm một cái gì đó /etc/shellslà cho phép người dùng có cái gì đó khác là vỏ của họ để đặt vỏ của họ thành cái này; superuser ( root) luôn có thể thay đổi vỏ của bất kỳ ai thành bất cứ thứ gì họ muốn.
Jonathan Callen

1
Để thêm những gì @JonathanCallen đã nói: thực sự là một sự rò rỉ bảo mật để thêm tập lệnh đó vào /etc/shellsđó sẽ cho phép người dùng thay đổi trình bao của mình (vì /usr/bin/tail_log_filekhi đó sẽ được coi là "trình bao không giới hạn")!
Joachim Sauer

Ok tôi sẽ gỡ bỏ.
Ablue

1
Điều đó quá phức tạp; các lệnh bắt buộc (xem câu trả lời của @tink) là cách để thực hiện.
Phục hồi Monica - M. Schröder

10

ssh buộc các lệnh phải chú ý nếu bạn vui lòng sử dụng xác thực dựa trên khóa.

man authorized_keys
/command=

2

Bạn có thể định cấu hình ssh để chạy lệnh bạn chọn khi đăng nhập bằng xác thực khóa chung. Để làm điều này, tạo một cặp khóa:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubchứa một dòng phù hợp để đưa vào ~/.ssh/authorized_keystệp của người dùng :

ssh-rsa AAAA...UDz47Nl djs@sardinia

nhưng bạn có thể thêm một lệnh vào đây và ssh sẽ chạy lệnh đó khi đăng nhập bằng khóa:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Sau đó, người dùng có thể ssh vào máy bằng cách sử dụng ssh -i restricted-key.

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.