Brew le package manager Osx

Sur une machine apple ce qui manque le plus c’est un package manager qui permet l’accès à wget ou nmap sans avoir a compiler soit meme. Il y a quelques pre-requis :

  • Command Line Tools for Xcode
  • XQuartz pour des applications X11
  • Java pour du Java

Installation

L’installation se fait via ruby en une ligne

ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"

Mise a jour

Avec cette commande on met a jour la liste des paquets disponible.

brew update

Recherche

Comme apt-cache search on peut chercher directement dans la liste :

brew search nm
bsponmpi   cpanminus  net-snmp	 nmap	    openmeeg   openmpi
homebrew/science/fast-statistical-alignment

Version d’un paquet

Interroger la version en cours :

brew info wget
wget: stable 1.14, HEAD
http://www.gnu.org/software/wget/
/usr/local/Cellar/wget/1.14 (7 files, 676K) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/wget.rb
==> Options
--enable-debug
	Build with debug support
--enable-iri
	Enable iri support

Edition

Pour choisir soit même la version a installer comme l’url du développeur qui a changée mais qui n’est pas a jour dans brew.On peut tout a fait choisir sa propre version :

brew edit multitail
require 'formula'

class Multitail < Formula
  homepage 'http://www.vanheusden.com/multitail/download.html'
  url 'http://www.vanheusden.com/multitail/multitail-5.2.11.tgz'
  sha1 'b3e721c3fb02092b0cbe9cfc6c67d1bbed6800f4'

  def install
    ENV['DESTDIR'] = prefix
    system "make", "-f", "makefile.macosx", "multitail"

    bin.install "multitail"
    man1.install gzip("multitail.1")
    etc.install "multitail.conf"
  end
end

C'est uniquement les champs url et sha1 qui comptent, veillez à ce que vous répercutiez bien le bon hash d'intégrité avec le bon algorithme.

Installation

Et on termine par l'installation, avec le joie d'avoir brew qui prend en charge les dépendances à d'autres package :

brew install wget

Les Access Control openldap aka ACL

Comme le sujet ldap a l’air de bien intéresser, je rajoute une couche avec les Access Control, un sujet vaste et surtout une source de complexité et de sécurité.
Toutes les operations se font en tant qu’admin bien évidement.

    Listing

Pour lister les ACL en cours

ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -W -b cn=config '(olcDatabase={1}hdb)' olcAccess
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=cyklodev,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=cyklodev,dc=com" write by  * read

Pour en supprimer on peut spécifier la règle dans un fichier ldif mais c’est fastidieux.

    Remove
vim remove.ldif
dn: olcDatabase={1}hdb,cn=config
delete: olcAccess
olcAccess: to dn.base="" by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f remove.ldif

Mais on peut aussi le faire par id et la c’est plus cool

    Remove by id
vim remove.ldif
dn: olcDatabase={1}hdb,cn=config
delete: olcAccess
olcAccess: {1}
ldapmodify -Y EXTERNAL -H ldapi:/// -f remove.ldif

Comme la configuration de base permet une lecture de tout par tous les users, il vaut mieux commencer par tout enlever en passant par une boucle sur {0}.

Maintenant on peut rajouter ses propres règles comme celle qui exposait toutes les branches aux users :

    Add
vim add.ldif
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to dn.base="" by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f add.ldif

A éviter bien sur !

Il reste maintenant a exploiter correctement les fonctionnalités des ACL avec quelques règles a savoir :

Les ACL sont appliquées par ordre croissant {id}

Au premier match la règle est appliquée

Aucune mise en production sans tests avec table de vérité sur les cas

Pour faciliter la gestion quelques fonctionnalités sont ajoutées :

 0: o=suffix
    1: cn=Manager,o=suffix
    2: ou=people,o=suffix
    3: uid=kdz,ou=people,o=suffix
    4: cn=addresses,uid=kdz,ou=people,o=suffix
    5: uid=hyc,ou=people,o=suffix
    dn.base="ou=people,o=suffix" match 2;
    dn.one="ou=people,o=suffix" match 3, and 5;
    dn.subtree="ou=people,o=suffix" match 2, 3, 4, and 5; and
    dn.children="ou=people,o=suffix" match 3, 4, and 5.

Source : Doc OpenLdap 2.4

Installer perl en user standalone sur debian et centos

Je me suis vu confronté à devoir séparer des instances de perl par user, apres avoir lu un thread sur servfault je me suis tourné vers cpanminus qui remplit tres bien cette fonction.

wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

Il reste à vérifier que les variables d’environnement soient bien passées et de se deloguer et à se reloguer.

env

Pour une debian le script est compliant avec le .profile et le .bashrc, mais pour une Centos il est necessaire de rajouter le contenu du .profile dans le .bash_profile .

Pour install un paquet via cpanm :

cpanm File::Tail 

Cli wizard : exemple de unattended en cli sur ldap

Etant entrain de bosser sur ldap je me suis vu confronté a la re configuration du paquet en changement le rootdn et la j’ai eu la flemme de chercher quels fichiers et quelles actions entraient en jeu.

J’ai donc creusé sur le wizard cli qui sort avec un dpkg-reconfigure et je suis tombé sur deb-conf bien sur uniquement pour Debian et ses forks.
Quel merveille !!! En route pour une reconfiguration automatique de slapd.

debconf-show slapd
root@hdr12:~# debconf-show slapd
  slapd/internal/generated_adminpw: (password omitted)
* slapd/password2: (password omitted)
  slapd/internal/adminpw: (password omitted)
* slapd/password1: (password omitted)
* slapd/allow_ldap_v2: false
  slapd/password_mismatch:
  slapd/invalid_config: true
* shared/organization: test.cyklodev.com
  slapd/upgrade_slapcat_failure:
* slapd/no_configuration: false
* slapd/move_old_database: true
  slapd/dump_database_destdir: /var/backups/slapd-VERSION
* slapd/purge_database: false
* slapd/domain: customer.auth
* slapd/backend: HDB
  slapd/dump_database: when needed

On y retrouve les pages du wizard obligatoires avec une * et on peut accéder a chacun des champs avec un

echo "get  slapd/backend" | debconf-communicate
0 HDB

On peut bien sur les modifier

echo "set  slapd/backend HDB" | debconf-communicate
0 value set

Il ne reste plus qu’a lancer la reconfiguration du paquet en specifiant le mode non interactif.

dpkg-reconfigure -f noninteractive slapd

Comme quoi la flemme c’est bien !

Installation de Apache Directory Server aka ApacheDS 2.0.0-M7

Pour rester dans le registre ldap mais en innovant un peu voici ApacheDS soit le protocole LDAP mais remis au gout du jour et en Java.
Autant le dire tout de suite la documentation n’est pas tres presente mais bon voila les lignes directrices.

Pre requis : Java 1.6+
Attention : Vulnerabilité pour la version 1.5.X https://blogs.reucon.com/srt/vulnerability-in-apacheds-1-5-10878/
Download : http://directory.apache.org/apacheds/2.0/downloads.html

On installe

chmod +x apacheds-2.0.0-M7-amd64.deb
dpkg -i apacheds-2.0.0-M7-amd64.deb

On configure le tout en faisant attention car la version 2.0 abandonne la configuration par xml pour une configuration par ldif

* Position des fichiers

moteur   : /opt/apacheds-2.0.0-M7/
instance : /var/lib/apacheds-2.0.0-M7/
init         : /etc/init.d/

* Configuration des ports

vim /var/lib/apacheds-2.0.0-M7/default/conf/config.ldif
dn: ads-transportid=ldap,ou=transports,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config
dn: ads-transportid=ldap,ou=transports,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config

* Ajouter sa propre partition
Attention la version 2.0 demande d’avoir la nouvelle version du Studio http://directory.apache.org/studio/apache-directory-studio-20.html

* Ouvrir le Studio et ajouter un server avec comme user et comme password

uid=admin,ou=system
default

* Clic droit sur le serveur > Open configuration > Partition > Add
* On redemarre le serveur
Attention encore car il y a un bug dans le Studio sur l’attribut krbprincipalname qui est en fait krb5principalname

ERR_04269 ATTRIBUTE_TYPE for OID krbprincipalname does not exist!

Avec ca vous pouvez vous faire une idee de la bete. Beaucoup de choses sont encore a ameliorer mais c’est un ldap en bonne et due forme.