<?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>Valentin's Lab &#187; linux</title>
	<atom:link href="https://vaab.blog.kal.fr/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://vaab.blog.kal.fr</link>
	<description>Ratiocination of an opensource techie</description>
	<lastBuildDate>Thu, 15 Nov 2018 08:04:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=vaab&amp;popout=1&amp;url=https%3A%2F%2Fvaab.blog.kal.fr%2F&amp;language=en_US&amp;category=text&amp;title=Valentin%27s+Lab&amp;description=Ratiocination+of+an+opensource+techie&amp;tags=blog" type="text/html" />
	<item>
		<title>bash lore: NUL character and variables</title>
		<link>https://vaab.blog.kal.fr/2014/05/03/bash-lore-nul-character-and-variables/</link>
		<comments>https://vaab.blog.kal.fr/2014/05/03/bash-lore-nul-character-and-variables/#comments</comments>
		<pubDate>Sat, 03 May 2014 10:29:27 +0000</pubDate>
		<dc:creator><![CDATA[vaab]]></dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://vaab.blog.kal.fr/?p=489</guid>
		<description><![CDATA[Bash variables are often thought as being able to store any binary content. Please bear in mind that it can't store NUL character, and only this one. Here you are: $ ascii_table() { echo -en &#34;$(echo '\'0{0..3}{0..7}{0..7} &#124; tr -d &#8230;<p class="read-more"><a href="https://vaab.blog.kal.fr/2014/05/03/bash-lore-nul-character-and-variables/">Read more &#187;</a></p>]]></description>
				<content:encoded><![CDATA[
<div class="document">


<!-- -*- mode: rst -*- -->
<p>Bash variables are often thought as being able to store any binary content.</p>
<p>Please bear in mind that it can't store <tt class="docutils literal">NUL</tt> character, and only this one.</p>
<p>Here you are:</p>
<pre class="literal-block">
$ ascii_table() { echo -en &quot;$(echo '\'0{0..3}{0..7}{0..7} | tr -d &quot; &quot;)&quot;; }
$ ascii_table | hd
00000000  00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  |................|
00000010  10 11 12 13 14 15 16 17  18 19 1a 1b 1c 1d 1e 1f  |................|
00000020  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !&quot;#$%&amp;'()*+,-./|
00000030  30 31 32 33 34 35 36 37  38 39 3a 3b 3c 3d 3e 3f  |0123456789:;&lt;=&gt;?|
00000040  40 41 42 43 44 45 46 47  48 49 4a 4b 4c 4d 4e 4f  |&#64;ABCDEFGHIJKLMNO|
00000050  50 51 52 53 54 55 56 57  58 59 5a 5b 5c 5d 5e 5f  |PQRSTUVWXYZ[\]^_|
00000060  60 61 62 63 64 65 66 67  68 69 6a 6b 6c 6d 6e 6f  |`abcdefghijklmno|
00000070  70 71 72 73 74 75 76 77  78 79 7a 7b 7c 7d 7e 7f  |pqrstuvwxyz{|}~.|
00000080  80 81 82 83 84 85 86 87  88 89 8a 8b 8c 8d 8e 8f  |................|
00000090  90 91 92 93 94 95 96 97  98 99 9a 9b 9c 9d 9e 9f  |................|
000000a0  a0 a1 a2 a3 a4 a5 a6 a7  a8 a9 aa ab ac ad ae af  |................|
000000b0  b0 b1 b2 b3 b4 b5 b6 b7  b8 b9 ba bb bc bd be bf  |................|
000000c0  c0 c1 c2 c3 c4 c5 c6 c7  c8 c9 ca cb cc cd ce cf  |................|
000000d0  d0 d1 d2 d3 d4 d5 d6 d7  d8 d9 da db dc dd de df  |................|
000000e0  e0 e1 e2 e3 e4 e5 e6 e7  e8 e9 ea eb ec ed ee ef  |................|
000000f0  f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 fa fb fc fd fe ff  |................|
00000100
</pre>
<p>But:</p>
<pre class="literal-block">
$ echo -n &quot;$(ascii_table)&quot; | hd
00000000  01 02 03 04 05 06 07 08  09 0a 0b 0c 0d 0e 0f 10  |................|
00000010  11 12 13 14 15 16 17 18  19 1a 1b 1c 1d 1e 1f 20  |............... |
00000020  21 22 23 24 25 26 27 28  29 2a 2b 2c 2d 2e 2f 30  |!&quot;#$%&amp;'()*+,-./0|
00000030  31 32 33 34 35 36 37 38  39 3a 3b 3c 3d 3e 3f 40  |123456789:;&lt;=&gt;?&#64;|
00000040  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e 4f 50  |ABCDEFGHIJKLMNOP|
00000050  51 52 53 54 55 56 57 58  59 5a 5b 5c 5d 5e 5f 60  |QRSTUVWXYZ[\]^_`|
00000060  61 62 63 64 65 66 67 68  69 6a 6b 6c 6d 6e 6f 70  |abcdefghijklmnop|
00000070  71 72 73 74 75 76 77 78  79 7a 7b 7c 7d 7e 7f 80  |qrstuvwxyz{|}~..|
00000080  81 82 83 84 85 86 87 88  89 8a 8b 8c 8d 8e 8f 90  |................|
00000090  91 92 93 94 95 96 97 98  99 9a 9b 9c 9d 9e 9f a0  |................|
000000a0  a1 a2 a3 a4 a5 a6 a7 a8  a9 aa ab ac ad ae af b0  |................|
000000b0  b1 b2 b3 b4 b5 b6 b7 b8  b9 ba bb bc bd be bf c0  |................|
000000c0  c1 c2 c3 c4 c5 c6 c7 c8  c9 ca cb cc cd ce cf d0  |................|
000000d0  d1 d2 d3 d4 d5 d6 d7 d8  d9 da db dc dd de df e0  |................|
000000e0  e1 e2 e3 e4 e5 e6 e7 e8  e9 ea eb ec ed ee ef f0  |................|
000000f0  f1 f2 f3 f4 f5 f6 f7 f8  f9 fa fb fc fd fe ff     |...............|
000000ff
</pre>
<p>So bash variables (and <tt class="docutils literal"><span class="pre">$(...)</span></tt> idiom) are reasonably strong: if you know your content hasn't any <tt class="docutils literal">NUL</tt> characters you can safely use them. All this is probably
linked to the fact that command line arguments cannot hold <tt class="docutils literal">NUL</tt> characters neither, a common string termination in C programs.</p>
<p>If you really need to store full binary content in a bash variable, you should think about encoding it (base64, <tt class="docutils literal">xxd</tt>, or any format of yours).</p>
<p>Please understand that <tt class="docutils literal">bash</tt> might also be able to do what you want without using variables but only pipes (stdin and stdout). They won't suffer from this limitation of course.</p>
</div>
 <p><a href="https://vaab.blog.kal.fr/?flattrss_redirect&amp;id=489&amp;md5=1083440b003f7df80df9ef35d8b40717" title="Flattr" target="_blank"><img src="https://vaab.blog.kal.fr/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>https://vaab.blog.kal.fr/2014/05/03/bash-lore-nul-character-and-variables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=vaab&amp;popout=1&amp;url=https%3A%2F%2Fvaab.blog.kal.fr%2F2014%2F05%2F03%2Fbash-lore-nul-character-and-variables%2F&amp;language=en_GB&amp;category=text&amp;title=bash+lore%3A+NUL+character+and+variables&amp;description=Bash+variables+are+often+thought+as+being+able+to+store+any+binary+content.+Please+bear+in+mind+that+it+can%27t+store+NUL+character%2C+and+only+this+one.+Here+you+are%3A...&amp;tags=bash%2Clinux%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Using ACL on linux system to mimic samba&#8217;s &#8220;force user&#8221;</title>
		<link>https://vaab.blog.kal.fr/2011/05/21/using-acl-on-linux-system-to-mimic-sambas-force-user/</link>
		<comments>https://vaab.blog.kal.fr/2011/05/21/using-acl-on-linux-system-to-mimic-sambas-force-user/#comments</comments>
		<pubDate>Sat, 21 May 2011 18:05:49 +0000</pubDate>
		<dc:creator><![CDATA[vaab]]></dc:creator>
				<category><![CDATA[tip]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[permission]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://vaab.blog.kal.fr/?p=115</guid>
		<description><![CDATA[How to enforce samba-like policy upon file or directory creation at the filesystem level thanks to linux ACL.<p class="read-more"><a href="https://vaab.blog.kal.fr/2011/05/21/using-acl-on-linux-system-to-mimic-sambas-force-user/">Read more &#187;</a></p>]]></description>
				<content:encoded><![CDATA[
<div class="document">


<!-- -*- mode: rst -*- -->
<p>I'm using samba to share files across a network. I found <tt class="docutils literal">force user</tt> and <tt class="docutils literal">force group</tt> very usefull in a classical team working together on project.</p>
<p>This is the sample /etc/samba/smb.conf:</p>
<pre class="literal-block">
...
force user = %U
force group = dev-team
create mask = 0775
directory mask = 0775
force create mode = 0660
force directory mode = 0660
...
</pre>
<p>It ensures that any file created will receive full read, write permission for member of &quot;dev-team&quot; group.</p>
<p>But I have bunch of the user that have a direct access to these directory. And without going through samba, the policy is not enforced.</p>
<p>The solution is quite simple and involves linux <a class="reference external" href="http://en.wikipedia.org/wiki/Access_control_list">ACL</a>.</p>
<div class="section" id="install-acl">
<h3>Install ACL</h3>
<p>Your system should already have package <tt class="docutils literal">acl</tt> installed. You can install it (or make sure you already have it) by typing:</p>
<pre class="literal-block">
apt-get install acl
</pre>
<p>Then you should edit your <tt class="docutils literal">/etc/fstab</tt> to contain the option <tt class="docutils literal">acl</tt> on the mounted partition you need to get. My fstab looks like:</p>
<pre class="literal-block">
...
UUID=9cd6deba-e3a6-427c-82e1-48cfaf0793b1 /shares ext4 defaults,acl 0 2
...
</pre>
<p>Once the <tt class="docutils literal">/etc/fstab</tt> edited, you can remount your partition on the fly with:</p>
<pre class="literal-block">
mount -o remount /shares
</pre>
</div>
<div class="section" id="using-acl">
<h3>Using ACL</h3>
<p>I can mimick the behavior of samba's policy by simply typing:</p>
<pre class="literal-block">
setfacl -R -d -m u::rwx,g:dev-team:rwx,o::r-x /shares
</pre>
<p>Options are:</p>
<table class="docutils option-list" frame="void" rules="none">
<col class="option" />
<col class="description" />
<tbody valign="top">
<tr><td class="option-group">
<kbd><span class="option">-R</span></kbd></td>
<td>is the same than -R for chown or chmod ... it will apply to subdirectory also.</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-d</span></kbd></td>
<td>is switching to default permissions for newly created files.</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-m</span></kbd></td>
<td><p class="first">is adding the following permission rules that are expressed as:</p>
<div class="last line-block">
<div class="line">u::rwx               same as chmod u+rwx</div>
<div class="line">g:dev-team:rwx       same as chgrp dev-team AND chmod g+rwx</div>
<div class="line">o::r-x               same as chmod o+rx</div>
</div>
</td></tr>
</tbody>
</table>
<p>You can check ACLs of a given directory with <tt class="docutils literal">getfacl</tt>:</p>
<pre class="literal-block">
$ getfacl /shares
# file: shares/assistance/
# owner: musicalta
# group: assistance
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:dev-team:rwx
default:mask::rwx
default:other::r-x
</pre>
<p>If you need more info on the topic, this blog post was of some help.</p>
<p><a class="reference external" href="http://brunogirin.blogspot.com/2010/03/shared-folders-in-ubuntu-with-setgid.html">http://brunogirin.blogspot.com/2010/03/shared-folders-in-ubuntu-with-setgid.html</a></p>
</div>
</div>
 <p><a href="https://vaab.blog.kal.fr/?flattrss_redirect&amp;id=115&amp;md5=bb16398d9f4cb78f14b7d69cfe0feaae" title="Flattr" target="_blank"><img src="https://vaab.blog.kal.fr/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>https://vaab.blog.kal.fr/2011/05/21/using-acl-on-linux-system-to-mimic-sambas-force-user/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=vaab&amp;popout=1&amp;url=https%3A%2F%2Fvaab.blog.kal.fr%2F2011%2F05%2F21%2Fusing-acl-on-linux-system-to-mimic-sambas-force-user%2F&amp;language=en_GB&amp;category=text&amp;title=Using+ACL+on+linux+system+to+mimic+samba%26%238217%3Bs+%26%238220%3Bforce+user%26%238221%3B&amp;description=I%27m+using+samba+to+share+files+across+a+network.+I+found+force+user+and+force+group+very+usefull+in+a+classical+team+working+together+on+project.+This+is+the+sample...&amp;tags=acl%2Clinux%2Cpermission%2Csamba%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>
