Come configurare gli utenti virtuali per vsftpd con accesso a una specifica sottodirectory?


24

Devo essere in grado di aggiungere utenti virtuali a vsftpd che hanno accesso solo a una sottocartella. Il motivo per cui voglio usare utenti virtuali è che voglio avere solo 1 utente reale sul server.

La struttura FTP è:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

L'account principale ha accesso alla cartella www e a tutte le sottodirectory e desidero aggiungere un utente virtuale che può avere accesso alla sottocartella1 e solo alla sottocartella1

Inoltre, per evitare confusione, richiederei anche ad un altro utente di accedere a sub_folder3 e solo a sub_folder3 . Il mio punto di vista è che devo essere in grado di scegliere quale cartella e sottocartella su base utente per utente.

Ho trovato il modo di aggiungere utenti per vedere l'intero strucutre o impostare le cartelle con nome utente entrambe che non mi servono.

Ho trovato una domanda simile pubblicata qui:

Come configurare VSFTPD per più utenti inclusa l'aggiunta di directory specifiche

ma raccomanda proftpdche, sebbene io fossi generalmente meno sicuro.
O ho perso il punto qui?


Ho avuto un problema con l'autenticazione per il tempo più lungo fino a quando ho trovato questo serverfault.com/questions/450214/… Apparentemente PAM ha problemi con l'hash MD5. Questa guida risolve questo problema.

Risposte:


31

Con un po 'di gioco sono riuscito a trovare una soluzione semi (non perfetta ma abbastanza buona)

usando 2707974 risposta e informazioni ho guadagnato altrove dove sono stato in grado di ottenere ciò di cui ho bisogno.

Per prima cosa devi installare vsftp e PAM

apt-get install vsftpd libpam-pwdfile

Modifica /etc/vsftpd.conf

nano /etc/vsftpd.conf

quindi incollare quanto segue

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Modifica per le tue esigenze esatte il bit più importante per gli utenti virtuali è tutto dopo il commento delle impostazioni dell'utente virtuale

Creazione dell'utente

Puoi usare un database o htpasswdho trovato htpasswdpiù veloce e più facile da usare.

crea una directory per memorizzare i tuoi utenti

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

aggiungendo altri utenti basta omettere il -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Sono riuscito a farlo funzionare solo con CRYPT che limita a 8 caratteri per usare più di 8 caratteri usa openssl per generare un hash compatibile e pipe direttamente in htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Una volta creati i tuoi utenti, ora puoi modificare il tuo file di configurazione PAM

nano /etc/pam.d/vsftpd

e rimuovere tutto all'interno di questo file e sostituirlo con il seguente

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Ciò consentirà l'accesso per gli utenti virtuali definiti in /etc/vsftpd/ftpd.passwde disabiliterà gli utenti locali

Successivamente è necessario aggiungere un utente per l'utilizzo da parte di questi utenti virtuali. Questi utenti non avranno accesso alla shell e verranno chiamativsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

l'utente deve corrispondere guest_username=vsftpdnel file conf vsftpd

Definizione dell'accesso alla directory

La linea importante qui è la seguente

user_config_dir=/etc/vsftpd_user_conf

questo significa che quando user1accede cercherà il seguente file

/etc/vsftpd_user_conf/user1

questo file è uguale al vsftpd.confcosì che puoi definirne uno nuovolocal_root

tornando alla domanda a cui vogliamo user1avere accesso var/www/website_name1/sub_folder1, quindi dobbiamo creare la vsftpd_user_confcartella:

mkdir /etc/vsftpd_user_conf

Ora crea il file utente:

nano /etc/vsftpd_user_conf/user1

e inserisci la seguente riga

local_root=/var/www/website_name1/sub_folder1

Ora riavvia vsftp

service vsftpd restart

ora dovresti essere in grado di accedere come utente1 che sarà in grado di vedere solo var/www/website_name1/sub_folder1qualsiasi cartella e file al suo interno.

Ora puoi aggiungere tutti gli utenti che vuoi e limitare il loro accesso a qualsiasi cartella desideri.

importante ricordare che se non si crea un file di configurazione utente, verrà automaticamente impostata la cartella var / www come root (nell'esempio sopra)

Se la sottocartella deve essere modificabile dall'utente, potrebbe essere necessario cambiare il proprietario della sottocartella condivisa:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

Funziona con alcune modifiche: 1) Usa percorsi assoluti (sostituisci i percorsi che iniziano su "var /" con "/ var". 2) vsftpd 2.3.5 che si trova in Ubuntu 12.04 non supporta l'opzione allow_writeable_chroot, puoi risolverlo installando patch vsftpd .
gadelat,

Ciao, con la password ssl omettiamo di nuovo -c con -d o omettiamo -c? Anche in una seconda nota, eseguiamo nuovamente la query per modificare la password? o c'è un altro metodo. Grazie
mdixon18,

Perché è necessario creare una home directory con useradd --home? è necessario?
e-info128

1
Ulteriori: abilita connessioni TLS sicure. digitalocean.com/community/tutorials/…
e-info128

1
apache2-utils potrebbe essere richiesto per alcune installazioni che non ho incluso nelle risposte poiché non è rilevante per tutti.
Avenyet,

12

Prova con questo manuale. Forse funzionerà per te.

Come farlo

Installa vsftpd e una libreria PAM

Modifica /etc/vsftpd.confe/etc/pam.d/vsftpd

Crea accout utente con directory personalizzate (in / var / www / ad esempio)

Impostare le directory con il corretto chmodechown

Crea un utente amministratore con pieno accesso al server

  1. Installa vsftpd(Very Secure FTP Deamon) e libpam-pwdfileper creare utenti virtuali

Volevo creare utenti FTP ma non volevo aggiungere utenti unix locali (nessun accesso alla shell, nessuna home directory e così via). Un PAM (Pluggable Authentication Modules) ti aiuterà a creare utenti virtuali.

sudo apt-get install vsftpd libpam-pwdfile

  1. modificare vsftpd.conf

Per prima cosa devi eseguire il backup del file originale

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Quindi creane uno nuovo

sudo vim /etc/vsftpd.conf

Copia e incolla le seguenti righe. Il file deve contenere SOLO queste righe:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Registra utenti virtuali

Per registrare un utente che usi htpasswd, quindi presumo che tu stia apache2lavorando sul tuo server. Crea una vsftpdcartella, quindi inserisci i file di configurazione.

sudo mkdir /etc/vsftpd

poi

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c significa che creeremo il file se non esiste ancora -d forza MD5, ne hai bisogno su Ubuntu 12.04, usalo sempre

Il comando richiederà una password.

Se vuoi aggiungere nuovi utenti in seguito:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Configura PAM in /etc/pam.d/vsftpd

Ancora una volta, è necessario eseguire il backup del file originale

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

e crearne uno nuovo

sudo vim /etc/pam.d/vsftpd

Copia e incolla queste 2 righe (questo dovrebbe essere l'unico contenuto). Insisto solo su queste 2 righe, ho perso molto tempo a conservare gli originali e li ho appena aggiunti.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Crea un utente locale senza accesso alla shell

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Puoi verificare che sia stato creato con il comando id: id vsftpd. Definiamo l'utente con la shell / bin / false a causa del parametro check_shell (anche se non lo usi). Quando l'utente finale si collega al server FTP, verrà utilizzato per i diritti e la proprietà:

chmode chown.

  1. Ricomincia vsftpd

Il modo comune è usare init.d come tutti i demoni

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Crea directory

In base alla configurazione, tutti gli utenti verranno inseriti in questa cartella: / var / www / user1.

Devi crearli con diritti particolari: la cartella principale non può essere scrivibile!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Nota: l'utente non può creare file o cartelle nella directory principale.

In vsftpd.confquesto chroot_local_user=YESmodo l'utente non può vedere nulla al di fuori della sua cartella. A lui, il server si presenta così:

Quindi esegui questi comandi:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

La /var/www/user1cartella DEVE esistere o la connessione fallirà.

In questo momento puoi provare a connetterti con il tuo FTP

  1. Crea un utente amministratore per accedere all'intero server

Per creare un utente amministratore è necessario registrare un nuovo utente con htpasswd.

Prima di farlo, ti consiglio di controllare nel /etc/ftpusersfile che definisce determinati utenti a cui non è consentito connettersi con ftp. Penso che sia solo per utenti locali e non utenti virtuali, ma nel caso in cui non scelga un nome contenuto in questo file.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Ora dobbiamo aggiungere una nuova linea in /etc/vsftpd.conf

chroot_list_enable=YES

Ciò significa che il tuo utente verrà inserito nella sua cartella (come jail) TRANNE gli utenti in / etc /

vsftpd.chroot_list

Creiamo questo file e aggiungiamo il nostro utente, il file è una semplice riga contenente "theadmin". Aggiungi un utente per riga. Ciò significa che NON è necessario creare una /var/www/theadmincartella, l'utente accederà e inizierà /home/vsftpd.

Riavvia il server e il gioco è fatto!


Ho già provato questo molto poco flessibile poiché applica local_root = / var / www / $ USER. Non mi consente di specificare una singola directory per un utente o utenti. questa directory normalmente ha scopi e posizioni differenti a seconda del client. Comunque grazie per la risposta.
Avenyet,

0

sì, puoi, e per flessibilità, crea una directory e un file userconfig, mkdir /var/www/userconfso qualunque cosa tu voglia cambiare il nome userconfs, quindi crea un file specifico

vi /var/www/userconfigs/ftpuseraccount

inside type, local_root=/var/www(o qualunque cosa tu voglia accedere tramite dir) guest_username=www-data(il proprietario ubuntu del file top edit

dopo aver aggiornato vsftpd.conf aggiungendo user_config_dir=/var/www/userconfigs(o qualunque cosa tu abbia sostituito come, questo account accederà a qualunque sdir specificato)

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.