<?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>SpaLinux.com - สปาลีนุกซ์ &#187; Web Server</title>
	<atom:link href="http://spalinux.com/category/web-server/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>เพื่อชีวิตที่ผ่อนคลายของคนใช้ลีนุกซ์</description>
	<lastBuildDate>Sat, 12 May 2012 10:38:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>แก้ปัญหา WordPress  อัพโหลดไฟล์ไม่ได้</title>
		<link>http://spalinux.com/2012/05/fix-wordpress-cannot-upload-file</link>
		<comments>http://spalinux.com/2012/05/fix-wordpress-cannot-upload-file#comments</comments>
		<pubDate>Sat, 12 May 2012 10:35:27 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[upload file error]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2359</guid>
		<description><![CDATA[หลังจาก ติดตั้ง WordPress บน CentOS 6 เรียบร้อยแล้ว หากเจอปัญหาสามารถโพสต์ข้อความได้ แต่ไม่สามารถอัพโหลด (upload) ไฟล์ เช่นรูป ได้ ตัวอย่างข้อความ error เมื่อ upload file &#8220;Picture-01.jpg&#8221; has failed to upload due to an error Unable to create directory /var/www/html/wordpress/wp-content/uploads/2012/05. Is its parent directory writable by the server? ในที่นี้จะแสดงวิธีการแก้ไขปัญหา สาเหตเป็นเพราะ wordpress ไม่สามารถสร้างไฟล์หรือไดเร็คทอรี เพื่อเก็บไฟล์ที่อัพโหลดได้ โดยดีฟอลต์ wordpress จะสร้างไฟล์ที่อัพโหลดไว้ภายใต้ไดเร็คทอรี wp-content/uploads เทียบกับไดเร็คทอรีที่ติดตั้ง (เช่น /var/www/html/wordpress/) โดยจะแยกย่อยเป็นปี คศ. และเลขเดือนอีกที [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจาก <a title="View Details: ติดตั้ง WordPress บน CentOS 6" href="http://spalinux.com/2012/05/install-wordpress-on-centos-6" rel="bookmark">ติดตั้ง WordPress บน CentOS 6</a> เรียบร้อยแล้ว หากเจอปัญหาสามารถโพสต์ข้อความได้ แต่ไม่สามารถอัพโหลด (upload) ไฟล์ เช่นรูป ได้</p>
<p>ตัวอย่างข้อความ error เมื่อ upload file</p>
<p><span style="color: #ff0000;">&#8220;Picture-01.jpg&#8221; has failed to upload due to an error</span><br />
<span style="color: #ff0000;">Unable to create directory /var/www/html/wordpress/wp-content/uploads/2012/05. Is its parent directory writable by the server?</span></p>
<p>ในที่นี้จะแสดงวิธีการแก้ไขปัญหา</p>
<p><span id="more-2359"></span></p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w31-wordpress-fail-to-upload-due-to-error-unable-to-create-directory.png"><img class="alignnone size-full wp-image-2360" title="w31-wordpress-fail-to-upload-due-to-error-unable-to-create-directory" src="http://spalinux.com/wp-content/uploads/2012/05/w31-wordpress-fail-to-upload-due-to-error-unable-to-create-directory.png" alt="" width="834" height="600" /></a></p>
<p>สาเหตเป็นเพราะ wordpress ไม่สามารถสร้างไฟล์หรือไดเร็คทอรี เพื่อเก็บไฟล์ที่อัพโหลดได้</p>
<p>โดยดีฟอลต์ wordpress จะสร้างไฟล์ที่อัพโหลดไว้ภายใต้ไดเร็คทอรี wp-content/uploads เทียบกับไดเร็คทอรีที่ติดตั้ง (เช่น /var/www/html/wordpress/) โดยจะแยกย่อยเป็นปี คศ. และเลขเดือนอีกที</p>
<p>วิธีการแก้ไขปัญหา ต้องสร้างไดเร็คทอรี uploads ขึ้นมา แล้วเปลี่ยนสิทธิ (permission) ให้ wordpress สามารถเขียนได้ หากใช้ Apache เป็นเว็บเซิร์ฟเวอร์รันด้วยชื่อผู้ใช้ apache การเปลี่ยนสิทธิก็คือการอนุญาตให้ apache สามารถเขียน (write) ไดเร็คทอรี uploads ได้นั่นเอง</p>
<p>โดยดีฟอลต์จากการติดตั้ง wordpress จะไม่มีไดเร็คทอรี uploads</p>
<pre>[root@cent6 ~]# <strong>cd /var/www/html/wordpress/wp-content/</strong>
[root@cent6 wp-content]# <strong>ls -l</strong>
total 12
-rw-r--r--. 1 root root   30 May  5  2007 index.php
drwxr-xr-x. 3 root root 4096 Apr 20 21:54 plugins
drwxr-xr-x. 4 root root 4096 Apr 20 21:54 themes</pre>
<p>ใช้คำสั่ง mkdir, chown, chmod สร้างไดเร็คทอรี uploads และเปลี่ยนสิทธิ</p>
<pre>[root@cent6 wp-content]# <strong>mkdir uploads</strong>
[root@cent6 wp-content]# <strong>chown apache uploads/</strong>
[root@cent6 wp-content]# <strong>chmod 700 uploads/</strong>
[root@cent6 wp-content]# <strong>ls -l</strong>
total 16
-rw-r--r--. 1 root   root   30 May  5  2007 index.php
drwxr-xr-x. 3 root   root 4096 Apr 20 21:54 plugins
drwxr-xr-x. 4 root   root 4096 Apr 20 21:54 themes
drwx------. 2 apache root 4096 May 12 16:58 uploads</pre>
<p>ส่วนไดเร็คทอรีย่อย ปีคศ. และเลขเดือน โปรแกรม wordpress จะสร้างขึ้นมาเองอัตโนมัติ</p>
<p>ทดลองโพสต์แล้วอัพโหลดรูปอีกครั้ง</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w32-upload-success.png"><img class="alignnone size-full wp-image-2361" title="w32-upload-success" src="http://spalinux.com/wp-content/uploads/2012/05/w32-upload-success.png" alt="" width="834" height="651" /></a><br />
ลองดูไฟล์และไดเร็คทอรีที่ถูกสร้างใน uploads</p>
<pre>[root@cent6 wp-content]# <strong>ls -lR uploads/</strong>
uploads/:
total 4
drwx------. 3 apache apache 4096 May 12 17:02 2012

uploads/2012:
total 4
drwx------. 2 apache apache 4096 May 12 17:02 05

uploads/2012/05:
total 36
-rw-------. 1 apache apache 33625 May 12 17:02 Picture-01.jpg</pre>
<p>&nbsp;</p>
<p>หมายเหตุ ออปชั่น &#8216;-R&#8217; ของคำสั่ง ls เป็นการแสดงข้อมูลไฟล์และไดเร็คทอรีย่อยทั้งหมด</p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a title="View Details: ติดตั้ง WordPress บน CentOS 6" href="http://spalinux.com/2012/05/install-wordpress-on-centos-6" rel="bookmark">ติดตั้ง WordPress บน CentOS 6</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/05/fix-wordpress-cannot-upload-file/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ติดตั้ง WordPress บน CentOS 6</title>
		<link>http://spalinux.com/2012/05/install-wordpress-on-centos-6</link>
		<comments>http://spalinux.com/2012/05/install-wordpress-on-centos-6#comments</comments>
		<pubDate>Sat, 12 May 2012 09:37:12 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2342</guid>
		<description><![CDATA[WordPress โปรแกรมทำเว็บไซต์ blog ที่สามารถนำมาใช้งานได้ฟรี เป็นที่นิยมเป็นอย่างมาก เนื่องจากข้อดีหลายอย่างเช่นการติดตั้งและคอนฟิกง่าย มีโปรแกรมเสริม (plugin) เพื่อช่วยเพิ่มประสิทธิภาพของเว็บไซต์ และที่สำคัญหน้าเว็บที่แสดงบนเว็บไซต์จะถูกจัดเรียบเรียงเพื่อให้ search engine เช่น Google สามารถเข้ามาทำ index แล้วค้นหาเนื้อหา (keyword) ในเว็บเราได้สะดวก ซึ่งจะมีผลต่อลำดับในผลลัพธ์การค้นหา WordPress พัฒนาด้วยภาษา PHP และใช้ MySQL เป็นฐานข้อมูล ติดตั้งได้ทั้งบน Linux, Unix, MAC OS และ Windows ในที่นี้จะแสดงวิธีการติดตั้ง WordPress บน CentOS 6 ตั้งแต่การดาวน์โหลดไฟล์ การสร้างฐานข้อมูล คอนฟิกผ่านหน้าเว็บ จนสามารถล็อกอินเข้าสู่หน้า admin ของ WordPress ได้ เครื่องที่ทดสอบ ติดตั้ง CentOS 6.2 แบบ &#8220;Minimal &#8211; Base System [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress โปรแกรมทำเว็บไซต์ blog ที่สามารถนำมาใช้งานได้ฟรี เป็นที่นิยมเป็นอย่างมาก เนื่องจากข้อดีหลายอย่างเช่นการติดตั้งและคอนฟิกง่าย มีโปรแกรมเสริม (plugin) เพื่อช่วยเพิ่มประสิทธิภาพของเว็บไซต์ และที่สำคัญหน้าเว็บที่แสดงบนเว็บไซต์จะถูกจัดเรียบเรียงเพื่อให้ search engine เช่น Google สามารถเข้ามาทำ index แล้วค้นหาเนื้อหา (keyword) ในเว็บเราได้สะดวก ซึ่งจะมีผลต่อลำดับในผลลัพธ์การค้นหา</p>
<p>WordPress พัฒนาด้วยภาษา PHP และใช้ MySQL เป็นฐานข้อมูล ติดตั้งได้ทั้งบน Linux, Unix, MAC OS และ Windows</p>
<p>ในที่นี้จะแสดงวิธีการติดตั้ง WordPress บน CentOS 6 ตั้งแต่การดาวน์โหลดไฟล์ การสร้างฐานข้อมูล คอนฟิกผ่านหน้าเว็บ จนสามารถล็อกอินเข้าสู่หน้า admin ของ WordPress ได้</p>
<p><span id="more-2342"></span></p>
<h4>เครื่องที่ทดสอบ</h4>
<ul>
<li>ติดตั้ง CentOS 6.2 แบบ &#8220;Minimal &#8211; Base System &#8211; Base&#8221;  (<a title="View Details: ติดตั้ง CentOS 6.2 : เลือกชุดซอฟต์แวร์ที่จะลง" href="http://spalinux.com/2012/03/centos-6-2-installation-select-a-set-of-software-to-install" rel="bookmark">ติดตั้ง CentOS 6.2 : เลือกชุดซอฟต์แวร์ที่จะลง</a>)</li>
<li>IP Address ของเซิร์ฟเวอร์ 192.168.5.62</li>
<li><a title="View Details: ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache" href="http://spalinux.com/2012/04/install-apache-web-server" rel="bookmark">ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache</a></li>
<li><a title="View Details: ติดตั้งฐานข้อมูล MySQL" href="http://spalinux.com/2012/04/install-mysql-database" rel="bookmark">ติดตั้งฐานข้อมูล MySQL</a></li>
<li><a title="View Details: ติดตั้งโมดูล PHP เพิ่มเติม บน CentOS 6" href="http://spalinux.com/2012/04/install-more-php-module-on-centos-6" rel="bookmark">ติดตั้งโมดูล PHP เพิ่มเติม บน CentOS 6</a></li>
</ul>
<p>&nbsp;</p>
<p>สรุปไฟล์ rpm จากแผ่นดีวีดีที่ต้องติดตั้งเพิ่ม หลังจากลง CentOS 6.2 แบบ Minimal +Base</p>
<ul>
<li>apr-1.3.9-3.el6_1.2.x86_64.rpm</li>
<li>apr-util-1.3.9-3.el6_0.1.x86_64.rpm</li>
<li>apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm</li>
<li>mailcap-2.1.31-2.el6.noarch.rpm</li>
<li>httpd-tools-2.2.15-15.el6.centos.x86_64.rpm</li>
<li>httpd-2.2.15-15.el6.centos.x86_64.rpm</li>
<li>mysql-5.1.52-1.el6_0.1.x86_64.rpm</li>
<li>perl-DBI-1.609-4.el6.x86_64.rpm</li>
<li>perl-DBD-MySQL-4.013-3.el6.x86_64.rpm</li>
<li>mysql-server-5.1.52-1.el6_0.1.x86_64.rpm</li>
<li>php-5.3.3-3.el6_1.3.x86_64.rpm</li>
<li>php-cli-5.3.3-3.el6_1.3.x86_64.rpm</li>
<li>php-common-5.3.3-3.el6_1.3.x86_64.rpm</li>
<li>php-pdo-5.3.3-3.el6_1.3.x86_64.rpm</li>
<li>php-mysql-5.3.3-3.el6_1.3.x86_64.rpm</li>
</ul>
<p>&nbsp;</p>
<h4>ดาวน์โหลดโปรแกรม WordPress</h4>
<p>เข้าเว็บไซต์ wordpress.org เพื่อดาวน์โหลดโปรแกรม wordpress</p>
<p>คลิ้กที่เมนู Download หรือคลิ้กปุ่ม Download WordPress เพื่อเข้าสู่หน้าดาวน์โหลด</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w01-Download-WordPress.png"><img class="alignnone size-full wp-image-2343" title="w01-Download-WordPress" src="http://spalinux.com/wp-content/uploads/2012/05/w01-Download-WordPress.png" alt="" width="493" height="343" /></a></p>
<p>ล่าสุด ณ ตอนที่เขียนเป็นเวอร์ชั่น WordPress 3.3.2</p>
<p>ในหน้าดาวน์โหลด แนะนำให้คลิ้กที่ลิ้งค์ Download .tar.gz เพราะจะมีขนาดไฟล์เล็กกว่า .zip และใช้ติดตั้งได้เหมือนกัน</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w02-Download.WordPress.tar.gz.png"><img class="alignnone size-full wp-image-2344" title="w02-Download.WordPress.tar.gz" src="http://spalinux.com/wp-content/uploads/2012/05/w02-Download.WordPress.tar.gz.png" alt="" width="235" height="263" /></a><br />
ใช้โปรแกรมประเภท scp เพื่อถ่ายโอนไฟล์ไปยังเครื่องลีนุกซ์ที่จะติดตั้ง</p>
<p>หรือถ้าจะดาวน์โหลดบนคำสั่งลีนุกซ์เลย ก็สามารถทำได้โดยใช้โปรแกรม curl หรือ wget</p>
<p>ตัวอย่างเช่นใช้คำสั่ง curl เพื่อดาวน์โหลดโปรแกรม wordpress</p>
<pre>[root@cent6 ~]# <strong>curl -o wordpress-3.3.2.tar.gz 'http://wordpress.org/latest.tar.gz'</strong>
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 3792k    0 3792k    0     0  53721      0 --:--:--  0:01:12 --:--:-- 59257</pre>
<p>&nbsp;</p>
<p>ออปชั่น &#8216;<strong>-o</strong>&#8216; ระบุชื่อไฟล์ที่ต้องการเซฟ ส่วน http://wordpress.org/latest.tar.gz เป็น URL ที่ทาง wordpress สร้างไว้สำหรับให้ดาวน์โหลดโปรแกรมที่เป็นเวอร์ชั่นล่าสุด</p>
<p>ไฟล์ที่ได้</p>
<pre>[root@cent6 ~]# <strong>ls -l wordpress-3.3.2.tar.gz</strong>
-rw-r--r--. 1 root root 3883667 May 12 13:20 wordpress-3.3.2.tar.gz</pre>
<h4>ติดตั้งไฟล์ wordpress</h4>
<p>ใช้คำสั่ง tar แตก (extract) ไฟล์ที่ดาวน์โหลดมาในไดเร็คทอรี /var/www/html/</p>
<pre>[root@cent6 ~]# <strong>cd /var/www/html/</strong>
[root@cent6 html]# <strong>tar zxvf /root/wordpress-3.3.2.tar.gz</strong>
wordpress/
wordpress/license.txt
wordpress/wp-activate.php
wordpress/wp-pass.php
wordpress/wp-login.php
wordpress/readme.html
...
wordpress/wp-mail.php
wordpress/wp-config-sample.php
wordpress/wp-links-opml.php
wordpress/wp-comments-post.php
wordpress/wp-app.php
[root@cent6 html]#</pre>
<p>หลังการใช้คำสั่ง tar เพื่อแตกไฟล์ที่ดาวน์โหลดมา ทุกครั้งแนะนำให้แก้ไข owner และ group ของไฟล์ เพื่อป้องกัน owner หรือ group ไปตรงกับผู้ใช้ (user) ที่อยู่บนเครื่อง</p>
<pre>[root@cent6 html]# <strong>ls -l wordpress/</strong>
total 204
-rw-r--r--. 1 33 tape   397 May 26  2008 index.php
-rw-r--r--. 1 33 tape 16899 Jun  9  2011 license.txt
-rw-r--r--. 1 33 tape  9202 Apr 20 19:44 readme.html
-rw-r--r--. 1 33 tape  4268 Oct 20  2011 wp-activate.php
...</pre>
<p>ใช้คำสั่ง chown เพื่อแก้ไข owner และ group ให้เป็น root ทั้งหมด</p>
<p>หมายเหตุ หรือถ้าต้องการเพิ่มความปลอดภัยของระบบอีกขั้น แนะนำให้สร้าง user เพื่อเป็นเจ้าของไฟล์ที่ติดตั้งนี้อีกที แต่ในที่นี้ขอใช้ root เพื่อความง่ายต่อการนำเสนอ</p>
<p>ใช้คำสั่ง chown ออปชั่น &#8216;-R&#8217; เพื่อเปลี่ยน owner และ group ของทุกไฟล์ภายใต้ไดเร็คทอรีที่ระบุ</p>
<pre>[root@cent6 html]# <strong>chown -R root.root wordpress/</strong>

[root@cent6 html]# <strong>ls -l wordpress/</strong>
total 204
-rw-r--r--. 1 root root   397 May 26  2008 index.php
-rw-r--r--. 1 root root 16899 Jun  9  2011 license.txt
-rw-r--r--. 1 root root  9202 Apr 20 19:44 readme.html
-rw-r--r--. 1 root root  4268 Oct 20  2011 wp-activate.php
...</pre>
<h4>คอนฟิก wordpress ผ่านเว็บ</h4>
<p>ใช้ browser เข้าไปที่ http://192.168.5.62/wordpress/ เพื่อเริ่มคอนฟิก wordpress ผ่านเว็บ</p>
<p>หน้าแรกที่เจอ แสดงข้อความ &#8220;There doesn&#8217;t seem to be a wp-config.php file&#8221; คือไม่สามารถหาไฟล์ wp-config.php ซึ่งเป็นไฟล์คอนฟิกหลักของ  wordpress</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w11-wordpress-config.png"><img class="alignnone size-full wp-image-2345" title="w11-wordpress-config" src="http://spalinux.com/wp-content/uploads/2012/05/w11-wordpress-config.png" alt="" width="781" height="358" /></a><br />
กดปุ่ม [Create a Configuration File] เพื่อเริ่มสร้างคอนฟิกไฟล์ wp-config.php</p>
<p>&nbsp;</p>
<p>หน้าถัดมา แสดงข้อมูลคำอธิบายเกี่ยวกับฐานข้อมูล (database) ที่ wordpress ต้องใช้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w12-wordpress-need-information.png"><img class="alignnone size-full wp-image-2346" title="w12-wordpress-need-information" src="http://spalinux.com/wp-content/uploads/2012/05/w12-wordpress-need-information.png" alt="" width="775" height="510" /></a></p>
<p>ก่อนจะกดปุ่ม [Let's go!] เพื่อไปหน้าต่อไป ต้องสร้าง database และ GRANT สิทธิ ให้ wordpress ใช้เชื่อมต่อได้ก่อน</p>
<p>รันคำสั่ง mysql (หรือ phpmyadmin) เพื่อสร้าง database และ GRANT สิทธิให้ wordpress เชื่อมเข้าต่อฐานข้อมูล</p>
<pre>[root@cent6 html]# <strong>mysql -u root -p</strong>
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement

mysql&gt; <strong>CREATE DATABASE wordpress;</strong>
Query OK, 1 row affected (0.00 sec)

mysql&gt; <strong>GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';</strong>
Query OK, 0 rows affected (0.01 sec)</pre>
<p>&nbsp;</p>
<p>สร้างเสร็จเรียบร้อย กลับมาที่หน้าเว็บแล้วกดปุ่ม [Let's go!]</p>
<p>ใส่ข้อมูลการเชื่อมต่อเข้าฐานข้อมูล แล้วกดปุ่ม [Submit]</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w13-wordpress-database-connection.png"><img class="alignnone size-full wp-image-2347" title="w13-wordpress-database-connection" src="http://spalinux.com/wp-content/uploads/2012/05/w13-wordpress-database-connection.png" alt="" width="775" height="526" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>โปรแกรมจะพยายามเขียนไฟล์คอนฟิก wp-config.php ให้ แต่ไม่สามารถเขียนได้ ฟ้องข้อความ &#8220;Sorry, but I can&#8217;t write the wp-config.php file.&#8221;</p>
<p>เราต้องสร้างไฟล์ wp-config.php ขึ้นมาเอง ด้วยการคัดลอกคอนฟิกที่หมดที่แสดงในช่องฟอร์ม สำหรับ Windows ให้คลิ้กเมาส์ในช่องฟอร์มแล้วกด <strong>[Ctrl]+[A]</strong> เพื่อเลือกข้อความทั้งหมดในฟอร์ม แล้วกด<strong> [Ctrl]+[C]</strong> เพื่อคัดลอก</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w14-wp-config.png"><img class="alignnone size-full wp-image-2348" title="w14-wp-config" src="http://spalinux.com/wp-content/uploads/2012/05/w14-wp-config.png" alt="" width="773" height="568" /></a></p>
<p>&nbsp;</p>
<p>สร้างไฟล์บนเซิร์ฟเวอร์ ด้วยคำสั่ง vi</p>
<pre>[root@cent6 html]# <strong>vi wordpress/wp-config.php</strong></pre>
<p>หากเราใช้ PuTTY เพื่อ SSH เข้าเซิร์ฟเวอร์ลีนุกซ์ กด <strong>i</strong> เพื่อเข้าสู่โหมด INSERT แล้วกดปุ่ม <strong>[Shift]+[Insert]</strong> เพื่อวางข้อความ (paste) ที่คัดลอกมาได้</p>
<p>กดปุ่ม<strong> [Esc]</strong> เพื่อกลับสู่โหมดคำสั่ง แล้วพิมพ์ <strong>:wq</strong> เซฟไฟล์แล้วออกจาก vi</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w15-vi-wp-config.png"><img class="alignnone size-full wp-image-2349" title="w15-vi-wp-config" src="http://spalinux.com/wp-content/uploads/2012/05/w15-vi-wp-config.png" alt="" width="650" height="420" /></a></p>
<p>เนื่องจากในไฟล์คอนฟิก wp-config.php นี้ มีข้อมูล user, password ที่ใช้เชื่อมต่อเข้าฐานข้อมูลของ wordpress อยู่ด้วย เพื่อความปลอดภัย (security) แนะนำให้เปลี่ยน owner และ permission ให้ apache อ่านได้เท่านั้น ผู้ใช้ธรรมดา (user) ไม่สามารถเข้ามาอ่านได้</p>
<p>ตัวอย่างการเปลี่ยน permission และ owner ของไฟล์</p>
<pre>[root@cent6 html]# <strong>ls -l wordpress/wp-config.php</strong>
-rw-r--r--. 1 root root 3366 May 12 15:08 wordpress/wp-config.php

[root@cent6 html]# <strong>chmod 400 wordpress/wp-config.php</strong>
[root@cent6 html]# <strong>chown apache wordpress/wp-config.php</strong>

<strong>[root@cent6 html]#</strong> ls -l wordpress/wp-config.php
-r--------. 1 apache root 3366 May 12 15:08 wordpress/wp-config.php</pre>
<p>หลังจากสร้างไฟล์ wp-config.php เรียบร้อย กลับมาหน้าเว็บแล้ว กดปุ่ม [Run the install]</p>
<p>หน้าใส่ข้อมูลเบื้องต้นของเว็บไซต์ และตั้ง username และ password ไว้เป็น admin ของโปรแกรม wordpress</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w16-wordpress-username-password.png"><img class="alignnone size-full wp-image-2350" title="w16-wordpress-username-password" src="http://spalinux.com/wp-content/uploads/2012/05/w16-wordpress-username-password.png" alt="" width="718" height="712" /></a></p>
<p>แนะนำให้เปลี่ยน username จาก admin เป็นชื่ออื่น เพื่อเพิ่มความปลอดภัย ป้องกันการคาดเดา username, password</p>
<p>หน้าเว็บจะมีการตรวจสอบความยากง่ายของ password ที่เราใส่  แนะนำให้ตั้งยากหน่อย อย่างน้อยน่าจะได้ Medium หรือจะให้ดีก็ Strong</p>
<p>สำหรับการทดสอบ แนะนำให้คลิ้กไม่เลือก &#8220;Allow my site to appear in search engines like Google and Technorati.&#8221; ไว้ติดตั้งเว็บไซต์ใช้งานจริงแล้วค่อยเลือก</p>
<p>กดปุ่ม [Install WordPress]</p>
<p>หน้าแสดงการติดตั้งเสร็จสิ้น &#8220;Success&#8221;</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w17-install-Success.png"><img class="alignnone size-full wp-image-2351" title="w17-install-Success" src="http://spalinux.com/wp-content/uploads/2012/05/w17-install-Success.png" alt="" width="556" height="364" /></a></p>
<p>กดปุ่ม [Log In] เพื่อเข้าสู่หน้า admin ของ wordpress (หรือเข้าโดยตรง http://192.168.5.62/wordpress/wp-admin/)</p>
<p>หน้าล็อกอินของ WordPress ใส่ username, password ที่ตั้งไว้<br />
<a href="http://spalinux.com/wp-content/uploads/2012/05/w21-wordpress-login.png"><img class="alignnone size-full wp-image-2352" title="w21-wordpress-login" src="http://spalinux.com/wp-content/uploads/2012/05/w21-wordpress-login.png" alt="" width="466" height="410" /></a></p>
<p>ถ้าล็อกอินสำเร็จ จะเข้าสู่หน้า Dashboard ของ WordPress</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/05/w22-wordpress-Dashboard.png"><img class="alignnone size-full wp-image-2353" title="w22-wordpress-Dashboard" src="http://spalinux.com/wp-content/uploads/2012/05/w22-wordpress-Dashboard.png" alt="" width="964" height="744" /></a></p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://wordpress.org/download/" target="_blank">Download WordPress</a></li>
<li><a title="View Details: แก้ปัญหา WordPress  อัพโหลดไฟล์ไม่ได้" href="http://spalinux.com/2012/05/fix-wordpress-cannot-upload-file" rel="bookmark">แก้ปัญหา WordPress อัพโหลดไฟล์ไม่ได้</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/05/install-wordpress-on-centos-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ติดตั้งโมดูล PHP เพิ่มเติม บน CentOS 6</title>
		<link>http://spalinux.com/2012/04/install-more-php-module-on-centos-6</link>
		<comments>http://spalinux.com/2012/04/install-more-php-module-on-centos-6#comments</comments>
		<pubDate>Mon, 16 Apr 2012 16:00:43 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2115</guid>
		<description><![CDATA[จากการ ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache เว็บเซิร์ฟเวอร์ Apache และ PHP เครื่องนี้ สามารถเขียนเว็บเพจโดยใช้ภาษา PHP ได้แล้ว  แต่สามารถเรียกใช้ฟังก์ชั่นแค่พื้นฐานเท่านั้น  ถ้าต้องการใช้ฟังก์ชั่นอื่นๆ ด้วย เช่นเชื่อมต่อเข้ากับ MySQL เราจำเป็นต้องติดตั้งโมดูล PHP เพิ่มเติม ในบทความนี้จะอธิบายวิธีการตรวจสอบและติดตั้งโมดูลเพิ่มเติมจากไฟล์ rpm ที่อยู่ในแผ่นดีวีดี CentOS 6.2  โดยจะเป็นการติดตั้งโมดูล MySQL เพื่อให้สามารถเขียน PHP เชื่อมเข้ากับฐานข้อมูล MySQL ได้ ตัวอย่าง error เมื่อเรียกใช้ฟังก์ชั่นของโมดูลที่ไม่มีหรือยังไม่ได้ติดตั้ง [root@cent6 ~]# cat test-mysql.php &#60;?php mysql_connect('localhost', 'mysql_user', 'mysql_password'); ?&#62; ทดลองรันไฟล์นี้ด้วย php [root@cent6 ~]# php test-mysql.php PHP Fatal error:  Call [...]]]></description>
			<content:encoded><![CDATA[<p>จากการ <a title="View Details: ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache" href="http://spalinux.com/2012/04/install-php-web-programming-on-apache" rel="bookmark">ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache</a></p>
<p>เว็บเซิร์ฟเวอร์ Apache และ PHP เครื่องนี้ สามารถเขียนเว็บเพจโดยใช้ภาษา PHP ได้แล้ว  แต่สามารถเรียกใช้ฟังก์ชั่นแค่พื้นฐานเท่านั้น  ถ้าต้องการใช้ฟังก์ชั่นอื่นๆ ด้วย เช่นเชื่อมต่อเข้ากับ MySQL เราจำเป็นต้องติดตั้งโมดูล PHP เพิ่มเติม</p>
<p>ในบทความนี้จะอธิบายวิธีการตรวจสอบและติดตั้งโมดูลเพิ่มเติมจากไฟล์ rpm ที่อยู่ในแผ่นดีวีดี CentOS 6.2  โดยจะเป็นการติดตั้งโมดูล MySQL เพื่อให้สามารถเขียน PHP เชื่อมเข้ากับฐานข้อมูล MySQL ได้</p>
<p><span id="more-2115"></span></p>
<p>ตัวอย่าง error เมื่อเรียกใช้ฟังก์ชั่นของโมดูลที่ไม่มีหรือยังไม่ได้ติดตั้ง</p>
<pre>[root@cent6 ~]# <strong>cat test-mysql.php</strong>
&lt;?php
mysql_connect('localhost', 'mysql_user', 'mysql_password');
?&gt;</pre>
<p>ทดลองรันไฟล์นี้ด้วย php</p>
<pre>[root@cent6 ~]# <strong>php test-mysql.php</strong>
<span style="color: #ff0000;">PHP Fatal error:  Call to undefined function mysql_connect()</span> in /var/www/html/test-mysql.php on line 2</pre>
<p>วิธีการตรวจสอบว่า การเขียนโปรแกรมภาษา PHP บนเว็บเซิร์ฟเวอร์นี้ สามารถเรียกใช้โมดูล PHP อะไรได้บ้าง ทำได้โดยใช้ฟังก์ชั่น phpinfo() แล้วเปิดผ่านหน้าเว็บเพจ หรือรันคำสั่ง php ตามด้วยออปชั่น &#8220;-m&#8221;</p>
<pre>[root@cent6 html]# <strong>php -m</strong>
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
openssl
pcntl
pcre
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
tokenizer
xml
zip
zlib</pre>
<pre>[Zend Modules]</pre>
<p>&nbsp;</p>
<p>หากต้องการเรียกใช้โมดูลมากกว่านี้ จำเป็นต้องติดตั้งเพิ่มเติม  วิธีหนึ่งคือติดตั้งจากไฟล์ rpm ในแผ่นดีวีดี CentOS 6.2</p>
<p>ไฟล์ rpm ใน CentOS 6.2 ที่เกี่ยวข้องกับ PHP ไม่ว่าจะเป็นส่วนโปรแกรมหลัก หรือโมดูลเพิ่มเติม จะขึ้นต้นชื่อไฟล์ด้วย php</p>
<pre>[root@cent6 ~]# <strong>mount /dev/cdrom /mnt</strong>
 mount: block device /dev/sr0 is write-protected, mounting read-only</pre>
<pre>[root@cent6 ~]# <strong>cd /mnt/Packages/</strong>
[root@cent6 Packages]# <strong>ls -l php-*</strong>
-rw-r--r--. 2 500 500 1176604 Nov 15 18:02 php-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500 2276776 Nov 15 18:02 php-cli-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500  534024 Nov 15 18:02 php-common-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500  105780 Nov 15 18:02 php-gd-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500   36360 Nov 15 18:02 php-ldap-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500   80300 Nov 15 18:02 <span style="color: #0000ff;">php-mysql-5.3.3-3.el6_1.3.x86_64.rpm</span>
-rw-r--r--. 2 500 500   49116 Nov 15 18:02 php-odbc-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500   74148 Nov 15 18:02 <span style="color: #0000ff;">php-pdo-5.3.3-3.el6_1.3.x86_64.rpm</span>
-rw-r--r--. 2 500 500  402492 Dec  9 03:54 php-pear-1.9.4-4.el6.noarch.rpm
-rw-r--r--. 2 500 500   95556 Jul  3  2011 php-pecl-apc-3.1.3p1-1.2.el6.1.x86_64.rpm
-rw-r--r--. 2 500 500   61400 Sep 26  2011 php-pecl-memcache-3.0.5-3.el6.x86_64.rpm
-rw-r--r--. 2 500 500   69044 Nov 15 18:02 php-pgsql-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500  140600 Nov 15 18:02 php-soap-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500  102132 Nov 15 18:02 php-xml-5.3.3-3.el6_1.3.x86_64.rpm
-rw-r--r--. 2 500 500   50964 Nov 15 18:02 php-xmlrpc-5.3.3-3.el6_1.3.x86_64.rpm</pre>
<p>ใช้คำสั่ง rpm เพื่อติดตั้ง module เพิ่มเติม สำหรับการติดตั้ง MySQL module</p>
<pre>[root@cent6 Packages]# <strong>rpm -i php-mysql-5.3.3-3.el6_1.3.x86_64.rpm</strong>
<span style="color: #ff0000;">error: Failed dependencies:</span>
 php-pdo is needed by php-mysql-5.3.3-3.el6_1.3.x86_64</pre>
<p>ต้องติดตั้ง php-pdo (PDO module) ก่อน</p>
<pre>[root@cent6 Packages]# <strong>rpm -i php-pdo-5.3.3-3.el6_1.3.x86_64.rpm</strong>
[root@cent6 Packages]# <strong>rpm -i php-mysql-5.3.3-3.el6_1.3.x86_64.rpm</strong></pre>
<p>ใช้คำสั่ง php ออปชั่น -m เพื่อตรวจสอบ module ที่ติดตั้งเพิ่มเติม</p>
<pre>[root@cent6 Packages]# <strong>php -m</strong>
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
<span style="color: #0000ff;">mysql</span>
<span style="color: #0000ff;">mysqli</span>
openssl
pcntl
pcre
<span style="color: #0000ff;">PDO</span>
<span style="color: #0000ff;">pdo_mysql</span>
<span style="color: #0000ff;">pdo_sqlite</span>
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
<span style="color: #0000ff;">sqlite3</span>
standard
tokenizer
xml
zip
zlib</pre>
<pre>Zend Modules]</pre>
<p>คำอธิบาย</p>
<ul>
<li>PDO, pdo_sqlite, sqlite3 ได้จากการติดตั้งไฟล์ php-pdo</li>
<li>mysql, mysqli, pdo_mysql ได้จากการติดตั้งไฟล์ php-mysql</li>
</ul>
<p>&nbsp;</p>
<p>หลังจากการติดตั้ง PHP module เพิ่มเติม การรัน PHP ที่เป็น command line สามารถเรียกใช้โมดูลใหม่นี้ได้เลย แต่ถ้าต้องการเรียกผ่านเว็บเซิร์ฟเวอร์ ต้องรีสตาร์ตเซอร์วิส httpd ก่อน</p>
<p>ใช้คำสั่ง service เพื่อรีสตาร์ตเซอร์วิส httpd</p>
<pre>[root@cent6 Packages]# <strong>service httpd restart</strong>
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]</pre>
<p>ตัวอย่างการใช้ฟังก์ชั่น phpinfo() แสดงผลผ่านหน้าเว็บเพจ เพื่อดูข้อมูลรายละเอียดโมดูล MySQL ที่ติดตั้งใหม่</p>
<pre>[root@cent6 ~]# <strong>cat /var/www/html/info.php</strong>
 &lt;?php
 phpinfo();
 ?&gt;</pre>
<p>ผลลัพธ์ที่ได้จากการเรียกผ่านหน้าเว็บ</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/install-php-module.png"><img title="install-php-module" src="http://spalinux.com/wp-content/uploads/2012/04/install-php-module.png" alt="" width="624" height="289" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/install-more-php-module-on-centos-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>การสตาร์ต Apache Web Server บน CentOS 6</title>
		<link>http://spalinux.com/2012/04/howto-start-apache-web-server-on-centos-6</link>
		<comments>http://spalinux.com/2012/04/howto-start-apache-web-server-on-centos-6#comments</comments>
		<pubDate>Thu, 12 Apr 2012 17:23:20 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[start]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2062</guid>
		<description><![CDATA[จากที่ได้ ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache และ ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache เรียบร้อยแล้ว ขั้นตอนต่อไปก็เป็นรัน Apache Web Server ขึ้นมาเพื่อให้ใช้งานได้ ในบทความนี้จะอธิบายการรันหรือสตาร์ต Apache Web Server บน CentOS 6.2 โดยจะใช้คำสั่ง service เพื่อสะดวกในการจัดการ กล่าวถึงวิธีการแก้ไขคอนฟิกเบื้องต้น และเมื่อทดสอบเรียบร้อยแล้ว ก็จะใช้คำสั่ง chkconfig เพื่อเวลาตอนบู๊ตเครื่องจะได้รันเซอร์วิสเว็บเซิร์ฟเวอร์ขึ้นมาโดยอัตโนมัติ บน CentOS จะตั้งชื่อเซอร์วิสเรียก Apache ว่า httpd เพราะฉะนั้นเวลาใช้คำสั่ง service หรือ chkconfig ต้องใช้ชื่อเป็น httpd รันเซอร์วิส httpd ใช้คำสั่ง service เพื่อสตาร์ตเซอร์วิส httpd [root@cent6 ~]# service httpd start Starting httpd:            [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่ได้ <a title="ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache" href="http://spalinux.com/2012/04/install-apache-web-server">ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache</a> และ <a title="View Details: ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache" href="http://spalinux.com/2012/04/install-php-web-programming-on-apache" rel="bookmark">ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache</a> เรียบร้อยแล้ว</p>
<p>ขั้นตอนต่อไปก็เป็นรัน Apache Web Server ขึ้นมาเพื่อให้ใช้งานได้</p>
<p>ในบทความนี้จะอธิบายการรันหรือสตาร์ต Apache Web Server บน CentOS 6.2 โดยจะใช้คำสั่ง service เพื่อสะดวกในการจัดการ กล่าวถึงวิธีการแก้ไขคอนฟิกเบื้องต้น และเมื่อทดสอบเรียบร้อยแล้ว ก็จะใช้คำสั่ง chkconfig เพื่อเวลาตอนบู๊ตเครื่องจะได้รันเซอร์วิสเว็บเซิร์ฟเวอร์ขึ้นมาโดยอัตโนมัติ</p>
<p><span id="more-2062"></span></p>
<p>บน CentOS จะตั้งชื่อเซอร์วิสเรียก Apache ว่า httpd เพราะฉะนั้นเวลาใช้คำสั่ง service หรือ chkconfig ต้องใช้ชื่อเป็น httpd</p>
<h4>รันเซอร์วิส httpd</h4>
<p>ใช้คำสั่ง service เพื่อสตาร์ตเซอร์วิส httpd</p>
<pre>[root@cent6 ~]# <strong>service httpd start</strong>
Starting httpd:                                            [  OK  ]</pre>
<p>ต้องขึ้นผลลัพธ์ว่า OK แสดงว่าสตาร์ตเซอร์วิสสำเร็จ</p>
<p>หลังจากสตาร์ตเสร็จเรียบร้อย ลองใช้คำสั่ง ps เพื่อดูโปรเซสของ httpd</p>
<pre>[root@cent6 ~]# <strong>ps -ef | egrep "(UID|httpd)"</strong>
UID        PID  PPID  C STIME TTY          TIME CMD
root      1623     1  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1625  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1626  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1627  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1628  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1629  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1630  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1631  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd
apache    1632  1623  0 15:23 ?        00:00:00 /usr/sbin/httpd</pre>
<div></div>
<div>เนื่องจากผลลัพธ์ของคำสั่ง ps จะแสดงโปรเซสทั้งหมดที่อยู่บนเครื่อง เพื่อให้ดูง่าย นิยมใช้คำสั่ง grep เพื่อดูเฉพาะบรรทัดที่มีคำที่ต้องการดู</div>
<p>ในที่นี้ใช้คำสั่ง egrep เพื่อค้นหาบรรทัดที่มีคำว่า UID หรือ httpd เพื่อให้แสดงชื่อฟิลด์ต่างๆ ด้วย</p>
<h4></h4>
<h4>ทดสอบจาก Web Client (Browser)</h4>
<p>หลังจากสตาร์ตเซอร์วิสเรียบร้อยแล้ว ลองใช้ browser จากเครื่อง client อื่นทดสอบดู</p>
<p>หน้าจอของ browser แสดง error ว่าเข้าเว็บไม่ได้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/w01-cannot-access-web.png"><img class="alignnone size-full wp-image-2065" title="w01-cannot-access-web" src="http://spalinux.com/wp-content/uploads/2012/04/w01-cannot-access-web.png" alt="" width="524" height="218" /></a></p>
<p>&nbsp;</p>
<p>เหตุผลก็เป็นเพราะว่า โดยดีฟอลต์จากการติดตั้ง CentOS คอนฟิกของ firewall จะอนุญาตให้เข้าได้เฉพาะ ssh ได้เท่านั้น</p>
<p>ใช้คำสั่ง system-config-firewall-tui เพื่อเพิ่มคอนฟิก firewall อนุญาตให้เครื่องอื่นสามารถเข้ามาใช้เซอร์วิส WWW(HTTP) ได้</p>
<pre>[root@cent6 ~]# <strong>system-config-firewall-tui</strong></pre>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/w02-allow-www-http-service.png"><img class="alignnone size-full wp-image-2066" title="w02-allow-www-http-service" src="http://spalinux.com/wp-content/uploads/2012/04/w02-allow-www-http-service.png" alt="" width="499" height="337" /></a></p>
<p>&nbsp;</p>
<p>ลองใช้ browser จากเครื่อง client ทดสอบดูอีกครั้ง ก็จะใช้งานได้ ขึ้นหน้า Apache 2 Test Page</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/w03-browser-test-web-ok.png"><img class="alignnone size-full wp-image-2067" title="w03-browser-test-web-ok" src="http://spalinux.com/wp-content/uploads/2012/04/w03-browser-test-web-ok.png" alt="" width="777" height="562" /></a></p>
<p>&nbsp;</p>
<p>หมายเหตุ หน้า Apache 2 Test Page นี้ จะถูกแสดงขึ้นมา ในกรณีที่ไดเร็คทอรีเว็บที่เราเรียก ไม่มีไฟล์ index โดยจะไปเรียกไฟล์​ /var/www/error/noindex.html  มาแสดงแทน</p>
<p>&nbsp;</p>
<h4>ทดสอบเขียนไฟล์เว็บ html</h4>
<p>ดีฟอลต์คอนฟิก apache ที่ติดตั้งจาก rpm ไดเร็คทอรีหลัก (DocumentRoot) ที่เก็บไฟล์เว็บหน้าแรกจะอยู่ใน /var/www/html/</p>
<p>ทดสอบเขียนไฟล์เว็บ ชื่อ test.html ไว้ในไดเร็คทอรี /var/www/html/</p>
<pre>[root@cent6 ~]# <strong>cat /var/www/html/test.html</strong>
 &lt;html&gt;
 &lt;body&gt;
 ทดสอบเขียนเว็บ
 &lt;/body&gt;
 &lt;/html&gt;</pre>
<pre></pre>
<p>ลองเปิดด้วย browser ดู</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/w04-test-web-html.png"><img class="alignnone size-full wp-image-2069" title="w04-test-web-html" src="http://spalinux.com/wp-content/uploads/2012/04/w04-test-web-html.png" alt="" width="309" height="82" /></a></p>
<p>&nbsp;</p>
<h4>ทดลองเขียนไฟล์เว็บโปรแกรม php</h4>
<p>หากได้ <a title="View Details: ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache" href="http://spalinux.com/2012/04/install-php-web-programming-on-apache" rel="bookmark">ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache</a> ด้วย ลองเขียนไฟล์  php เพื่อทดสอบรันบนเว็บเซิร์ฟเวอร์ดู</p>
<pre>[root@cent6 ~]# <strong>cat /var/www/html/test.php</strong></pre>
<pre>&lt;?php</pre>
<pre>print 'เขียนโปรแกรม PHP&lt;br&gt;';</pre>
<pre>for ($i=1; $i&lt;=9; $i++) {
 print "$i";
}</pre>
<pre>?&gt;</pre>
<p>&nbsp;</p>
<p>ลองเปิดด้วย browser ดู</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/w05-test-web-php.png"><img class="alignnone size-full wp-image-2070" title="w05-test-web-php" src="http://spalinux.com/wp-content/uploads/2012/04/w05-test-web-php.png" alt="" width="313" height="101" /></a></p>
<p>&nbsp;</p>
<h4>คอนฟิกให้ สตาร์ต Apache ตอนบู๊ตเครื่อง</h4>
<p>เมื่อทดสอบเรียบร้อยแล้ว หากต้องการให้สตาร์ต apache ตอนบู๊ตเครื่องโดยอัตโนมัติ สามารถทำได้โดยใช้คำสั่ง chkconfig</p>
<pre>[root@cent6 ~]# chkconfig httpd on</pre>
<pre>[root@cent6 ~]# chkconfig --list | grep http
httpd          0:off 1:off 2:on 3:on 4:on 5:on 6:off</pre>
<div></div>
<h4>ปิดเซอร์วิส Apache</h4>
<p>ในกรณีที่ต้องการปิดเซอร์วิส Apache สามารถทำได้โดยใช้คำสั่ง service</p>
<pre>[root@cent6 ~]# <strong>service httpd stop</strong>
Stopping httpd:                                            [  OK  ]</pre>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a title="ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache" href="http://spalinux.com/2012/04/install-apache-web-server">ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache</a></li>
<li><a title="View Details: ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache" href="http://spalinux.com/2012/04/install-php-web-programming-on-apache" rel="bookmark">ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache</a></li>
<li><a title="View Details: วิธีการเปิด ปิด เซอร์วิสของ CentOS 6" href="http://spalinux.com/2012/04/how-to-start-stop-service-in-centos-6" rel="bookmark">วิธีการเปิด ปิด เซอร์วิส</a></li>
<li><a title="View Details: การเปิดเซอร์วิสตอนบู๊ตเครื่องของ CentOS 6" href="http://spalinux.com/2012/04/start-service-when-boot-centos-6" rel="bookmark">การเปิดเซอร์วิสตอนบู๊ตเครื่อง</a></li>
<li><a title="View Details: แก้ไขคอนฟิก firewall ด้วย system-config-firewall" href="http://spalinux.com/2012/04/configure-firewall-using-system-config-firewall" rel="bookmark">แก้ไขคอนฟิก firewall ด้วย system-config-firewall</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/howto-start-apache-web-server-on-centos-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ติดตั้งเว็บเซิร์ฟเวอร์ ​Apache</title>
		<link>http://spalinux.com/2012/04/install-apache-web-server</link>
		<comments>http://spalinux.com/2012/04/install-apache-web-server#comments</comments>
		<pubDate>Sun, 01 Apr 2012 09:00:02 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Web Server]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1929</guid>
		<description><![CDATA[ในบทนี้จะสอนวิธีการติดตั้งไฟล์ rpm เพื่อจะรันเป็นเว็บเซิรฟ์เวอร์ Apache บน CentOS 6.2 โดยจะอธิบายทีละขั้นตอน ถึงวิธีการติดตั้งไฟล์ rpm และการแก้ไขปัญหา ใส่แผ่นดีวีดีติดตั้ง ใช้คำสั่ง mount แผ่นกับพาธ /mnt [root@cent6 ~]# mount /dev/cdrom /mnt mount: block device /dev/sr0 is write-protected, mounting read-only เข้าไปใน /mnt/Packages/ เพื่อติดตั้งไฟล์ rpm สำหรับ CentOS ไฟล์ rpm ของ Apache Web Server จะมีชื่อไฟล์ขึ้นต้นด้วย httpd [root@cent6 ~]# cd /mnt/Packages/ [root@cent6 Packages]# ls -l httpd* -rw-r--r--. 2 500 [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทนี้จะสอนวิธีการติดตั้งไฟล์ rpm เพื่อจะรันเป็นเว็บเซิรฟ์เวอร์ Apache บน CentOS 6.2</p>
<p>โดยจะอธิบายทีละขั้นตอน ถึงวิธีการติดตั้งไฟล์ rpm และการแก้ไขปัญหา</p>
<p><span id="more-1929"></span></p>
<p>ใส่แผ่นดีวีดีติดตั้ง ใช้คำสั่ง mount แผ่นกับพาธ /mnt</p>
<pre>[root@cent6 ~]# <strong>mount /dev/cdrom /mnt</strong>
mount: block device /dev/sr0 is write-protected, mounting read-only</pre>
<p>เข้าไปใน /mnt/Packages/ เพื่อติดตั้งไฟล์ rpm</p>
<p>สำหรับ CentOS ไฟล์ rpm ของ Apache Web Server จะมีชื่อไฟล์ขึ้นต้นด้วย httpd</p>
<pre>[root@cent6 ~]# <strong>cd /mnt/Packages/</strong>
[root@cent6 Packages]# <strong>ls -l httpd*</strong>
-rw-r--r--. 2 500 500 828156 Dec 9 03:06 httpd-2.2.15-15.el6.centos.x86_64.rpm
-rw-r--r--. 4 500 500 150236 Dec 9 03:06 httpd-devel-2.2.15-15.el6.centos.i686.rpm
-rw-r--r--. 2 500 500 150200 Dec 9 03:06 httpd-devel-2.2.15-15.el6.centos.x86_64.rpm
-rw-r--r--. 2 500 500 799272 Dec 9 03:06 httpd-manual-2.2.15-15.el6.centos.noarch.rpm
-rw-r--r--. 2 500 500 71296 Dec 9 03:06 httpd-tools-2.2.15-15.el6.centos.x86_64.rpm</pre>
<p>ไฟล์ที่จำเป็นต้องติดตั้งเพื่อรันเป็นเว็บเซิร์ฟเวอร์คือ httpd กับ httpd-tools</p>
<p>ใช้คำสั่ง rpm -i เพื่อติดตั้งไฟล์ httpd</p>
<pre>[root@cent6 Packages]# <strong>rpm -i httpd-2.2.15-15.el6.centos.x86_64.rpm</strong>
<span style="color: #ff0000;">error: Failed dependencies</span>:
 /etc/mime.types is needed by httpd-2.2.15-15.el6.centos.x86_64
 apr-util-ldap is needed by httpd-2.2.15-15.el6.centos.x86_64
 httpd-tools = 2.2.15-15.el6.centos is needed by httpd-2.2.15-15.el6.centos.x86_64
 libapr-1.so.0()(64bit) is needed by httpd-2.2.15-15.el6.centos.x86_64
 libaprutil-1.so.0()(64bit) is needed by httpd-2.2.15-15.el6.centos.x86_64</pre>
<p>ต้องลงไฟล์ rpm อื่นก่อน ที่เห็นชัดพอจะเดาได้คือ httpd-tools</p>
<p>ลองลง httpd-tools ดู</p>
<pre>[root@cent6 Packages]# <strong>rpm -i httpd-tools-2.2.15-15.el6.centos.x86_64.rpm</strong>
<span style="color: #ff0000;">error: Failed dependencies</span>:
 libapr-1.so.0()(64bit) is needed by httpd-tools-2.2.15-15.el6.centos.x86_64
 libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.2.15-15.el6.centos.x86_64</pre>
<p>ก็จำเป็นต้องลง libapr กับ libaprutil ก่อน ลองหาข้อมูลบนอินเตอร์เน็ต สองไฟล์นี้อยู่ในไฟล์ rpm ที่มีชื่อ apr กับ apr-util</p>
<p>ใช้คำสั่ง ls ดูไฟล์ในแผ่นที่ขึ้นต้นด้วย apr</p>
<pre>[root@cent6 Packages]# <strong>ls -l apr-*</strong>
-rw-r--r--. 4 500 500 132120 Sep 28 2011 apr-1.3.9-3.el6_1.2.i686.rpm
-rw-r--r--. 2 500 500 126336 Sep 28 2011 apr-1.3.9-3.el6_1.2.x86_64.rpm
-rw-r--r--. 4 500 500 180328 Sep 28 2011 apr-devel-1.3.9-3.el6_1.2.i686.rpm
-rw-r--r--. 2 500 500 180300 Sep 28 2011 apr-devel-1.3.9-3.el6_1.2.x86_64.rpm
-rw-r--r--. 4 500 500 91196 Jul 6 2011 apr-util-1.3.9-3.el6_0.1.i686.rpm
-rw-r--r--. 2 500 500 89340 Jul 6 2011 apr-util-1.3.9-3.el6_0.1.x86_64.rpm
-rw-r--r--. 4 500 500 70424 Jul 6 2011 apr-util-devel-1.3.9-3.el6_0.1.i686.rpm
-rw-r--r--. 2 500 500 70420 Jul 6 2011 apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm
-rw-r--r--. 2 500 500 15824 Jul 6 2011 apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm</pre>
<p>สำหรับ apr จะมีสองไฟล์ ลงท้ายด้วย i686.rpm กับ x86_64.rpm</p>
<ul>
<li>ไฟล์ rpm ที่ลงท้ายด้วย i686.rpm สำหรับลงบนลีนุกซ์ 32 bit</li>
<li>ไฟล์ rpm ที่ลงท้ายด้วย x86_64.rpm สำหรับลงบนลีนุกซ์ 64 bit</li>
</ul>
<p>ในที่นี้เลือกไฟล์ลงท้ายด้วย x86_64.rpm</p>
<p>ติดตั้งไฟล์ rpm ของ apr กับ apr-util</p>
<pre>[root@cent6 Packages]# <strong>rpm -i apr-1.3.9-3.el6_1.2.x86_64.rpm</strong>
[root@cent6 Packages]# <strong>rpm -i apr-util-1.3.9-3.el6_0.1.x86_64.rpm</strong></pre>
<p>ลองติดตั้ง httpd-tools อีกครั้ง</p>
<pre>[root@cent6 Packages]# <strong>rpm -i httpd-tools-2.2.15-15.el6.centos.x86_64.rpm</strong></pre>
<p>ติดตั้งสำเร็จ ลองติดตั้ง httpd อีกครั้ง</p>
<pre>[root@cent6 Packages]# <strong>rpm -i httpd-2.2.15-15.el6.centos.x86_64.rpm</strong>
<span style="color: #ff0000;">error: Failed dependencies</span>:
 /etc/mime.types is needed by httpd-2.2.15-15.el6.centos.x86_64
 apr-util-ldap is needed by httpd-2.2.15-15.el6.centos.x86_64</pre>
<p>ยัง error อยู่ ต้องติดตั้งไฟล์ rpm เพิ่มเติม ที่พอเดาได้เพิ่มเติมคือ apr-util-ldap</p>
<p>หาไฟล์ในแผ่นที่ขึ้นต้นด้วย apr-util-ldap แล้วลองติดตั้ง</p>
<pre>[root@cent6 Packages]# <strong>ls -l apr-util-ldap*</strong>
-rw-r--r--. 2 500 500 15824 Jul 6 2011 apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm</pre>
<pre>[root@cent6 Packages]# <strong>rpm -i apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm</strong></pre>
<p>ส่วน /etc/mime.types ลองหาข้อมูลบนอินเตอร์เน็ตดู จะพบข้อมูลว่าอยู่ในไฟล์ rpm ที่ชื่อ mailcap</p>
<p>หาไฟล์ในแผ่นที่ขึ้นต้นด้วย mailcap แล้วติดตั้ง</p>
<pre>[root@cent6 Packages]# <strong>ls -l mailcap*</strong>
-rw-r--r--. 2 500 500 27280 Sep 26 2011 mailcap-2.1.31-2.el6.noarch.rpm</pre>
<pre>[root@cent6 Packages]# <strong>rpm -i mailcap-2.1.31-2.el6.noarch.rpm</strong></pre>
<p>ลองติดตั้ง httpd อีกครั้ง ก็จะติดตั้งสำเร็จ</p>
<pre>[root@cent6 Packages]# <strong>rpm -i httpd-2.2.15-15.el6.centos.x86_64.rpm</strong></pre>
<p>ทดลองรัน httpd ตามด้วยออปชั่น &#8216;-v&#8217; เพื่อแสดงเวอร์ขั่นของ Apache Web Server ที่ติดตั้ง</p>
<pre>[root@cent6 ~]# <strong>httpd -v</strong>
Server version: Apache/2.2.15 (Unix)
Server built: Dec 8 2011 18:10:49</pre>
<pre></pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a title="ติดตั้งโปรแกรมเพิ่มบน CentOS 6.2" href="http://spalinux.com/2012/04/how-to-install-program-on-centos-6-2">ติดตั้งโปรแกรมเพิ่มบน CentOS 6.2</a></li>
<li><a title="View Details: ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache" href="http://spalinux.com/2012/04/install-php-web-programming-on-apache" rel="bookmark">ติดตั้งโปรแกรมภาษาเว็บ PHP บน Apache</a></li>
</ul>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/install-apache-web-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอนฟิก Squid Proxy Server ให้ตรวจสอบ user, password จาก LDAP</title>
		<link>http://spalinux.com/2012/03/configure-squid-proxy-server-to-authenticate-user-with-ldap</link>
		<comments>http://spalinux.com/2012/03/configure-squid-proxy-server-to-authenticate-user-with-ldap#comments</comments>
		<pubDate>Sun, 18 Mar 2012 07:12:32 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Web Server]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1712</guid>
		<description><![CDATA[จากบทความ คอนฟิก Squid Proxy Server ให้ผู้ใช้ใส่ user, password ก่อนเข้าเว็บ เป็นการตรวจสอบ user จาก Local Password หรือไฟล์ /etc/passwd, /etc/shadow ผ่าน Linux PAM ที่อยู่บนเครื่อง proxy server เอง แต่ถ้าบริษัทหรือองค์กรของเรามีการเก็บ user, password อยู่บนเซิร์ฟเวอร์เครื่องอื่น เช่นเก็บรวมเป็นศูนย์กลางบน LDAP Server เราก็สามารถคอนฟิก Squid Proxy Server ให้ตรวจสอบ user, password จาก LDAP Server ได้ วิธีการคือ แก้ไขคอนฟิกในส่วนของ auth_param basic program เปลี่ยนไปใช้ไฟล์ basic_ldap_auth สมมติว่าค่าคอนฟิกต่างๆ ของ LDAP Server มีดังนี้ ออปชั่น &#8216;-v&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>จากบทความ <a href="http://spalinux.com/2012/03/configure-squid-proxy-server-user-authentication-with-local-password">คอนฟิก Squid Proxy Server ให้ผู้ใช้ใส่ user, password ก่อนเข้าเว็บ</a></p>
<p>เป็นการตรวจสอบ user จาก Local Password หรือไฟล์ /etc/passwd, /etc/shadow ผ่าน Linux PAM ที่อยู่บนเครื่อง proxy server เอง</p>
<p>แต่ถ้าบริษัทหรือองค์กรของเรามีการเก็บ user, password อยู่บนเซิร์ฟเวอร์เครื่องอื่น เช่นเก็บรวมเป็นศูนย์กลางบน LDAP Server เราก็สามารถคอนฟิก Squid Proxy Server ให้ตรวจสอบ user, password จาก LDAP Server ได้</p>
<p><span id="more-1712"></span></p>
<p>วิธีการคือ แก้ไขคอนฟิกในส่วนของ auth_param basic program เปลี่ยนไปใช้ไฟล์ basic_ldap_auth</p>
<p>สมมติว่าค่าคอนฟิกต่างๆ ของ LDAP Server มีดังนี้</p>
<ul>
<li>ออปชั่น &#8216;-v&#8217; ระบุเวอร์ชั่นของ LDAP ที่ใช้ = 3</li>
<li>ออปชั่น &#8216;-b&#8217; ระบุ Base DN สำหรับการค้นหา = &#8220;dc=example,dc=com&#8221;</li>
<li>ออปชั่น &#8216;-f&#8217; ระบุเงื่อนไขการค้นหา uid=% คือให้ค้นหาการ username (บน LDAP Server ก็ต้องเก็บโดยใช้ชื่อฟิลด์ uid ด้วย)</li>
<li>ออปชั่น &#8216;-h&#8217; ระบุ IP Address = 192.168.1.10</li>
</ul>
<p>แต่ถ้า LDAP Server ที่คุณใช้ ต้องมีการระบุชื่อ DN และ password ที่ใช้ bind ด้วย ก็ต้องระบุ 2 ออปชั่นนี้เพิ่มเติม</p>
<ul>
<li>ออปชั่น &#8216;-D&#8217; ระบุชื่อ DN สำหรับการ bind เข้า LDAP</li>
<li>ออปชั่น &#8216;-w&#8217; ระบุ password ที่ใช้ bind เข้า LDAP</li>
</ul>
<p>ตัวอย่างการแก้ไขคอนฟิก</p>
<pre>[root@fc16-64a ~]# <strong>cat /etc/squid/squid.conf</strong>
....
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
auth_param basic children 5
auth_param basic realm Proxy Authentication
auth_param basic credentialsttl 12 hours
<span style="color: #0000ff;">auth_param basic program /usr/lib64/squid/basic_ldap_auth -v 3 -b "dc=example,dc=com" -f uid=%s -h 192.168.1.10</span></pre>
<pre>acl <span style="color: #0000ff;">user_ldap_auth</span> proxy_auth REQUIRED
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet <span style="color: #0000ff;">user_ldap_auth</span>
...</pre>
<p>ใช้คำสั่ง service หรือ systemctl เพื่อ start หรือ reload เซอร์วิส squid</p>
<pre>[root@fc16-64a ~]# <strong>systemctl reload squid.service</strong></pre>
<p>เสร็จแล้วลองทดสอบจาก Browser</p>
<p><strong>หมายเหตุ</strong> หลังจากทดสอบเรียบร้อยใช้งานได้แล้ว เพื่อความปลอดภัยของเซิร์ฟเวอร์ หากคุณเปลี่ยนจาก basic_pam_auth มาเป็น basic_ldap_auth แล้ว ให้ยกเลิก setuid root ของไฟล์ basic_pam_auth ด้วย ใช้คำสั่ง chmod ดังนี้</p>
<pre>[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rw<span style="color: #ff0000;">s</span>r-x---. 1 root squid 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<pre>[root@fc16-64a ~]# <strong>chmod u-s /usr/lib64/squid/basic_pam_auth</strong></pre>
<pre>[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rw<span style="color: #0000ff;">x</span>r-x---. 1 root squid 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2012/03/configure-squid-proxy-server-user-authentication-with-local-password">คอนฟิก Squid Proxy Server ให้ผู้ใช้ใส่ user, password ก่อนเข้าเว็บ</a></li>
<li><a href="http://spalinux.com/2010/07/install_openldap_server_on_fedora_13">ติดตั้ง OpenLDAP Server บน Fedora 13</a></li>
<li><a href="http://www.squid-cache.org/Versions/v3/3.2/manuals/basic_ldap_auth.html" target="_blank">squid: basic_ldap_auth</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/03/configure-squid-proxy-server-to-authenticate-user-with-ldap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอนฟิก Squid Proxy Server ให้ผู้ใช้ใส่ user, password ก่อนเข้าเว็บ</title>
		<link>http://spalinux.com/2012/03/configure-squid-proxy-server-user-authentication-with-local-password</link>
		<comments>http://spalinux.com/2012/03/configure-squid-proxy-server-user-authentication-with-local-password#comments</comments>
		<pubDate>Fri, 16 Mar 2012 18:18:54 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[pam]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1701</guid>
		<description><![CDATA[บทความนี้อธิบายวิธีการคอนฟิก Squid Proxy Server เพื่อให้ผู้ใช้งานต้องใส่ user, password ก่อนถึงจะใช้งานอินเตอร์เน็ตได้ โดยจะตรวจสอบ user, password กับ Local Password หรือไฟล์ /etc/passwd, /etc/shadow ผ่าน Linux PAM ที่อยู่บนเครื่อง Proxy Server เอง ทดสอบบน Fedora 16 ติดตั้ง squid-3.2.0.12-1 ติดตั้งไฟล์ rpm จากแผ่นดีวีดีติดตั้ง [root@fc16-64a ~]# mount /dev/cdrom /mnt/cdrom mount: block device /dev/sr0 is write-protected, mounting read-only [root@fc16-64a ~]# cd /mnt/cdrom/Packages/ [root@fc16-64a Packages]# rpm -i squid-3.2.0.12-1.fc16.x86_64.rpm มีหลายวิธีที่คอนฟิกให้ถาม [...]]]></description>
			<content:encoded><![CDATA[<p>บทความนี้อธิบายวิธีการคอนฟิก Squid Proxy Server เพื่อให้ผู้ใช้งานต้องใส่ user, password ก่อนถึงจะใช้งานอินเตอร์เน็ตได้</p>
<p>โดยจะตรวจสอบ user, password กับ Local Password หรือไฟล์ /etc/passwd, /etc/shadow ผ่าน Linux PAM ที่อยู่บนเครื่อง Proxy Server เอง</p>
<p><span id="more-1701"></span></p>
<p>ทดสอบบน Fedora 16 ติดตั้ง squid-3.2.0.12-1</p>
<p>ติดตั้งไฟล์ rpm จากแผ่นดีวีดีติดตั้ง</p>
<pre>[root@fc16-64a ~]# <strong>mount /dev/cdrom /mnt/cdrom</strong>
mount: block device /dev/sr0 is write-protected, mounting read-only</pre>
<pre>[root@fc16-64a ~]# <strong>cd /mnt/cdrom/Packages/</strong>
[root@fc16-64a Packages]# <strong>rpm -i squid-3.2.0.12-1.fc16.x86_64.rpm</strong></pre>
<p>มีหลายวิธีที่คอนฟิกให้ถาม user, password ก่อนใช้ proxy ได้ วิธีหนึ่งคือเพิ่มคอนฟิกออปชั่น auth_param basic มี 3 ขั้นตอนดังนี้</p>
<ol>
<li>ตั้งค่าคอนฟิกของ auth_param basic มีอยู่หลายค่า บรรทัดสำคัญคือ program ในที่นี้จะเลือกเป็น basic_pam_auth เพื่อให้ตรวจสอบกับ Linux PAM</li>
<li>สร้าง acl เป็นชนิด proxy_auth ในตัวอย่างนี้ ตั้งชื่อ acl เป็น user_pam_auth</li>
<li>สุดท้ายนำ acl ที่สร้างขึ้นไปผูกเงื่อนไขใน http_access เช่นในที่นี้ ยังคงอนุญาตให้เครื่องที่อยู่ใน localnet ใช้ proxy ได้ แต่ต้องใส่ user, password ก่อน</li>
</ol>
<p>ตัวอย่างแก้ไขไฟล์ /etc/squid/squid.conf (แสดงเฉพาะส่วนที่แก้ไขจากดีฟอลต์คอนฟิกเท่านั้น)</p>
<pre>[root@fc16-64a ~]# <strong>cat /etc/squid/squid.conf</strong>
....
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
<span style="color: #0000ff;"><strong>auth_param basic children 5</strong></span>
<span style="color: #0000ff;"><strong>auth_param basic realm Proxy Authentication</strong></span>
<span style="color: #0000ff;"><strong>auth_param basic credentialsttl 12 hours</strong></span>
<span style="color: #0000ff;"><strong>auth_param basic program /usr/lib64/squid/basic_pam_auth</strong></span></pre>
<pre><span style="color: #0000ff;"><strong>acl user_pam_auth proxy_auth REQUIRED</strong></span></pre>
<pre># Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet <strong><span style="color: #0000ff;">user_pam_auth</span></strong>
...</pre>
<p>&nbsp;</p>
<p>ใช้คำสั่ง service หรือ systemctl เพื่อ start หรือ reload เซอร์วิส squid</p>
<pre>[root@fc16-64a ~]# <strong>systemctl reload squid.service</strong></pre>
<p>ใช้คำสั่ง useradd เพิ่ม user สำหรับทดสอบ</p>
<pre>[root@fc16-64a ~]# <strong>useradd -g users user1</strong>
[root@fc16-64a ~]# <strong>passwd user1</strong>
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.</pre>
<pre></pre>
<h4>ทดสอบจาก Browser</h4>
<p>คอนฟิก Browser ของเครื่องผู้ใช้ ให้ชี้มาที่ proxy แล้วลองเข้าเว็บดู จะมีหน้าจอให้ใส่ user, password ลองใส่ user ที่เพิ่งสร้างขึ้น</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/p01-user-password.png"><img class="alignnone size-full wp-image-1702" title="p01-user-password" src="http://spalinux.com/wp-content/uploads/2012/03/p01-user-password.png" alt="" width="620" height="242" /></a></p>
<p>&nbsp;</p>
<p>แม้จะพยายามใส่ user, password อย่างไร ก็ไม่สำเร็จ</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/p02-cache-denied.png"><img class="alignnone size-full wp-image-1703" title="p02-cache-denied" src="http://spalinux.com/wp-content/uploads/2012/03/p02-cache-denied.png" alt="" width="786" height="299" /></a></p>
<p>&nbsp;</p>
<p>ที่เป็นเช่นนี้เนื่องจาก basic_pam_auth ไ่ม่สามารถอ่านไฟล์ /etc/shadow ได้ จำเป็นต้องแก้ไขไฟล์นี้ให้เป็น setuid root</p>
<p>ใช้คำสั่ง chmod เพื่อแก้ไขไฟล์ให้เป็น setuid root</p>
<pre>[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rwxr-xr-x. 1 root root 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<pre>[root@fc16-64a ~]# <strong>chmod u+s /usr/lib64/squid/basic_pam_auth</strong></pre>
<pre>[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rw<span style="color: #ff0000;">s</span>r-xr-x. 1 root root 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<p>&nbsp;</p>
<p>แต่การใช้ setuid root แบบนี้ ค่อนข้างอันตราย user ทั่วไป บนเครื่องเซิร์ฟเวอร์ สามารถรันโปรแกรมนี้แล้วตรวจสอบไฟล์ /etc/shadow ได้</p>
<p>วิธีที่จะพอป้องกันได้ คือให้เฉพาะ squid รันไฟล์นี้ได้เท่านั่้น ตัวอย่างเช่น</p>
<pre>[root@fc16-64a ~]# <strong>chmod 750 /usr/lib64/squid/basic_pam_auth</strong>
[root@fc16-64a ~]# <strong>chgrp squid /usr/lib64/squid/basic_pam_auth</strong>
[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rwxr-x<span style="color: #0000ff;">---</span>. 1 root <span style="color: #0000ff;">squid</span> 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<pre>[root@fc16-64a ~]# <strong>chmod u+s /usr/lib64/squid/basic_pam_auth</strong>
[root@fc16-64a ~]# <strong>ls -l /usr/lib64/squid/basic_pam_auth</strong>
-rw<span style="color: #ff0000;">s</span>r-x---. 1 root squid 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth</pre>
<p>รีโหลดเซอร์วิสหลังแก้ไข</p>
<pre>[root@fc16-64a ~]# <strong>systemctl reload squid.service</strong></pre>
<p>ลองใส่ user, password อีกครั้ง บน browser น่าจะใช้งานได้แล้ว</p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.squid-cache.org/Versions/v3/3.2/manuals/basic_pam_auth.html" target="_blank">squid: basic_pam_auth</a></li>
<li><a href="http://spalinux.com/2008/05/configure_squid_proxy_server" target="_blank">คอนฟิก Squid Proxy Server</a></li>
<li><a title="View Details: คอนฟิก Squid Proxy Server ให้ตรวจสอบ user, password จาก LDAP" href="http://spalinux.com/2012/03/configure-squid-proxy-server-to-authenticate-user-with-ldap" rel="bookmark">คอนฟิก Squid Proxy Server ให้ตรวจสอบ user, password จาก LDAP</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/03/configure-squid-proxy-server-user-authentication-with-local-password/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอนฟิกหลายชื่อเว็บไซต์บนเว็บเซิร์ฟเวอร์เครื่องเดียวด้วย Apache VirtualHost</title>
		<link>http://spalinux.com/2012/03/configure-multiple-web-site-on-one-web-server-by-apache-virtualhost</link>
		<comments>http://spalinux.com/2012/03/configure-multiple-web-site-on-one-web-server-by-apache-virtualhost#comments</comments>
		<pubDate>Fri, 09 Mar 2012 17:15:32 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Name Service]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[virtual host]]></category>
		<category><![CDATA[web hosting]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1687</guid>
		<description><![CDATA[วิธีการหนึ่งสำหรับคนที่ต้องการมีเว็บไซต์บนอินเตอร์เน็ตเป็นของตัวเอง คือใช้บริการ Web Hosting เคยสงสัยไหมว่า ผู้ให้บริการต้องมีเซิร์ฟเวอร์กี่เครื่อง เพื่อจะรองรับเว็บไซต์หรือโดเมนเนมของลูกค้าจำนวนมากได้ โดยทั่วไป ผู้ให้บริการ Web Hosting อาจมีเซิร์ฟเวอร์เพียงไม่กี่เครื่องเท่านั้น โดยแต่ละเครื่องสามารถคอนฟิกเพื่อให้รองรับจำนวนเว็บไซต์ได้เป็นหลักร้อย หลักพัน หรือเคยได้ยินมาว่าบางที่ ที่ค่าบริการถูกมากๆ มีจำนวนเว็บไซต์ต่อเครื่องถึงหลักหมื่นเลยทีเดียว วิธีการที่คอนฟิกเว็บเซิร์ฟเวอร์เพื่อให้สามารถรองรับได้หลายเว็บไซต์หรือโดเมน โดยพื้นฐานแล้วก็คือการใช้ VirtualHost นั่นเอง บทความนี้จะอธิบายวิธีการคอนฟิก Apache VirtualHost บน Fedora 16 ระบบทดสอบ Fedora 16 IP Address: 192.168.5.16 ในที่นี้สมมติว่าเราแก้ไข DNS (หรืออาจแก้ไฟล์ host บนเครื่อง Client) โดยเพิ่มชื่อ 3 เว็บไซต์ ให้ชี้มายัง IP 192.168.5.16 web1.example.com web2.example.com web3.example.com ติดตั้งไฟล์ rpm ของ Apache ใช้คำสั่ง rpm เพื่อตรวจสอบเวอร์ชั่นที่ติดตั้ง [...]]]></description>
			<content:encoded><![CDATA[<p>วิธีการหนึ่งสำหรับคนที่ต้องการมีเว็บไซต์บนอินเตอร์เน็ตเป็นของตัวเอง คือใช้บริการ Web Hosting</p>
<p>เคยสงสัยไหมว่า ผู้ให้บริการต้องมีเซิร์ฟเวอร์กี่เครื่อง เพื่อจะรองรับเว็บไซต์หรือโดเมนเนมของลูกค้าจำนวนมากได้</p>
<p>โดยทั่วไป ผู้ให้บริการ Web Hosting อาจมีเซิร์ฟเวอร์เพียงไม่กี่เครื่องเท่านั้น โดยแต่ละเครื่องสามารถคอนฟิกเพื่อให้รองรับจำนวนเว็บไซต์ได้เป็นหลักร้อย หลักพัน หรือเคยได้ยินมาว่าบางที่ ที่ค่าบริการถูกมากๆ มีจำนวนเว็บไซต์ต่อเครื่องถึงหลักหมื่นเลยทีเดียว</p>
<p>วิธีการที่คอนฟิกเว็บเซิร์ฟเวอร์เพื่อให้สามารถรองรับได้หลายเว็บไซต์หรือโดเมน โดยพื้นฐานแล้วก็คือการใช้ VirtualHost นั่นเอง</p>
<p>บทความนี้จะอธิบายวิธีการคอนฟิก Apache VirtualHost บน Fedora 16</p>
<p><span id="more-1687"></span></p>
<p>ระบบทดสอบ</p>
<ul>
<li>Fedora 16</li>
<li>IP Address: 192.168.5.16</li>
</ul>
<p>ในที่นี้สมมติว่าเราแก้ไข DNS (หรืออาจแก้ไฟล์ host บนเครื่อง Client) โดยเพิ่มชื่อ 3 เว็บไซต์ ให้ชี้มายัง IP 192.168.5.16</p>
<ul>
<li>web1.example.com</li>
<li>web2.example.com</li>
<li>web3.example.com</li>
</ul>
<p>ติดตั้งไฟล์ rpm ของ Apache</p>
<p>ใช้คำสั่ง rpm เพื่อตรวจสอบเวอร์ชั่นที่ติดตั้ง</p>
<pre>[root@fc16-64a ~]# <strong>rpm -qa | grep httpd</strong>
httpd-tools-2.2.21-1.fc16.x86_64
httpd-2.2.21-1.fc16.x86_64</pre>
<p>โดยดีฟอลต์การติดตั้งไฟล์ rpm ของ Apache บนลีนุกซ์ ตระกูล RedHat, CentOS, หรือ Fedora จะรองรับแค่ชื่อเว็บไซต์เดียวเท่านั้น</p>
<h4>การคอนฟิก VirtualHost บนเว็บเซิร์ฟเวอร์</h4>
<p>เริ่มต้น ถ้าต้องการเปิดคุณสมบัติ VirtualHost ต้องแก้ไขคอนฟิกไฟล์ httpd.conf โดยเอาเครื่องหมาย &#8216;#&#8217; (comment) หน้าออปชั่น NameVirtualHost ออก</p>
<p>วิธีการคอนฟิก VirtualHost ในที่นี้จะอ้างอิงตามชื่อเว็บไซต์ที่เรียกเข้ามา เช่น ถ้า Browser (client)</p>
<ul>
<li>ใช้ชื่อ &#8220;ServerName&#8221; web1.example.com เข้ามา เราต้องการให้เข้าไปอ่านไฟล์เว็บในไดเร็คทอรี &#8220;DocumentRoot&#8221; /var/www/html/web1.example.com</li>
<li>แต่ถ้าใช้ชื่อ web2.example.com ให้อ่านไฟล์ใน /var/www/html/web2.example.com</li>
<li>และถ้าใช้ชื่อ web3.example.com ให้ไปอ่านไฟล์จาก /var/www/html/web3.example.com</li>
<li>แต่ถ้าใช้ชื่ออื่นๆ หรือใช้ IP Address ของเซิร์ฟเวอร์ ให้อ่านไฟล์ใน /var/www/html/default</li>
</ul>
<p>ตัวอย่างไฟล์คอนฟิก httpd.conf ที่แก้ไข</p>
<pre>[root@fc16-64a ~]# cat /etc/httpd/conf/httpd.conf
...
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80</pre>
<pre>&lt;VirtualHost *:80&gt;
<span style="color: #0000ff;"> ServerName 192.168.5.16</span>
<span style="color: #0000ff;"> DocumentRoot /var/www/html/default</span>
 ErrorLog logs/default-error_log
 CustomLog logs/default-access_log common
&lt;/VirtualHost&gt;</pre>
<pre>&lt;VirtualHost *:80&gt;
<span style="color: #0000ff;"> ServerName web1.example.com</span>
<span style="color: #0000ff;"> DocumentRoot /var/www/html/web1.example.com</span>
 ErrorLog logs/web1.example.com-error_log
 CustomLog logs/web1.example.com-access_log common
&lt;/VirtualHost&gt;</pre>
<pre>&lt;VirtualHost *:80&gt;
<span style="color: #0000ff;"> ServerName web2.example.com</span>
<span style="color: #0000ff;"> DocumentRoot /var/www/html/web2.example.com</span>
 ErrorLog logs/web2.example.com-error_log
 CustomLog logs/web2.example.com-access_log common
&lt;/VirtualHost&gt;</pre>
<pre>&lt;VirtualHost *:80&gt;
<span style="color: #0000ff;"> ServerName web3.example.com</span>
<span style="color: #0000ff;"> DocumentRoot /var/www/html/web3.example.com</span>
 ErrorLog logs/web3.example.com-error_log
 CustomLog logs/web3.example.com-access_log common
&lt;/VirtualHost&gt;</pre>
<p>&nbsp;</p>
<p>สร้างไดเร็คทอรี DocumentRoot สำหรับเก็บไฟล์ของชื่อเว็บไซต์ต่างๆ</p>
<pre>[root@fc16-64a ~]# <strong>mkdir /var/www/html/default</strong>
[root@fc16-64a ~]# <strong>mkdir /var/www/html/web1.example.com</strong>
[root@fc16-64a ~]# <strong>mkdir /var/www/html/web2.example.com</strong>
[root@fc16-64a ~]# <strong>mkdir /var/www/html/web3.example.com</strong></pre>
<p>สร้างไฟล์เว็บ index.html ของแต่ละเว็บไซต์</p>
<pre>[root@fc16-64a ~]# <strong>echo "Hello, default web site" &gt; /var/www/html/default/index.html</strong>
[root@fc16-64a ~]# <strong>echo "Hello, web1" &gt; /var/www/html/web1.example.com/index.html</strong>
[root@fc16-64a ~]# <strong>echo "Hello, web2" &gt; /var/www/html/web2.example.com/index.html</strong>
[root@fc16-64a ~]# <strong>echo "Hello, web3" &gt; /var/www/html/web3.example.com/index.html</strong></pre>
<p>ใช้คำสั่ง service restart เพื่อรีสตาร์ตเซอร์วิส httpd ใหม่</p>
<pre>[root@fc16-64a ~]# <strong>service httpd restart</strong>
Restarting httpd (via systemctl): [ OK ]</pre>
<p>การคอนฟิก VirtualHost ในที่นี้จะแยก log file ทั้ง access_log และ error_log ตามชื่อเว็บไซต์ด้วย เพื่อสะดวกต่อการตรวจสอบและการทำรายงานการเข้าใช้</p>
<pre>[root@fc16-64a httpd]# <strong>ls -l</strong>
total 4
-rw-r--r--. 1 root root 0 Mar 9 16:34 access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-error_log
-rw-r--r--. 1 root root 458 Mar 9 16:35 error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web1.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web1.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-error_log</pre>
<p>&nbsp;</p>
<h4>ทดสอบจาก Browser (client)</h4>
<p>ใช้ Browser บนเครื่อง Client เปิดไปที่เว็บไซต์ http://web1.example.com</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/01-test-virtualhost.png"><img class="alignnone size-full wp-image-1688" title="01-test-virtualhost" src="http://spalinux.com/wp-content/uploads/2012/03/01-test-virtualhost.png" alt="" width="306" height="122" /></a></p>
<p>ผลที่ทดสอบ ก็เข้าไปอ่านไฟล์ใน /var/www/html/web1.example.com/index.html จริง</p>
<p>ลองดู log file ที่เกิดขึ้น จะเห็นว่าเกิด log เฉพาะในโดเมน web1.example.com เท่านั้น</p>
<pre>[root@fc16-64a ~]# <strong>ls -l /var/log/httpd/</strong>
total 12
-rw-r--r--. 1 root root 0 Mar 9 16:34 access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-error_log
-rw-r--r--. 1 root root 458 Mar 9 16:35 error_log
<span style="color: #0000ff;">-rw-r--r--. 1 root root 222 Mar 9 16:36 web1.example.com-access_log</span>
<span style="color: #0000ff;">-rw-r--r--. 1 root root 234 Mar 9 16:36 web1.example.com-error_log</span>
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-error_log</pre>
<pre>[root@fc16-64a ~]# <strong>tail /var/log/httpd/web1.example.com-access_log</strong>
192.168.5.101 - - [09/Mar/2012:16:36:06 +0700] "GET / HTTP/1.1" 200 12
192.168.5.101 - - [09/Mar/2012:16:36:06 +0700] "GET /favicon.ico HTTP/1.1" 404 291</pre>
<pre>[root@fc16-64a ~]# <strong>tail /var/log/httpd/web1.example.com-error_log</strong>
[Fri Mar 09 16:36:06 2012] [error] [client 192.168.5.101] File does not exist: /var/www/html/web1.example.com/favicon.ico</pre>
<p>&nbsp;</p>
<p>ทดลองอีกครั้งด้วยชื่อเว็บ web2.example.com</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/02-test-web2.png"><img class="alignnone size-full wp-image-1689" title="02-test-web2" src="http://spalinux.com/wp-content/uploads/2012/03/02-test-web2.png" alt="" width="291" height="105" /></a></p>
<p>&nbsp;</p>
<p>log file ที่เกิดขึ้น ก็จะไปขึ้นในไฟล์ web2.example.com-access_log และ web2.example.com-error_log ที่คอนฟิกไว้<br />
แต่ถ้าเข้าด้วย IP ของ Server หรือชื่อ ServerName อื่นๆ ที่ไม่ได้คอนฟิก VirtualHost ไว้ ผลที่ได้จะไปเรียก VirtualHost ที่คอนฟิกไว้บนสุด ในที่นี้คือ DocumentRoot /var/www/html/default</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/03-default-virtualhost.png"><img class="alignnone size-full wp-image-1690" title="03-default-virtualhost" src="http://spalinux.com/wp-content/uploads/2012/03/03-default-virtualhost.png" alt="" width="288" height="101" /></a></p>
<p>&nbsp;</p>
<p>เพราะฉะนั้น ลำดับคอนฟิก VirtualHost ในไฟล์ httpd.conf จึงมีความสำคัญ ในกรณีที่ไม่มีชื่อ ServerName ระบุไว้</p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://httpd.apache.org/docs/2.2/vhosts/" target="_blank">Apache Virtual Host documentation</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/03/configure-multiple-web-site-on-one-web-server-by-apache-virtualhost/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แก้ไข Joomla Directory Permissions Unwritable บนลีนุกซ์ที่เปิด SELinux</title>
		<link>http://spalinux.com/2012/03/fix-joomla-directory-permissions-unwritable-on-linux-enable-selinux</link>
		<comments>http://spalinux.com/2012/03/fix-joomla-directory-permissions-unwritable-on-linux-enable-selinux#comments</comments>
		<pubDate>Mon, 05 Mar 2012 17:49:10 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SELinux]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1677</guid>
		<description><![CDATA[เมื่อลูกค้าขอให้ดูเรื่องความปลอดภัยของเว็บไซต์เป็นพิเศษ เลยต้องจัดเต็มซะหน่อย จากที่เคยปิดคุณสมบัติ SELinux เพื่อแก้ปัญหา Directory Permissions Unwritable มาแล้วในบทความ แก้ไข permission ไฟล์หลังการติดตั้ง Joomla 2.5 ครั้งนี้ขอปรับปรุงใหม่ ด้วยการเปิดคุณสมบัติ SELinux ไว้ แล้วแก้ไข security context ของไดเร็คทอรีที่มีปัญหา เพื่อให้สามารถเขียนไฟล์ได้ ในที่นี้ยังคงทดลองบน ​Fedora 16 เหมือนเดิม แต่เท่าที่ลองกับ Linux Distributions อื่นๆ วิธีการแก้ไขก็คล้ายกัน [root@fc16-64a ~]# cat /etc/redhat-release  Fedora release 16 (Verne) ใช้คำสั่ง sestatus เพื่อตรวจสอบสถานะการเปิดคุณสมบัติ SELinux [root@fc16-64a ~]# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux Current mode: enforcing [...]]]></description>
			<content:encoded><![CDATA[<p>เมื่อลูกค้าขอให้ดูเรื่องความปลอดภัยของเว็บไซต์เป็นพิเศษ เลยต้องจัดเต็มซะหน่อย</p>
<p>จากที่เคยปิดคุณสมบัติ SELinux เพื่อแก้ปัญหา Directory Permissions Unwritable มาแล้วในบทความ <a href="http://spalinux.com/2012/03/fix-file-permission-after-install-joomla-2-5">แก้ไข permission ไฟล์หลังการติดตั้ง Joomla 2.5</a></p>
<p>ครั้งนี้ขอปรับปรุงใหม่ ด้วยการเปิดคุณสมบัติ SELinux ไว้ แล้วแก้ไข security context ของไดเร็คทอรีที่มีปัญหา เพื่อให้สามารถเขียนไฟล์ได้</p>
<p><span id="more-1677"></span></p>
<p>ในที่นี้ยังคงทดลองบน ​Fedora 16 เหมือนเดิม แต่เท่าที่ลองกับ Linux Distributions อื่นๆ วิธีการแก้ไขก็คล้ายกัน</p>
<pre>[root@fc16-64a ~]# <strong>cat /etc/redhat-release </strong>
Fedora release 16 (Verne)</pre>
<p>ใช้คำสั่ง sestatus เพื่อตรวจสอบสถานะการเปิดคุณสมบัติ SELinux</p>
<pre>[root@fc16-64a ~]# <strong>sestatus</strong>
<span style="color: #0000ff;">SELinux status: enabled</span>
SELinuxfs mount: /sys/fs/selinux
<span style="color: #0000ff;">Current mode: enforcing</span>
Mode from config file: enforcing
Policy version: 26
Policy from config file: targeted</pre>
<p>เมื่อเปิด SELinux แล้ว แม้เราจะเปลี่ยน owner หรือ permission ของไฟล์ เพื่อให้ apache สามารถ เขียนไฟล์ (write) ได้ แล้ว ในหน้าตรวจสอบ Directory Permissions ก็ยังขึ้น Unwritable เหมือนเดิม</p>
<p>ตัวอย่างการเปลี่ยน owner ของไดเร็คทอรีย่อยภายใต้ administrator แล้ว</p>
<pre>[root@fc16-64a ~]# <strong>cd /var/www/html/joomla25/</strong>
[root@fc16-64a joomla25]# ls -l administrator/
total 36
drwxr-xr-x. 3  apache root 4096 Mar 4 00:42 cache
<span style="color: #0000ff;">drwxr-xr-x. 28 apache root 4096 Mar 4 00:37 components</span>
drwxr-xr-x. 3  root   root 4096 Mar 3 22:54 help
drwxr-xr-x. 2  root   root 4096 Mar 3 22:54 includes
-rw-r--r--. 1  root   root 1495 Feb 1 12:45 index.php
drwxr-xr-x. 15 apache root 4096 Mar 4 00:37 language
drwxr-xr-x. 5  root   root 4096 Mar 3 22:54 manifests
drwxr-xr-x. 16 apache root 4096 Mar 3 22:54 modules
drwxr-xr-x. 5  apache root 4096 Feb 1 12:45 templates</pre>
<p>ที่เป็นเช่นนี้เพราะว่า หลังจากตรวจสอบสิทธิในการอ่านเขียนไฟล์ (owner, group, permission) พื้นฐาน Discretionary Access Control (DAC) ของลีนุกซ์แล้ว คุณสมบัติ SELinux จะทำการตรวจสอบสิทธิเพิ่มเติม Mandatory Access Control (MAC) ว่าเป็นไปตามนโยบาย (Policy) หลักของเครื่องหรือไม่</p>
<p>ปัญหาอย่างแรกผู้ใช้ (apache) ต้องการเขียนไฟล์ลงบนไดเร็คทอรีต่างๆ ยกตัวอย่างเช่น &#8220;administrator/components/&#8221;</p>
<p>เริ่มต้น จะมีการตรวจสอบสิทธิพื้นฐานของลีนุกซ์ ผู้ใช้ apache สามารถเขียนไฟล์ลงในไดเร็คทอรีนี้ได้ เพราะเป็น owner และ permission เป็น rwx (read, write, executue ได้)</p>
<pre>[root@fc16-64a joomla25]# <strong>ls -ld administrator/components/</strong>
d<span style="color: #0000ff;">rwx</span>r-xr-x. 28 <span style="color: #0000ff;">apache</span> root 4096 Mar 4 00:37 administrator/components/</pre>
<p>ขั้นต่อไปจะมีการตรวจสอบ SELinux Contexts ของไฟล์ ใช้คำสั่ง ls ตามด้วยออปชั่น &#8216;-Z&#8217;</p>
<pre>[root@fc16-64a joomla25]# <strong>ls -Zd administrator/components/</strong>
drwxr-xr-x. apache root system_u:object_r:<span style="color: #0000ff;">httpd_sys_content_t</span>:s0 administrator/components/</pre>
<p>ในที่นี้ให้สนใจเฉพาะ httpd_sys_content_t เป็น SELinux Context &#8220;type&#8221; ของไฟล์</p>
<p>อ้างอิงจาก</p>
<p>http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html</p>
<p><span style="color: #0000ff;">httpd_sys_content_t</span><br />
Use this type for static web content, such as .html files used by a static website. Files labeled with this type are accessible <span style="color: #0000ff;">(read only) to httpd and scripts executed by httpd</span>. By default, files and directories labeled with this type can not be written to or modified by httpd or other processes. Note: by default, files created in or copied into /var/www/html/ are labeled with the httpd_sys_content_t type.</p>
<p>ไฟล์ที่มีค่า &#8220;type&#8221; แบบนี้ สามารถอ่านได้อย่างเดียว (readonly) เท่านั้น</p>
<h4>การแก้ไขปัญหา</h4>
<p>ต้องเปลี่ยน &#8220;type&#8221; ของไฟล์เป็นแบบอื่น เท่าที่ทดสอบดู ลองเปลี่ยนเป็น httpd_sys_content_rw_t ก็น่าจะสามารถเขียนได้แล้ว</p>
<p>หมายเหตุ มีหลายวิธีการที่แก้ไขปัญหานี้ได้ ขอออกตัวว่านี่เป็นวิธีการหนึ่งเท่านั้นที่น่าง่ายสุด และตรงไปตรงมา</p>
<p><span style="color: #0000ff;">httpd_sys_content_rw_t</span><br />
Files labeled with this type <span style="color: #0000ff;">can be written to by scripts labeled with the httpd_sys_script_exec_t type</span>, but can not be modified by scripts labeled with any other type. You must use the httpd_sys_content_rw_t type to label files that will be read from and written to by scripts labeled with the httpd_sys_script_exec_t type.<br />
ใช้คำสั่ง chcon เพื่อเปลี่ยน SELinux security context ของไฟล์</p>
<p>ตัวอย่างการทดลองเปลี่ยนสองไดเร็คทอรี</p>
<pre>[root@fc16-64a joomla25]# <strong>chcon -t httpd_sys_content_rw_t administrator/components/</strong>
[root@fc16-64a joomla25]# <strong>chcon -t httpd_sys_content_rw_t administrator/language/</strong></pre>
<pre>[root@fc16-64a joomla25]# <strong>ls -Zd administrator/components/</strong>
drwxr-xr-x. apache root system_u:object_r:httpd_sys_rw_content_t:s0 administrator/components/</pre>
<pre>[root@fc16-64a joomla25]# <strong>ls -Zd administrator/language/</strong>
drwxr-xr-x. apache root system_u:object_r:httpd_sys_rw_content_t:s0 administrator/language/</pre>
<p>ทดลองรีเฟรชในหน้าจอ Joomla Administration ก็จะเปลี่ยนเป็น Writable แล้ว</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/s01-after-chcon.png"><img class="alignnone size-full wp-image-1678" title="s01-after-chcon" src="http://spalinux.com/wp-content/uploads/2012/03/s01-after-chcon.png" alt="" width="793" height="422" /></a></p>
<p>&nbsp;</p>
<p>ส่วนที่เหลือก็ไล่เปลี่ยนไดเร็คทอรีทั้งหมดที่แสดงขึ้นมาว่า Unwritable</p>
<p>ขออธิบายแค่นี้ก่อน บอกตามตรงเป็นเรื่องยากพอสมควร ในการทำความเข้าใจ และแก้ปัญหา SELinux แต่ด้วยข้อดีเพื่อช่วยเพิ่มความปลอดภัยให้กับระบบ ทางผู้เขียน จะพยายามศึกษา ทดลอง แล้วนำมาแชร์เล่าสู่กันฟัง</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2012/03/fix-file-permission-after-install-joomla-2-5">แก้ไข permission ไฟล์หลังการติดตั้ง Joomla 2.5</a></li>
<li><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/index.html" target="_blank">Red Hat Enterprise Linux 6 : Security-Enhanced Linux User Guide Edition 2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/03/fix-joomla-directory-permissions-unwritable-on-linux-enable-selinux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แก้ไข permission ไฟล์หลังการติดตั้ง Joomla 2.5</title>
		<link>http://spalinux.com/2012/03/fix-file-permission-after-install-joomla-2-5</link>
		<comments>http://spalinux.com/2012/03/fix-file-permission-after-install-joomla-2-5#comments</comments>
		<pubDate>Sat, 03 Mar 2012 16:59:12 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[permission]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1659</guid>
		<description><![CDATA[หลัง ติดตั้ง Joomla 2.5 บนลีนุกซ์ เสร็จเรียบร้อยแล้ว ต้องมีการแก้ไข permission ของไฟล์และไดเร็คทอรีที่ติดตั้งให้ถูกต้อง เพื่อให้สามารถใช้งานผ่านเว็บ ไม่ว่าจะเป็นการติดตั้งโมดูลใหม่ plugin template การเพิ่มรูป การแก้ไขข้อมูล เข้าสู่หน้า Adminstration ภายใต้เมนู Site -&#62; System Information คลิ้กที่แท็ป Directory Permissions จะแสดงข้อมูล permission ของแต่ละไดเร็คทอรี ต้องแก้ไขให้ Status เป็น Writable ทั้งหมด &#160; วิธีการแก้ไข ทำได้สองวิธี 1. ถ้าเป็น root แนะนำให้ใช้คำสั่ง chown เพื่อเปลี่ยน owner ของไดเร็คทอรี ให้เป็น apache 2. ถ้าไม่สามารถ log เป็น root ได้ ต้องใช้คำสั่ง chmod เพื่อเปลี่ยน permission เป็น [...]]]></description>
			<content:encoded><![CDATA[<p>หลัง <a href="http://spalinux.com/2012/03/install-joomla-2-5-on-linux">ติดตั้ง Joomla 2.5 บนลีนุกซ์</a> เสร็จเรียบร้อยแล้ว ต้องมีการแก้ไข permission ของไฟล์และไดเร็คทอรีที่ติดตั้งให้ถูกต้อง เพื่อให้สามารถใช้งานผ่านเว็บ ไม่ว่าจะเป็นการติดตั้งโมดูลใหม่ plugin template การเพิ่มรูป การแก้ไขข้อมูล</p>
<p><span id="more-1659"></span></p>
<p>เข้าสู่หน้า Adminstration</p>
<p>ภายใต้เมนู Site -&gt; System Information คลิ้กที่แท็ป Directory Permissions จะแสดงข้อมูล permission ของแต่ละไดเร็คทอรี ต้องแก้ไขให้ Status เป็น Writable ทั้งหมด</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/f01-Directory-Permissions.png"><img class="alignnone size-full wp-image-1660" title="f01-Directory-Permissions" src="http://spalinux.com/wp-content/uploads/2012/03/f01-Directory-Permissions.png" alt="" width="802" height="600" /></a></p>
<p>&nbsp;</p>
<p>วิธีการแก้ไข ทำได้สองวิธี</p>
<p>1. ถ้าเป็น root แนะนำให้ใช้คำสั่ง chown เพื่อเปลี่ยน owner ของไดเร็คทอรี ให้เป็น apache<br />
2. ถ้าไม่สามารถ log เป็น root ได้ ต้องใช้คำสั่ง chmod เพื่อเปลี่ยน permission เป็น 777</p>
<p>ตัวอย่างการใช้คำสั่ง chown เพื่อเปลี่ยน owner ของไฟล์ ให้เป็น apache</p>
<pre>[root@fc16-64a ~]# cd /var/www/html/joomla25/</pre>
<pre>[root@fc16-64a joomla25]# chown apache administrator/components
[root@fc16-64a joomla25]# chown apache administrator/language
[root@fc16-64a joomla25]# chown apache administrator/language/en-GB
[root@fc16-64a joomla25]# chown apache administrator/language/overrides
[root@fc16-64a joomla25]# chown apache administrator/manifests/files
[root@fc16-64a joomla25]# chown apache administrator/manifests/libraries
[root@fc16-64a joomla25]# chown apache administrator/manifests/packages
[root@fc16-64a joomla25]# chown apache administrator/modules
[root@fc16-64a joomla25]# chown apache administrator/templates
[root@fc16-64a joomla25]# chown apache components
[root@fc16-64a joomla25]# chown apache images
[root@fc16-64a joomla25]# chown apache images/banners
[root@fc16-64a joomla25]# chown apache images/sampledata
[root@fc16-64a joomla25]# chown apache language
[root@fc16-64a joomla25]# chown apache language/en-GB
[root@fc16-64a joomla25]# chown apache language/overrides
[root@fc16-64a joomla25]# chown apache libraries
[root@fc16-64a joomla25]# chown apache media
[root@fc16-64a joomla25]# chown apache modules
[root@fc16-64a joomla25]# chown apache plugins
[root@fc16-64a joomla25]# chown apache plugins/authentication
[root@fc16-64a joomla25]# chown apache plugins/captcha
[root@fc16-64a joomla25]# chown apache plugins/content
[root@fc16-64a joomla25]# chown apache plugins/editors
[root@fc16-64a joomla25]# chown apache plugins/editors-xtd/
[root@fc16-64a joomla25]# chown apache plugins/extension
[root@fc16-64a joomla25]# chown apache plugins/finder
[root@fc16-64a joomla25]# chown apache plugins/quickicon
[root@fc16-64a joomla25]# chown apache plugins/search
[root@fc16-64a joomla25]# chown apache plugins/system
[root@fc16-64a joomla25]# chown apache plugins/user
[root@fc16-64a joomla25]# chown apache templates
[root@fc16-64a joomla25]# chown apache cache
[root@fc16-64a joomla25]# chown apache administrator/cache
[root@fc16-64a joomla25]# chown apache logs
[root@fc16-64a joomla25]# chown apache tmp</pre>
<pre></pre>
<p>รีเฟรชหน้าเพจ หลังการแก้ไข</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/03/f02-After-Fix-Directory-Permissions.png"><img class="alignnone size-full wp-image-1668" title="f02-After-Fix-Directory-Permissions" src="http://spalinux.com/wp-content/uploads/2012/03/f02-After-Fix-Directory-Permissions.png" alt="" width="801" height="627" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2012/03/install-joomla-2-5-on-linux">ติดตั้ง Joomla 2.5 บนลีนุกซ์</a></li>
<li><a href="http://spalinux.com/2012/03/fix-joomla-directory-permissions-unwritable-on-linux-enable-selinux">แก้ไข Joomla Directory Permissions Unwritable บนลีนุกซ์ที่เปิด SELinux</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/03/fix-file-permission-after-install-joomla-2-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

