<?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>Beyond Abstraction &#187; Web</title>
	<atom:link href="http://beyondabstraction.net/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://beyondabstraction.net</link>
	<description>Meanderings and Such...</description>
	<lastBuildDate>Wed, 28 Mar 2012 18:39:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Social Networking vs. Social Matrices</title>
		<link>http://beyondabstraction.net/2009/04/27/social-matrices/</link>
		<comments>http://beyondabstraction.net/2009/04/27/social-matrices/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 01:13:16 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[Randomness]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/?p=330</guid>
		<description><![CDATA[In a social networking site that is truly extensible and robust we wouldn&#8217;t feel the urge to move on. Restarting on a shiny new site or culling or pruning your &#8220;friends&#8221; on an existing site wouldn&#8217;t be necessary. But we have been misled. Social networking doesn&#8217;t have to be all or nothing. We shouldn&#8217;t feel &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2009/04/27/social-matrices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>In a social networking site that is truly extensible and robust we wouldn&#8217;t feel the urge to move on.  Restarting on a shiny new site or culling or pruning your &#8220;friends&#8221; on an existing site wouldn&#8217;t be necessary. But we have been misled.  Social networking doesn&#8217;t have to be all or nothing.  We shouldn&#8217;t feel constricted in how we express ourselves on a given site.  And to exacerbate the issue, some of us are misleadingly tied to our online social networks.  For example, some people feel obligated to update their profiles constantly or to accept friendship/relationship requests (regardless of their relationship to the requester), particularly those that rely on the Internet to construct their professional persona <a href="#id_0">[0]</a>.  The bottom line: these social networking sites <a href="#id_1">[1]</a><a href="#id_2">[2]</a> continue to fail us as a society.  </p>
<p>Why do so many exist? Why do so many fall by the wayside as we progress?  Why does each and every attempt at social networking eventually fall to its successor? </p>
<p>The answer to the first question is simple &#8211; new social networking sites crop up because of need or because of fad.  No one site has all the required features for its user base.  Why do social networking sites fail as time progresses? Well, some would argue the maturity level of the user base has changed.  Or, more often these days, perhaps the site&#8217;s interface is more Web 2.0 friendly, and everyone wants to be on the Web 2.0 bandwagon.  Your friends jump ship, you jump ship.  Finally, the user&#8217;s social network constructed on the site changes.  As you mature, you leave one social network for a new social network.  For example, the mass migration from Friendster to MySpace and now to facebook.  Still others would argue the usage of the site is tied to user interface: this argument being that facebook is more &#8220;mature&#8221; than MySpace.  The end result of this interface maturity is the same as others.  Some people leave, others follow.  Some even suggest a class bias between the sites, thus alluding to the fact that as oneâ€™s class changes, so does their social network (and thus the social networking site to which they should belong)<a href="#id_3">[3]</a>.  Finally, perhaps we are merely sheep, following one another from one social network to another.  </p>
<p>Regardless of the specifics, the users of these sites inevitably leave, thus forsaking their previously well-developed social network on MySpace for a new social network they must construct on facebook.  And this is doubtfully an isolated incident &#8211; as soon as facebook&#8217;s yet-unheard-of young competitor, social.blah.org.net.com.dontcare, appears on the scene, another mass migration will occur.  Or perhaps the reason for this migration is the users of these sites are leaving to shed &#8211; shed previous acquaintances, previous friendships, previous lifestyles.    </p>
<p>This mass migration from social network to social network is merely a side effect.  It is tied to the way those websites create implicit relationships.  They ask, &#8220;Did you know this person?&#8221; while forgetting to ask, &#8220;How would you like to know this person NOW?&#8221;  Life experiences previously allowed us to prune our network based on lifestyle changes. You grow, you change, your relationships change, perhaps you even shed relationships &#8211; that is the natural evolution. </p>
<p>Current social networks inhibit this natural pruning and the evolution of real-life social networks<a href="#id_4">[4]</a>.  This is no longer the case with the rise of facebook and MySpace. But perhaps you don&#8217;t want to &#8220;shed.&#8221; Perhaps you like your old friends, but not in &#8220;that way.&#8221;  Perhaps you would like tighter control of how your information is sent to your social networks, or more specifically, how your &#8220;social flows&#8221; are constructed.  While such pruning of social networks has been proposed<a href="#id_5">[5]</a>, it is not effective in that it is not driven by you, but by simple inferences about the populous as a whole. And besides, who says you actually want to &#8220;prune?&#8221;  Perhaps you&#8217;re just lacking fine-grained control.</p>
<p>Only you can define how you want your social flows to actually work in the present, and in the future.  Or rather, you should be able to define your social information flows and the social networking site should support you in doing so.  And eventually your social networking site should create these flows for you, based on your existing flows.  You shouldn&#8217;t have to rely on some coarse-grained all-or-nothing approach.  Such is the case with current social network sites.  </p>
<p>You add a friend, you remove a friend.  That is all you can do.  They can read everything, they can write to everyone. Coarse-grained filters aside, they are similar to you in that they lack controls over what information flows to whom, or more precisely, how they socialize in general.  You are in or you are out.  There is no in-between on current social networking sites. There are filtering tools in facebook<a href="#id_5">[5]</a>, but for the most part they are coarse-grained with respect to the filtering of content, not quite capable of expressing how your information is shown to your social network.</p>
<p>In addition to the coarse-grained nature of social information flows, there is the problem of duplicated information being presented, cluttering the consumable information on individual sites <a href="#id_6">[6]</a>.  This often results from people wanting to share information with multiple social networks, a side effect of wanting to maintain multiple online personas.   Some people create multiple personas to communicate with multiple distinct social groups online. For example, my Twitter network and my facebook network are distinct.  Yet at the same time, most of the information I&#8217;m posting makes it to both networks.  Thus, people following me on Twitter and facebook must consume the information twice, once on Twitter, once on facebook.  </p>
<p>To reiterate, social networking sites currently provide coarse-grained control over who sees what parts of your profile <a href="#id_7">[7]</a>.  They aren&#8217;t totally living in the dark ages.  The downside to the current approach is still the fact that is remains all or nothing.  There exists no middle ground in which you can control which information flows to which person.  Sure you can set up groups, but who wants to go through all of that work?</p>
<p>A novel proposal is in the works.  One that allows you true flexibility in constructing your online social network.  One that doesn&#8217;t represent an all-or-nothing approach to social networks.  One that doesn&#8217;t leave you questioning your own social network members and how they interact with you.  Instead of a wide-open network that exchanges all information to all people, you will be able to create your own network and define how the information flows between the people or groups in your social network.  Finally, you will be able to define your own social matrix, and you will be able to evolve your social matrix as your life changes.  You won&#8217;t have to shed or prune friends <a href="#id_8">[8]</a>.  This network will be able to learn or make inferences about your socialization style. And it will eventually learn how you socialize based on numerous aspects of your life. </p>
<p>Thanks to Vitak, Brandon, Josh, and Justin, for the inspiration for this post.  Oh, and IPAs.  </p>
<p>[0] <a href="http://beyondabstraction.net/about" id="id_0">About Spencer</a><br />
[1] <a href="http://facebook.com" id="id_1">Facebook</a><br />
[2] <a href="http://myspace.com" id="id_2">MySpace</a><br />
[3] <a href="http://www.danah.org/papers/essays/ClassDivisions.html" id="id_3">Viewing American class divisions through Facebook and MySpace</a><br />
[4] <a href="http://www.wired.com/techbiz/people/magazine/16-11/pl_brown" id="id_4">Scott Brown on Facebook Friendonomics</a><br />
[5] <a href="http://www.allfacebook.com/2009/03/facebook-feed-filters/" id="id_5">The Future Of Facebookâ€™s Feed Is Granular Filters</a><br />
[6] <a href="http://www.andydesoto.com/social-media/social-network-pruning-heuristic-2-eliminate-cross-posters/" id="id_6">Eliminating Cross Posting in Social Networks</a><br />
[7] <a href="http://www.allfacebook.com/2009/02/facebook-privacy/" id="id_7">10 Privacy Settings Every Facebook User Should Know</a><br />
[8] <a href="http://www.cs.georgetown.edu/~singh/papers/ICDM-2005.pdf" id="id_8">Pruning Social Networks Using Structural Properties and Descriptive Attributes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2009/04/27/social-matrices/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Deleting All Messages in Exchange OWA</title>
		<link>http://beyondabstraction.net/2008/10/02/deleting-all-messages-in-exchange-owa/</link>
		<comments>http://beyondabstraction.net/2008/10/02/deleting-all-messages-in-exchange-owa/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 15:05:45 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[leopard]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/?p=119</guid>
		<description><![CDATA[Ran into a problem with Exchange. I created a server-side rule to place spam messages in a folder that didn&#8217;t exist. All spam was instead going to the root folder, the folder above my inbox. Well if you use Entourage to access Exchange you will not be able to access this folder. If you go &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2008/10/02/deleting-all-messages-in-exchange-owa/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Ran into a problem with Exchange.  I created a server-side rule to place spam messages in a folder that didn&#8217;t exist.  All spam was instead going to the root folder, the folder above my inbox.  Well if you use Entourage to access Exchange you will not be able to access this folder.  If you go into Outlook Web Access (OWA) you can navigate to the root user folder by clicking on &#8220;Folders&#8221;.  </p>
<p>Unfortunately by this point I had like thousands and thousands of messages.  There is no &#8220;Delete All&#8221; option in OWA.  Craptacular.  So moving on I mounted the server via WebDAV in finder (cmd+k).  The URL to mount will look something like:<br />
<code>http://exchange.servername.com/exchange/username</code></p>
<p>If this folder is large navigating to it in Finder will be a horrific experience.  Open Terminal.app and navigate to the mountpoint.</p>
<p><code>~/> cd /Volumes/username</code></p>
<p>Once again, if the folder is large <code>rm *.EML</code> will not work as the wildcard expansion done by bash will exceed the length of the command-line itself (32K by default IIRC).  Try this:</p>
<p><code><br />
/Volumes/username> SRC=./*.EML<br />
/Volumes/username> for i in $SRC; do rm "$i"; done<br />
</code></p>
<p>This will cleanup most, if not all, of the mess.  Some files will not be removed due to escape characters and escaped escaped characters etc.  Open the folder in Finder and delete the rest.  There are def. more elegant ways to handle this from a scripting standpoint but this was quick and worked.  </p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2008/10/02/deleting-all-messages-in-exchange-owa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Upgraded WordPress (again)</title>
		<link>http://beyondabstraction.net/2008/04/12/upgraded-wordpress-again/</link>
		<comments>http://beyondabstraction.net/2008/04/12/upgraded-wordpress-again/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 15:38:20 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/?p=116</guid>
		<description><![CDATA[Just finished updating WordPress to 2.5 from 2.3.3. Ran into a few problems. Normally I diff the old version of WP to the new version and just apply the generated patch to my &#8220;custom&#8221; install. Somewhere along the line I must have deleted extraneous files like license.txt because the patch failed to apply because some &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2008/04/12/upgraded-wordpress-again/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Just finished updating WordPress to 2.5 from 2.3.3.  Ran into a few problems.  Normally I diff the old version of WP to the new version and just apply the generated patch to my &#8220;custom&#8221; install.  Somewhere along the line I must have deleted extraneous files like license.txt because the patch failed to apply because some files listed in the diff didn&#8217;t exist in the directory I was applying it to&#8230; this is the first time this method of non-destructively updating WordPress had failed me.  I could have edited the patch by hand but it was 100K lines so I wasn&#8217;t particularly interested in this method.</p>
<p>So I finally ended up actually following the upgrade instructions, deleted wp-admin and wp-includes, and copied all the files from 2.5 into my existing install.  The database update took about 1 second to complete.  The upgrade was technically complete at this point but of course it wreaked havoc with my theme.  </p>
<p>One thing about the WordPress theme architecture is that if a failure occurs in a custom theme it kinda falls back to the default theme, this is due to CSS I guess.  Problems with a theme, like my Binary Blue bastardization, also show up in the strangest ways.  </p>
<p>For example, my last.fm plugin&#8217;s cache directory got blown away.  The plugin could no longer find the image cache and was throwing a (fatal?) error to Apache&#8217;s logs.  The site was being styled by what looked like a combination of the default classic and my own customized Binary Blue theme.  What I do to fix this is an utter hack, I move the default theme out of the way and symlink the directory of my theme to wp-content/themes/default.  Then when things go wrong it is still pulling from my theme.  Then I go back and fix the actual problem.  </p>
<p>The upgrade is complete.  It took me about 30 minutes to migrate total.  But I am more concerned about &#8220;corner cases&#8221; this time since my traditional method of just merging in the diff between releases failed.  I also haven&#8217;t stress tested all of the widgets and plugins.  Overall I would suggest upgrading.  The experience was worse than usual, but not terrible.  </p>
<p>I just noticed when writing this post that the &#8220;Preview this Post&#8221; feature in WP 2.5 must pull from the auto-saved draft.  When I click preview I don&#8217;t see the content that hasn&#8217;t been saved yet.  Small potatoes, remind me to open a bug.</p>
<p>Update (4 hours later): I figured out why my theme was getting butchered into some combination of the default and my own &#8211; I had some absolute URLs in my header.php where I forgot to use the template path variables. </p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2008/04/12/upgraded-wordpress-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server Migration</title>
		<link>http://beyondabstraction.net/2008/03/08/server-migration/</link>
		<comments>http://beyondabstraction.net/2008/03/08/server-migration/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 19:16:33 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SELinux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[brickwall]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[rhel]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/2008/03/08/server-migration/</guid>
		<description><![CDATA[It&#8217;s been three years since we upgraded the hardware that hosts our various sites. I contacted my provider (Crucial Paradigm) and got some competitive offers. Stefan, my friend in Berlin that I split the server with, and I agreed on the following specs: Athlon 64 x2 4000 (2 cores @ 2.1GHz, 512K L2 each) 4GB &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2008/03/08/server-migration/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been <a href="http://beyondabstraction.net/2005/03/03/new-server-and-the-seframework/" title="Old, New Hardware">three years since we upgraded the hardware</a> that hosts our various sites.  I contacted my provider (Crucial Paradigm) and got some competitive offers. Stefan, my friend in Berlin that I split the server with, and I agreed on the following specs:</p>
<ul>
<li>Athlon 64 x2 4000 (2 cores @ 2.1GHz, 512K L2 each)</li>
<li>4GB RAM, 160GB SATA, 100Mbps</li>
<li><a href="http://www.centos.org">CentOS 5</a></li>
<li>Apache, BIND, MySQL, Postifx, Spam Assassin, ClamAV, Cyrus IMAP</li>
<li>SELinux enforcing</li>
</ul>
<p>Once again this is going to be a dedicated, remote, hosted server.  A few days later and they contacted me with the login information.  I&#8217;m going to describe the move from a high-level.  I&#8217;m not going to go through the individual config file modifications or how to dump a Cyrus database.</p>
<p><span id="more-113"></span></p>
<p>It only took me about a day to prep the new system for the move.  Stefan was gone for a week so I could move pretty much all of my stuff but I would wait until he got back to move the shared mail services.  It is rather difficult to incrementally move users from one system to another using Cyrus so I just did a test migration of the IMAP spools and databases but waited on actually updating the DNS MX records.  </p>
<p>First I updated the glue records and name servers at my registrar.  I made the new system master and the old system I just modified to run as a slave.  I also had Josh fix his config since he is my DNS buddy (I highly recommend using the DNS buddy system).  With DNS up and running I added entries for the new server.</p>
<p>Then I moved my website.  I just dumped my databases and pulled them into the new system.  A few Apache tweaks and everything was good to go.  I was pulling my hair out at one point trying to figure out why the CentOS default page was appearing but I finally tracked it down to a welcome.conf configuration file.  I removed that and found I could debug Apache config problems more easily.</p>
<p>I decided to tackle all of the SSL stuff at once.  I setup Apache, Cyrus, and Postfix w/ certs and CAs.  I tested each service to ensure I had the directory permissions correct and had the authentication mechanisms properly configured.  It is at this point that I tested a Cyrus migration knowing that I would be repeating the process again later.  </p>
<p>Then I moved on to configuring the rest of the Postfix chain using Amavis, Spam Assassin, and ClamAV.  There was plenty of documentation on this process available online.  Note that ClamAV (and maybe a few of the others) are only available in the rpmforge yum repos.  These programs aren&#8217;t officially part of the CentOS/RHEL distributions but are commonly used by the user communities.  As a result their configuration files don&#8217;t mesh precisely with the rest of the services, for example storing the virus database in /var/clamav by default instead of /var/lib/clamav.  I fixed these discrepancies and would recommend you do the same.  It did take me a while to track all of these down.  freshclam (the ClamAV updater) was running from a Cron job.  It was trying to write to &#8220;/var/clamav&#8221; which didn&#8217;t exist.  As a result the virus signatures weren&#8217;t updating.  I discovered this only through reviewing the logs.</p>
<p>As soon as Stefan got back he moved all of his services and data.  Finally we cut the mail over to the new system by fixing the MX records and using the Postfix transport map feature on the old system to force it to relay to the new server.  That completed the migration.</p>
<p><strong>SELinux</strong><br />
Upon login I discovered SELinux was disabled despite my specific request that it be enabled.  I decided to fix it by hand instead of letting Brickwall fix it automatically to show that going from disabled to permissive to enforcing isn&#8217;t bad and shouldn&#8217;t be scary.  It should be done regardless of the presence of a management tool like Brickwall.  I changed the flag in <code>/etc/selinux/config</code> to enforcing and ran <code># touch /.autorelabel</code>.  </p>
<p>I also added <code>enforcing=0</code> to the ends of the kernel command lines in <code>/boot/grub/menu.lst</code>.  </p>
<blockquote><p>Tangent &#8211; I chose this route, modifying the grub file, for going into permissive mode during configuration and testing instead of setting the flag in <code>/etc/selinux/config</code> to permissive.  Applications, such as those built into Red Hat and CentOS as well as third party applications like Brickwall, modify the settings in <code>/etc/selinux/config</code>.  It is possible for me to inadvertently set the system to boot into enforcing before I am ready using these applications.  Since this is a remote server and the configuration is in flux I want to make sure a quick remote reboot request gets me back in to my system.  It is the exact same as using iptables remotely; you don&#8217;t load the firewall rules automatically on boot until you&#8217;re sure you can get back in through SSH.  As soon as I&#8217;m confident that I typed in the SSH network settings properly the system boots into enforcing mode.</p></blockquote>
<p>After setup is complete remember to remove the kernel command line flag &#8211; always going into permissive mode on reboot, much like not auto-loading firewall rules, is a patentable bad idea on a production system.</p>
<p>I disabled all unnecessary services (everything except SSH at this point) and rebooted.  The system relabeled and came up in permissive mode.   Everything was working fine and running in the proper SELinux domains according to <code># ps axZ</code>.  I ran <code># setenforce 1</code> to go into enforcing mode for the first time.  </p>
<p>Nothing bad happened.  The world didn&#8217;t end.  The system didn&#8217;t stop responding.  I&#8217;m also assuming the rampant rumor that <a href="http://twitter.com/UnquietMind/statuses/723260632" title="SELinux Kills">SELinux kills Giraffes in enforcing mode</a> is false because I watched the news and saw nothing Giraffe related.  This SELinux stuff really isn&#8217;t as hard, or as mean as people make it sound.  BTW Brickwall would have taken care of all of this editing of SELinux config files and relabeling stuff for me if I wasn&#8217;t such a control freak.</p>
<p>Well turning it on is one thing.  Really using it is a whole &#8216;nother thing right?  That is where Brickwall comes into play (disclaimer [1]).  I mentioned it before but think &#8220;SELinux Management&#8221; and there are free versions for Fedora and demos for RHEL and CentOS.  Because I&#8217;m cool I get to use the Enterprise Edition.  Mere mortals may have to run Professional or Standard via &#8220;ssh -X&#8221;.  There is no difference in configurability.  Both use the same configuration GUI.  The only policy difference is the policy for the remote daemon &#8211; not really needed if the remote enterprise management daemon isn&#8217;t installed.  One has centralized/remote management, the other does not. </p>
<p>Brickwall Enterprise Edition has two components, the centralized manager application with configuration editor and the remote daemon.  The centralized management application takes different plug-ins &#8211; I&#8217;m only going to be using Brickwall plug-in that supports general SELinux configuration.  I installed the Enterprise Manager with the Brickwall Enterprise component on my desktop RHEL 5 system.  This installation process generated the remote daemon RPMs for me.  These packages include SSL keys tying the remote daemon to this specific Enterprise Manager install.  The SSL keys are used to encrypt the network traffic between the manager and the client daemons.</p>
<p>I installed the remote daemon on the new system.  It is just a little daemon that facilitates remote management of SELinux policy.  I added one of the IPs of this system to a group in my Enterprise Manager.  The system had to be &#8220;activated&#8221; which means Brickwall had to switch from the standard targeted policy to a Brickwall policy.  There aren&#8217;t really any functional differences between the two policies &#8211; a default Brickwall policy is semantically equivalent to a targeted policy as shipped by Red Hat/CentOS.  But the Brickwall policy contains the structure we need in-place to customize the policy later.</p>
<p>Continuing w/ Brickwall I started restricting network settings for the services I would be running (listed above).  I restricted things like the spam, virus, mysql, and other mail filtering services to local host only.  I restricted service ports to meet my requirements.  I applied the configuration changes and rebooted and went into enforcing to verify services came up in the proper domain after a reboot.</p>
<p>All of the SELinux domain names show exactly what processes they target so run`ps axZ`.  All of you key services should be running as &#8220;*:*:servicename_t&#8221;, such as &#8220;mysqld_t&#8221; or &#8220;httpd_t&#8221; or &#8220;postfix_smtp_t&#8221;.  </p>
<p>The only thing that should be &#8220;unconfined_t&#8221; is user processes or custom services that aren&#8217;t targeted by SELinux.  Note that there are some 200 odd applications or services covered by SELinux so there is a good chance your &#8220;custom service&#8221; is covered.</p>
<p>[1] Disclaimer: I work for the company that makes Brickwall.  Since I&#8217;m only an amateur blogger (not commerically endorsed, still eligible for the Bloglympics) and since this doesn&#8217;t appear on tresys.com I&#8217;m not going to be writing a review or praise the software, I&#8217;m just going to run through using it to batten down the hatches on my system.</p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2008/03/08/server-migration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Leopard and Webclips</title>
		<link>http://beyondabstraction.net/2007/11/29/leopard-and-webclips/</link>
		<comments>http://beyondabstraction.net/2007/11/29/leopard-and-webclips/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 05:57:47 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[leopard]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/2007/11/29/leopard-and-webclips/</guid>
		<description><![CDATA[I&#8217;ve been reading about webclips but was having a problem finding a real use for them. Webclips, you know, just right click in Safari and &#8220;Open in Dashboard&#8221;? I thought RSS met my needs. I just added some dynamic content to my sidebar, which may or may not still be there when you are reading &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2007/11/29/leopard-and-webclips/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been reading about webclips but was having a problem finding a real use for them.  Webclips, you know, just right click in Safari and &#8220;Open in Dashboard&#8221;?  I thought RSS met my needs.  I just added some <a href="http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/">dynamic content to my sidebar</a>, which may or may not still be there when you are reading this.  </p>
<p>It&#8217;s actually not the fact that the content is dynamic that converted me to a Webclips fan.  The content to the right is actually &#8220;powered by&#8221; XML and/or RSS so I could just as easily have reached the same information in other ways.  There are tons of Dashboard widgets that do a great job with those tasks.  </p>
<p>The thing that really intrigued me was that I could use the Webclip to monitor the new content.  Since I&#8217;m building the content from another site I just want to keep an eye on it for awhile to ensure it behaves as expected, like preventing Enya from appearing in the Album list.  </p>
<p>I fully expect to find other uses now that I&#8217;ve been exposed (no, not like that).  Take a look at the pics below.</p>
<p><a href='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/picture-8.png' title='Full Dashboard Webclip' rel="lightbox"><img src='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/picture-8.thumbnail.png' alt='Full Dashboard Webclip' /></a>&nbsp;<a href='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/picture-9.png' title='Webclip from my Dashboard' rel="lightbox"><img src='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/picture-9.thumbnail.png' alt='Webclip from my Dashboard' /></a></p>
<p>(it&#8217;s 1am and I don&#8217;t feel like doing proper foot noting so screw you for judging me)</p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2007/11/29/leopard-and-webclips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m a Social Butterfly</title>
		<link>http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/</link>
		<comments>http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 19:27:36 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[Randomness]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/</guid>
		<description><![CDATA[I decided to try come out of my cocoon and try all the social networking sites. Of course there are quite a few and the attempts to unify all of these sites haven&#8217;t been successful. So for your enjoyment, as I know you all are very interested in my life, I have started using these &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I decided to try come out of my cocoon and try all the social networking sites.  Of course there are quite a few and the attempts to unify all of these sites haven&#8217;t been successful.  So for your enjoyment, as I know you all are very interested in my life, I have started using these sites and have pulled the most recent content into my sidebar.  Just refresh the page to see the latest on my life.  </p>
<p>Twitter will tell you what I am/was doing plus perhaps some random thoughts.  I can update twitter via SMS on my cell, the twitter web page, or a dashboard widget I&#8217;ve installed.</p>
<p>Flickr will contain recent pics from my iPhone and iFlickr on a regular basis.  Occasionally it will contain pics from a real camera as well but for convenience, the cell phone is always at my side.</p>
<p>Last.fm will display recent music I&#8217;ve been listening to &#8211; once I finish the integration.  I have to build up some stats before activating the sidebar widget but expect it to appear in the next day or so&#8230;</p>
<p>I use del.icio.us for all of my bookmarking.  Following my bookmarking you can see the subjects I&#8217;m currently interested in or researching.  I still need to add a sidebar widget for recent bookmarks.</p>
<p>I&#8217;m going to try to stay active with my social networking for awhile to see if I/you like it.  Eventually I may get bored and stop updating but for now it is maintaining my interest.</p>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2007/11/25/im-a-social-butterfly/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upgrade complete</title>
		<link>http://beyondabstraction.net/2007/11/14/upgrade-complete/</link>
		<comments>http://beyondabstraction.net/2007/11/14/upgrade-complete/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 23:59:35 +0000</pubDate>
		<dc:creator>spencer</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://beyondabstraction.net/2007/11/14/upgrade-complete/</guid>
		<description><![CDATA[I just finished moving the last of my content into WordPress pages. I got tired of my old theme and decided to give up on integrating WordPress into my existing site. I was spending a significant amount of time just merging in the changes from WordPress releases without clobbering all of my customizations. It had &#8230; </p><p><a class="more-link block-button" href="http://beyondabstraction.net/2007/11/14/upgrade-complete/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I just finished moving the last of my content into WordPress pages.  I got tired of my old theme and decided to give up on integrating WordPress into my existing site.  I was spending a significant amount of time just merging in the changes from WordPress releases without clobbering all of my customizations.  It had officially become a pain in my ass.  School, and Projects are now available in the other <a href="http://beyondabstraction.net/stuff/">Other&#8230;</a> section at the top.  I might them up to the top-level but for now they are there.<br />
<span id="more-83"></span><br />
Aside from moving the content and fixing it to adhere to my theme and WordPress&#8217; requirements I had to come up with some magic mod_rewrite rules to redirect the old pages to the new pages including query strings.  I hadn&#8217;t used QUERY_STRING in redirects before so it was a learning experience and quickly reminded of the love/hate relationship I have with mod_rewrite.  Here are the new components:</p>
<pre>RewriteCond %{REQUEST_URI}              ^/wordpress.*$ [NC]
RewriteRule wordpress/(.*)            http://beyondabstraction.net/$1 [R=301,L]

# legacy url rewriting
RewriteCond %{REQUEST_URI}              ^/school.php$ [NC]
RewriteRule ^school.php$                http://%{SERVER_NAME}/stuff/school/ [R=301,L]
RewriteCond %{REQUEST_URI}              ^/school-stuff/?$ [NC]
RewriteCond %{QUERY_STRING}             class=([^&#038;;]*)? [NC]
RewriteRule .*                  http://%{SERVER_NAME}/stuff/school/%1/? [R=301,L]

RewriteCond %{REQUEST_URI}              ^/sonyfs660/?$ [NC]
RewriteRule sonyfs660/?            http://beyondabstraction.net/stuff/vaio-fs660/ [R=301,L]

RewriteCond %{REQUEST_URI}              ^/projects.php.*$ [NC]
RewriteRule projects.php(.*)?            http://beyondabstraction.net/stuff/projects/$1 [R=301,L]
</pre>
<p>Since I&#8217;ve never posted these in their entirety before I&#8217;m attaching my top-level .htaccess and my 403 page <a href="#footnote_1">[1]</a> <a href="#footnote_2">[2]</a>.  The 403 page uses flushes to display content to humans while staying in a loop to waste spammers time.  </p>
<p>I had to add a .htaccess rule to disable output compression on the 403 directory.  This is because I have Apache setup to use mod_deflate to compress the content.  So mod_deflate is buffering output to compress before sending it to the client.  Additionally, PHP is buffering output and the client side browsers are buffering.  PHP is an easy fix via a flush() and ob_flush() call.  Client side buffering is a little more tricky.  Must browsers start displaying content as soon as it can be rendered.  Safari, and perhaps other KHTML/Webkit based browsers, buffer until the first 1K is seen or the connection is closed.  There is some magic in the 403 file to skirt around this problem.</p>
<p>Updated: Forgot to describe the rest of the <a href="#footnote_1">.htaccess</a> file.  Those of you not interested in mod_rewrite should <em>not read</em> on as the boredom may kill you.  Those of you that are interested:</p>
<ol>
<li>Find a new hobby and <em>don&#8217;t</em> read this dribble</li>
<li>Perhaps even move and start a new life</li>
<li>At the very least should get a cup of coffee and a porno to avoid the same boredom related death as the non-interested</li>
</ol>
<p>I&#8217;m going to pretend I didn&#8217;t post that clip from the .htaccess file above and just start over from the beginning.  Please click any of the links below to see a demonstration of the rewrites.</p>
<pre>
# spammers and scanners
Order Allow,Deny
Deny from 69.13.156.208
Deny from 208.57.118.100
Deny from 216.229.143.241
Deny from 12.178.36.25
Deny from 81.95.146.227
Deny from 68.83.37.146
Deny from 80.58.205.34
Allow from all
</pre>
<p>The next section starts the rewrite engine, ensures that the site is only reachable via very certain host names <a href="#footnote_3">[3]</a>.  It also provides a shorthand for my security blog that can easily be written on a matchbook <img src='http://beyondabstraction.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<pre>
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On

# host rewrite rules
RewriteCond %{HTTP_HOST}   !^beyondabstraction\.net [NC]
RewriteCond %{HTTP_HOST}   !^security.beyondabstraction\.net [NC]
RewriteCond %{HTTP_HOST}   !^$ [NC]
RewriteRule ^/(.*)         http://beyondabstraction.net/$1 [R=301,L]

# security sub-blog
RewriteRule ^security/?$ /category/security?title=off [R=301,L]
</pre>
<p>The next chunk is the meat of what I call &#8220;legacy support&#8221;.  These are efforts a maintainer takes to avoid dead links as their site changes.  These were all required when I moved to a pure WordPress site.  Come to think of it, that is how this whole tangent got started.  Oh well, now that you&#8217;re screwed and I&#8217;m stuck finishing&#8230;</p>
<p>The wordpress/ rewrite shows exactly what I mean when I say WordPress was integrated into my site; the rewritten rule shows that WordPress is now the top-level of my site.  For the sake of explanation, lets say WordPress <em>used to be</em> at the second level.  I had other content at the second level such as my school work.  This meant all of that content had to be moved from the second level of my old site, to the second level of my new site inside of WordPress.  These rewrites are the equivalent of setting a forwarding address for snail mail or email.  The hardest one is the rewrite of a query string, a GET request.  The old school pages took the class number as a GET argument to determine which page to display.  I used the QUERY_STRING variable and converted it into a sub-directory. <a href="/school.php?class=cs331">/school.php?class=cs331</a> will now redirect to <a href="/stuff/school/cs331">/stuff/school/cs331</a>.  </p>
<pre>
RewriteCond %{REQUEST_URI}              ^/wordpress.*$ [NC]
RewriteRule wordpress/(.*)            http://beyondabstraction.net/$1 [R=301,L]

# legacy url rewriting
RewriteCond %{REQUEST_URI}              ^/school.php$ [NC]
RewriteRule ^school.php$                http://%{SERVER_NAME}/stuff/school/ [R=301,L]
RewriteCond %{REQUEST_URI}              ^/school-stuff/?$ [NC]
RewriteCond %{QUERY_STRING}             class=([^&#038;;]*)? [NC]
RewriteRule .*                  http://%{SERVER_NAME}/stuff/school/%1/? [R=301,L]

RewriteCond %{REQUEST_URI}              ^/sonyfs660/?$ [NC]
RewriteRule sonyfs660/?            http://beyondabstraction.net/stuff/vaio-fs660/ [R=301,L]

RewriteCond %{REQUEST_URI}              ^/projects.php.*$ [NC]
RewriteRule projects.php(.*)?            http://beyondabstraction.net/stuff/projects/$1 [R=301,L]
</pre>
<p>The final set of rules addresses bandwidth leechers, Ebay image leechers and spam referrers.  The final four lines are used to pass requests for non-existent files and directories onto WordPress as path information.  WordPress then uses this information to generate dynamic pages. </p>
<pre>
# bandwidth leechers
RewriteCond %{HTTP_REFERER} ^https?://.*.ebay.com/.*$
RewriteRule .*\.(gif|GIF|jpg|JPG|png|PNG).*$ - [G,L]

# spammers
RewriteCond %{HTTP_REFERER} poker [OR]
RewriteCond %{HTTP_REFERER} medicine [NC,OR]
RewriteCond %{HTTP_REFERER} pills [NC,OR]
RewriteCond %{HTTP_REFERER} diet [NC,OR]
RewriteCond %{HTTP_REFERER} viagra [NC,OR]
RewriteCond %{HTTP_REFERER} mortgage [NC,OR]
RewriteCond %{HTTP_REFERER} casino [NC,OR]
RewriteCond %{HTTP_REFERER} insurance [NC,OR]
RewriteCond %{HTTP_REFERER} loan [NC,OR]
RewriteCond %{HTTP_REFERER} xanax [NC,OR]
RewriteCond %{HTTP_REFERER} meridia [NC,OR]
RewriteCond %{HTTP_REFERER} incest [NC,OR]
RewriteCond %{HTTP_REFERER} lesbian [NC,OR]
RewriteCond %{HTTP_REFERER} viagra [NC,OR]
RewriteCond %{HTTP_REFERER} adult [NC,OR]
RewriteCond %{HTTP_REFERER} hentai [NC,OR]
RewriteCond %{HTTP_REFERER} tramadol [NC,OR]
RewriteCond %{HTTP_REFERER} phentermine [NC,OR]
RewriteCond %{HTTP_REFERER} gambling [NC,OR]
RewriteCond %{HTTP_REFERER} texas- [NC,OR]
RewriteCond %{HTTP_REFERER} holdem [NC,OR]
RewriteCond %{HTTP_REFERER} pharmacy [NC,OR]
RewriteCond %{HTTP_REFERER} ultram [NC,OR]
RewriteCond %{HTTP_REFERER} levitra [NC,OR]
RewriteCond %{HTTP_REFERER} phentermine [NC,OR]
RewriteCond %{HTTP_REFERER} cialis [NC,OR]
RewriteCond %{HTTP_REFERER} payday [NC,OR]
RewriteCond %{HTTP_REFERER} bargains [NC,OR]

# WARNING: any inserted lines need NC,OR... only the last line should be NC
RewriteCond %{HTTP_REFERER} tramadol [NC]
RewriteRule .* - [F,L]

# pass everything non-file/dir as a parameter to index
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&lt;/IfModule&gt;
</pre>
<div class="footnote_list">
<div class="footnote">
<div class="footnote_id" id="footnote_1">[1]</div>
<div class="footnote_content"><a href='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/403.phps' title='403 script'>403 script</a></div>
</div>
<div class="footnote">
<div class="footnote_id" id="footnote_2">[2]</div>
<div class="footnote_content"><a href='http://beyondabstraction.net/wp-content/uploads.hidden/2007/11/htaccess' title='htaccess file'>htaccess file</a></div>
</div>
<div class="footnote">
<div class="footnote_id" id="footnote_3">[3]</div>
<div class="footnote_content">I use this to ensure my site isn&#8217;t reachable via <a href="http://www.beyondabstraction.net">www.beyondabstraction.net</a> or really as a catchall.  As my subdomains come and go this also plays a role in supporting &#8220;legacy&#8221; portions of the site.</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://beyondabstraction.net/2007/11/14/upgrade-complete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

