<?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>Sam Moffatt @ Pasamio.com &#187; filesystems</title>
	<atom:link href="http://pasamio.com/category/filesystems/feed/" rel="self" type="application/rss+xml" />
	<link>http://pasamio.com</link>
	<description>Sam Moffatt's Tech Blog: Writings on Technology</description>
	<lastBuildDate>Fri, 20 Jan 2012 08:40:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Understanding versus Knowing</title>
		<link>http://pasamio.com/2009/06/28/understanding-versus-knowing/</link>
		<comments>http://pasamio.com/2009/06/28/understanding-versus-knowing/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 08:33:13 +0000</pubDate>
		<dc:creator>pasamio</dc:creator>
				<category><![CDATA[filesystems]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://pasamio.com/?p=531</guid>
		<description><![CDATA[When I went through high school we had three segments for our maths and physics exams: we had the basic knowledge part that tested if we new a given fact and could apply it to a straight forward problem, we had the understanding part that tested if we could understand a fact and apply it [...]]]></description>
			<content:encoded><![CDATA[<p>When I went through high school we had three segments for our maths and physics exams: we had the basic knowledge part that tested if we new a given fact and could apply it to a straight forward problem, we had the understanding part that tested if we could understand a fact and apply it to a slightly more complex problem and we had a complex reasoning section of the exam which tested a combination of the items we knew and took a large number of steps to get to the final answer. Today I&#8217;m hunting around to look for file system permissions and I&#8217;ve read something that makes me wonder if there should be that distinction.</p>
<p><span id="more-531"></span>The article in question is entitled &#8220;<a href="http://www.windowsecurity.com/articles/Understanding-Windows-NTFS-Permissions.html">Understanding Windows NTFS Permissions</a>&#8221; and covers the basics of permissions for NTFS. It covers the fact you have read which is really made up of List Folder/Read Data, Read Attributes, Read Extended Attributes and Read Permissions. It also covers that NTFS permits permissions to be inherited but appears to miss the distinction of &#8220;This folder, subfolders and files&#8221;, &#8220;This folder only&#8221;, &#8220;Subfolders and files only&#8221;, &#8220;This folder only&#8221; when applied to permissions. Each of these actually impacts how permissions are inherited and applied, surely if you&#8217;re trying to understand this then explaining the distinctions here would be great and how they apply. He finishes with an interesting observation on the &#8220;precedence&#8221; of permissions. Now I find this curious because this is something I&#8217;ve been looking at late and I&#8217;ve been trying to find something that adequately explains it. Perhaps the author of the particular article is dumbing it down for his readers but it just strikes me as wrong. The author comments the following:</p>
<blockquote><p>The scenario proves that there is a hierarchy of permissions for NTFS 5.0 resources. The hierarchy of precedence for the permissions can be summarized as follows, with the higher precedence permissions listed at the top of the list:</p></blockquote>
<blockquote><p>Explicit Deny<br />
Explicit Allow<br />
Inherited Deny<br />
Inherited Allow</p></blockquote>
<p>Ok, so its an interesting way of explaining it, but to mimic an annoying kid: why? Microsoft says in a dialog just previous that deny overrules allow so why would they so blatantly change the mind? To do so would mean that you would have to understand how NTFS evaluates permissions and calculates the permissions &#8211; but weren&#8217;t we reading an article about understanding?</p>
<p>This is the core of my gripe, the article doesn&#8217;t particularly give you a depth of insight or understanding in permissions that you couldn&#8217;t get by clicking things on and off to observe their behaviour. It treats one mildly non-obvious behaviour but doesn&#8217;t explain why NTFS would do this. To be honest I stumbled across this behaviour on another web site which had run into the pitfall of believing that deny overruled everything and was trying to understand why his security model was broken. His article hypothesised something much simpler: the algorithm finds the first explicit permission and uses it, if both are set then use the deny. No complex precedence model, something quite simple. And as Ockham&#8217;s Razor goes &#8220;the simplest answer is often the best&#8221;. But interestingly this also fits into the way NTFS appears to have been designed. For container objects, a permission can be set at a level and it can be determined just how deep it should apply: should it apply to just this container, just to subfolders or just to files? Or should it apply to a combination of those?</p>
<p>Interestingly I&#8217;m on the hunt for something that formally explains how NTFS permission inheritance works, I had thought this article would tell me but it doesn&#8217;t. It tells me a lot of what I know already but doesn&#8217;t actually enhance my understanding. I had read an article a while back that informed me of this &#8216;quirk&#8217; in the behaviour but at the time didn&#8217;t think much of bookmarking it &#8211; and it is in fact this article that I&#8217;m looking for, and thankfully I just found it.</p>
<p>The article in question is &#8220;<a href="http://technet.microsoft.com/en-us/magazine/2005.11.howitworksntfs.aspx">How IT works: NTFS Permissions</a>&#8221; from the November/December 2005 issue of TechNet Magazine. It introduces the concept of &#8220;discretionary access control lists&#8221; (DACL) and also explains how they work. It explains that the DACL is checked in order until a match is found with the DACL created with denies first, then allows starting with the object and then incrementally for each item it looks for a match until it gets to the end at which point it denies. The single article just cleared up exactly how it worked, why it works and how it behaves explaining the behaviour. At this point I understand how and why it works, not just know that it works in a particular way &#8211; this is the difference between understanding and knowing.</p>
]]></content:encoded>
			<wfw:commentRss>http://pasamio.com/2009/06/28/understanding-versus-knowing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Today, 14-Jan-08: Query languages, LDAP, business intelligence and filesystems</title>
		<link>http://pasamio.com/2008/01/14/today-14-jan-08-query-languages-ldap-business-intelligence-and-filesystems/</link>
		<comments>http://pasamio.com/2008/01/14/today-14-jan-08-query-languages-ldap-business-intelligence-and-filesystems/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 07:10:53 +0000</pubDate>
		<dc:creator>Pasamio</dc:creator>
				<category><![CDATA[authentication]]></category>
		<category><![CDATA[businessintelligence]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[edirectory]]></category>
		<category><![CDATA[endoftheday]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[lca2008]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[linux.conf.au]]></category>
		<category><![CDATA[mdfs]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[pentaho]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[today]]></category>

		<guid isPermaLink="false">http://pasamio.com/?p=34</guid>
		<description><![CDATA[I&#8217;m going to start regularly writing daily posts about what I did today and the things I found interesting, I&#8217;ll at least try anyway. First up for today is a personal thing, I completed a rather largish Uni assignment today which reminded me of all of the pains that come with C++, but to follow [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to start regularly writing daily posts about what I did today and the things I found interesting, I&#8217;ll at least try anyway.</p>
<p>First up for today is a personal thing, I completed a rather largish Uni assignment today which reminded me of all of the pains that come with C++, but to follow that I returned to working on my filesystem in C, which is just more pain. I got a quick response back, and almost full marks (96%) so I&#8217;m happy for all of the time I put in to get it done and how its probably far more complicated than anything else that will be submitted (it used Boost Signals and a whole heap of other things that I don&#8217;t think will ever be taught in the subject for a long time). But hey, thats just Uni!</p>
<p>Today I finally managed to get Pentaho, some business intelligence (BI) software, to play nicely with Novell eDirectory&#8217;s LDAP interface. I must have missed the option, but Pentaho doesn&#8217;t seem to accept anonymous binding to the LDAP server, which means I need to bind as a user. By default our users funnily enough have less access than the anonymous account (which is actually a proxy account with full browse permissions). The solution was simple enough: we shunted our dummy Pentaho user into the same group as the anonymous proxy account and everything worked. So I&#8217;ve now got Pentaho using LDAP for authentication (yay!) and a MySQL database to get its role/group permissions. Funnily enough when its all said and done the documentation is pretty close to the mark.</p>
<p>But once I had that I don&#8217;t have an ability to manage the groups/roles within Pentaho, so I end up having to write some small PHP to manage that. Luckily I worked on a project a while back that I called &#8220;Joomla! Central Management for Users&#8221; which basically connected directly to MySQL databases of Joomla! installs and altered the users. I had originally built it with a plugin infrastructure in mind so that I could plug other stuff into it later. Starting this morning it only had a &#8216;connector&#8217; for Joomla! 1.0 via MySQL and LDAP, now it has one for the Pentaho security tables. This means I can easily copy users from LDAP or Joomla! into Pentaho without too much issues and has a debugged user interface already. But wait theres more!</p>
<p>When I was originally developing the tool I wrote a query language for it. See, SQL is a great language for databases, but its a bit hard to apply in situations where you don&#8217;t quite need all of that power. So I wrote my own query language. Its quite simple it can validate simple attributes and allows for set operations within &#8220;Sites&#8221; (a site is a container for users and groups). So for example I want to see all of the users who are on our web site but not in our LDAP directory:<br />
existsin &#8220;Web Sites&#8221; and not existsin &#8220;LDAP&#8221;</p>
<p>Primitive sure, but it because writing a large SQL expression for something simple. I hope to expand on it, but it already does what it needs to do for the time being.</p>
<p>So I&#8217;ve covered query languages, LDAP and BI! All I need now is the filesystem news. Today there was a whole heap of fan fare on Slashdot about the ZFS news from Apple, whilst thats cool and all (especially since I don&#8217;t mind Apple&#8217;s UI), I personally have my own filesystem that I&#8217;ve gotten back into to do some work on. It also happens to be a Uni assignment due on Friday! So I&#8217;ll be back to working on that and hopefully I&#8217;ll have it to a nice stage that I can do some lightening talks at linux.conf.au!</p>
]]></content:encoded>
			<wfw:commentRss>http://pasamio.com/2008/01/14/today-14-jan-08-query-languages-ldap-business-intelligence-and-filesystems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a metadata filesystem</title>
		<link>http://pasamio.com/2007/10/03/building-a-metadata-filesystem/</link>
		<comments>http://pasamio.com/2007/10/03/building-a-metadata-filesystem/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 01:53:22 +0000</pubDate>
		<dc:creator>Pasamio</dc:creator>
				<category><![CDATA[filesystems]]></category>
		<category><![CDATA[mdfs]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://pasamio.com/?p=16</guid>
		<description><![CDATA[As part of my final year of studies at university I&#8217;m working on building a metadata filesystem, called &#8220;MDFS&#8221; or &#8220;MetaData FileSystem&#8221;. Creative naming don&#8217;t you think? The project is using FUSE to create the filesystem interface and PostgreSQL is used to store the data in the back end. Its in its early phases, but [...]]]></description>
			<content:encoded><![CDATA[<p>As part of my final year of studies at university I&#8217;m working on building a metadata filesystem, called &#8220;MDFS&#8221; or &#8220;MetaData FileSystem&#8221;. Creative naming don&#8217;t you think? The project is using <a href="http://fuse.sourceforge.net">FUSE</a> to create the filesystem interface and <a href="http://www.postgresql.org/">PostgreSQL</a> is used to store the data in the back end. Its in its early phases, but you can check it out here at a Trac instance I&#8217;ve created: <a href="http://mdfs.pasamio.com/">http://mdfs.pasamio.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pasamio.com/2007/10/03/building-a-metadata-filesystem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

