Salut,
Vreau ca un user de pe un anumit host ([EMAIL PROTECTED]) sa fie capabil sa
copieze fisiere prin scp in home-ul unui [EMAIL PROTECTED] (fara parola,
punandu-i
pubkey-ul lui userA in authorized_keys ale lui userB). Pe langa asta, mai e
nevoie ca atunci cand fisierul ajunge pe hostB sa pot executa un script
asupra sa. deci singurul lucru pe care-l poate face [EMAIL PROTECTED] e sa
copieze
fisiere prin scp si sa ruleze un script. nimic mai mult.
ce optiuni vad eu:
1. simpla, secure dar nu prea eficienta:
[EMAIL PROTECTED] va avea shell rssh(restricted ssh) sau scponly. I se va
permite
sa copieze fisiere prin scp, insa nu va putea executa nimic altceva
(inclusiv acel script). Asta ar urma sa o faca userB printr-un cronjob(ceea
ce nu e prea eficient, as vrea ca acel fisier sa fie prelucrat de indata ce
ajunge pe hostB)
2.nu prea secure dar eficienta
Se pare ca pentru ca [EMAIL PROTECTED] sa poata trimia fisiere prin scp lui
[EMAIL PROTECTED], pe hostB trebuie pornit scp in sink mode (scp -t). Lucrul
asta
de obicei se face transparent atunci cand shell-ul lui userB e bash. Insa eu
nu vreau sa ii dau bash, vreau sa il las sa copieze, sa se execute un script
si sa iasa.
Asa ca am definit urmatorul shell pt [EMAIL PROTECTED] (fisier
/usr/bin/custom_shell.sh, owned by userB, listat in /etc/shells)
#!/bin/bash
if env | grep -i SSH_TTY ;then
#sectiunea 1
echo "Interactive shell detected. Exiting!"
exit 5
fi
#sectiunea 2
/usr/bin/scp -t $HOME
un_script.sh --args fisier.scp
exit 0
Functioneaza cand:
userA trimite un fisier prin scp (fisierul ajunge, se executa sectiunea 2 si
se iese; e exact ce am nevoie)
userA incearca sa se conecteze prin ssh (iese imediat, ceea ce si vreau)
Totusi, nu functioneaza cum trebuie cand -
userA face ssh [EMAIL PROTECTED] "o comanda, cum ar fi ls" sau
-userA vrea sa copieze de pe hostB pe hostA
(ssh(22401) debug1: channel 0: new [client-session]
ssh(22401) debug1: Entering interactive session.
ssh(22401) debug1: Sending command: ls
)
si sta aici, dau ctrl-C si imi returneaza, previzibil:
scp: protocol error: unexpected <newline>
(In cazul asta, SSH_TTY nu este setata, se executa sectiunea 2 din script,
care asteapta la intrare un fisier trimis prin scp si eu ii trimit o
comanda, "ls", de aici si protocol error. in cazul celalalt, pt a putea
copia de pe HostB, trebuie sa se ruleze acolo scp -f, si eu am scp -t.
Intrebari:
1. Stiti vreo metoda prin care, pe hostB, sa pot afla ce a initiat
[EMAIL PROTECTED] (cand vrea sa trimita un fisier catre hostB(singurul caz
permis) si cand vrea sa faca altceva prin ssh? grep dupa SSH_TTY nu e
suficient (nu detecteaza ssh "ls" si scp de tip 2).
2. Exista riscuri de securitate la care ma expun daca folosesc metoda asta?
Care ar fi ele? De ce e insecure sa ai un script bash definit ca un shell? E
posibil ca userB sa evadeze din scriptul meu si sa obtina un shell? Cum?
3. Dupa cum am spus, scp -t ramane agatat atunci cand nu trimit fisiere.
(cand initiez ssh 'comanda' sau scp [EMAIL PROTECTED]:file .). Ar putea fi
exploatat?
PS: Nu prea as vrea sa folosesc chroot jail.
--
Andrei Dumitrescu
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug