Posts Tagged ‘Server’

Subversion, webdav, LDAP e restrizioni sulle cartelle

Se avete bisogno di configurare un server svn su Linux con autenticazione tramite LDAP, webdav ed inserire specifiche restrizioni su determinate cartelle, potete seguire le seguenti istruzioni.

  • Uno: dovete installare subversion e apache sul vostro server Linux (ometterò questa parte).
  • Two: dovete configurare webdav per accedere ad svn tramite http e configurare l’accesso tramite LDAP.

    Assicuratevi di avere i seguenti moduli di apache installati e configurati:

    LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    LoadModule dav_module modules/mod_dav.so
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
    

    Assunzioni:

    • Sono solito configurare subversion sotto la directory /srv/svn.
    • Gli utenti a cui è permesso di accedere a subversion devono appartenere al gruppo LDAP CN=SVN-AUTHORIZATION,OU=Groups GSO,DC=test,DC=example,DC=com

    Modificate il file /etc/apache2/mods-enabled/dav_svn.conf (su Ubuntu, su altre distribuzioni potrebbe essere posizionato altrove) ed assicuratevi di avere le seguenti configurazioni:

    <Location /svn/>
      # Abilitare svn su webdav
      DAV svn
      # Impostare il parent path per repositori multipli
      SVNParentPath /srv/svn/
      # Impostare il tipo di autenticazione
      AuthType Basic
      # Impostare il nome dell'autenticazione
      AuthName "FLR Subversion Repository"
      # Impostare il file che conterrà le autorizzazioni (permessi)
      AuthzSVNAccessFile /etc/apache2/dav_svn.authz
      # Consentire di listare il parent path
      SVNListParentPath On
      # Utilizzare LDAP per l'autenticazione
      AuthBasicProvider ldap
      # Il server LDAP è autoritativo (cioè l'autenticazione finale è delegata a LDAP)
      AuthzLDAPAuthoritative On
      # Utente di bin per LDAP
      AuthLDAPBindDN "CN=svnbind,OU=Users OS,DC=test,DC=example,DC=com"
      # Password dell'utente di bind per LDAP
      AuthLDAPBindPassword mypassword
      # LDAP URL
      AuthLDAPUrl "ldap://ldap_ip_address:389/DC=test,DC=example,DC=com?sAMAccountName?sub?(&(&(objectClass=user)(objectCategory=person))(memberof=CN=SVN-AUTHORIZATION,OU=Groups GSO,DC=test,DC=example,DC=com))"
    
      # E' necessario un utente valido
      Require valid-user
    </Location>
  • Three Create il file dei permessi /etc/apache2/dav_svn.authz
    Dovrà avere il seguente contenuto in base alle vostre esigenze:

    [groups]
    admin = matteo
    group1 = user1, user2, user3
    group2 = user2
    group3 = user4
    
    ###################################
    [/]
    * = r
    @admin = rw
    ###################################
    [repository1:/]
    * = rw
    ###################################
    [repository2:/]
    * =
    @admin = rw
    @group1 = rw
    ###################################
    [repository3:/]
    * =
    @admin = rw
    @group2 = rw
    @group1 = r
    ###################################
    [repository4:/]
    * = r
    @admin = rw
    [repository4:/trunk/sources]
    * = r
    @admin = rw
    @group3 = rw
    ###################################

    Adesso riavviate apache con /etc/init.d/apache2 restart

  • Quattro: create finalmente i repositori.

    Da root impartite i seguenti comandi:

    cd /srv/svn
    svnadmin create repository1
    chown www-data.www-data -R repository1
    svnadmin create repository2
    chown www-data.www-data -R repository2
    svnadmin create repository3
    chown www-data.www-data -R repository3
    svnadmin create repository4
    chown www-data.www-data -R repository4

    Siete adesso pronti per utilizzare subversion con account LDAP, webdav e restrizioni su directory personalizzate.

Utenti virtuali su vsftpd

Sono solito configurare vsftp come FTP server sui web server per permettere un accesso FTP sulla base del nome a dominio. Qualche giorno fa un mio cliente mi ha chiesto di creare multipli utenti ftp per un singolo dominio, ognuno con una root differente all’interno dello stesso dominio.

Questa è sempre stata la configurazione base di vsftpd (/etc/vsftpd.conf) che utilizzo:

listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
xferlog_enable=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=www-data
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
force_dot_files=YES
ftpd_banner=Welcome to my private FTP service.
local_umask=022

e questo è il mio /etc/pam.d/vsftpd

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

La prima volta ho creato il file /etc/ftpd.passwd in questo modo:

htpasswd -c -d -b /etc/ftpd.passwd domain1.com <password>

Per gli utenti futuri, semplicemente va evitato il parametro ‘-c’:

htpasswd -d -b /etc/ftpd.passwd domain2.com <password>

Con questa configurazione tutti gli utenti hanno le seguenti credenziali:

  • host: domain1.com
  • username: domain1.com
  • password: password
  • port: 21
  • Root folder: /var/www/domain1/

Adesso il punto è: come possiamo creare utenti multipli per un singolo dominio e ognuno con una cartella root diversa?
La risposta è abbastanza semplice, seguitemi!

Create la directory /var/www/users e aggiungete la seguente linea alla fine di /etc/vsftpd.conf:

user_config_dir=/var/www/users

All’interno della directory /var/www/users create un file per ogni utente virtuale (per esempio per l’utente user1.domain1.com) contenente una linea con la directory base per quell’utente:

echo "local_root=/var/www/domain1.com/pub/user1" > /var/www/users/user1.domain1.com

Adesso aggiungete il nuovo nome utente e password al file /etc/ftpd.passwd come al solito:

htpasswd -d -b /etc/ftpd.passwd user1.domain1.com <password>

Riavviate il demone vsftpd e testate la vostra nuova configurazione!