ftpd chrooted

8 risposte [Ultimo contenuto]
Ritratto di OldSparky
OldSparky
(Geek)
Offline
Geek
Iscritto: 07/01/2005
Messaggi: 158

Premetto che sono nubbio nella tecnica del chrooting e che sto' facendo delle esperienze per la prima volta, percui se diro' cazzate, non siatene tanto sorpresi,lol.

Devo creare un modo sicuro per far girare un demone ftp in un server, e quindi ho pensato subito di farlo girare come utente del sistema, ma in questo modo non posso gestire come vorrei il filesystem, ovvero posso usare solo l' uid e i vari gid a cui l' user appartiene (l' user dove gira il demone).

Siccome, probabilmente per varie ragioni, non esiste nessun demone per linux che crea un FS "virtuale", cioè che tutti i file che vengono creati e uppati sono dello stesso utente, ma invece accedendo tramite ftp cosi' non è (magari tramite un piccolo db che memorizza i vari gid, uid virtuali), devo per forza farlo girare come root.

Questo già non mi piace per niente, ma non penso si possa fare in un altra maniera, o sbaglio?

Ho visto anche una guida proftpd + mysql, ma penso che il demone venga sempre attivato come root, percui non risolve Confused.

Ho pensato quindi ad un bel chrooting, ma ho letto da varie parti che non cambia assolutamente niente, dato che per scavalcare questa "sicurezza" basta un doppio chroot, o altre tecniche non conosco, ma semplici da ulitizzare, giusto?

Cè la possibilità di chrootare il demone, ma in modo che nell' ambiente principale (e non quello sub creato dopo il chroot) il demone sia egeuito come utente normale, e che nel "sub-ambiente" sia eseguito come root (mi è venuta questa idea, probabilmente da nubbi, quando ho trovato chrootuid, che unisce chroot con sudo)?

E per finire (lol) cè qualche buon howto/guida che spieghi bene come funziona la tecnica del chrooting?

Per adesso ho finito, thx :asd:

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1515

Quote:

Ho visto anche una guida proftpd + mysql, ma penso che il demone venga sempre attivato come root, percui non risolve Confused.

a naso direi di no.

<br />~# ps aux | grep proftpd<br />nobody    1193  0.0  1.0  4452 2216 ?        Ss   14:37   0:00 proftpd: (accepting connections)<br />

Mi sembra che il processo appartenga a nobody (potrei sbagliare).

<br /># To cause every FTP user to be "jailed" (chrooted) into their home<br /># directory, uncomment this line.<br />DefaultRoot ~<br />

L'autenticazione la esegui mezzo db mysql e gli utenti diventano virtuali ed "imprigionati" nella loro home.

Ritratto di OldSparky
OldSparky
(Geek)
Offline
Geek
Iscritto: 07/01/2005
Messaggi: 158

Di solito si utilizza nobody o ftp solo per gli accessi anonimi che io sappia, percui in quel caso non puoi gestire le utenze, dato che nobody non puo' diventare root e nemmeno un altro user.

Thx per la risposta Smile.

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1515

Mi sfugge cosa centri la proprieta' di un processo col processo si autenticazione.

L'iter e' banale.
Avvio il processo con qualcosa (qualcosa di possibilmente non sensibile, nobody va bene).
Creo un utente reale sulla macchina e un gruppo.
Autentico gli utenti su mysql.
Tutti i file apparterranno allo stesso utente/gruppo per il filesystem ma l'accesso jailato alla directory creera' per l'utente ftp l'illusione di una utenza reale.

Per funzionare funziona, garantito (altrimenti la mia macchina non avrebbe ftp con utenti virtuali e processo nobody Laughing

Ciauu

Ritratto di syneus
syneus
(Junior)
Offline
Junior
Iscritto: 17/09/2004
Messaggi: 16

Dalla tua domanda noto che hai un po' di confusione circa il funzionamento di proftpd.

Spero di esserti d'aiuto spiegandoti alcune cose fondamentali:

All'avvio, proftpd crea un processo esclusivamente con la funzione di accettare nuove connessioni; tale processo appartiene all'utente specificato dalla direttiva User

Nel momento in cui un utente si logga correttamente, viene creato un altro processo, in questo caso con la funzione di servire le richieste del client, il cui utente corrisponde all'utente loggato.
Di default proftpd esegue la funzione di chroot relativo alla directory specificata per ogni utente loggato.

Per chiarezza, eccoti un ps axu:
..
ftpd 18235 0.0 0.9 5252 2452 ? Ss 09:52 0:00 proftpd: (accepting connections)
syneus 18400 0.0 0.5 4400 1356 pts/0 S+ 09:53 0:00 ncftp -u ****** localhost
syneus 18401 0.2 1.0 5364 2728 ? S 09:53 0:00 proftpd: syneus - localhost: IDLE
...
in ordine: la prima riga indica il processo(utente ftpd) in ascolto di connessioni, la seconda il mio client ftp, e la terza indica il processo creato da proftpd dopo il mio login

Spero di esserti stato d'aiuto.

PS: la soluzione proftpd+mysql è molto utile se hai molti utenti che necessitano di acceso ftp: in questo caso non devi creare nessn utente di sistema, ma con 2 tabelle MySQL te la vavi benissimo.

Syneus

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1515

Non potevi essere piu' chiaro.
Grazie anche da parte mia Smile

Ritratto di OldSparky
OldSparky
(Geek)
Offline
Geek
Iscritto: 07/01/2005
Messaggi: 158

Thx entrambi per le risposte, pero' i miei dubbi restano.

Se è vero che a proftpd non servono i privilegi di root per funzionare anche con gli utenti di sistema, come mai richiede per forza che sia root a lanciarlo, altrimenti non puo' funzionare come dovrebbe??

E nel caso venisse usato mysql come db per creare user virtuali (che poi l' unica differenza sembrerebbero i dati di login e la home dove vengono chrootati) questi alla fine non possono condividere assolutamente niente, ma solo nel caso abbiano la stessa homedir (e quindi possono cancellare i file dell' altro, dato che uid e gid sono gli stessi)?

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1515

Quote:

E nel caso venisse usato mysql come db per creare user virtuali (che poi l' unica differenza sembrerebbero i dati di login e la home dove vengono chrootati) questi alla fine non possono condividere assolutamente niente, ma solo nel caso abbiano la stessa homedir (e quindi possono cancellare i file dell' altro, dato che uid e gid sono gli stessi)?

Gestire account mezzo mysql e', imho, molto comodo. Ad esempio puoi creare un servizio per l'invio di file di grosse dimensioni integrato in una applicazione web gestendo in maniera trasparente da un pannello di controllo generale tutti le peculiarita' sia dell'applicazione che dell'amministrazione del server.
Inoltre separare la gestione utenti ftp dalla gestione utenti macchina in maniera cosi' netta e' piu' pratico in caso di esportazioni di ambienti. Un dump del database un nuovo utente e l'ambiente e' gia' esportato senza dover intervenire nello sotrage di password unix.

Per il problema "condivisione" puoi creare piu' utenti e piu' gruppi non solo uno (non ho approfondito in merito, solo letto dell'opportunita').
Puoi, inoltre, creare una gerarchia di directory.
Se assegni la dir /fileserver/pippo a pipo e /filserver/pluto a pluto puoi creare un utente privilegiato che accedendo a /fileserver abbia la visione completa.

Tutto dipende dalle tue esigenze e da cosa devi fare con il servizio ftp, il resto sono chiacchiere e distintivo (TM) Laughing

Ritratto di OldSparky
OldSparky
(Geek)
Offline
Geek
Iscritto: 07/01/2005
Messaggi: 158

Quote:

Tutto dipende dalle tue esigenze e da cosa devi fare con il servizio ftp, il resto sono chiacchiere e distintivo (TM)

Concordo in pieno Smile, Se lo faccio girare con mysql e in chroot ho utenti virtuali con tanto di gid e uid (logicamente partono da 10000 Smile ) , quindi anche se un po' piu' rischioso ho preferito questo, visto che tanto solo root puo' eseguire il demone.