Apache2 + Webdav + openldap + ssl

Published on Thursday, May 6th, 2010

Installation des paquets:

[root@webdav:~]$apt-get install apache2

Apache

On active les modules nécessaires pour le webdav, le ssl et l’authentification ldap:

[root@webdav:~]$a2enmod authnz_ldap ssl dav dav_fs dav_lock
Considering dependency ldap for authnz_ldap:
Enabling module ldap.
Enabling module authnz_ldap.
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Enabling module dav.
Run '/etc/init.d/apache2 restart' to activate new configuration!

On créé un répertoire qui sera accessible pour l’utilisateur test:

[root@webdav:~]$mkdir -p /var/www/webdav/test
[root@webdav:~]$chmod 770 /var/www/webdav/test
[root@webdav:~]$chown .www-data /var/www/webdav/test

On créé le fichier lock pour webdav:

[root@webdav:~]$mkdir /var/lock/DAVLock
[root@webdav:~]$touch /var/lock/DAVLock/DAVLock
[root@webdav:~]$chown -R www-data:www-data /var/lock/DAVLock

On créé le fichier virtual host:

<VirtualHost *:443>
ServerAdmin webmaster@frites.be
ServerAlias webdav.frites.be

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/webdav.frites.be.pem
SSLCertificateKeyFile /etc/apache2/ssl/webdav.frites.be.key

DocumentRoot /var/www/webdav

ErrorLog /var/log/webdav_ssl_error.log
CustomLog /var/log/webdav_ssl_access.log combined
LogLevel warn

#WEBDAV

DavLockDB /var/lock/DAVLock/DAVLock

DAVMinTimeout 600

<Directory /var/www/webdav/test>
Dav On
AuthType Basic
AuthName "Accès RÉSERVÉ"
AuthName DAV
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPRemoteUserIsDN off
AuthLDAPGroupAttributeIsDN off
AuthLDAPURL ldaps://ldap.frites.be/ou=Webdav,dc=frites,dc=be?uid?sub?(objectClass=*)
require ldap-filter &(uid=test)
</Directory>
</VirtualHost>

On active le virtual host:

a2ensite webdav

Ne pas oublier de créer le dossier /etc/apache2/ssl et d’y placer le certificat et la clef du serveur webdav.frites.be

On redémarre apache:

[root@webdav:~]$/etc/init.d/apache2 restart

Authentification:

On modifie le fichier /etc/ldap/ldap.conf où l’on indique le seveur ldap et l’endroit où se trouve le ca:

#
# LDAP Defaults

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE dc=frites,dc=be
URI ldaps://ldap.frites.be
TLS_CACERT /etc/ssl/certs/cacert.pem

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never

Il ne faut pas oublier de placer le ca dans le répertoire /etc/ssl/certs

Accès au répertoire

On peut accéder au répertoire en lecture via un navigateur web à l’adresse suivante https://webdav.frites.be/test avec comme login test et le mot de passe qui se trouve dans le ldap.

Si l’on veut faire des modifications il faut utiliser un autre client, sous Linux on peut y accéder en ligne de commande via cadaver, en graphique via nautilus par exemple.
Sous Windows on peut rajouter un favori réseau afin d’éditer, créer et lire ce qui se trouve dans le répertoire test.
Attention le bloc-notes de Windows n’est pas compatible avec webdav, si l’on veut modifier/lire un fichier texte avec le bloc-notes il faudra le rapatrier en local et ensuite le copier avec les modifications sur le serveur.


Samba pdc

Published on Monday, July 13th, 2009

apt-get install samba

Pour que samba joue le rôle de pdc il faut remplir les 5 conditions suivantes:

1 activer security=user
2 activer le support des mots de passe cryptés encrypt password = yes
3 avoir un partage netlogon
4 le pdc doit être l’explorateur maître de son domaine domain master = yes
5 le pdc doit être serveur de connexion de son domaine domain logons = yes

Voici le /etc/samba/smb.conf pour remplir les 5 conditions ci-dessus:

[global]
netbios name = samba-server
workgroup    = samba
security     = user
encrypt passwords = yes
enable privileges = yes

domain master = yes
domain logons = yes

add machine script = /usr/sbin/useradd -g machines -s /bin/false %u

logon script = %U.bat

[netlogon]
path = /home/netlogon
read only = yes
write list = +ntadmin

Ajout de l’utilisateur root:

samba:~# smbpasswd -a root

Il faut ensuite associer les groupes unix aux groupes windows pour permettre la gestion du domaine (ajout d’une machine, création d’un partage,…).
On commence par ajouter le groupe ntadmin qui sera associé au groupe Administrators

samba:~# addgroup ntadmin

Pour pouvoir associer le groupe ntadmin au Builtin group Administrators il faut récupérer le sid du domaine que l’on vient de créer:

samba:~# net getlocalsid samba

Association du groupe ntadmin au Builtin group Administrators, il faut toujours l’associer avec le RID 512:

samba:~# net groupmap add sid=S-1-5-21-1167086687-1543078166-3842405581-512 \ ntgroup="Administrators" unixgroup=ntadmin

Toutes les personnes qui se trouveront dans le groupe ntadmin seront considérées comme appartenant au groupe Administrators sur les clients Windows. Ces personnes auront les droits d’administration sur les machines Windows et bénéficieront de tous les droits disponibles sur le domaine.
On peut lister ces droits via la commande suivante:

samba:~# net -S localhost -U% rpc rights list accounts 'Builtin\Administrators'

Si l’on affiche les membres du groupe Administrators sur une machine Windows qui se trouve dans le domaine, on peut voir que le groupe SAMBA/Administrators se retrouve automatiquement dans le groupe Administrators!

On peut également créer un autre groupe dans lequel on ajoutera les personnes qui peuvent joindre de nouvelles machines au domaine.

addgroup serveuradmin
net groupmap add ntgroup="Server Admins" unixgroup=serveuradmin

Ajout des droits pour le groupe Server Admins:

net rpc rights grant 'SAMBA\Server Admins' SeMachineAccountPrivilege -U root

Les personnes du groupe Server Admins auront donc le droit de joindre de nouvelles machines au domaine, par contre elles n’auront aucun droit d’administration sur ces machines.
Pour leur donner ces droits, il faudra les rajouter manuellement dans le groupe Power Users localement sur chaque machine, il n’existe pas d’autres moyens.

Dernière étape avant de pouvoir ajouter une machine dans le domaine, il faut créer le groupe qui contiendra les machines du domaine(cfr: commande add machine dans smb.conf):

addgroup machines

Ajout des répertoires personnels connectés automatiquement au login de l’utilisateur.

Il faut ajouter les lignes suivantes dans /etc/samba/smb.conf:

[global]
logon drive = H:

[homes]
comment = Home directories
read only = no
create mask = 0700
directory mask = 0700
valid users = %S

Ajout des profiles itinérants.

Pour que les profils itinérants fonctionnent il faut effectuer la modification suivante sur les postes de travail Windows.

gpedit.msc -> Local Computer Policy -> Computer Configuration -> System -> User Profiles
Activer l’option Do not check ownership of roaming profile forlders.

Si vous conservez le smb.conf actuel, le profil itinérant des utilisateurs sera sauvegardé dans leurs répertoires personnels.
Il est préférable les mettre à un autre endroit pour éviter les mauvaises manipulations de la part des utilisateurs!

[global]
logon path = \\samba\profiles$\%U\%a

[profiles$]
comment = profile directory
path = /home/profiles
read only = no
inherit permissions = yes

Le %U correpond au nom de l’utilisateur, %a correspond à la version version de l’os(Xp, Vista,…)

Il faut également créer le dossier /home/profiles et celui de chaque utilisateur:
samba:~# mkdir /home/profiles
samba:~#mkdir /home/profiles/user1
samba:~#chmod 700 /home/profiles/user1
samba:~#chown user1. /home/profiles/user1

Ajout d’un lecteur réseau

smb.conf:

[test]
comment = répertoire de test
path = /home/test
read only = no
valid users = user1

/home/profile/user1.bat:

NET USE X: \\samba\test

samba:~# mkdir /home/test
samba:~# chown user1. /home/test/

Le lecteur réseau X: sera connecté automatiquement lors de l’ouverture de session de user1.


Serveur ssh avec authentification ldap

Published on Friday, June 19th, 2009

Il faut tout d’abord installer libnss-ldap qui va nous fournir tous les paquets nécessaires:

debian:~# apt-get install libnss-ldap

/etc/libnss-ldap.conf:

base dc=frite,dc=be
uri ldaps://ldap.frite.be
ldap_version 3
port 636
tls_cacertfile /etc/ssl/cacert.pem

Modifier le fichier /etc/nsswitch.conf pour que la recherche d’utilisateurs et de groupes se fasse également sur le ldap:

/etc/nsswitch.conf:

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Modifier le fichier /etc/ldap/ldap.conf en lui indiquant l’emplacement du certificat nécessaire pour le ldaps:

/etc/ldap/ldap.conf

BASE dc=frite,dc=be
URI ldaps://ldap.frite.be
TLS_CACERT /etc/ssl/cacert.pem

Pour l’authentification il faut indiquer à pam de tenir compte des utilisateurs présents sur le ldap.

/etc/pam.d/common-auth:

auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_unix_auth.so try_first_pass

/etc/pam_ldap.conf:

base dc=frite,dc=be
uri ldaps://ldap.frite.be
ldap_version 3
port 636

Si on teste cette configuration l’utilisateur ldap qui va se connecter n’aura pas de répertoire personnel, il faut donc ajouter la ligne suivante au fichier /etc/pam.d/common_session pour que son répertoire personnel soit créé automatiquement lors de sa première connexion:

/etc/pam.d/common_session

session required pam_mkhomedir.so skel=/etc/skel umask=0077
session required pam_unix.so

En cas de problème désactiver nscd:

/etc/init.d/nscd stop


Mail server: Postfix + Dovecot + openldap

Published on Wednesday, April 29th, 2009

On commence par installer les différents paquets nécessaires à la mise en place du server mail:

apt-get install postfix postfix-ldap dovecot-imapd mailx

Postfix demande le type de serveur de messagerie => Site Internet

Nom du courriel => nom de domaine

Pour la configuration de Postfix il y a 4 fichiers à éditer, ils se situent dans /etc/postfix:

Tout d’abord main.cf:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/frites.pem
smtpd_tls_key_file=/etc/ssl/private/frites.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = mail
myorigin = /etc/mailname
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128,192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
luser_relay =

alias_maps = hash:/etc/aliases, ldap:/etc/postfix/ldap-aliases.cf

home_mailbox=Maildir/

virtual_mailbox_domains = frites.be

# Le fichier de config qui indique comment trouver les comptes virtuels
virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf
# Le fichier de config qui indique comment trouver les alias virtuels
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf

virtual_mailbox_base = /var/mail

dovecot_destination_recipient_limit = 1
virtual_transport = dovecot

virtual_uid_maps = static:vmail
virtual_gid_maps = static:mail

Dans le fichier master.cf il suffit de rajouter la ligne suivante à la fin du fichier:

# Dovecot LDA
dovecot unix - n n - - pipe
flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $recipient

On crée maintenant les 2 fichiers dans lesquels postfix va aller vérifier les noms d’utilisateurs et les différents alias présents sur le ldap.

ldap-accounts.cf:

server_host = ldap.frites.be
port = 636
version = 3
search_base = ou=People,dc=frites,dc=be
query_filter = (mailRoutingAddress=%s)
result_attribute = sn

ldap-aliases.cf:

server_host = ldap.frites.be
port = 636
version = 3
search_base = ou=People,dc=frites,dc=be
query_filter = (mailRoutingAddress=%s)
result_attribute = mailRoutingAddress

On peut vérifier que la communication avec le serveur se passe bien via la commande suivante:

postmap -q nom_utilisateur ldap:/etc/postfix/ldap-accounts.cf

Configuration de dovecot:

Il n’y a que 2 fichiers à éditer dans /etc/dovecot.

dovecot.conf:

protocols = imap imaps
login_greeting = frites Dovecot ready!!
mail_location = maildir:/var/mail/%n
protocol imap {
imap_client_workarounds = outlook-idle
}
protocol lda {
postmaster_address = postmaster@frites.be
auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
mechanisms = plain login
passdb ldap {
# Path for LDAP configuration file
args = /etc/dovecot/dovecot-ldap.conf
}
userdb ldap {
# Path for LDAP configuration file
args = /etc/dovecot/dovecot-ldap.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail # User running Dovecot LDA
group = mail # Or alternatively mode 0660 + LDA user in this group
}
}
}

dovecot-ldap.conf:

hosts = ldap.frites.be
tls = yes
auth_bind = yes
ldap_version = 3
base = ou=People,dc=frites, dc=be
#On reprend l'uid de l'utilisateur vmail et le gid du group mail
user_attrs = uidNumber=500,gidNumber=8
user_filter = (&(objectClass=posixAccount)(uid=%n))
pass_filter = (&(objectClass=posixAccount)(uid=%n))
default_pass_scheme = SSHA
user_global_uid = 500
user_global_gid = 8

Il faut ensuite modifier le fichier /etc/ldap/ldap.conf pour pouvoir communiquer en ldaps avec notre serveur ldap:

BASE dc=frites,dc=be
URI ldaps://ldap.frites.be:636

TLS_CACERT /etc/ssl/certs/frites-ca.crt

Il ne reste plus qu’à ajouter l’utilisateur vmail, qui est l’utilisateur chargé de lancer deliver pour mettre les mails dans les boites mail de chaque utilisateur:

adduser --ingroup mail --uid 500 vmail

Premier mail de test:

echo test mail | mail vlamsdoem -s "Test mail"

Si l’utilisateur vlamsdoem existe sur ldap vous devriez retrouver le mail dans le répertoire /var/lib/mail/vlamsdoem/new


Pureftp, pam_mkhomedir et Active Directory

Published on Monday, September 29th, 2008

Samba + krb + winbind

Installer les paquets suivants samba-common, krb5-clients, winbind:

apt-get install samba-common krb5-clients winbind

Modifier le fichier /etc/krb5.conf:

[libdefaults]
ticket_lifetime = 24000
default_realm = MOULES.FRITES.BE
dns_lookup_realm = false
dns_lookup_kdc = false
forwardable = yes

[realms]
MOULES.FRITES.BE = {
kdc = DC01.MOULES.FRITES.BE
admin_server = DC01.MOULES.FRITES.BE
default_domain = MOULES.FRITES.BE
}

[domain_realm]
.moules.frites.be = MOULES.FRITES.BE
moules.frites.be = MOULES.FRITES.BE

Modifier le fichier /etc/hosts:

127.0.0.1 localhost.moules.frites.be localhost pure-ftp

Modifier le fichier /etc/samba/smb.conf:

[global]
security = ADS
realm = MOULES.FRITES.BE
password server = 192.168.1.1
workgroup = MOULES
netbios name = pure-ftp
winbind cache time
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template shell = /bin/bash

Il suffit maintenant de (re)démarrer winbind et de modifier /etc/nsswitch.conf:

/etc/init.d/winbind restart

passwd: compat winbind
group: compat winbind

On peut maintenant joindre la machine au domaine:

net join -U Administrateur -S dc01.moules.frites.be

Remarque: Il faut que les 2 machines aient un décalage inférieur à 5 minutes, dans le cas d’une machine
virtuelle (domU) c’est le dom0 qui doit être synchro avec le contrôleur de domaine. Installer ntpdate et synchroniser le dom0 avec le contrôleur:

ntpdate 192.168.1.1

Pure-ftp + pam_mkhomedir

Installer pure-ftpd:

apt-get install pure-ftpd

Il faut modifier le fichier /etc/pam.d/pureftpd pour que les “home dirs” soient créés lorsque l’utilisateur se connecte pour le première fois:

# allow anonymous users
auth sufficient pam_ftp.so
auth sufficient pam_winbind.so
auth required pam_unix_auth.so shadow use_first_pass
# /etc/ftpusers contain user list with DENIED access
auth required pam_listfile.so item=user sense=deny
file=/etc/ftpusers onerr=succeed

# Uncomment next line to allow non-anonymous ftp access ONLY for
users,
# listed in /etc/ftpallow
#auth required pam_listfile.so item=user sense=allow
file=/etc/ftpallow onerr=fail

# standard
auth required pam_shells.so
account sufficient pam_winbind.so
account required pam_unix.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077

Erreur rencontrée après une coupure de courant:


Sep 23 13:24:44 pure-ftp winbindd[25663]: [2008/09/23 13:24:44, 0] tdb/tdbutil.c:tdb_log(783)
Sep 23 13:24:44 pure-ftp winbindd[25663]: tdb(/var/lib/samba/winbindd_idmap.tdb): rec_free_read bad magic 0x42424242 at offset=112268

Le fichier winbindd_idmap.tdb était corrompu, il suffit de le supprimer pour qu'il soit regénéré convenablement.


Première application en Rails

Published on Sunday, September 14th, 2008

Créer la base de donnée:

mysql> create database first;

Créer la structure de l’application:

ruby:~# rails first

Se rendre dans le dossier créé et éditer le fichier de configuration de la base de données:

ruby:~/first# vi config/database.yml

Editer le fichier pour avoir ceci:

development:
adapter: mysql
database: first
username: root
password:
host: localhost

Générer le modèle qui va nous permettre de créer le schema de notre base de données sans notions Sql:

ruby:~/first# ruby script/generate model first

Ajouter les différents champs dans notre schema:

ruby:~/first# vi db/migrate/001_create_firsts.rb

Je rajoute 3 champs dans notre db:

class CreateFirsts < ActiveRecord::Migration
def self.up
create_table :firsts do |t|
t.column :nom, :string
t.column :prenom, :string
t.column :age, :integer
end
end
def self.down
drop_table :firsts
end
end

On crée les différents champs de notre db:

ruby:~/first# rake db:migrate

Il ne reste plus qu'à générer le scaffold et à démarrer le serveur:

ruby:~/first# ruby script/generate scaffold first

ruby:~/first# ruby script/server -p 80 -b 0.0.0.0

Rendez-vous sur le http://ip_server/firsts pour tester votre première application :)


Installation Ruby on Rails

Published on Sunday, September 14th, 2008

Il suffit d’installer les 3 paquets suivants:

apt-get install rubygems rails mysql-server

gem install rails -y


postgreSQL 8.3 sous Debian etch

Published on Tuesday, May 20th, 2008

Il faut ajouter les backports dans le source.list

# nano /etc/apt/sources.list

Ajouter ceci dans le fichier :

deb http://www.backports.org/debian etch-backports main

Installer le paquet :

# apt-get install -t etch-backports postgresql postgresql-client

# apt-get install postgresql-contrib -t etch-backports

# nano /etc/postgresql/8.3/main/pg_hba.conf


local all postgres ident sameuser
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

postgres=# alter user postgres with password 'XXXX';

psql -d postgres < /usr/share/postgresql/8.3/contrib/adminpack.sql (pgadmin function)

#nano /etc/postgresql/8.3/main/pg_hba.conf

#nano /etc/postgresql/8.3/main/postgresql.conf

listen_addresses = '*'


Créer un miroir local avec apt-mirror

Published on Tuesday, March 18th, 2008

Installer apt-mirror:

debian-mirror3:~# apt-get install apt-mirror

Créer le répertoire ainsi que les sous-répertoires qui contiendront le miroir:

debian-mirror3:~# mkdir -p /media/usb/miroir/{mirror,skel,var}

Créer le fichier de configuration de apt-mirror:

debian-mirror3:~# cat apt-config
set base_path /media/usb/miroir
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
set defaultarch i386
set nthreads 4
set tilde 0

deb http://ftp.belnet.be/debian etch main contrib non-free
deb-src http://ftp.belnet.be/debian etch main contrib non-free

#
# Security updates
#
deb http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free

clean http://fpt.belnet.be/debian

Lancer la commande apt-mirror pour récupérer tout le miroir avec le fichier de conf ci-dessus:

debian-mirror3:~# apt-mirror apt-config

Une fois que tout le miroir est téléchargé il suffit de modifier le fichier /etc/apt/sources.list pour installer les paquets à partir du miroir local:

debian-mirror3:~# cat /etc/apt/sources.list

deb file:/media/usb/miroir/mirror/ftp.belnet.be/debian etch main contrib non-free

deb file:/media/usb/miroir/mirror/security.debian.org stable/updates main contrib non-free

Pour mettre à jour le miroir il suffit de lancer la même commande que pour le téléchargement du miroir:

debian-mirror3:~# apt-mirror apt-config


Installation d’OCS Inventory

Published on Thursday, March 6th, 2008

Installez les paquets suivants sur le serveur:

apt-get install apache2
apt-get install mysql-server-5.0
apt-get install php5
apt-get install php5-mysql
apt-get install make
apt-get install libapache2-mod-perl2
apt-get install libapache-dbi-perl
apt-get install libcompress-zlib-perl
apt-get install libxml-simple-perl
apt-get install libnet-ip-perl
apt-get install libsoap-lite-perl

Décompressez l’archive récupérée sur le site d’OCS:

gestion:/var/www# tar -xvzf OCSNG_LINUX_SERVER_1.01.tar.gz

Lancez le setup.sh qui se trouve dans le dossier:

gestion3:/var/www# cd OCSNG_LINUX_SERVER_1.01; ./setup.sh

Il ne reste plus qu’à créer le fichier du site ocs:

gestion3:/var/www# cd /etc/apache2/sites-available/; cp default ocs

Modifiez les lignes suivantes dans le fichier ocs:

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName ocs.test.be
ServerAlias ocs
DocumentRoot /var/www/ocsreports/

Commentez la ligne suivante:

#RedirectMatch ^/$ /apache2-default/

Il ne reste plus qu’à redémarrer apache2 et faire pointer votre browser vers http://ocs