Kustomshssh Shell Terbuka

8

Lingkungannya adalah Ubuntu Server 12.04

Saya ingin membuat pengguna di server yang hanya dapat ssh menjadi shell yang menjalankan tail -f pada file log dan menutup sesi setelah program berakhir (ctrl + c).

Apakah ada cara untuk mencapai ini?

Ablue
sumber

Jawaban:

8

Untuk menjadi bertele-tele, itu tidak akan menjadi ctrl + c, tetapi SIGHUP(lebih dekat ke ctrl + d) yang membunuh aplikasi.

Pada dasarnya Anda bisa memasukkan apa pun yang Anda inginkan ke dalam shell pengguna /etc/passwd. Cukup ganti default pada baris passwd pengguna (mungkin /bin/bash) dengan program lain. Program itu bisa berupa skrip, seperti /usr/bin/tail_log_file, dengan konten ini, dimiliki oleh root: root, dengan umode 0755:

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

Anda dapat menggunakan beberapa juru bahasa selain rbash, tetapi disarankan untuk menggunakan shell yang dibatasi dalam kasus-kasus seperti itu.

Untuk menjadi sangat luar biasa tentang hal itu, Anda harus menambahkan jalur skrip untuk /etc/shells, tetapi saya biasanya tetap berhasil.

Perlu diingat juga bahwa pengguna berpotensi menempatkan skrip di latar belakang, atau menggunakan beberapa opsi ( ssh username@host bash) dan masih mendapatkan shell. Jika Anda ingin membatasi pengguna dengan cara seperti itu, izin sistem file yang baik adalah satu-satunya solusi nyata.

Falcon Momot
sumber
berfungsi dengan baik, terima kasih banyak atas balasan Anda yang cepat dan akurat.
Ablue
2
Satu-satunya alasan Anda ingin menambahkan sesuatu /etc/shellsadalah untuk memungkinkan pengguna yang memiliki sesuatu yang lain sebagai shell mereka untuk mengatur shell mereka untuk ini; superuser ( root) selalu dapat mengubah shell siapa pun menjadi apa pun yang mereka inginkan.
Jonathan Callen
1
Untuk menambahkan apa yang dikatakan @JonathanCallen: sebenarnya merupakan kebocoran keamanan untuk menambahkan skrip itu /etc/shellskarena hal itu akan memungkinkan pengguna untuk mengubah cangkangnya (karena /usr/bin/tail_log_filekemudian akan dianggap sebagai "cangkang tidak dibatasi")!
Joachim Sauer
Ok saya akan hapus.
Ablue
1
Itu terlalu rumit; perintah yang dipaksakan (lihat jawabannya oleh @tink) adalah cara untuk melakukannya.
Pasang kembali Monica - M. Schröder
10

ssh memaksa perintah muncul dalam pikiran jika Anda senang menggunakan otentikasi berbasis keypair.

man authorized_keys
/command=
Tink
sumber
2

Anda dapat mengonfigurasi ssh untuk menjalankan perintah pilihan Anda saat Anda masuk menggunakan otentikasi kunci publik. Untuk melakukan ini, buat sepasang kunci:

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.pubberisi baris yang cocok untuk dimasukkan ke dalam file pengguna ~/.ssh/authorized_keys:

ssh-rsa AAAA...UDz47Nl djs@sardinia

tetapi Anda dapat menambahkan perintah untuk ini, dan ssh akan menjalankan perintah itu ketika masuk dengan kunci:

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

Kemudian pengguna dapat ssh menggunakan mesin ssh -i restricted-key.

Dan
sumber