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