<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trux &#187; ubuntu</title>
	<atom:link href="http://trux.info/tag/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>http://trux.info</link>
	<description>Partage de mes astuces et découvertes</description>
	<lastBuildDate>Tue, 09 Jun 2009 19:47:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Utiliser rubygems avec Netbeans sur Ubuntu grâce aux ACLs</title>
		<link>http://trux.info/2008/12/utiliser-rubygems-avec-netbeans-sur-ubuntu-grace-aux-acls/</link>
		<comments>http://trux.info/2008/12/utiliser-rubygems-avec-netbeans-sur-ubuntu-grace-aux-acls/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 08:00:06 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://trux.info/?p=29</guid>
		<description><![CDATA[En installant rubygems et en l&#8217;utilisant avec Netbeans, on se rend vite compte que rubygems est configuré pour stocker ses gemmes dans /var/lib/gems et que Netbeans n&#8217;a pas les droits d&#8217;écriture à cet endroit. En effet, la manière traditionnelle d&#8217;installer gem implique d&#8217;utiliser sudo, en ligne de commande :
$ sudo gems install rails -y
Oui mais [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-32" title="netbeans_ruby_debian" src="http://trux.info/wp-content/uploads/2008/12/netbeans_ruby_debian.png" alt="" width="300" height="83" />En installant rubygems et en l&#8217;utilisant avec <a href="http://www.netbeans.org/">Netbeans</a>, on se rend vite compte que rubygems est configuré pour stocker ses gemmes dans <code>/var/lib/gems</code> et que Netbeans n&#8217;a pas les droits d&#8217;écriture à cet endroit. En effet, la manière traditionnelle d&#8217;installer gem implique d&#8217;utiliser sudo, en ligne de commande :</p>
<pre>$ sudo gems install rails -y</pre>
<p>Oui mais voilà, Netbeans n&#8217;utilise pas sudo. Pour que Netbeans puisse gérer les gemmes lui-même, il lui faut donc les droits d&#8217;écriture sur le dossier <code>/var/lib/gems</code> et ses sous-répertoires. Le plus naïf est de donner tous les droits en écriture, mais c&#8217;est mal ! Sinon, on peut aussi créer un groupe nommé <code>rubygems</code> et donner le droit d&#8217;écriture à ce groupe. Cette approche est meilleure mais un problème se pose lorsque l&#8217;utilisateur y crée un nouveau fichier ou dossier : non seulement celui-ci appartient à l&#8217;utilisateur et non pas à root, mais en plus le groupe n&#8217;a pas le droit d&#8217;écriture. C&#8217;est là qu&#8217;interviennent les ACLs&#8230;</p>
<p><span id="more-29"></span></p>
<h3>Démonstration avec l&#8217;utilisateur foo.</h3>
<p>On crée un groupe ruby gems et on s&#8217;y ajoute</p>
<pre>
$ sudo addgroup rubygems
$ sudo adduser foo rubygems
</pre>
<p>On se déconnecte puis reconnecte pour prendre en compte le nouveau groupe, puis on vérifie les permissions</p>
<pre>
$ sudo mkdir /test
$ sudo chgrp rubygems /test
$ sudo chmod g+w /test
$ ls -ld /test
drwxrwxr-x 2 root rubygems 4096 2008-12-03 22:16 /test
$ touch /test/bar
$ ls -l /test/bar
-rw-r--r-- 1 foo foo 0 2008-12-03 22:21 /test/bar
</pre>
<p>Ce n&#8217;est pas bon du tout. On préférerait avoir quelque chose comme <code>-rw-rw-r-- 1 foo rubygems</code> afin que les autres membres du groupe <code>rubygems</code> puissent eux aussi modifier ce fichier. De manière plus générale, on veut que :</p>
<ul>
<li>le groupe soit <code>rubygems</code> ;</li>
<li>les permissions du groupe soient rwx pour un dossier et rw- pour un fichier ;</li>
<li>et que les permissions des autres soient r-x pour un dossier et r&#8211; pour un fichier.</li>
</ul>
<p>La partie qui va suivre est issu des connaissances acquises grâce à l&#8217;article <a href="http://www.udel.edu/topics/os/unix/general/groupsharing.html">Group sharing a directory</a>.</p>
<h3>Attribuer le groupe automatiquement</h3>
<p>Il est simple d&#8217;affecter le groupe <code>rubygems</code> automatiquement à chaque nouveau dossier créé dès qu&#8217;on connait l&#8217;astuce : il suffit de lever le bit &#8217;set groupid&#8217; du groupe du dossier pour que tout nouveau fichier ou dossier créé appartienne au groupe du dossier parent plutôt qu&#8217;au groupe de l&#8217;utilisateur</p>
<pre>
$ sudo chmod g+s /test
$ ls -ld /test
drwxrwsr-x 2 root rubygems 4096 2008-12-05 07:54 /test
$ touch f
$ mkdir /test/d
$ ls -l /test
total 4
drwxr-sr-x 2 foo rubygems 4096 2008-12-05 07:59 d
-rw-r--r-- 1 foo rubygems    0 2008-12-05 07:59 f
$ cd /test/d
$ touch bar
$ ls -l
-rw-r--r-- 1 foo rubygems 0 2008-12-05 08:00 bar
</pre>
<h3>Permettre l&#8217;écriture au groupe automatiquement </h3>
<p>Cette solution fait usage des ACLs. La commande</p>
<pre>
$ sudo setfacl -m default:user::rwx,default:group::rwx,default:mask:rwx,default:other:r-x /test
</pre>
<p>permet de définir les permissions par défaut pour les futurs fichiers du dossier <code>/test</code>. La commande est longue et peut être abrégée en</p>
<pre>
$ sudo setfacl -m d:u::rwx,d:g::rwx,d:m:rwx,d:o:r-x /test
</pre>
<p>Si la commande <code>setfacl</code> ne fonctionne pas, c&#8217;est parce que l&#8217;option <code>acl</code> n&#8217;est pas active pour votre volume. Assurez-vous d&#8217;avoir une ligne qui ressemble contienne l&#8217;option <code>acl</code> dans votre <code>/etc/fstab</code> :</p>
<pre>
/dev/hda2 / ext3 defaults,acl 0 1
</pre>
<p>Ensuite remontez votre volume pour prendre en compte les modifications</p>
<pre>
sudo mount / -o remount
</pre>
<p>Observons maintenant d&#8217;un peu plus près la définition d&#8217;ACLs</p>
<pre>
$ sudo setfacl -m d:u::rwx,d:g::rwx,d:m:rwx,d:o:r-x /test
$ ls -ld /test
drwxrwsr-x+ 3 root rubygems 4096 2008-12-05 07:59 /test
$ getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: rubygems
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::r-x
</pre>
<p>Le + à droite des permissions affichées par la commande <code>ls</code> indique qu&#8217;il y a des permissions supplémentaires visibles par <code>getfacl</code>. Ce dernier permet d&#8217;afficher les permissions définies avec <code>setfacl</code>. Essayons de créer des fichiers.</p>
<pre>
$ cd /test
$ touch polop.txt
$ mkdir hello
$ ls -l
total 16
drwxr-sr-x  2 foo rubygems 4096 2008-12-05 08:00 d
-rw-r--r--  1 foo rubygems    0 2008-12-05 07:59 f
drwxrwsr-x+ 2 foo rubygems 4096 2008-12-05 08:17 hello
-rw-rw-r--+ 1 foo rubygems    0 2008-12-05 08:17 polop.txt
$ getfacl hello
# file: hello
# owner: foo
# group: rubygems
user::rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::r-x
</pre>
<p>Les ACLs ont bien rempli leur rôle : les nouveaux fichiers créés ont la permission d&#8217;écriture pour le groupe et ont aux aussi les ACLs définis (notez le +).</p>
<h3>Application au dossier de gemmes de ruby</h3>
<p>Il nous faut définir le groupe les permissions pour tout fichier ou dossier existant du dossier <code>/var/lib/gems</code> et les ACLs ainsi que le &#8217;set groupid&#8217; bit pour tout dossier, sans oublier de changer le groupe pour qu&#8217;il devienne <code>rubygems</code>.</p>
<pre>
$ sudo chgrp -R rubygems /var/lib/gems
$ sudo chmod -R -s,g=rwX,o=rX /var/lib/gems
$ for dir in $(find /var/lib/gems -type d) ; do
> sudo chmod g+s "$dir"
> sudo setfacl -m d:u::rwx,d:g::rwx,d:o:r--,d:m:rwx "$dir"
> done
</pre>
<p>notez que si vous étiez sous <a href="http://fr.wikipedia.org/wiki/Zsh">zsh</a>, vous auriez pu écrire</p>
<pre>
$ sudo chgrp rubygems /var/lib/gems/**/*
$ sudo chmod -s,g=rwX,o=rX /var/lib/gems/**/*
$ sudo chmod g+s /var/lib/gems/**/*(/)
$ sudo setfacl -m d:u::rwx,d:g::rwx,d:o:r--,d:m:rwx /var/lib/gems/**/*(/)
</pre>
<p>Voilà ! désomais vous pouvez taper</p>
<pre>
$ gems install rails -y
</pre>
<p>en simple utilisateur, ce qui signifie que d&#8217;autres programmes tiers comme NetBeans peuvent également installer des gemmes.</p>
<h3>Autres applications</h3>
<p>On peut trouver d&#8217;autres application très utiles au partage de dossier par ACL. Comme ça de tête :</p>
<ul>
<li>Quand votre serveur web est partagé entre plusieurs personnes, partager le dossier <code>/var/www</code> d&#8217;apache pour que l&#8217;utilisateur système <code>www-data</code> ait le droit d&#8217;écriture sur tous les fichiers sans donner ces droits à tout le monde ;</li>
<li>Partager des fichiers sur un disque dur externe pour que chacun puisse y gérer ses films et photos sans se retrouver bloqué quand on veut déplacer ou supprimer certains éléments créés par d&#8217;autres utilisateurs.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://trux.info/2008/12/utiliser-rubygems-avec-netbeans-sur-ubuntu-grace-aux-acls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accéder à tous vos dépôts debian malgré les proxy</title>
		<link>http://trux.info/2008/11/acceder-a-tous-vos-depots-debian-malgre-les-proxy/</link>
		<comments>http://trux.info/2008/11/acceder-a-tous-vos-depots-debian-malgre-les-proxy/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 07:20:53 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[sudo]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://trux.info/?p=3</guid>
		<description><![CDATA[S&#8217;il vous est déjà arrivé d&#8217;avoir à accéder à des dépôts debian placés derrière un proxy, vous pouvez utiliser un outil graphique comme Synaptics qui permet de configurer ça assez facilement. Si vous êtes pluto adepte de la ligne de commande, vous avez alors à modifier les fichiers de configuration d&#8217;apt.

sudo echo 'Acquire::http::Proxy "http://proxy.mynetwork.com:1234/";' &#62; [...]]]></description>
			<content:encoded><![CDATA[<p>S&#8217;il vous est déjà arrivé d&#8217;avoir à accéder à des dépôts debian placés derrière un proxy, vous pouvez utiliser un outil graphique comme <a href="http://www.nongnu.org/synaptic/">Synaptics</a> qui permet de configurer ça assez facilement. Si vous êtes pluto adepte de la ligne de commande, vous avez alors à modifier les fichiers de configuration d&#8217;apt.</p>
<pre>
sudo echo 'Acquire::http::Proxy "http://proxy.mynetwork.com:1234/";' &gt; /etc/apt/apt.conf.d/proxy
</pre>
<p>ou plus simplement en définissant les paramètres du proxy dans la variable d&#8217;environnement <code>http_proxy</code> (ou <code>ftp_proxy</code> dans le cas d&#8217;un miroir ftp).</p>
<pre>
export http_proxy='http://proxy.mynetwork.com:1234/'
</pre>
<p>Si le proxy est un proxy authentifiant, alors il faut également préciser le login et le mot de passe dans <code>http_proxy</code>.</p>
<pre>
export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'
</pre>
<p>Évidemment, si vous avez un dépôt debian miroir sur votre réseau interne, vous n&#8217;avez pas besoin de définir tout ça. Cependant, si vous voulez également accéder aux dépôts externes, c&#8217;est là que ça se complique : si vous définissez <code>http_proxy</code>, le dépôt interne devient inaccessible car apt tente de passer par le proxy, et si vous ne le définissez pas, les depôts externes sont inaccessibles car vous ne passez plus par le proxy. Il faut donc procéder autrement.</p>
<p><span id="more-3"></span><br />
Une solution est d&#8217;utiliser la variable <code>no_proxy</code>. Cette variable définit les hôtes qui ne nécessitent pas un accès via proxy.</p>
<p>Par exemple</p>
<pre>
export no_proxy='127.0.01,.mynetwork.com,192.168.78.100'
</pre>
<p>n&#8217;utilisera pas le proxy pour accéder à 127.0.0.1, à n&#8217;importe quel hôte du domaine mynetwork.com ou à 192.168.78.100. Attention, l&#8217;utilisation de wildcards dans <code>no_proxy</code> ne fonctionnera pas. Ainsi écrire ce qui suit n&#8217;empêchera pas d&#8217;essayer d&#8217;utiliser le proxy pour accéder à wiki.mynetwork.com.</p>
<pre>
# wildcards dont work
export no_proxy='127.0.01,*.mynetwork.com'
</pre>
<p>Définir <code>http_proxy</code> et <code>no_proxy</code> dans <code>$HOME/.bashrc</code> permettra donc d&#8217;accéder à n&#8217;importe quel dépôt, qu&#8217;il soit sur le réseau interne ou à l&#8217;extérieur. Prenons l&#8217;exemple de deux dépôts, l&#8217;un sur l&#8217;hôte deb.mynetwork.com, l&#8217;autre sur l&#8217;hôte fr.archive.ubuntu.com. Il faut définir</p>
<pre>
export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'
export no_proxy='127.0.01,deb.mynetwork.com'
</pre>
<p>Mais si vous utilisez <code>sudo apt-get</code> pour installer un paquet, ça ne fonctionne toujours pas. C&#8217;est parce que <a href="http://aplawrence.com/Basics/sudo.html">sudo filtre les variables d&#8217;environnement</a> pour des raisons de sécurité. Pour constater quelles variables sont filtrées et comment :</p>
<pre>
sudo sudo -V
</pre>
<p>On y voit que la variable <code>http_proxy</code> est préservée, mais pas <code>no_proxy</code>. Pour y remédier, il va falloir éditer le fichier <code>/etc/sudoers</code>.</p>
<pre>
sudo visudo
</pre>
<p>et rajouter la ligne suivante</p>
<pre>
Defaults        env_keep+="no_proxy"
</pre>
<p>Attention à bien mettre des double-quotes et non des simple-quotes.</p>
<p>Si vous êtes sous <a href="http://www.ubuntu-fr.org/">Ubuntu</a>, le fichier devrait ressembler à ça</p>
<pre>
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults

Defaults        env_keep+='no_proxy'
Defaults        !lecture,tty_tickets,!fqdn

# User privilege specification
root    ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
</pre>
<p>Ainsi, vous pouvez installer des paquets provenant de votre réseau local ou de l&#8217;extérieur.</p>
<p>L&#8217;avantage de cette solution, c&#8217;est qu&#8217;elle est valable pour tous les programmes : par exemple l&#8217;installation du paquet msttcorefonts va télécharger les polices true type microsoft sur le net en utilisant <code>wget</code>. Si vous êtes derrière un proxy et qu&#8217;aucun proxy n&#8217;est défini dans le fichier $HOME/.wgetrc, le fichier /etc/wgetrc ou dans la variable d&#8217;environnement http_proxy, le téléchargement échouera. En définissant la variable d&#8217;environnement <code>http_proxy</code> ça fonctionne comme un charme.</p>
<p>Petite astuce supplémentaire, si votre proxy requiert une authentification, vous n&#8217;avez pas envie que tout le monde connaisse votre mot de passe en regardant votre <code>.bashrc</code>.</p>
<p>Une solution est de mettre la définition dans un fichier <code>$HOME/.proxy</code> puis de l&#8217;appeler depuis le bashrc.</p>
<p>fichier <code>$HOME/.proxy</code></p>
<pre>
#!/bin/bash
# proxy settings
export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'
export no_proxy='127.0.01,deb.mynetwork.com'
</pre>
<p>changer les droits d&#8217;accès et modifier son bashrc</p>
<pre>
chmod go-rw $HOME/.proxy
echo 'source $HOME/.proxy' &gt; $HOME/.bashrc
</pre>
]]></content:encoded>
			<wfw:commentRss>http://trux.info/2008/11/acceder-a-tous-vos-depots-debian-malgre-les-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
