<?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>Ruiz-Ade.com &#187; Software</title>
	<atom:link href="http://ruiz-ade.com/category/tech/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://ruiz-ade.com</link>
	<description>Living life so you don't have to.</description>
	<lastBuildDate>Wed, 19 Oct 2011 20:08:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Did you leave the parking brake on?</title>
		<link>http://ruiz-ade.com/2011/07/26/did-you-leave-the-parking-brake-on/</link>
		<comments>http://ruiz-ade.com/2011/07/26/did-you-leave-the-parking-brake-on/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 02:19:06 +0000</pubDate>
		<dc:creator>Gregory Ruiz-Ade</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSSH]]></category>

		<guid isPermaLink="false">http://ruiz-ade.com/?p=259</guid>
		<description><![CDATA[Just a reminder, when you&#8217;re migrating a lot of data and configuration information to a new machine, remember to make sure you pull all the relevant information. I just spent the better part of my afternoon/evening chasing down a problem where a user could not log on via SSH. He had the right key. He [...]]]></description>
			<content:encoded><![CDATA[<p>Just a reminder, when you&#8217;re migrating a lot of data and configuration information to a new machine, remember to make sure you pull <strong><em>all</em></strong> the relevant information.</p>
<p>I just spent the better part of my afternoon/evening chasing down a problem where a user could not log on via SSH. He had the right key. He were using the right passphrase. His account existed in <code>/etc/passwd</code>, and he was listed in the right groups in <code>/etc/group</code>. We did all sorts of debugging on his client, and then a clue popped out when we ran the server in debug mode:</p>
<div class="code">
<p><code>Access denied for user dude man by PAM account configuration</code></p>
</div>
<p>Well, I thought it was a clue. Turns out there was nothing overtly obvious about what was going on. Nothing, that is, until I finally decided to check the contents of <code>/etc/shadow</code>, only to discover that the user in question had no entry there.</p>
<p>Remember to check the simple things first. For a Unix/Linux account to be happy these days, it needs an entry in <strong><em>both</em></strong> <code>/etc/passwd</code> and <code>/etc/shadow</code>! It&#8217;s a step that is only really missed when you&#8217;re copying the contents of these files from another machine, instead of using built-in utilities (<code>useradd</code>, <code>groupadd</code>) to create user accounts.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruiz-ade.com/2011/07/26/did-you-leave-the-parking-brake-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LDAP, SSH and Access Control on Linux</title>
		<link>http://ruiz-ade.com/2011/02/20/ldap-ssh-and-access-control/</link>
		<comments>http://ruiz-ade.com/2011/02/20/ldap-ssh-and-access-control/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 19:02:49 +0000</pubDate>
		<dc:creator>Gregory Ruiz-Ade</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://ruiz-ade.com/?p=231</guid>
		<description><![CDATA[I was recently asked for my opinion on options for adding access control, or, more specifically, host-level authorization for users connecting to Linux systems. All the systems in question are a variety of CentOS, and all of them are configured to use LDAP for authentication and authorization via the pam_ldap and nss_ldap modules. The Problem [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently asked for my opinion on options for adding access control, or, more specifically, host-level authorization for users connecting to Linux systems. All the systems in question are a variety of CentOS, and all of them are configured to use LDAP for authentication and authorization via the <code>pam_ldap</code> and <code>nss_ldap</code> modules.</p>
<h1>The Problem</h1>
<p>In a default configuration, <code>pam_ldap</code> and <code>nss_ldap</code> will make user and group accounts in LDAP act just like user and group accounts in <code>/etc/passwd</code>, <code>/etc/shadow</code> and <code>/etc/group</code>. If it is present, it&#8217;s a valid account for the system. In the general case, this is a good thing, and simplifies the configuration of your systems. Things get complicated, however, when you only want a subset of users to be allowed to log in to specific machines. Traditionally, the method for doing this has been to force <code>pam_ldap</code> to examine the LDAP entry for the user trying to authenticate, and only allow the authentication to succeed if some attribute of the user&#8217;s object matches a configured value. The <code>host</code> attribute of the <code>account</code> objectclass is a great one to use, but if your user objects are based on <code>person</code> or <code>inetOrgPerson</code>, and you&#8217;re doing the right thing and have strict schema checking, you can&#8217;t use it. You&#8217;d either have to violate your schema and disable checking, or violate your schema and add the <code>extensibleObject</code> objectclass, which is basically a schema-valid end-around to schema checking.</p>
<p>There are similar tradeoffs for other object attributes you might choose for utilizing for access control, especially considering that you can only use attributes that exist in your users&#8217; LDAP objects, and not outside them. While it certainly can be done, and I have done it in LDAP implementations before, there&#8217;s never a truly clean way to implement the policy, and changes to the policy induces the risk of breaking the host&#8217;s LDAP configuration entirely.</p>
<h1>A Good Solution</h1>
<p>In the case I was most recently asked about, the only way to gain access to the system is via SSH. The application stack which the hosts run either doesn&#8217;t do any user authentication, or handles it itself. Taking a step back from LDAP, then, there is an easier way to do access restrictions: the OpenSSH daemon&#8217;s <code>AllowUsers</code> and <code>AllowGroups</code> configuration directives.</p>
<p>Utilizing the capabilities of OpenSSH takes one piece of complexity out of the already complex LDAP client configuration, and moves it into a service that is a lot easier to repair should something go wrong. This is especially true if you are utilizing a configuration management (CM) system like CFEngine, Puppet or Chef, where the ability of the CM to do anything might completely hinge upon the system user and group databases being intact. A configuration error that causes people to not be able to log in via SSH is less serious than all of your systems user and group records disappearing, which can completely unhinge your system.</p>
<p>Finally, utilizing OpenSSH&#8217;s <code>AllowUsers</code> and <code>AllowGroups</code> let&#8217;s you manage access to hosts simply by modifying group memberships of users, which can be easily done in LDAP with tools such as my personal favorite, the <a href="http://www.ldap-account-manager.org/">LDAP Account Manager</a>. This nicely avoids the possibility of having to write your own management tool for access control to add/delete/modify attributes that aren&#8217;t easily handled by existing tools, or may not even be visible to those tools. Saving time and effort is key to sanity as a systems administrator, and this will save you a lot.</p>
<p>The best part, though, is that this method works regardless of whether you use LDAP, NIS/NIS+, rdist <code>/etc/passwd</code> and friends from a master copy, or any other method of pushing user and group account data out to your hosts. On top of that, there&#8217;s nothing saying you can&#8217;t layer this on top of LDAP ACLs, too, for that extra bit of paranoia.</p>
<h1>Loose Ends</h1>
<p>There are, however, some downsides to doing access control via OpenSSH. The first is that it only applies to OpenSSH. This may seem like a statement of the obvious, but it&#8217;s important to point out. Other services you may be running, which also rely on LDAP for authentication and authorization, will not be beholden do your policies configured for OpenSSH. Again, it may seem like I&#8217;m simply re-stating the obvious, but consider:</p>
<ul>
<li>Do you run an FTP server with user accounts?</li>
<li>Do you run an IMAP or POP service?,</li>
<li>Do you run SMTP AUTH?</li>
</ul>
<p>Those are just three examples, but any service you provide that performs user auth and does so via PAM, SASL (backed by PAM) or directly with LDAP would need to have it&#8217;s own ACLs in place if you don&#8217;t want all your LDAP users to have access.</p>
<p>With that in mind, however, if your needs are simple, use a simple tool, and get the job done with less stress.</p>
<p>Happy hacking!</p>
]]></content:encoded>
			<wfw:commentRss>http://ruiz-ade.com/2011/02/20/ldap-ssh-and-access-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dear Adobe Reader Safari Plugin: Die.</title>
		<link>http://ruiz-ade.com/2010/04/23/dear-adobe-reader-safari-plugin-die/</link>
		<comments>http://ruiz-ade.com/2010/04/23/dear-adobe-reader-safari-plugin-die/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 22:44:38 +0000</pubDate>
		<dc:creator>Gregory Ruiz-Ade</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Acrobat]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[launchd]]></category>
		<category><![CDATA[Reader]]></category>

		<guid isPermaLink="false">http://ruiz-ade.com/?p=134</guid>
		<description><![CDATA[If you&#8217;re anything like me, you have a strong dislike for all the stupidity that surrounds the Adobe Reader (formerly known as Acrobat Reader.) I won&#8217;t go into the details here (though this guy can explain it in great detail), but because I very occasionally need features of Adobe Reader, I still keep it installed [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re anything like me, you have a strong dislike for all the stupidity that surrounds the Adobe Reader (formerly known as Acrobat Reader.)</p>
<p>I won&#8217;t go into the details here (though <a href="http://www.bynkii.com/">this guy</a> can explain it in great detail), but because I <em>very occasionally</em> need features of Adobe Reader, I still keep it installed on my Mac, while I use Preview for all my other PDF needs.  I&#8217;ve gone so far as to install the <a href="http://code.google.com/p/firefox-mac-pdf/">Firefox PDF Plugin for Mac</a> for when I use Firefox, <strong>just to avoid Adobe Reader</strong>.  And, really, there&#8217;s no point in Adobe Reader for most cases where you just want to be able to view or print PDF files.  Doubly so, since Mac OS X lets you print any document to a PDF file as a default feature of the OS.</p>
<p>There are, though, edge cases where having Adobe Reader installed and available are useful.  So I have it installed, but I refuse to use their web plugin.  Adobe doesn&#8217;t care, though, and will periodically, sometimes randomly, and sometimes even without my consent, <em>re-install the plugin.</em>  Even though I&#8217;ve told it not to.  Adobe Updater, I&#8217;m looking at you, here.</p>
<p>Sadly, my solution is heavy-handed.  I created a launchd task that will forcibly remove the Adobe Reader plugin from /Library/Internet Plugins whenever it&#8217;s created.  It&#8217;s fast, efficient, and works.</p>
<p>And, as soon as I can figure out the new wordpress theme, I&#8217;ll post it here in a legible form</p>
<p><strong>UPDATE:</strong> Thanks to <a href="https://twitter.com/LynneAndChad">Lynne and Chad</a> on <a href="https://twitter.com/">Twitter</a> for suggesting the <a href="http://coffee2code.com/wp-plugins/preserve-code-formatting/">Preserve Code Formatting</a> plugin!</p>
<p>And now, the Launchd config. Save this as:<br />
<code>&quot;/Library/LaunchDaemons/org.unnerving.RemoveAdobeReaderPlugin.plist&quot;</code></p>
<hr />
<div class="code">
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
&nbsp;&nbsp;&lt;key&gt;Label&lt;/key&gt;
&nbsp;&nbsp;&lt;string&gt;org.unnering.RemoveAdobeReaderPlugin&lt;/string&gt;
&nbsp;&nbsp;&lt;key&gt;ProgramArguments&lt;/key&gt;
&nbsp;&nbsp;&lt;array&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;string&gt;rm&lt;/string&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;string&gt;-rf&lt;/string&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;string&gt;/Library/Internet Plug-Ins/AdobePDFViewer.plugin&lt;/string&gt;
&nbsp;&nbsp;&lt;/array&gt;
&nbsp;&nbsp;&lt;key&gt;QueueDirectories&lt;/key&gt;
&nbsp;&nbsp;&lt;array&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;string&gt;/Library/Internet Plug-Ins/AdobePDFViewer.plugin&lt;/string&gt;
&nbsp;&nbsp;&lt;/array&gt;
&nbsp;&nbsp;&lt;key&gt;WatchPaths&lt;/key&gt;
&nbsp;&nbsp;&lt;array/&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</code></pre></div>
]]></content:encoded>
			<wfw:commentRss>http://ruiz-ade.com/2010/04/23/dear-adobe-reader-safari-plugin-die/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Blogs are not for busy people</title>
		<link>http://ruiz-ade.com/2009/09/06/blogs-are-not-for-busy-people/</link>
		<comments>http://ruiz-ade.com/2009/09/06/blogs-are-not-for-busy-people/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 16:41:54 +0000</pubDate>
		<dc:creator>Gregory Ruiz-Ade</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://ruiz-ade.com/?p=110</guid>
		<description><![CDATA[Apparently weblogs are not for busy people, who don&#8217;t have time to write for them more than once a quarter. It would also help if I perhaps didn&#8217;t use a weblog engine that required upgrading every month because of new security holes. Bleh.]]></description>
			<content:encoded><![CDATA[<p>Apparently weblogs are not for busy people, who don&#8217;t have time to write for them more than once a quarter.  It would also help if I perhaps didn&#8217;t use a weblog engine that required upgrading every month because of new security holes.</p>
<p>Bleh.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruiz-ade.com/2009/09/06/blogs-are-not-for-busy-people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital Photo Archiving</title>
		<link>http://ruiz-ade.com/2008/10/16/digital-photo-archiving/</link>
		<comments>http://ruiz-ade.com/2008/10/16/digital-photo-archiving/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 16:27:02 +0000</pubDate>
		<dc:creator>Gregory Ruiz-Ade</dc:creator>
				<category><![CDATA[Archiving]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ruiz-ade.com/?p=45</guid>
		<description><![CDATA[Dear LazyWeb: My wife and I have something like 4000+ photos that we need to scan (at high resolution) and archive, and be able to logically manage. My platform choice is Mac. I will likely be purchasing a Mac Mini to dedicate to this task (2GHz model). I do not want to afford a Mac [...]]]></description>
			<content:encoded><![CDATA[<p>Dear LazyWeb:</p>
<p>My wife and I have something like 4000+ photos that we need to scan (at high resolution) and archive, and be able to logically manage.</p>
<p>My platform choice is Mac.  I will likely be purchasing a Mac Mini to dedicate to this task (2GHz model).  I do not want to afford a Mac Pro, as awesome as it would be to have such a powerhouse in my home.  I already have an Epson 2400 scanner, and would prefer to not have to replace it.</p>
<p>I have no idea what software to use for the resulting photo collection.  I&#8217;d like something better than simple files on the disk, and am considering either Lightroom or Aperture, even both of those seem aimed more directly at digital photography.</p>
<p>I would like a simple workflow, if possible, that doesn&#8217;t rely on me naming the images.  Tagging and notes/comments would be required.</p>
<p>Can I get away with Lightroom or Aperture, and whatever scanner software I can install for my scanner?  Do I need something different?</p>
<p>Can Lightroom or Aperture store images on an external disk (which may not always be connected?)  I&#8217;ve got plenty of storage already on my home network.</p>
<p><b>UPDATE:</b></p>
<p>Hardware will likely end up being a new 13&#8243; MacBook, instead of a Mac Mini, as my wife needs a replacement for her iBook anyway, and the new MacBook has way more power than the mini.  This definitely necessitates the ability to store all the images on external storage, ideally via a network (SMB/CIFS) share.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruiz-ade.com/2008/10/16/digital-photo-archiving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

