<?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>Rough Sea Games &#187; Server Administration</title>
	<atom:link href="http://blog.rough-sea.com/category/server-administration/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rough-sea.com</link>
	<description>Indie game development</description>
	<lastBuildDate>Sun, 29 Jan 2012 12:19:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<image>
			<title>Rough Sea Games</title>
			<url>/wp-content/uploads/2008/10/rsg_rss-feed.jpg</url>
			<link>http://blog.rough-sea.com</link>
			<width>144</width>
			<height>95</height>
			<description>Indie game development</description>
		</image>		<item>
		<title>Multiple Game Instances Management</title>
		<link>http://blog.rough-sea.com/2010/11/multiple-game-instances-management/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=multiple-game-instances-management</link>
		<comments>http://blog.rough-sea.com/2010/11/multiple-game-instances-management/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 09:55:05 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[admintool]]></category>
		<category><![CDATA[R&D]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1467</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Fmultiple-game-instances-management%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Fmultiple-game-instances-management%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>In most MMOGs you have more than one game instance, because its much easier to implement instead of a huge game universe for all players. Because the game instances do not interact, the players can be allowed to play on multiple game instances at the same time.</p> &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/11/multiple-game-instances-management/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Fmultiple-game-instances-management%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Fmultiple-game-instances-management%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In most MMOGs you have more than one game instance, because its much easier to implement instead of a huge game universe for all players. Because the game instances do not interact, the players can be allowed to play on multiple game instances at the same time.</p>
<p>The problem is that most Admintools are just a special interface to the game. They run in the same environment as the game and therefore there are multiple Admintool instances in a multi game instance game too. This is very annoying to the Community Management, because they have to use X Admintools to manage X game instances. In our planning phase of our Admintool we of course talked to the people that should use it. The Community Managers told us that they&#8217;ve coded scripts that execute queries on several Admintools to make their work more comfortable. Yeah! Nice guys, they optimize their workflow on themself. But wait a second&#8230; The Community Management is not supposed to write code, especially if its a workaround for a bad architecture. There is no reason to have an Admintool for every game instance, but there are much reasons to have only one Admintool for every game instance:</p>
<ul>
<li>You are able to query multiple game instances with a single mouse click. (e.g. search for an user with a specific email or IP)</li>
<li>There is a central role and user management. No need to do the setup again and again.</li>
<li>Its possible to merge statistics from several game instances to an overall statistic.</li>
<li>The Community Management do not have dozens of Admintool windows. There is only one Admintool to rule them all.</li>
</ul>
<p>I hope i&#8217;ve convinced you. If you know reasons that speak against a single Admintool feel free to write a comment.</p>
<p>Ok, enough of the &#8220;why we do what we do&#8221; thingy. Lets talk about the how. If an Admintool is not just an interface to the game instance, it has to be an application on its own. That means you do not only have game servers, you have an Admintool server too. Additionally the Admintool needs a way to communicate to the  game servers and vice versa. A direct remote SQL connection is out of the question for security and other reasons. We decided do use <a href="http://activemq.apache.org/">ActiveMq </a>for the communication. The main reason is the guaranteed delivery feature. If the Admintool goes down, all messages targeting the Admintool are stored on the senders hard disc. They will be sent once the Admintool goes up again. This way no tracking data from the game will be lost.</p>
<p>The Admintool needs a way to know of all the game instances floating in the universe. You don&#8217;t have to worry. There is no list of game servers and there connection properties stored at the admintool. Instead we&#8217;ve decided to make the Admintool the sun of our game universe with many game planets surrounding it. This makes it much easier to maintain all the connections. The game servers will connect themself to the Admintool at their first startup. The Admintool sends the game server a unique internal server id which is used for subsequent connections (e.g. after a update and server restart). This way the Admintool can manage a list of all game instances in the world.</p>
<p>Thats all for now. Next time I write about multiple server queries and how to filter, sort and page them.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1467&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Fmultiple-game-instances-management%2F&amp;title=Multiple%20Game%20Instances%20Management" id="wpa2a_2">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/11/multiple-game-instances-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools for MMOG Administration</title>
		<link>http://blog.rough-sea.com/2010/09/tools-for-mmog-administration/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tools-for-mmog-administration</link>
		<comments>http://blog.rough-sea.com/2010/09/tools-for-mmog-administration/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 15:28:44 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[admintool]]></category>
		<category><![CDATA[R&D]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1357</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F09%2Ftools-for-mmog-administration%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F09%2Ftools-for-mmog-administration%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hey there,</p> <p>this time I tell you about the project the R&#38;D department worked on for the last months. We developed a tool that helps us and the Community Management department to administrate a Massive Multiplayer Online Game. We just call it Admintool. A tool that allows &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/09/tools-for-mmog-administration/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F09%2Ftools-for-mmog-administration%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F09%2Ftools-for-mmog-administration%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hey there,</p>
<p>this time I tell you about the project the R&amp;D department worked on for the last months. We developed a tool that helps us and the Community Management department to administrate a Massive Multiplayer Online Game. We just call it Admintool. A tool that allows us read/write access to the game database. This is required, because not everyone follows the rules of your game. There are abusive ingame messages, players with multi accounts or bots. The evil is everywhere out there. You may think: <em>But I have phpMyAdmin installed on the game server. This way I&#8217;m able to access every part of the game database.</em></p>
<p>Of course you can. But it&#8217;s not you who does the Community Management. It&#8217;s to easy to do harm to your database using direct database access especially for people without technical skills. A good Admintool let the users see what ther&#8217;re supposed to see and let them only do changes to things that does not have any impact on your game mechanics.</p>
<p>But this is not the only reason why an Admintool is a must have. Just imagine you want to ban a player from your game. It&#8217;s much easier to fill out a form with a reason and ban duration than manually do all the logic behind this. If changes are only possible through the Admintool it&#8217;s much easier to find abusive behaviour from the Admintool users too. You just have to log every change on the game database automatically.</p>
<p>Last but not least: Tracking. In a MMOG you should track nearly everything. You should track when a player register his account and which IP he used and you should track when a player spents money in your game. Of course you don&#8217;t require an Admintool to do the tracking. But you can use the Admintool to show the results of the tracking. Statistics and graphs that tell you how well your last marketing campaign worked or which is the most important feature in your game.</p>
<p>I hope I have convinced you to use an admintool for MMOG Administration. In the upcoming posts I will tell you about the features our Admintool has and how they are implemented. Next time I will show how our Admintool is able to manage dozens of game instances with only one Admintool.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1357&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F09%2Ftools-for-mmog-administration%2F&amp;title=Tools%20for%20MMOG%20Administration" id="wpa2a_4">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/09/tools-for-mmog-administration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InnoDB the &#8220;case-sensitive monster&#8221;</title>
		<link>http://blog.rough-sea.com/2010/06/innodb-the-case-sensitive-monster/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=innodb-the-case-sensitive-monster</link>
		<comments>http://blog.rough-sea.com/2010/06/innodb-the-case-sensitive-monster/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:51:35 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[lower case]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[upper case]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1191</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Finnodb-the-case-sensitive-monster%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Finnodb-the-case-sensitive-monster%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hello,</p> <p>this posting is about InnoDB&#8217;s limitation of lower / upper cases and the resulting problems of InnoDB database migrations to different operating systems.</p> <p>THE TASK:</p> <p>Import an InnoDB database from Mac OS  MySQL  5.x to Linux MySQL 5.x (in our case Rhel 5 ).</p> <p>No big deal, I &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/06/innodb-the-case-sensitive-monster/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Finnodb-the-case-sensitive-monster%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Finnodb-the-case-sensitive-monster%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><strong>Hello,</strong></p>
<p>this posting is about InnoDB&#8217;s limitation of lower / upper cases and the resulting problems of<br />
InnoDB database migrations to different operating systems.</p>
<p><strong>THE TASK:</strong></p>
<p>Import an InnoDB database from Mac OS  MySQL  5.x to Linux MySQL 5.x (in our case Rhel 5 ).</p>
<p>No big deal, I thought.</p>
<p>Made a mysql dump and imported the dump to Linux.   5 minutes work, just the way  admins love it ! <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>THE CHALLENGE:</strong></p>
<p>Imported the dump. I am done! That&#8217;s what I thought. Just let&#8217;s check the app that accesses the freshly imported DB.</p>
<p>Running the app brought me exceptions.  Some tables couldn&#8217;t be found&#8230; URGH! Checked the tables&#8230; everything was fine. The dump was fine&#8230; the tables were present. WTF!!!!!</p>
<p><strong>THE SOLUTION:</strong></p>
<p>After 10 hours of pain, we found the solution.</p>
<p>MySQL and especially the storage engine InnoDB depends on the case sensitivity of the operating system. Windows and Mac OS (by default) are not case-sensitive.  So if you are importing a Mac or Win DB-dump to a case-sensitive operating system (like Linux), the DB will be handled case sensitively, although the dump is not a case-sensitive one. I think this problem should be fixed.  I know fixing this problem is nearly impossible because the OS has to be capable of doing this. But giving some sort of warning while importing a non-case-sensitive DB to a case-sensitive DB-Server&#8230; that can&#8217;t be so difficult !</p>
<p>How to fix our specific problem:</p>
<p>Add the following line to your MySQL Server Config:</p>
<p><em><code>lower_case_table_names=1</code></em></p>
<p>By default Windows MySQL uses <em><code>&lt;em&gt;lower_case_table_names=0 a&lt;/em&gt;nd MacOS MySQL </code></em><em><em><code>lower_case_table_names=2</code></em></em></p>
<p><em> </em>The <a title="MySQL documentaion" href="http://dev.mysql.com/doc/refman/5.1/de/name-case-sensitivity.html">MySQL documentation</a> advises setting<code> &lt;em&gt;lower_case_table_names=1&lt;/em&gt; for InnoDB. For more information, please read the &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/de/name-case-sensitivity.html&quot;&gt;MySQL documentation.&lt;/a&gt;</code></p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1191&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Finnodb-the-case-sensitive-monster%2F&amp;title=InnoDB%20the%20%26%238220%3Bcase-sensitive%20monster%26%238221%3B" id="wpa2a_6">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/06/innodb-the-case-sensitive-monster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Effortless Text Localization</title>
		<link>http://blog.rough-sea.com/2009/09/effortless-text-localization/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=effortless-text-localization</link>
		<comments>http://blog.rough-sea.com/2009/09/effortless-text-localization/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 14:32:24 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[automatization]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[R&D]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1105</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Automatization of repeated work is one of the keys to productive development. Another is abstraction of common problems to allow concentration on project specific work. Localization is one of the problems you have in nearly every project, especially in iPhone projects. The iPhone SDK brings interesting solutions &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/09/effortless-text-localization/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Automatization of repeated work is one of the keys to productive development. Another is abstraction of common problems to allow concentration on project specific work. Localization is one of the problems you have in nearly every project, especially in iPhone projects. The iPhone SDK brings interesting solutions that abstract many parts of the localization process.</p>
<p>The tool <strong>ibtool</strong>, for example, extracts strings from an interface automatically. The strings are placed in a .strings file, a textfile with key/value pairs. To localize an interface, you have to translate .strings and merge the strings back into the interface again. Because you have individual interfaces for every localization, it&#8217;s possible to adjust widgets individually for each one.</p>
<p><strong>genstrings</strong> is another tool inside the iPhone SDK. It extracts textIDs from the source code and write them into a .strings file. You may ask how  the tool knows which texts need localization and which do not. The solution is the macro NSLocalizedString, which will be replaced by a .strings file lookup method by the preprocessor, but also searched for by the genstrings tool to create the files.</p>
<p>Both tools help you to create a localized application without paying much attention to localization itself. But you cannot expect the localization department to search for .strings files inside your project and create localized versions of them. Of course this would be possible, but not very convenient, because you have to migrate the translated texts back into the interfaces using ibtool. Another reason for us at Rough Sea is that we use a localization interface from our publisher. This interface is well known to the localization department and the content is placed in a centralized database on a server.</p>
<p>So we have the great tools from Apple that help us to separate texts from the project and we have the great tool from our publisher that handles the whole translation and reviewing process. Now we need something to tie those tools together, because we do not want to insert new texts from the .strings file into the publisher&#8217;s localization tool manually or vice versa. This glue tool has to execute the Apple tools, extract the texts from the .strings files and insert them into the publisher&#8217;s loca tool. On the other hand, it has to check for new localized texts from the publisher&#8217;s loca tool, build the required .strings files from the results and merge them back into the interfaces. Sounds quite easy, but of course there are some obstacles to get there. You have to handle other things, like the deletion of a text entry or changes to an already translated interface. So you have to know what has changed since the last update and stuff like that.</p>
<p>It turns out that you only have to integrate this glue tool into the build process of your build server. The tool will update the localization database whenever the code or the interface changes and it will update the localized versions when the database changes. As a coder you only need to remember to use the text macro around your text id. You don&#8217;t have to add this text id in a file or anything else. As you commit your changes, the build server will do this for you. As an interface designer it&#8217;s the same: just create your interfaces in the primary language and commit it. After the localization department finishes localizing those texts, they will be inserted into the localized versions automatically. Of course you have to make adjustments to the interface if there are loca bugs like labels that are to small to hold the translated text.</p>
<p>As you can see those localization tools are a big black box for coders, interface designers and translators. The coders only have to write code, the interface designers design interfaces and the translators translate texts. At the end there will be a localized product.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1105&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&amp;title=Effortless%20Text%20Localization" id="wpa2a_8">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/09/effortless-text-localization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure your Webserver (part 2- A)</title>
		<link>http://blog.rough-sea.com/2009/07/secure-your-webserver-part-2-a/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=secure-your-webserver-part-2-a</link>
		<comments>http://blog.rough-sea.com/2009/07/secure-your-webserver-part-2-a/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 08:12:59 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[Web security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Userrights]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=512</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F07%2Fsecure-your-webserver-part-2-a%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F07%2Fsecure-your-webserver-part-2-a%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hello everybody,</p> <p>Finally you are able to read Part 2 of &#8220;Secure your Webserver&#8221;. Part 2 will be about Linux, Webserver and the other important services.</p> <p>As I mentioned in Part 1, I will not write about Windows, MacOS or  other operating systems, because the most common &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/07/secure-your-webserver-part-2-a/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F07%2Fsecure-your-webserver-part-2-a%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F07%2Fsecure-your-webserver-part-2-a%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hello everybody,</p>
<p>Finally you are able to read Part 2 of &#8220;Secure your Webserver&#8221;. Part 2 will be about Linux, Webserver and the other important services.</p>
<p>As I mentioned in Part 1, I will not write about Windows, MacOS or  other operating systems, because the most common one for a webserver  is Unix / Linux. Part 2 will have a part A and B. Today I am going to write about distributions,  user managament, user rights, secure shell and their enormous importance for security.</p>
<p>Before you start, choose the right distribution of Linux for your aims.  There are a lot of Linux versions (distributions) on the market. Most of them are free or have a free community edition. The most common free distributions are CentOS, Debian, Fedora, Gentoo, OpenSuse, Mandriva and Ubuntu. Of course there are also commercial destributions like Red Hat Linux Enterprises (RHEL) or Suse Linux Enterprises.</p>
<p>In general all these distributions are fine for a webserver. Their differences are minor and more a personal choice than a real technical question. A NEWBIE should maybe use OpenSUSE, Ubuntu or Fedora, as the support of the community seems to be bigger for them. Commercial products are usually superior to free distributions in their support system. They grant better support via phone, etc.</p>
<p>After you have chosen the right distrubtion for your purpose and installed it on your server machine, it is time to think about security.</p>
<p>1. User-Management and Shell-Access. (Secure Shell Daemon)</p>
<p>Linux security is mostly based on user rights. User rights are essential to the security concept of Unix and Linux systems. Usually all distributions are very strict and separate services (daemons), users, administrators, essential services like a webserver, MTA &amp; MDA (Mail Transfer Agent &amp; Mail Delivery Agent) into different groups and users.</p>
<p>All these groups and users have different write and read accesses. Usually groups are created to give a bunch of users the same rights. Therefore groups can make your administrator&#8217;s life far easier.</p>
<p>The most important &#8220;user&#8221; is called root. Root is the highest ranked user on a system. The &#8220;root user&#8221; has full read and write access. In the Windows world it would be the &#8220;Administrator&#8221;.  This is the reason why it is not smart to use the root user in your everyday work. The root user should only be used for system critical and important parts. In all other cases it is wise to use a &#8220;normal&#8221; user, which you have created.<br />
It is also possible to run root commands via your user account. Important commands for this purpose are &#8220;sudo&#8221; and &#8220;su&#8221;. Sudo runs a command line with a special user. The command su makes it possible to log in as another user via your own user shell. Of course you need the right password of the user to perform these actions.</p>
<p><a rel="attachment wp-att-926" href="http://blog.rough-sea.com/2009/07/secure-your-webserver-part-2-a/x11_ssh_tunnelling/"><img class="alignleft size-thumbnail wp-image-926" title="X11_ssh_tunnelling" src="http://blog.rough-sea.com/wp-content/uploads/2009/07/X11_ssh_tunnelling-150x150.png" alt="X11_ssh_tunnelling" width="275" height="275" /></a>It is common for Linux to allow remote login via secure shell (SSH), especially if your webserver is not reachable for you in person, e.g. a dedicated server in a data centre of your webhost. All connections via SSH are encrypted.  It is nearly impossible to decrypt the data via your client and your server (Maybe the NSA or the CIA are able to decrypt this &#8211; who knows?). You should take care to choose the ssh version 2 protocol. This is safer, as recently some weaknesses were discovered in protocoll version 1. A common SSH-client for Windows is <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">&#8220;Putty&#8221;</a>.</p>
<p>It is possible to permit or forbid login via SSH for specific users or user groups. Maybe it is not wise to allow direct root login via SSH. It is also possible to login via a certificate. You create an public and private key. Upload the public part to your server (usually: /homedir/.ssh/authorized) and log in without password. Of course it is wiser to secure your private key with a passphrase. In this case you need to type the phassphrase to decrypt the private key to log in.</p>
<p>Next part will be about firewalls, virusscanners and how to avoid spam problems.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=512&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F07%2Fsecure-your-webserver-part-2-a%2F&amp;title=Secure%20your%20Webserver%20%28part%202-%20A%29" id="wpa2a_10">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/07/secure-your-webserver-part-2-a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure your Webserver (part 1)</title>
		<link>http://blog.rough-sea.com/2009/01/secure-your-webserver-part-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=secure-your-webserver-part-1</link>
		<comments>http://blog.rough-sea.com/2009/01/secure-your-webserver-part-1/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 10:44:37 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[server management]]></category>
		<category><![CDATA[server security]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=358</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fsecure-your-webserver-part-1%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fsecure-your-webserver-part-1%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hello ,</p> <p>today I am going to write about server security. I decided to split the post into 3 parts. The future parts will be published during the next weeks.</p> <p>Part 1 deals with server security in general and the conception of your personal strategy to avoid &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/01/secure-your-webserver-part-1/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fsecure-your-webserver-part-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fsecure-your-webserver-part-1%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hello ,</p>
<p>today I am going to write about server security. I decided to split the post into 3 parts. The future parts will be published during the next weeks.</p>
<p>Part 1 deals with server security in general and the conception of your personal strategy to avoid security problems.</p>
<p>Security has become more and more important in the last 10 years , as the numbers of internet users and server services are growing year by year. Especially the web 2.0 revolution brings new security problems. Nowadays users with a bad understanding of the technical background are setting up blogs, forums, websites and other services.</p>
<p>Therefore I wrote a small introduction for those newcomers!</p>
<p>In general there are 3 main areas you have to keep an eye on.</p>
<p><strong>1. Network infrastructure:</strong></p>
<p>I will not deal with this, because usually only professionals can influence the network infrastructure or your provider does this for you with routing , firewalls and filters.</p>
<p><strong>2. Operating System:</strong></p>
<p>A big part of security solutions and problems rely on the chosen operating system. All common operating systems (e.g. Linux, Windows, Unix) have advantages and disadvantages. If you expect me to write down which is the best one, I WILL NOT ! Nobody can tell you. It depends on so many factors like the services you want to run, your personal knownledge about the operating system, etc&#8230; . Maybe you do not even have the chance to choose your OS as your provider pre installed already one for you.</p>
<p>Unfortunately, I will have to focus on one operating system in the second part of my post. In my point of view the most common one is Linux. Although I am aware of the fact that other operating systems are great. So do not bug me with comments like: &#8220;You hate Windows ! Why not using FreeBSD ?  Solaris is the best one !&#8221; <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>3. Applications &amp; Daemons</strong></p>
<p>Daemons or services are the core of your security solutions and also the source of most security issues. Before offering several services, e.g. a Web-Server , Ftp-Server or an Email-Server, think about which services you really need and if it is really smart to offer all services on a single machine. Every application can be corrupted or compromised. Avoiding services and daemons is always a clever strategy to minimize the risks. Moreover security tools hinder security issues as well, for example virus scanner, firewall, spam filter, a handy user rights management, etc&#8230; .</p>
<p>Please think about all these facts <strong>before</strong> you run a public server.</p>
<p>The second part will be about the practical parts of server management to build a secure server. We are going to leave the boring theory, promised!</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=358&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fsecure-your-webserver-part-1%2F&amp;title=Secure%20your%20Webserver%20%28part%201%29" id="wpa2a_12">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/01/secure-your-webserver-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Use Mumble as a virtual conference room</title>
		<link>http://blog.rough-sea.com/2008/12/use-mumble-as-a-virtual-conference-room/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=use-mumble-as-a-virtual-conference-room</link>
		<comments>http://blog.rough-sea.com/2008/12/use-mumble-as-a-virtual-conference-room/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 16:23:04 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[conference room]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[mumble]]></category>
		<category><![CDATA[murmur]]></category>
		<category><![CDATA[voice over ip]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=236</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F12%2Fuse-mumble-as-a-virtual-conference-room%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F12%2Fuse-mumble-as-a-virtual-conference-room%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hello folks,</p> <p>I am sure you know that communication is one key for successful development or project work. Companies usually have a conference room, or you meet somebody in the hall or in the elevator that you need to talk to. But nowadays people work from home &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2008/12/use-mumble-as-a-virtual-conference-room/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F12%2Fuse-mumble-as-a-virtual-conference-room%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F12%2Fuse-mumble-as-a-virtual-conference-room%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hello folks,</p>
<p>I am sure you know that communication is one key for successful development or project work. Companies usually have a conference room, or you meet somebody in the hall or in the elevator that you need to talk to. But nowadays people work from home in different cities, countries or even continents. Therefore you need a virtual place to meet.</p>
<p>That&#8217;s why I am going to write a little about Murmur / Mumble for those who haven&#8217;t heard about it. Mumble is a voice over IP service, like Battlecom, Teamspeak or Ventrillo.  The advantages of Mumble are an excellent quality of speech,  database support, server &amp; client support for all major operating systems, text chat, and encrypted traffic &#8212; all for free!</p>
<p>First of all, we should differentiate between the server (Murmur) and the client (Mumble). Murmur defines and handles all Mumble requests: a typical client / server system.<br />
But enough of this chitchat. We have to set up a Murmur!</p>
<p><strong>Installation of Murmur:</strong></p>
<p>Therefore we should start with installing Murmur. Installing Murmur on Windows shouldn&#8217;t be a problem, but what about Linux? All common distributions offer a binary packet of Murmur that you can install via your package management tool like yast, yum install &#8220;packetname&#8221; , apt-get install &#8220;packetname&#8221;, etc.</p>
<p>I am going to describe another way and will use the<br />
&#8220;<strong>Static Linux Server stable packet</strong>&#8221; which you can download <a href="http://mumble.sourceforge.net.">here. </a></p>
<p>Download murmur-static_x86-X.XX.tar.bz2.</p>
<p>Now untar the compressed file.</p>
<p><code> tar xfvz murmur-static_x86-X.XX.tar.bz2 </code></p>
<p>Go to the directory which has been untared or move it for example to /home/murmur. Of course you can also run Murmur in the current directory.</p>
<p>Now it is time to decide whether to use SQLite or a &#8220;real&#8221; database like MySQL. SQlite has the advantage of running with Murmur right out of the box. The disadvantage is command-line-based user management, like adding new users or administrators. With MySQL you could use phpMyadmin (if installed) to do the management, so future administrators wouldn&#8217;t need shell access to add new users.</p>
<p>So if you want to use SQLite, ignore the MySQL part of the murmur.ini</p>
<p>Create a database or use an existing database of MySQL!</p>
<p><strong>Edit the murmur.ini with MySQL support: </strong><br />
<pre><code>
database=putyourdatabasenameinhere</code></pre></p>
<p>dbDriver=QMYSQL<br />
dbUsername=database username<br />
dbPassword=Ilove-securePasswords<br />
dbHost=localhost #localhost or the ip of the remote database<br />
dbPort=3306 #usually the default port of mysql is 3306<br />
dbPrefix=murmur_ #prefix name of your tables within the database</p>
<p>### <strong>SQlite and MySQL has to edit the lines below </strong> ###</p>
<p>host= the ip or domain # if you want to bind the murmur server to a default address</p>
<p>port=64738 #port you use for your murmur server</p>
<p>serverpassword=NicePassword # password for non-registered users.  Keep it empty for no password login</p>
<p>Save the murmur.ini and exit it.</p>
<p>Now set up a superuser with the following command:</p>
<p><code>./murmur.x86 -ini murmur.ini -supw </code></p>
<p>Under Windows, of course, use cmd and type murmur.exe instead of murmur.x86</p>
<p>Now the superuser is saved in the database.</p>
<p>That&#8217;s it!</p>
<p>Murmur is running. Now you can login as &#8220;superuser&#8221; with your Mumble client and configure the rooms with a helpful GUI. Click on &#8220;channel&#8221; and then &#8220;add&#8221;. Now you can add a channel/room. This shouldn&#8217;t be a problem.</p>
<p>Enjoy your virtual conference room!</p>
<p>Documentation is available at <a href="http://mumble.sourceforge.net"> mumble.sourceforge.net</a></p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=236&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F12%2Fuse-mumble-as-a-virtual-conference-room%2F&amp;title=Use%20Mumble%20as%20a%20virtual%20conference%20room" id="wpa2a_14">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2008/12/use-mumble-as-a-virtual-conference-room/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why do I feel like a Swiss army knife?</title>
		<link>http://blog.rough-sea.com/2008/11/swiss-army-knifes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=swiss-army-knifes</link>
		<comments>http://blog.rough-sea.com/2008/11/swiss-army-knifes/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 16:19:53 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[Swiss]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=209</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F11%2Fswiss-army-knifes%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F11%2Fswiss-army-knifes%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hi, let me introduce myself with my first blog post . My name is Ole and my job could be briefly described as a server administrator – and yes, I feel like a Swiss army knife. Oh, please do not misunderstand me. This feeling isn`t frustrating or &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2008/11/swiss-army-knifes/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F11%2Fswiss-army-knifes%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F11%2Fswiss-army-knifes%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hi, let me introduce myself with my first blog post . My name is Ole and my job could be briefly described as a server administrator – and yes, I feel like a Swiss army knife. Oh, please do not misunderstand me. This feeling isn`t frustrating or negative. I like my job. You need a wide range of knowledge to do this job, as admins work with systems and not only with few applications or &#8220;just&#8221; software.</p>
<p>My job is to deal with the hardware, software, server services, system security and especially user`s wishes.<br />
(Hey, just in a professional way, of course !) Anyway, sometimes I experienced that administrators ignore users and their needs. Although their job is to serve the users,  but I guess, this topic would be worth of another blog post.</p>
<p>So perhaps you are wondering: &#8220;Why does he like to be the swiss army knife of Rough Sea Games and work with game developers ? &#8221; Short answer: &#8220;I LIKE GAMES  and I LIKE COMPUTER SYSTEMS .&#8221;  A perfect fusion of my personal interests. This is great !</p>
<p>Anyway, my time is running short, so I promise to keep in touch with you and write new posts about my work. In the upcoming posts I will write down some interesting hints about server administration and maybe help other Swiss army knifes to keep their systems alive with those blog posts. Feel free to post some comments.</p>
<p>PS: WE ROCK THE BOAT!</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=209&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2008%2F11%2Fswiss-army-knifes%2F&amp;title=Why%20do%20I%20feel%20like%20a%20Swiss%20army%20knife%3F" id="wpa2a_16">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2008/11/swiss-army-knifes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

