Archivi tag: user

Server SFTP multiutenza su CentOS 6

Scenario

Server Web su cui N sviluppatori hanno la necessità di caricare i nuovi contenuti. Poichè tale server risulta già raggiungibile via SSH, si vuole utilizzare il protocollo SFTP per il trasferimento dei file, sostanzialmente per due ragioni:

1) Esporre su Internet il minor numero di porte. Infatti, il protocollo SFTP sfrutta la stessa porta TCP del protocollo SSH (ovvero la 22);

2) SFTP è molto più robusto del File Transfer Protocol (FTP), in quanto garantisce alcuni meccanismi di sicurezza quali confidenzialità e soprattutto autenticazione della fonte.

 

sftp,ssh,user,group,chmod

Inoltre, la directory target di ogni sviluppatore è la medesima ed i file caricati da uno devono essere accessibili in lettura/scrittura da tutti gli altri (tenendo sempre traccia di chi-ha-fatto-cosa, ecco spiegato il perchè della necessità di un server SFTP multiutenza).

Preparazione della macchina

La prima cosa da fare è, ovviamente, creare le utenze per ciascun sviluppatore. E’ possibile fare ciò semplicemente utilizzando il comando useradd:

[root@serverWeb ~]# useradd devel1
[root@serverWeb ~]# useradd devel2
[root@serverWeb ~]# useradd devel3

A questo punto, è necessario settare la password di default per ciascuna utenza. Essa potrà essere modificata in un secondo momento dallo sviluppatore stesso:

[root@serverWeb ~]# echo 'devel1:passworddevel1'|chpasswd
[root@serverWeb ~]# echo 'devel2:passworddevel2'|chpasswd
[root@serverWeb ~]# echo 'devel3:passworddevel3'|chpasswd

Notate che ho utilizzato tale sintassi anzichè il classico comando interattivo:

[root@serverWeb ~]# passwd <nomeutente>

in quanto risulta più comoda nel caso in cui si dovessero creare molte utenze.

A questo punto creiamo il gruppo di che identificherà gli sviluppatori

[root@serverWeb ~]# groupadd web

e facciamo in modo che essi ne facciano parte (modificando il loro gruppo di default che è semplicemente uguale al nome utente scelto):

[root@serverWeb ~]# usermod -g web devel1
[root@serverWeb ~]# usermod -g web devel2
[root@serverWeb ~]# usermod -g web devel3

Infine, modifichiamo la home directory degli utenti appena creati, mediante il comando usermod (consentendo loro di atterrare direttamente sulla dir in cui dovranno essere caricati i contenuti Web):

[root@serverWeb ~]# usermod -d /var/www/html devel1
[root@serverWeb ~]# usermod -d /var/www/html devel2
[root@serverWeb ~]# usermod -d /var/www/html devel3

Posizioniamoci adesso nella dir /var/www/ e lanciamo i seguenti comandi:

[root@serverWeb ~]# chown root:web -R html
[root@serverWeb ~]# chmod 775 -R html
[root@serverWeb ~]# chmod g+s -R html

Con il primo comando abbiamo semplicemente modificato il gruppo proprietario della directory html; con il secondo comando abbiamo fatto in modo che tutti i file (e le subdirectory) garantiscano tutte le operazioni (read, write, execute) all’owner (root) ed al gruppo proprietario (web).

Infine, con il terzo comando, stiamo facendo in modo che qualunque nuovo file o directory che verrà creato all’interno di html abbia come proprietario il gruppo Web.

Configurazione di sshd

Questa è sicuramente “la parte facile” della guida, in quanto è sufficiente inserire una piccola flag all’interno del file di configurazione del demone SSH, ovvero /etc/ssh/sshd_config. In particolare, la entry:

Subsystem       sftp    /usr/libexec/openssh/sftp-server

dovrà diventare:

Subsystem       sftp    /usr/libexec/openssh/sftp-server -u 002

dove -u significa umask e rappresenta i permessi di default dei nuovi file e directory che verranno caricati mediante SFTP.

Riavviamo sshd:

[root@serverWeb ~]# service sshd restart

ed abbiamo finito.

Ora gli sviluppatori ci ringrazieranno.

Alla prossima.

Gabbie chroot per gli utenti FTP mediante vsftpd.conf

Recentemente mi è capitato di dover creare un nuovo account utente per l’accesso sul mio server FTP. Fin qui nulla di strano, è stato sufficiente digitare:

nightfly@nightbox:~$ useradd <nomeutente>

e successivamente:

nightfly@nightbox:~$ sudo passwd <password> <nomeutente>

 

vsftpd

A questo punto si è reso necessario ingabbiare l’utente nella sua home. Per fare ciò ho editato il file vsftpd.conf, che si trova nella directory /etc:

nightfly@nightbox:~$ sudo nano /etc/vsftpd.conf

decommentando (e dunque abilitando) la seguente opzione:

chroot_local_user=YES

Infine ho effettuato uno stop/start del demone vsftpd, digitando:

nightfly@nightbox:~$ sudo service vsftpd stop

nightfly@nightbox:~$ sudo service vsftpd start

e fine dei giochi.

PS: se volete cambiare la home directory dell’utente (che per default è /home/nomeutente), facendolo atterrare, ad esempio, in una sottodirectory di /var/www (per l’upload/download di pagine Web), vi basterà lanciare il comando:

nightfly@nightbox:~$ sudo usermod -d /var/www/nomecartella nomeutente

Se la directory /var/www/nomecartella esiste già, sarà necessario modificare il suo owner, partendo dal presupposto che essa abbia i permessi settati su 755:

nightfly@nightbox:~$ sudo chwon nomeutente:nomeutente /var/www/nomecartella

In alternativa, si potrebbe creare un gruppo ad hoc, chiamato ad esempio web, al quale associare i vari utenti che possono eseguire operazioni di lettura e scrittura su una data directory.

Per creare il gruppo occorre digitare:

nightfly@nightbox:~$ sudo groupadd nomegruppo

Successivamente aggiungiamo i vari utenti al gruppo, mediante il comando:

nightfly@nightbox:~$ sudo usermod -g web nomeutente

A procedura terminata, verifichiamo che gli utenti siano stati effettivamente aggiunti al gruppo, listandone il contenuto:

nightfly@nightbox:~$ sudo groups nomegruppo

Infine, possiamo modificare solo il gruppo proprietario della directory /var/www/nomecartella, digitando:

nightfly@nightbox:~$ sudo usermod :web /var/www/nomecartella

e cambiamo i permessi della directory, settandoli su 775:

nightfly@nightbox:~$ sudo chmod 775 /var/www/nomecartella

PPS: questa configurazione del file vsftpd.conf ingabbierà nella loro home tutti gli utenti di sistema che si collegheranno al server FTP. Se volete fare una selezione degli utenti che saranno ingabbiati e di quelli che non lo saranno, disabilitare l’opzione:

chroot_local_user=YES

commentandola o settandone il valore a NO:

#chroot_local_user=YES

In seguito abilitate l’opzione:

chroot_list_enable=YES

e specificate il file in cui è contenuta la lista degli utenti da ingabbiare, che per default è vsftpd.chroot_list:

chroot_list_file=/etc/vsftpd.chroot_list

Infine, inserite in questo file i nomi utente da chrootare (uno per riga).

A presto.