<?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>Advanced Programming Stories &#187; sudo</title>
	<atom:link href="http://developstories.gr/tag/sudo/feed/" rel="self" type="application/rss+xml" />
	<link>http://developstories.gr</link>
	<description>advanced web development techniques &#38; reverse engineering stories</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:57:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>php και sudo</title>
		<link>http://developstories.gr/php/php-%ce%ba%ce%b1%ce%b9-sudo/</link>
		<comments>http://developstories.gr/php/php-%ce%ba%ce%b1%ce%b9-sudo/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 11:34:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[sudo]]></category>

		<guid isPermaLink="false">http://developstories.gr/?p=80</guid>
		<description><![CDATA[Ένα απο τα ζητήματα που προκύπτουν στο advanced web development είναι η αλληλεπίδραση με το λειτουργικό σύστημα. Για παράδειγμα θέλουμε να τρέξουμε μία εντολή και να δούμε το αποτέλεσμά της. Αυτό γίνεται εύκολα με την shell_exec() ή την exec() ωστόσο απο μόνη της δέν λύνει όλα τα προβλήματα.
Ο apache αλλα και κάθε web server τρέχει [...]]]></description>
			<content:encoded><![CDATA[<p>Ένα απο τα ζητήματα που προκύπτουν στο advanced web development είναι η αλληλεπίδραση με το λειτουργικό σύστημα. Για παράδειγμα θέλουμε να τρέξουμε μία εντολή και να δούμε το αποτέλεσμά της. Αυτό γίνεται εύκολα με την shell_exec() ή την exec() ωστόσο απο μόνη της δέν λύνει όλα τα προβλήματα.</p>
<p>Ο apache αλλα και κάθε web server τρέχει με ελάχιστα δικαιώματα που συνήθως του επιτρέπουν να κάνει μόνο βασικά πράγματα. Απο άποψη ασφάλειας αυτό είναι θεμιτό και σε καμία περίπτωση δέν πρέπει να τρέχει με δικαιώματα root γιατί εκεί ένα απλό bug ασφαλείας μπορεί να οδηγήσει σε πλήρη καταστροφή. Την λύση σ&#8217;αυτό το πρόβλημα την δίνει το εργαλείο sudo.</p>
<h3>Τί είναι το sudo</h3>
<p>Το <a href="http://www.courtesan.com/sudo/">sudo</a> είναι ένα εργαλείο για *nix συστήματα (unix,linux,κτλ) το οποίο επιτρέπει να τρέξουμε κάποια εντολή με δικαιώματα root. Έτσι αντί να κάνουμε vurnerable όλο τον web server μπορούμε όποτε χρειάζεται να τρέχουμε μέσω sudo τις εντολές που θέλουμε.</p>
<h3>Sudo configuration</h3>
<p>Καταρχήν πρέπει να κάνουμε ένα απλό configuration στο sudo ωστε να δέχεται εντολές απο τον web server. Για την ακρίβεια πρέπει να δώσουμε δικαιώματα στον χρήστη που τρέχει τον apache που συνήθως λέγεται apache. Για σιγουριά δείτε στο httpd.conf το directive User.</p>
<p>Για να κάνουμε το sudo να δέχεται εντολές απο τον web server πάμε στο αρχείο /etc/sudoers και προσθέτουμε την παρακάτω γραμμή:</p>
<blockquote><p><code><strong>apache ALL=(ALL) ALL</strong></code></p></blockquote>
<p>Αν ο χρήστης δέν ονομάζεται apache αντικαταστήστε το όνομα apache στο παραπάνω. Για να μήν υπάρχουν προβλήματα ασφαλείας θέτουμε και ένα password στον χρήστη apache. Αυτό γίνεται απο κονσόλα με την παρακάτω εντολή:</p>
<blockquote><p><strong><code>passwd apache</code></strong></p></blockquote>
<p>Αν δέν ακολουθήσετε το τελευταίο βήμα, κάθε php script στον server θα μπορεί να τρέξει εντολές με δικαιώματα root και αυτό μπορεί να οδηγήσει σε σοβαρά προβλήματα ασφαλείας.</p>
<h3>Τρέχοντας sudo με php</h3>
<p>Αφού τελειώσουμε με τα configuration το υπόλοιπο είναι πολύ εύκολο αρκεί να χρησιμοποιήσετε την παρακάτω <a href="http://developstories.gr/cat/php/">php</a> function που δημιούργησα για αυτό τον σκοπό:</p>
<pre class="brush: php;">

define(&quot;SUDO&quot;,&quot;/usr/bin/sudo&quot;);
define(&quot;SUDO_PASS&quot;,&quot;pass&quot;);

// SUDO START
exec('echo '.SUDO_PASS.'|'.SUDO.' -S -v 2&gt;&amp;1');

// SUDO EXECUTE
echo exec(SUDO . &quot; ls /root 2&gt;&amp;1&quot;);

// SUDO STOP
exec(SUDO.&quot; -k 2&gt;&amp;1&quot;);
</pre>
<p>Προσέξτε τα δύο define στην αρχή. Το πρώτο είναι το path για την sudo και λογικά δέν χρειάζεται να το πειράξετε. Το δεύτερο όρισμα (SUDO_PASS) πρέπει να περιέχει το password του apache.</p>
]]></content:encoded>
			<wfw:commentRss>http://developstories.gr/php/php-%ce%ba%ce%b1%ce%b9-sudo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
