Shell Openssh personalizzata


8

L'ambiente è Ubuntu Server 12.04

Vorrei creare un utente su un server che è in grado di ssh in una shell che esegue tail -f su un file di registro e chiude la sessione al termine del programma (ctrl + c).

C'è un modo per raggiungere questo obiettivo?

Risposte:


8

Per essere pedanti, non sarà ctrl + c, ma SIGHUP(più vicino a ctrl + d) che uccide l'app.

Puoi inserire essenzialmente quello che vuoi nella shell dell'utente /etc/passwd. Sostituisci semplicemente il valore predefinito sulla linea passwd dell'utente (probabilmente /bin/bash) con un altro programma. Tale programma può essere uno script, ad esempio /usr/bin/tail_log_file, con questi contenuti, di proprietà di root: root, con umode 0755:

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

È possibile utilizzare un interprete diverso da rbash, ma in questi casi è consigliabile utilizzare una shell con restrizioni.

Per essere estremamente pedante al riguardo, dovresti aggiungere il percorso dello script /etc/shells, ma di solito trovo che funzioni comunque.

Tieni presente inoltre che l'utente potrebbe potenzialmente mettere lo script in background o utilizzare alcune opzioni ( ssh username@host bash) e acquisire comunque una shell. Se vuoi limitare l'utente in questo modo, le buone autorizzazioni del filesystem sono l'unica vera soluzione.


funziona alla grande, grazie mille per la tua risposta rapida e accurata.
Ablue,

2
L'unico motivo per cui vorresti aggiungere qualcosa /etc/shellsè consentire agli utenti che hanno qualcos'altro come shell di impostare la propria shell su questo; il superutente ( root) può sempre cambiare la shell di chiunque con ciò che desidera.
Jonathan Callen,

1
Per aggiungere ciò che ha detto @JonathanCallen: in realtà è una perdita di sicurezza aggiungere quello script in /etc/shellsquanto consentirebbe all'utente di cambiare la sua shell (perché /usr/bin/tail_log_filesarebbe quindi considerata una "shell senza restrizioni")!
Joachim Sauer,

Ok lo rimuoverò.
Ablue,

1
È troppo complicato; i comandi forzati (vedi la risposta di @tink) sono il modo per farlo.
Ripristina Monica - M. Schröder l'

10

I comandi forzati di ssh mi vengono in mente se sei felice di usare l'autenticazione basata sulla coppia di chiavi.

man authorized_keys
/command=

2

Puoi configurare ssh per eseguire un comando a tua scelta quando accedi usando l'autenticazione con chiave pubblica. Per fare ciò, genera una coppia di chiavi:

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.pubcontiene una riga adatta per inserire il ~/.ssh/authorized_keysfile degli utenti :

ssh-rsa AAAA...UDz47Nl djs@sardinia

ma puoi aggiungere un comando a questo, e ssh eseguirà quel comando quando accedi con la chiave:

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

Quindi l'utente può inviare ssh alla macchina usando ssh -i restricted-key.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.