<?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; Utility</title>
	<atom:link href="http://spalinux.com/category/utility/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>Resources for Relaxing Linux System Administrators</description>
	<lastBuildDate>Mon, 26 Jul 2010 09:51:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>รันโปรเซสเป็น user อื่น</title>
		<link>http://spalinux.com/2010/03/run_process_as_another_user</link>
		<comments>http://spalinux.com/2010/03/run_process_as_another_user#comments</comments>
		<pubDate>Sat, 06 Mar 2010 05:52:51 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Linux Shell]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Users]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[unix process]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1088</guid>
		<description><![CDATA[เป็นวิธีง่ายๆ เพื่อให้ผู้ใช้ root สามารถรันโปรเซสหรือโปรแกรมบน Linux/UNIX ภายใต้สิทธิหรือ permission ผู้ใช้ user อื่นบนเครื่องเดียวกัน คำสั่งที่ใช้คือ su ตามด้วยออปชั่น &#8216;-c&#8217; รูปแบบการใช้คำสั่งคือ # su - &#60;user_name&#62; -c "&#60;command&#62;" ตัวอย่าง root รันคำสั่ง id ภายใต้สิทธิผู้ใช้ชื่อ user1 # su - user1 -c "id" uid=501(user1) gid=100(users) groups=100(users) ข้อมูลอ้างอิง &#8216;su&#8217; man page]]></description>
			<content:encoded><![CDATA[<p>เป็นวิธีง่ายๆ เพื่อให้ผู้ใช้ root สามารถรันโปรเซสหรือโปรแกรมบน Linux/UNIX ภายใต้สิทธิหรือ permission ผู้ใช้ user อื่นบนเครื่องเดียวกัน</p>
<p><span id="more-1088"></span>คำสั่งที่ใช้คือ su ตามด้วยออปชั่น &#8216;-c&#8217; รูปแบบการใช้คำสั่งคือ</p>
<pre># su - &lt;user_name&gt; -c "&lt;command&gt;"</pre>
<p>ตัวอย่าง root รันคำสั่ง id ภายใต้สิทธิผู้ใช้ชื่อ user1</p>
<pre># <strong>su - user1 -c "id"
</strong>uid=501(user1) gid=100(users) groups=100(users)</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>&#8216;su&#8217; man page</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2010/03/run_process_as_another_user/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>copy ไฟล์ให้เหมือนเดิม</title>
		<link>http://spalinux.com/2009/10/copy_preserve_file_information</link>
		<comments>http://spalinux.com/2009/10/copy_preserve_file_information#comments</comments>
		<pubDate>Sat, 03 Oct 2009 11:02:44 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[cp preserve]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=956</guid>
		<description><![CDATA[ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11 สร้างไฟล์ทดสอบด้วย user1 [user1@fc11-64a tmp]$ echo "Hello World, this is test file." &#62; user1-file.0 [user1@fc11-64a tmp]$ ls -l total 4 -rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0 คำสั่ง cp ไม่มีออปชั่น ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น [root@fc11-64a tmp]# date Sat [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร</p>
<p><span id="more-956"></span></p>
<p>หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11</p>
<h4>สร้างไฟล์ทดสอบด้วย user1</h4>
<pre>[user1@fc11-64a tmp]$ <strong>echo "Hello World, this is test file." &gt; user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>ls -l</strong>
total 4
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0</pre>
<h4>คำสั่ง cp ไม่มีออปชั่น</h4>
<p>ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:06:52 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp user1-file.0 user1-file.1</strong></pre>
<pre>[root@fc11-64a tmp]# ls -l
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
<span style="color: #ff0000;"><strong>-rw-r--r--</strong></span> 1 <strong><span style="color: #ff0000;">root  root</span></strong>  32 2009-10-03 <strong><span style="color: #ff0000;">17:06</span></strong> user1-file.1</pre>
<p>ไฟล์ที่ copy ได้มา จะมี permission, owner, group, timestamp ไม่ตรงกับไฟล์ต้นฉบับ เพราะดีฟอลต์ คำสั่ง cp จะไม่ preserve ข้อมูลของไฟล์เลย</p>
<h4>cp -p เก็บข้อมูลของไฟล์</h4>
<p>หากต้องการ preserve ข้อมูลของไฟล์ด้วย ต้องระบุออปชั่น &#8216;-p&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -p    same as --preserve=mode,ownership,timestamps</pre>
<p>ทดสอบ cp ด้วยออปชั่น &#8216;-p&#8217;</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:08:01 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-r--r-- 1 root  root  32 2009-10-03 17:06 user1-file.1
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.2</pre>
<p>หมายเหตุ หากใช้ user อื่น ที่ไม่ใช่ root เช่น user2 จะไม่สามารถคงข้อมูล owner, group ของไฟล์ได้</p>
<pre>[user2@fc11-64a tmp]$ <strong>cp -p user1-file.0 user1-file.3
</strong>[user2@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rw-r-- 1 <span style="color: #ff0000;"><strong>user2 user2</strong></span> 32 2009-10-03 17:03 user1-file.3</pre>
<h4>ทดสอบ preserve ข้อมูล ACL</h4>
<p>ใช้ user1 คอนฟิก ACL เพิ่มเติมในไฟล์</p>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
group::rw-
other::r--</pre>
<pre>[user1@fc11-64a tmp]$ <strong>setfacl -m user:user2:rwx user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
user:user2:rwx
group::rw-
mask::rwx
other::r--</pre>
<p>การใช้ออปชั่น &#8216;-p&#8217; สามารถ preserve File ACL ที่คอนฟิกไว้ได้ด้วย</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.3
</strong>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.3</pre>
<pre>[root@fc11-64a tmp]# <strong>getfacl user1-file.3
</strong># file: user1-file.3
# owner: user1
# group: user1
user::rw-
<span style="color: #0000ff;"><strong>user:user2:rwx</strong>
</span>group::rw-
mask::rwx
other::r--</pre>
<h4>cp -v แสดงไฟล์ที่กำลัง copy</h4>
<p>หากต้องการดูไฟล์ที่กำลัง copy อยู่ สามารถใช้ ออปชั่น &#8216;-v&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -v, --verbose    explain what is being done</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pv user1-file.0 user1-file.4
</strong>`user1-file.0' -&gt; `user1-file.4'</pre>
<h4>soft link file</h4>
<p>ใช้ user1 สร้าง soft link ชื่อ user1-link.0 เพื่อ link ไฟล์ไปยัง user1-file.0</p>
<pre>[user1@fc11-64a tmp]$ <strong>ln -s user1-file.0 user1-link.0
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0</pre>
<p>ใช้คำสั่ง cp -p เพื่อ copy ไฟล์ soft link</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-link.0 user1-link.1</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 <span style="color: #ff0000;">32</span> 2009-10-03 17:03 user1-link.1</pre>
<p>ผลลัพธ์กลับเป็นการ copy ไฟล์ต้นฉบับ user1-file.0 ไม่ใช่ link file</p>
<h4>cp -d เก็บสถานะ link file</h4>
<p>หากต้องการ copy ไฟล์แล้วยังคงสถานะ link file ไว้ ต้องใช้ ออปชั่น &#8216;-d&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -d    same as --no-dereference --preserve=links</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-link.0 user1-link.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 8
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-link.1
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:18 user1-link.2 -&gt; user1-file.0</pre>
<h4>copy ทั้งไดเร็คทอรี</h4>
<p>ใช้ user1 สร้างไดเร็คทอรี และไฟล์ย่อยๆ ข้างใน</p>
<pre>[user1@fc11-64a tmp]$ <strong>mkdir user1-dir.0
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file1.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file2.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file3.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file4.txt
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
[user1@fc11-64a tmp]$ <strong>ls -l user1-dir.0/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<p>ทดลองใช้ root เพื่อ copy ไฟล์ทั้งไดเร็คทอรี</p>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-dir.0/ user1-dir.1
</strong>cp: omitting directory `user1-dir.0/'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0</pre>
<p>ออปชั่นแค่นี้ ไม่สามารถ copy ไดเร็คทอรี ได้</p>
<h4>cp -R ทั้งไดเร็คทอรี</h4>
<p>หากต้องการ copy ทั้งไดเร็คทอรี ต้องใช้ออปชั่น &#8216;-R&#8217; หรือ &#8216;-r&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -R, -r, --recursive    copy directories recursively</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pvdR user1-dir.0/ user1-dir.1
</strong>`user1-dir.0/' -&gt; `user1-dir.1'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.1/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.1/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.1/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.1/sub-file4.txt'</pre>
<p>ตรวจสอบไดเร็คทอรี และไฟล์ที่อยู่ข้างใน</p>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
[root@fc11-64a tmp]# <strong>ls -l user1-dir.1/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>cp -a ออปชั่นเดียวทำทุกอย่าง</h4>
<p>ออปชั่นที่ยกตัวอย่างข้างบนมาทั้งหมด (ยกเว้น -v) สามารถเปลี่ยนเป็นออปชั่นเดียวได้คือ &#8216;-a&#8217; เพื่อการ copy ไฟล์แล้วคงข้อมูลของไฟล์ไว้ทั้งหมด รวมทั้ง copy ไดเร็คทอรี ไฟล์ย่อยๆ ได้ทั้งหมด</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -a, --archive    same as -dR --preserve=all</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -av user1-dir.0/ user1-dir.2
</strong>`user1-dir.0/' -&gt; `user1-dir.2'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.2/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.2/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.2/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.2/sub-file4.txt'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
<span style="color: #0000ff;">drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.2
</span>[root@fc11-64a tmp]# <strong>ls -l user1-dir.2/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>man cp(1)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2009/10/copy_preserve_file_information/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>การใช้ GPG Public Key ตรวจสอบไฟล์ rpm</title>
		<link>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm</link>
		<comments>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm#comments</comments>
		<pubDate>Sat, 27 Dec 2008 18:13:10 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=409</guid>
		<description><![CDATA[ก่อนที่จะติดตั้งไฟล์ rpm ที่ได้มา ไม่ว่าจากแผ่นดีวีดีติดตั้งของ distribution ต่างๆ หรือดาวน์โหลดมาจากอินเตอร์เน็ต แนะนำให้อิมพอร์ต Public Key ของไฟล์ rpm ลงในเครื่องที่จะติดตั้งก่อน เพื่อใช้ตรวจสอบความถูกต้องของไฟล์ rpm ว่าไฟล์ที่ใช้ในการติดตั้งเป็นไฟล์ที่มาจากผู้พัฒนาหรือสร้างไฟล์ rpm จริงๆ ไม่ได้ถูกเปลี่ยนแปลงใดๆ การอิมพอร์ต Public Key ไฟล์ Public Key ที่จะอิมพอร์ตนั้น แนะนำให้ดาวน์โหลดจากแหล่งที่น่าเชื่อถือได้ เช่น mirror site ที่เป็นทางการต่างๆ ซึ่งสามารถตรวจสอบได้จากเว็บไซต์ผู้ผลิต หรือถ้าเราดาวน์โหลดไฟล์ rpm จาก mirror site ที่นึง แนะนำให้โหลดไฟล์ Public Key จากเว็บอีกทีหนึ่ง ในบทความนี้จะทดสอบกับไฟล์ rpm ที่มีอยู่ในแผ่นดีวีดีติดตั้ง Fedora 10 แต่จะโหลดไฟล์ Public Key จาก http://mirrors.kernel.org/ โดยส่วนใหญ่แล้วไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง [...]]]></description>
			<content:encoded><![CDATA[<p>ก่อนที่จะติดตั้งไฟล์ rpm ที่ได้มา ไม่ว่าจากแผ่นดีวีดีติดตั้งของ distribution ต่างๆ หรือดาวน์โหลดมาจากอินเตอร์เน็ต แนะนำให้อิมพอร์ต Public Key ของไฟล์ rpm ลงในเครื่องที่จะติดตั้งก่อน เพื่อใช้ตรวจสอบความถูกต้องของไฟล์ rpm ว่าไฟล์ที่ใช้ในการติดตั้งเป็นไฟล์ที่มาจากผู้พัฒนาหรือสร้างไฟล์ rpm จริงๆ ไม่ได้ถูกเปลี่ยนแปลงใดๆ</p>
<p><span id="more-409"></span></p>
<h4>การอิมพอร์ต Public Key</h4>
<p>ไฟล์ Public Key ที่จะอิมพอร์ตนั้น แนะนำให้ดาวน์โหลดจากแหล่งที่น่าเชื่อถือได้ เช่น mirror site ที่เป็นทางการต่างๆ ซึ่งสามารถตรวจสอบได้จากเว็บไซต์ผู้ผลิต หรือถ้าเราดาวน์โหลดไฟล์ rpm จาก mirror site ที่นึง แนะนำให้โหลดไฟล์ Public Key จากเว็บอีกทีหนึ่ง ในบทความนี้จะทดสอบกับไฟล์ rpm ที่มีอยู่ในแผ่นดีวีดีติดตั้ง Fedora 10 แต่จะโหลดไฟล์ Public Key จาก http://mirrors.kernel.org/ โดยส่วนใหญ่แล้วไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง จะใช้ไฟล์ Public Key เดียวกันในการตรวจสอบ เพราะฉะนั้น ถ้าเราอิมพอร์ตคีย์ครั้งหนึ่งลงไปแล้ว เราก็สามารถใช้ตรวจสอบไฟล์อื่นๆ ที่อยู่ในแผ่นติดตั้งได้ โดยไม่ต้องอิมพอร์ตซ้ำ</p>
<p>ตัวอย่างการตรวจสอบไฟล์ rpm ก่อนการอิมพอร์ต Public Key</p>
<pre>[root@fc10 ~]# <strong>mount /dev/dvd /media</strong>/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@fc10 ~]# <strong>cd /media/Packages/</strong></pre>
<pre>[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm</strong>
samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 <span style="color: #ff0000;"><strong>(GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)</strong></span></pre>
<p>ออปชั่น &#8216;&#8211;checksig&#8217; หรือ &#8216;-K&#8217; ใช้เพื่อการตรวจสอบความถูกต้องเช่น digest, signature ของไฟล์ rpm ด้วยเทคนิคต่างๆ ผลลัพธ์จะแสดงค่าหลายอย่าง ในที่นี้จะเห็นว่ามีคำว่า (GPG) NOT OK (MISSING KEYS:&#8230;) ฟ้องขึ้นมา แสดงว่าการตรวจสอบ Public Key ของไฟล์ไม่ถูกต้อง ซึ่งอาจเป็นเพราะว่าไฟล์ที่ดาวน์โหลดนั้นถูกเปลี่ยนแปลงไปจริงๆ โหลดมาไม่สมบูรณ์ หรืออีกเหตุผลนึงในที่นี้คือ ไม่มี Public Key ของไฟล์นั้น</p>
<p>สำหรับ Fedora 10 (i386) สามารถดาวน์โหลด Public Key ได้จาก <a href="http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/RPM-GPG-KEY-fedora-10-primary">http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/RPM-GPG-KEY-fedora-10-primary</a></p>
<p>หมายเหตุ ในแต่ละเวอร์ชั่น จะใช้ Public Key ไม่เหมือนกัน</p>
<pre>ตัวอย่างไฟล์ Public Key ของ Fedora 10 (i386) (ผลลัพธ์ถูกตัดออกไปบางส่วน)
 
[root@fc10 ~]# <strong>cat RPM-GPG-KEY-fedora-10-primary</strong>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)</pre>
<pre>mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----</pre>
<p>ใช้คำสั่ง rpm ด้วยออปชั่น &#8216;&#8211;import&#8217; เพื่ออิมพอร์ตไฟล์ Public Key เข้าไปในเครื่อง</p>
<pre>[root@fc10 ~]# <strong>rpm --import RPM-GPG-KEY-fedora-10-primary</strong></pre>
<p>ตรวจสอบไฟล์ rpm ที่อยู่ในแผ่นติดตั้งอีกครั้ง</p>
<pre>[root@fc10 ~]# <strong>cd /media/Packages/</strong>
[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm</strong>
samba-client-3.2.4-0.22.fc10.i386.rpm: (sha1) dsa sha1 md5 <span style="color: #339966;"><strong>gpg OK</strong></span></pre>
<p>หลังจากที่อิมพอร์ตคีย์เข้าไปแล้ว ผลลัพธ์การตรวจสอบ gpg จะแสดงผลว่าถูกต้อง</p>
<h4>ตรวจสอบ Public Key ที่อิมพอร์ตเข้าเครื่องแล้ว</h4>
<p>เราสามารถใช้คำสั่ง rpm ด้วยออปชั่น &#8216;-q&#8217; เพื่อตรวจสอบ Public Key ที่ถูกอิมพอร์ตเข้าเครื่องแล้ว ดังตัวอย่าง</p>
<p>ตัวอย่างการตรวจสอบ Public Key ที่อิมพอร์ต</p>
<pre>[root@fc10 ~]# <strong>rpm -qa gpg-pubkey*</strong>
gpg-pubkey-4ebfc273-48b5dbf3</pre>
<pre>[root@fc10 ~]# <strong>rpm -qil gpg-pubkey-4ebfc273-48b5dbf3</strong>
Name        : gpg-pubkey                   Relocations: (not relocatable)
Version     : 4ebfc273                          Vendor: (none)
Release     : 48b5dbf3                      Build Date: Sat 27 Dec 2008 11:27:03 PM ICT
Install Date: Sat 27 Dec 2008 11:27:03 PM ICT      Build Host: localhost
Group       : Public Keys                   Source RPM: (none)
Size        : 0                                License: pubkey
Signature   : (none)
Summary     : gpg(Fedora (10) &lt;fedora@fedoraproject.org&gt;)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.6.0-rc1 (NSS-3)</pre>
<pre>mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----</pre>
<pre>(contains no files)</pre>
<h4>ถอด Public Key ออกจากเครื่อง</h4>
<p>ถ้าเราต้องการถอด Public Key ออกจากเครื่อง (uninstall) สามารถใช้คำสั่ง rpm ด้วยออปชั่น &#8216;-e&#8217; ได้ดังนี้</p>
<p>ตัวอย่างการถอด Public Key และผลลัพธ์ที่เกิดขึ้น</p>
<pre>[root@fc10 ~]# <strong>rpm -ev gpg-pubkey
</strong>[root@fc10 ~]# <strong>rpm -qa gpg-pubkey*</strong></pre>
<pre>[root@fc10 ~]# <strong>cd /media/Packages/</strong></pre>
<pre>[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm
</strong>samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 <span style="color: #ff0000;"><strong>(GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)</strong></span></pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>Manual Page &#8211; rpm(8)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แก้ไขหน้าจอการบู๊ตของ Fedora 10</title>
		<link>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10</link>
		<comments>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10#comments</comments>
		<pubDate>Fri, 19 Dec 2008 16:52:48 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[booting]]></category>
		<category><![CDATA[fedora 10]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=398</guid>
		<description><![CDATA[หลังจากติดตั้ง Fedora 10 เมื่อบู๊ตเครื่องขึ้นมา จะมีแถบสี วิ่งจากซ้ายไปขวา ไปชนคำว่า Fedora 10 โดยไม่มีข้อความเกี่ยวกับการบู๊ตขึ้นมาเลย จะมีอีกทีก็หลังจากบู๊ตเสร็จ ขึ้นหน้า login ส่วนตัวผู้เขียนแล้ว ไม่ชอบหน้าจอการบู๊ตแบบนี้ คือบางครั้งหน้าจอค้างไปนาน เราไม่สามารถรู้ได้เลยว่าไปติดปัญหาที่ตรงไหน ไม่เหมือนกับการขึ้นข้อความแสดงการโหลดส่วนต่างๆ ดังนั้นเลยหาวิธีแก้ไข ให้กลับมาเหมือนเดิม หน้าจอการบู๊ต Fedora 10 คอนฟิกต่างๆ สำหรับการบู๊ตเครื่อง จะถูกระบุอยู่ในไฟล์ /boot/grub/grub.conf หรือ /etc/grub.conf เป็นลิ้งค์ไฟล์ (soft link) เชื่อมโยงอีกที [root@fc10-b1 ~]# ls -l /etc/grub.conf lrwxrwxrwx 1 root root 22 2008-12-10 06:13 /etc/grub.conf -&#62; ../boot/grub/grub.conf ตัวอย่างไฟล์ grub.conf ที่ได้จากการติดตั้ง Fedora 10 [root@fc10-b1 ~]# [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากติดตั้ง Fedora 10 เมื่อบู๊ตเครื่องขึ้นมา จะมีแถบสี วิ่งจากซ้ายไปขวา ไปชนคำว่า Fedora 10 โดยไม่มีข้อความเกี่ยวกับการบู๊ตขึ้นมาเลย จะมีอีกทีก็หลังจากบู๊ตเสร็จ ขึ้นหน้า login</p>
<p>ส่วนตัวผู้เขียนแล้ว ไม่ชอบหน้าจอการบู๊ตแบบนี้ คือบางครั้งหน้าจอค้างไปนาน เราไม่สามารถรู้ได้เลยว่าไปติดปัญหาที่ตรงไหน ไม่เหมือนกับการขึ้นข้อความแสดงการโหลดส่วนต่างๆ ดังนั้นเลยหาวิธีแก้ไข ให้กลับมาเหมือนเดิม</p>
<p><span id="more-398"></span></p>
<h4>หน้าจอการบู๊ต Fedora 10</h4>
<p>คอนฟิกต่างๆ สำหรับการบู๊ตเครื่อง จะถูกระบุอยู่ในไฟล์ /boot/grub/grub.conf หรือ /etc/grub.conf เป็นลิ้งค์ไฟล์ (soft link) เชื่อมโยงอีกที</p>
<pre>[root@fc10-b1 ~]# <strong>ls -l /etc/grub.conf
</strong>lrwxrwxrwx 1 root root 22 2008-12-10 06:13 /etc/grub.conf -&gt; ../boot/grub/grub.conf</pre>
<p>ตัวอย่างไฟล์ grub.conf ที่ได้จากการติดตั้ง Fedora 10</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
<span style="color: #0000ff;">timeout=0
</span>splashimage=(hd0,0)/grub/splash.xpm.gz
<span style="color: #0000ff;">hiddenmenu
</span>password --md5 $1$
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc <span style="color: #0000ff;">rhgb quiet</span>
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>หน้าจอดีฟอลต์ตอนบู๊ต Fedora 10</p>
<p><img class="alignnone size-full wp-image-402" title="Fedora 10 default booting screen" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_default_booting_screen.png" alt="Fedora 10 default booting screen" width="500" height="278" /></p>
<p>หมายเหตุ ก่อนที่จะแก้ไขไฟล์คอนฟิก แนะนำให้ copy ไฟล์ต้นฉบับสำรองไว้ เผื่อมีปัญหาจะได้แก้คืนได้</p>
<pre>[root@fc10-b1 ~]# <strong>cp /boot/grub/grub.conf /boot/grub/grub.conf.orig</strong></pre>
<h4>แก้ไขให้ขึ้นเมนูตอนบู๊ต (Boot Manager)</h4>
<p>ถ้าต้องการให้ขึ้นเมนูตอนบู๊ต เช่นเครื่องมีหลาย OS ติดตั้งไว้  ต้องแก้คอนฟิกในไฟล์ grub.conf โดยสิ่งที่ต้องแก้คือ ลบบรรทัด hiddenmenu และสามารถตั้งเวลาให้แสดงเมนูบู๊ตได้ โดยการเปลี่ยนค่า timeout (หน่วยเป็นวินาที)</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf เพื่อให้แสดงเมนูบู๊ตเป็นเวลา 5 วินาที แสดงเฉพาะส่วนที่เปลี่ยนแปลง</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
timeout=5
...
#hiddenmenu
...</pre>
<p>หลังจากแก้ไขไฟล์ grub.conf ทดลองรีบู๊ตเครื่อง จะมีเมนูบู๊ตขึ้นมา</p>
<p>ตัวอย่างหน้าจอเมนูบู๊ต</p>
<p><img class="alignnone size-full wp-image-403" title="Fedora 10 display boot menu" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_boot_menu.png" alt="Fedora 10 display boot menu" width="500" height="375" /></p>
<h4>หน้าจอการโหลด kernel</h4>
<p>หลังจากผ่านหน้าจอเมนูบู๊ต จะเป็นการโหลด kernel เพื่อตรวจสอบอุปกรณ์ต่างๆ ของเครื่อง เช่น CPU, Memory, Disk ถ้าต้องการให้แสดงข้อความการโหลด kernel ด้วย ต้องแก้ไขไฟล์ grub.conf โดยลบคำว่า quiet ในบรรทัดของคอนฟิก kernel</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf  เพื่อแสดงหน้าจอการโหลด kernel</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc rhgb
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>ตัวอย่างหน้าจอการโหลด kernel</p>
<p><img class="alignnone size-full wp-image-404" title="Fedora 10 display loading kernel" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_loading_kernel.png" alt="Fedora 10 display loading kernel" width="500" height="278" /></p>
<h4>หน้าจอการรันโปรแกรมต่างๆ</h4>
<p>หลังจากเครื่องโหลด kernel เรียบร้อย จะมีการ mount filesystem แล้วรันโปรแกรมต่างๆ ที่ตั้งไว้ให้รันอัตโนมัติตอนบู๊ต หน้าจอนี้สามารถแสดงได้โดยการลบคำว่า rhgb ในบรรทัดของคอนฟิก kernel</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf  เพื่อแสดงหน้าจอการรันโปรแกรมต่างๆ</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>ตัวอย่างหน้าจอการรันโปรแกรมต่างๆ</p>
<p><img class="alignnone size-full wp-image-405" title="Fedora 10 display running program" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_running_program.png" alt="Fedora 10 display running program" width="500" height="278" /></p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอนฟิก Window Title ของโปรแกรม PuTTY ด้วยคำสั่ง echo</title>
		<link>http://spalinux.com/2008/10/set_putty_window_title_using_echo</link>
		<comments>http://spalinux.com/2008/10/set_putty_window_title_using_echo#comments</comments>
		<pubDate>Sat, 25 Oct 2008 18:44:36 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Utility]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=311</guid>
		<description><![CDATA[เพื่อป้องกันการสับสนในการเปิดโปรแกรมหลายๆ วินโดวส์พร้อมๆ กัน ในโปรแกรม PuTTY ที่ใช้สำหรับ Telnet หรือ Secure Shell เราสามารถตั้งค่า Window Title เพื่อแยกแยะความแตกต่างระหว่างวินโดวส์แต่ละอันที่เปิดขึ้นมา  ซึ่งทำได้โดย กดที่ไอคอนเล็กๆ มุมบนซ้ายของโปรแกรม PuTTY แล้วเลือก Change Settings&#8230; จากนั้นคลิก Window-Behaviour หน้าจอจะมีให้ตั้งค่า Window title ให้กับโปรแกรมได้ เปลี่ยน Window Title ด้วยคำสั่ง echo การเปลี่ยนแปลง Window Title นี้ นอกจากจะคอนฟิกในตัวโปรแกรม PuTTY เอง ยังสามารถทำได้จากลีนุกซ์ที่ล็อกอินอยู่ในวินโดวส์นั้นๆ โดยใช้คำสั่ง echo ตามด้วยออปชั่น &#8216;-e&#8217; เพื่อระบุ backslash escapes ได้ เช่นถ้าต้องการตั้งค่า Window Title ให้เป็น &#8220;Set PuTTY Window [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://spalinux.com/wp-content/uploads/2008/10/set-putty-window-title1.png"></a>เพื่อป้องกันการสับสนในการเปิดโปรแกรมหลายๆ วินโดวส์พร้อมๆ กัน ในโปรแกรม PuTTY ที่ใช้สำหรับ Telnet หรือ Secure Shell เราสามารถตั้งค่า Window Title เพื่อแยกแยะความแตกต่างระหว่างวินโดวส์แต่ละอันที่เปิดขึ้นมา  ซึ่งทำได้โดย กดที่ไอคอนเล็กๆ มุมบนซ้ายของโปรแกรม PuTTY แล้วเลือก Change Settings&#8230; จากนั้นคลิก Window-Behaviour หน้าจอจะมีให้ตั้งค่า Window title ให้กับโปรแกรมได้</p>
<p><span id="more-311"></span></p>
<h4>เปลี่ยน Window Title ด้วยคำสั่ง echo</h4>
<p>การเปลี่ยนแปลง Window Title นี้ นอกจากจะคอนฟิกในตัวโปรแกรม PuTTY เอง ยังสามารถทำได้จากลีนุกซ์ที่ล็อกอินอยู่ในวินโดวส์นั้นๆ โดยใช้คำสั่ง echo ตามด้วยออปชั่น &#8216;-e&#8217; เพื่อระบุ backslash escapes ได้ เช่นถ้าต้องการตั้งค่า Window Title ให้เป็น &#8220;Set PuTTY Window Title&#8221; สามารถทำได้ดังนี้</p>
<pre>
[user01@server ~]$ <strong>echo -e "\033]0;Set PuTTY Window Title\007";</strong>
</pre>
<p>ตัวอย่างโปรแกรม PuTTY ที่ถูกเปลี่ยน Window Title</p>
<p><img title="Set PuTTY Window Title" src="http://spalinux.com/wp-content/uploads/2008/10/set-putty-window-title1.png" alt=""/></p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>ขอขอบคุณนิตยสาร Linux Journal สำหรับไอเดียของบทความนี้</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/set_putty_window_title_using_echo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>บันทึกหน้าจอลีนุกซ์เทอร์มินอลด้วยคำสั่ง script</title>
		<link>http://spalinux.com/2008/10/capture_linux_terminal_with_script</link>
		<comments>http://spalinux.com/2008/10/capture_linux_terminal_with_script#comments</comments>
		<pubDate>Sat, 25 Oct 2008 18:12:52 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Utility]]></category>
		<category><![CDATA[capture screen]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=305</guid>
		<description><![CDATA[เคยประสบปัญหาแบบนี้หรือไม่ ต้องการเก็บการพิมพ์คำสั่งและผลลัพธ์ที่เกิดขึ้นทั้งหมดที่ทำผ่านหน้าจอเทอร์มินอล เพื่อบันทึกไว้ในไฟล์ ไม่ว่าจะเป็นทางคอนโซลของลีนุกซ์โดยตรง หรือผ่านการ telnet หรือ secure shell ซึ่งไฟล์ที่เก็บนี้สามารถนำมาดูย้อนหลังได้ ถ้าผ่าน telnet หรือ secure shell สามารถทำได้โดยใช้คุณสมบัติ session logging ของโปรแกรมที่ใช้ เช่น โปรแกรม PuTTY ก็มีให้เลือกทำ session logging แล้วเก็บเป็นไฟล์ได้ แต่ถ้าใช้ผ่านคอนโซล (tty) ล่ะ ??? ได้อ่านบทความจากนิตยสาร Linux Journal แนะนำการใช้คำสั่ง script เพื่อบันทึกหน้าจอ ซึ่งตรงกับที่ต้องการ เลยนำมาแนะนำให้ใช้กัน คำสั่ง script เป็นส่วนหนึ่งของชุดโปรแกรม util-linux-ng ซึ่งโดยทั่วไปจะติดตั้งมาพร้อมกับลีนุกซ์เวอร์ชั่นต่างๆ อยู่แล้ว การใช้คำสั่ง script วิธีการใช้คำสั่ง ก็แค่พิมพ์คำสั่ง script ก่อนที่เราจะเริ่มต้นบันทึกหน้าจอ โดยดีฟอลต์ ถ้าไม่มีการระบุออปชั่นใดๆ เลย คำสั่ง script [...]]]></description>
			<content:encoded><![CDATA[<p>เคยประสบปัญหาแบบนี้หรือไม่ ต้องการเก็บการพิมพ์คำสั่งและผลลัพธ์ที่เกิดขึ้นทั้งหมดที่ทำผ่านหน้าจอเทอร์มินอล เพื่อบันทึกไว้ในไฟล์ ไม่ว่าจะเป็นทางคอนโซลของลีนุกซ์โดยตรง หรือผ่านการ telnet หรือ secure shell ซึ่งไฟล์ที่เก็บนี้สามารถนำมาดูย้อนหลังได้</p>
<p>ถ้าผ่าน telnet หรือ secure shell สามารถทำได้โดยใช้คุณสมบัติ session logging ของโปรแกรมที่ใช้ เช่น โปรแกรม PuTTY ก็มีให้เลือกทำ session logging แล้วเก็บเป็นไฟล์ได้ แต่ถ้าใช้ผ่านคอนโซล (tty) ล่ะ ???</p>
<p>ได้อ่านบทความจากนิตยสาร Linux Journal แนะนำการใช้คำสั่ง script เพื่อบันทึกหน้าจอ ซึ่งตรงกับที่ต้องการ เลยนำมาแนะนำให้ใช้กัน</p>
<p>คำสั่ง script เป็นส่วนหนึ่งของชุดโปรแกรม util-linux-ng ซึ่งโดยทั่วไปจะติดตั้งมาพร้อมกับลีนุกซ์เวอร์ชั่นต่างๆ อยู่แล้ว</p>
<p><span id="more-305"></span></p>
<h4>การใช้คำสั่ง script</h4>
<p>วิธีการใช้คำสั่ง ก็แค่พิมพ์คำสั่ง script ก่อนที่เราจะเริ่มต้นบันทึกหน้าจอ โดยดีฟอลต์ ถ้าไม่มีการระบุออปชั่นใดๆ เลย คำสั่ง script จะเก็บหน้าจอไว้บันทึกเป็นชื่อไฟล์ typescript</p>
<p>เมื่อรันคำสั่ง script จะมีการเรียก shell ใหม่ขึ้นมา โดย shell สามารถใช้งานได้ตามปกติ แต่หน้าจอการพิมพ์คำสั่ง รวมทั้งผลลัพธ์ที่เกิดขึ้นทั้งหมดใน shell นี้ จะถูกบันทึกเก็บไว้ในไฟล์ typescript</p>
<p>หากต้องการหยุด หรือสิ้นสุดการบันทึกหน้าจอ ให้พิมพ์คำสั่ง exit จะเป็นการออกจาก shell ที่คำสั่ง script สร้างขึ้น กลับเข้าสู่ shell ก่อนหน้า</p>
<p>ตัวอย่างการใช้คำสั่ง script</p>
<pre>[user01@server script]$ <strong>script
</strong>Script started, file is typescript
[user01@server script]$ <strong>ls -l
</strong>total 0
-rw-r--r-- 1 user01 users 0 2008-10-26 00:28 typescript
[user01@server script]$ <strong>date
</strong>Sun Oct 26 00:30:38 ICT 2008
[user01@server script]$ <strong>exit
</strong>exit
Script done, file is typescript</pre>
<p>ใช้คำสัง cat เพื่อดูไฟล์ที่บันทึกไว้ได้ โดยพิมพ์ cat แล้วตามด้วยชื่อไฟล์</p>
<p>ตัวอย่างการใช้คำสั่ง cat เพื่อดูไฟล์ที่บันทึกไว้</p>
<pre>[user01@server script]$ <strong>cat typescript</strong>
Script started on Sun 26 Oct 2008 12:28:00 AM ICT
[user01@server script]$ ls -l
total 0
-rw-r--r-- 1 user01 users 0 2008-10-26 00:28 typescript
[user01@server script]$ date
Sun Oct 26 00:30:38 ICT 2008
[user01@server script]$ exit
exit</pre>
<pre>Script done on Sun 26 Oct 2008 12:30:42 AM ICT</pre>
<p>ไฟล์ที่บันทึกไว้ จะเก็บเวลาเริ่มต้นและสิ้นสุดในการบันทึกหน้าจอไว้ด้วย</p>
<p>ถ้าต้องการตั้งชื่อไฟล์ที่บันทึก เป็นชื่ออื่น นอกจาก typescript สามารถพิมพ์ชื่อไฟล์ที่ต้องการต่อท้ายคำสั่งได้เลย เช่นต้องการบันทึกชื่อไฟล์เป็น server-capture-session.log สามารถทำได้ดังนี้</p>
<pre>[user01@server script]$ <strong>script server-capture-session.log
</strong>Script started, file is server-capture-session.log
[user01@server script]$ <strong>ls
</strong>server-capture-session.log
[user01@server script]$ <strong>exit
</strong>exit
Script done, file is server-capture-session.log</pre>
<h4>การบันทึกหน้าจอและดูจากเครื่องอื่นพร้อมกัน แบบ real-time</h4>
<p>การใช้คำสั่ง script นอกจากจะสามารถบันทึกเป็นไฟล์เพื่อดูย้อนหลังแล้ว หากต้องการให้ผู้ใช้อื่นๆ สามารถดูสิ่งที่เกิดขึ้นในหน้าจอของเราพร้อมกันไปด้วย (real-time) จากเครื่องอื่นๆ  โดยไม่ต้องมายืนดูข้างหลังของเรา สามารถทำได้ดังนี้</p>
<p>หน้าจอของเราต้องพิมพ์คำสั่ง script ตามด้วยออปชั่น &#8216;-f&#8217; เพื่อสั่งให้คำสั่ง script ทำการ flush ข้อมูลเขียนลงไฟล์ที่บันทึกทุกครั้งเมื่อมีการเปลี่ยนแปลงหน้าจอของเรา</p>
<pre>[user01@server script]$ <strong>script -f /tmp/capture-real-time.log
</strong>Script started, file is /tmp/capture-real-time.log
[user01@server script]$ <strong>echo "demo how to capture real-time terminal session logging"
</strong>demo how to capture real-time terminal session logging
...</pre>
<p>ส่วนผู้ใช้ที่อยู่บนเครื่องอื่นๆ ถ้าต้องการดูไปพร้อมๆ กัน สามารถใช้คำสั่ง tail ด้วยออปชั่น &#8216;-f&#8217; แล้วตามด้วยชื่อไฟล์ทึ่ถูกบันทึก</p>
<pre>[user02@server ~]$ <strong>tail -f /tmp/capture-real-time.log
</strong>Script started on Sun 26 Oct 2008 12:50:04 AM ICT
[user01@server script]$ echo "demo how to capture real-time terminal session logging"
demo how to capture real-time terminal session logging
...</pre>
<p>ผู้ดูจากคำสั่ง tail จะเห็นเหมือนกับหน้าจอเทอร์มินอลของเราทุกอย่าง ทั้งการพิมพ์ การแก้ไข การลบข้อความ</p>
<p>หากต้องการหยุดการดู จากคำสั่ง tail ให้กด [Ctrl]-[c]</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>script(1) man page &#8211; make typescript of terminal session</li>
<li>ขอบคุณนิตยสาร Linux Journal ที่แนะนำคำสั่ง</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/capture_linux_terminal_with_script/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH &#8211; Secure Shell ล็อกอินด้วย Public Key Authentication</title>
		<link>http://spalinux.com/2008/10/ssh_secure_shell_login_using_public_key_authentication</link>
		<comments>http://spalinux.com/2008/10/ssh_secure_shell_login_using_public_key_authentication#comments</comments>
		<pubDate>Thu, 09 Oct 2008 18:30:13 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Shell]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[public key authentication]]></category>
		<category><![CDATA[secure shell]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=235</guid>
		<description><![CDATA[จากที่ได้ แนะนำการใช้งานโปรแกรม Secure Shell (SSH) เพื่อล็อกอินไปยังเครื่องอื่นนั้น โดยดีฟอลต์แล้วจะต้องใส่รหัสผ่าน (password) ก่อนที่จะล็อกเข้าไปยังเครื่องปลายทางได้ หรือรันคำสั่งบนเครื่องปลายทางได้ แต่ในบางครั้งการที่ต้องใส่รหัสผ่านทุกครั้งทำให้ไม่สะดวกในการใช้งาน ตัวอย่างเช่นต้องล็อกอินไปยังหลายๆ เครื่องอยู่เป็นประจำ หรือการเขียน Shell Script เพื่อล็อกอินไปยังเครื่องต่างๆ เพื่อรันคำสั่งที่ต้องการ   ในที่นี้จะแนะนำการล๊อกอินไปยังเครื่องปลายทางโดยไม่ต้องใส่รหัสผ่าน แต่อาศัยการล็อกด้วย Public Key Authentication การตรวจสอบสิทธิในการล็อกอินโดยใช้ Public Key Authentication ในตัวอย่างของบทความนี้จะคอนฟิกในระดับ user คือจะคอนฟิก user1 บนเครื่องไคลเอนต์ (Client) เพื่อจะล็อกอินไปเป็น user2 บนเซิร์ฟเวอร์ (Server) โดยไม่ต้องใส่รหัสผ่าน ขั้นตอนที่ต้องทำมีดังนี้ หมายเหตุ ตัวอย่างในบทความนี่ทดสอบบน Fedora 9 ซึ่งคอนฟิกดีฟอลต์จะอนุญาตให้สามารถล็อกอินแบบ Public Key Authentication ได้ หากคุณใช้ลีนุกซ์เวอร์ชั่นอื่นๆ ถ้าทำตามแล้วไม่ได้ ลองตรวจสอบไฟล์คอนฟิกของ ssh server ซึ่งอยู่ในไฟล์ /etc/ssh/sshd_config [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่ได้ <a href="http://spalinux.com/2008/10/introduction_to_secure_shell_ssh" target="_self">แนะนำการใช้งานโปรแกรม Secure Shell (SSH)</a> เพื่อล็อกอินไปยังเครื่องอื่นนั้น โดยดีฟอลต์แล้วจะต้องใส่รหัสผ่าน (password) ก่อนที่จะล็อกเข้าไปยังเครื่องปลายทางได้ หรือรันคำสั่งบนเครื่องปลายทางได้</p>
<p>แต่ในบางครั้งการที่ต้องใส่รหัสผ่านทุกครั้งทำให้ไม่สะดวกในการใช้งาน ตัวอย่างเช่นต้องล็อกอินไปยังหลายๆ เครื่องอยู่เป็นประจำ หรือการเขียน Shell Script เพื่อล็อกอินไปยังเครื่องต่างๆ เพื่อรันคำสั่งที่ต้องการ   ในที่นี้จะแนะนำการล๊อกอินไปยังเครื่องปลายทางโดยไม่ต้องใส่รหัสผ่าน แต่อาศัยการล็อกด้วย Public Key Authentication</p>
<p><span id="more-235"></span></p>
<p>การตรวจสอบสิทธิในการล็อกอินโดยใช้ Public Key Authentication ในตัวอย่างของบทความนี้จะคอนฟิกในระดับ user คือจะคอนฟิก user1 บนเครื่องไคลเอนต์ (Client) เพื่อจะล็อกอินไปเป็น user2 บนเซิร์ฟเวอร์ (Server) โดยไม่ต้องใส่รหัสผ่าน ขั้นตอนที่ต้องทำมีดังนี้</p>
<p>หมายเหตุ ตัวอย่างในบทความนี่ทดสอบบน Fedora 9 ซึ่งคอนฟิกดีฟอลต์จะอนุญาตให้สามารถล็อกอินแบบ Public Key Authentication ได้ หากคุณใช้ลีนุกซ์เวอร์ชั่นอื่นๆ ถ้าทำตามแล้วไม่ได้ ลองตรวจสอบไฟล์คอนฟิกของ ssh server ซึ่งอยู่ในไฟล์ /etc/ssh/sshd_config โดยคอนฟิกที่ต้องเปิดไว้คือ PubkeyAuthentication และ AuthorizedKeysFile</p>
<h4>สร้าง Public/Private Key ของ user1 บนเครื่องไคลเอนต์</h4>
<p>ล๊อกอินเป็น user1 บนเครื่องไคลเอนต์แล้วใช้คำสั่ง ssh-keygen เพื่อสร้าง Public/Private Key</p>
<p>ตัวอย่างการใช้คำสั่ง ssh-keygen</p>
<pre>[user1@client ~]$ <strong>ssh-keygen
</strong>Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
fd:5c:11.......... user1@client</pre>
<p>สองไฟล์ที่ถูกสร้างจากการรันคำสั่ง ssh-keygen จะถูกเก็บไว้ในไดเร็คทอรี .ssh/ โดยจะมีไฟล์</p>
<ul>
<li><strong>id_rsa</strong> เป็นไฟล์ที่เก็บ Private Key ซี่งเป็นคีย์ที่เป็นความลับไม่แนะนำให้เปิดเผยไฟล์นี้ให้คนอื่นเห็น สังเกตได้จากสิทธิของไฟล์ (permission) จะเป็น 600</li>
<li><strong>id_rsa.pub</strong> เป็นไฟล์ที่เก็บ Public Key ซึ่งเป็นคีย์ที่สามารถเปิดเผยให้คนอื่นเห็นได้ แล้วใช้ในการเข้ารหัสข้อมูลเพื่อยืนยันว่าเป็นตัวเราจริงๆ โดยเราจะ copy ไฟล์นี้ไปยัง user2 บนเครื่องปลายทาง</li>
</ul>
<h4>ไฟล์ authorized_keys ของ user2 บนเครื่องเซิร์ฟเวอร์</h4>
<p>ขั้นตอนต่อไปคือ copy ไฟล์ Public Key ของ user1 จากเครื่องไคลเอนต์  ไปเก็บไว้ในไฟล์ authorized_keys ของ user2 บนเครื่องเซิร์ฟเวอร์ ซึ่งจะเป็นไฟล์ที่เก็บ Public Key ของ user ต่างๆ ที่มีสิทธิล๊อกอินมาเป็น user นี้โดยไม่ต้องใส่รหัส </p>
<p>วิธีการ copy ไฟล์  Public Key จากไคลเอนต์ไปยังเซิร์ฟเวอร์ สามารถทำได้โดยใช้คำสั่ง scp บนเครื่องไคลเอนต์</p>
<p>ตัวอย่างการ copy ไฟล์ จากเครื่องไคลเอนต์ไปยังเซิร์ฟเวอร์โดยใช้คำสั่ง scp</p>
<pre>[user1@client ~]$ <strong>scp .ssh/id_rsa.pub user2@server:
</strong>user2@server's password:
id_rsa.pub                              100%  394     0.4KB/s   00:00</pre>
<p>หมายเหตุ อย่าลืมเครื่องหมาย :  (colon) หลังคำว่า server เพื่อระบุว่าเป็นการ copy ระหว่างเครื่อง</p>
<p>ขั้นต่อไปล๊อกอินเป็น user2 บนเครื่องเซิร์ฟเวอร์ แล้วใช้คำสั่ง ls ดู จะเห็นไฟล์ที่ถูก copy มา ให้ใช้คำสั่ง cat เพื่อนำคีย์ในไฟล์นี้ไปต่อท้ายไฟล์ authorized_keys ของ user2</p>
<p>หมายเหตุ ต้องสร้างไดเร็คทอรี .ssh/ ของ user2 ไว้ก่อนที่จะสร้างหรือเพิ่มเติมไฟล์ authorized_keys ตามตัวอย่างด้านล้างนี้ได้</p>
<p><span style="color: #ff0000;">คำเตือน ระมัดระวังการใช้คำสั่ง cat เพื่อนำข้อมูลไปต่อท้ายไฟล์ต้องใช้เครื่องหมายมากกว่าสองอันติดกัน <strong>&gt;&gt;</strong>  </span></p>
<p>ตัวอย่างการสร้างไดเร็คทอรี .ssh/ และการเพิ่ม authorized_keys บนเซิร์ฟเวอร์</p>
<pre>[user2@server ~]$ <strong>ls -l
</strong>total 4
-rw-r--r-- 1 user2 users 394 2008-10-10 15:09 id_rsa.pub</pre>
<pre>[user2@server ~]$ <strong>mkdir .ssh</strong>
[user2@server ~]$ <strong>chmod 700 .ssh</strong>/</pre>
<pre>[user2@server ~]$ <strong>cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</strong></pre>
<h4>ทดลองล็อกอินโดยใช้ Public Key Authentication</h4>
<p>ทดลองใช้ user1 บนเครื่องไคลเอนต์ไปยัง user2 บนเครื่องเซิร์ฟเวอร์ โดยรูปแบบการใช้งานยังเหมือนเดิมไม่เปลี่ยนแปลง จะเห็นว่าไม่ต้องใส่รหัสผ่าน (password) อีกต่อไปแล้ว</p>
<pre>[user1@client ~]$ <strong>ssh user2@server</strong>
[user2@server ~]$</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>man sshd_config(5)</li>
<li><a href="http://spalinux.com/2008/10/introduction_to_secure_shell_ssh" target="_self">แนะนำการใช้งานโปรแกรม Secure Shell (SSH)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/ssh_secure_shell_login_using_public_key_authentication/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แนะนำการใช้งานโปรแกรม Secure Shell (SSH)</title>
		<link>http://spalinux.com/2008/10/introduction_to_secure_shell_ssh</link>
		<comments>http://spalinux.com/2008/10/introduction_to_secure_shell_ssh#comments</comments>
		<pubDate>Fri, 03 Oct 2008 18:38:38 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Shell]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[secure shell]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=230</guid>
		<description><![CDATA[SSH  (Secure Sell) คือโปรแกรมสำหรับล็อกอินและรันคำสั่งที่เครื่องปลายทางได้ โดยไม่จำเป็นต้องไปใช้งานที่หน้าจอคอนโซลของเครื่อง จุดประสงค์หลักของโปรแกรมคือทำหน้าที่แทนโปรแกรมประเภท rlogin, rsh หรือ telnet โดยจะมีการเข้ารหัสข้อมูล (encrypted) เพื่อความปลอดภัยของข้อมูลที่ส่งระหว่าง SSH Client และ SSH Server ชุดโปรแกรมที่ติดตั้งมากับลีนุกซ์ส่วนใหญ่คือ OpenSSH ประกอบด้วยเซิร์ฟเวอร์และไคลเอนต์ เครื่องปลายทางรันเซอร์วิส SSH Server เพื่อรองรับการล็อกอิน จากโปรแกรมประเภท SSH Client โดยคอนฟิกไฟล์หลักของเซิร์ฟเวอร์จะอยู่ในไดเร็กทอรี /etc/ssh/ ไฟล์คอนฟิกหลักคือไฟล์ /etc/ssh/sshd_config คำแนะนำ โปรแกรม PuTTY เป็นโปรแกรมประเภท SSH Client ที่สามารถรันได้บน Microsoft Windows ด้วยคุณสมบัติมากมาย รองรับทั้ง Secure Shell, Telnet และสามารถทำหน้าที่เป็น Terminal ผ่านทาง Serial หรือ COM Port ได้ด้วย (เช่นเดียวกับ [...]]]></description>
			<content:encoded><![CDATA[<p>SSH  (Secure Sell) คือโปรแกรมสำหรับล็อกอินและรันคำสั่งที่เครื่องปลายทางได้ โดยไม่จำเป็นต้องไปใช้งานที่หน้าจอคอนโซลของเครื่อง จุดประสงค์หลักของโปรแกรมคือทำหน้าที่แทนโปรแกรมประเภท rlogin, rsh หรือ telnet โดยจะมีการเข้ารหัสข้อมูล (encrypted) เพื่อความปลอดภัยของข้อมูลที่ส่งระหว่าง SSH Client และ SSH Server</p>
<p><span id="more-230"></span></p>
<p>ชุดโปรแกรมที่ติดตั้งมากับลีนุกซ์ส่วนใหญ่คือ OpenSSH ประกอบด้วยเซิร์ฟเวอร์และไคลเอนต์</p>
<p>เครื่องปลายทางรันเซอร์วิส SSH Server เพื่อรองรับการล็อกอิน จากโปรแกรมประเภท SSH Client โดยคอนฟิกไฟล์หลักของเซิร์ฟเวอร์จะอยู่ในไดเร็กทอรี /etc/ssh/ ไฟล์คอนฟิกหลักคือไฟล์ /etc/ssh/sshd_config</p>
<p><strong>คำแนะนำ</strong> โปรแกรม <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY</a> เป็นโปรแกรมประเภท SSH Client ที่สามารถรันได้บน Microsoft Windows ด้วยคุณสมบัติมากมาย รองรับทั้ง Secure Shell, Telnet และสามารถทำหน้าที่เป็น Terminal ผ่านทาง Serial หรือ COM Port ได้ด้วย (เช่นเดียวกับ HyperTerminal) และที่สำคัญสามารถงานใช้ได้ฟรีอย่างถูกต้อง (free software)</p>
<p>ในบทความนี้จะแนะนำวิธีการใช้คำสั่ง Secure Shell บนลีนุกซ์เป็นหลัก โดยตัวอย่างทั้งหมดจะทดสอบบน Fedora 9</p>
<h4>เริ่มต้นใช้งาน SSH Client (begin_ssh_client)</h4>
<p>เริ่มต้นทดลองใช้คำสั่ง ssh เพื่อล็อกอินไปยังเครื่องรีโมต ด้วยการพิมพ์คำสั่ง ssh แล้วตามด้วย IP Address หรือ Hostname ของเครื่องรีโมตปลายทาง</p>
<p>ตัวอย่างการล็อกอินไปที่เครื่องรีโมตครั้งแรก</p>
<pre>[user1@client ~]$ <strong>ssh 192.168.0.1
</strong>The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
RSA key fingerprint is 5a:f2:9f:1b:8a:.....
Are you sure you want to continue connecting (yes/no)?<strong> yes
</strong>Warning: Permanently added '192.168.0.1' (RSA) to the list of known hosts.
user1@192.168.0.1's password:
Last login: Thu Oct  2 10:46:39 2008 from 192.168.0.15
[user1@server ~]$</pre>
<p>ถ้าเพิ่งเริ่มล็อกอินไปยังเครื่องรีโมตครั้งแรก จะมีข้อความเกี่ยวกับ RSA key ขึ้นมาถามว่า yes หรือ no การตอบ yes คือการยอมรับคีย์ (RSA key) จากเซิร์ฟเวอร์ปลายทางมา เพื่อใช้ในการเข้ารหัสระหว่างไคลเอนต์และเซิร์ฟเวอร์ ต้องตอบ yes อย่างเดียวเท่านั้นเพื่อยอมรับคีย์นี้ ถ้าตอบ no ไปก็ไม่สามารถล็อกไปยังเครื่องปลายทางได้</p>
<p>เมื่อตอบ yes ไป คีย์ที่ได้รับมา เครื่องไคลเอนต์จะเก็บคีย์นี้ไว้ในรายชื่อที่เรียกว่า ‘known hosts’ โดยจะบันทีกเป็นไฟล์อยู่ในไดเร็กทอรี $HOME/.ssh/ ($HOME คือ home directory ของผู้ที่ใช้คำสั่งบนเครื่องไคลเอนต์)</p>
<p>ตัวอย่างไฟล์ที่เก็บ known hosts</p>
<pre>[user1@client1 ~]$ cat .ssh/known_hosts
192.168.0.1 ssh-rsa AAAAB..........................</pre>
<p>ประการหนึ่งที่เก็บรายชื่อ known hosts ไว้ ด้วยเหตุผลทางด้านความปลอดภัย (Security) โดยคีย์ที่เก็บไว้ในไฟล์นี้สามารถใช้ในการเปรียบเทียบกับคีย์ที่ได้รีบมาใหม่จากเซิร์ฟเวอร์ ว่าตรงกันหรือไม่ เพื่อยืนยันในครั้งต่อที่ล็อกอินเข้าไปเครื่องเดิมนี้ว่า เป็นเครื่องที่ถูกต้อง ใช่ที่เราต้องการจริงๆ ไม่ใช่เครื่องอื่นๆ ที่ปลอมแปลง IP Address มาตรงกัน</p>
<p>ตัวอย่างการล็อกอินไปที่เครื่องที่ถูกปลอมแปลง IP Address โดยจะมีข้อความฟ้องว่าคีย์ที่ได้มาไม่ถูกต้อง</p>
<pre>[user1@client ~]$ <strong>ssh 192.168.0.1</strong>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
<span style="color: #ff0000;">Someone could be eavesdropping on you right now (man-in-the-middle attack)!
</span>It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
5a:f2:9f:...
Please contact your system administrator.
Add correct host key in /home/user1/.ssh/known_hosts to get rid of this message.
Offending key in /home/user1/.ssh/known_hosts:1
RSA host key for 192.168.0.1 has changed and you have requested strict checking.
Host key verification failed.</pre>
<p>วิธีการแก้ไขถ้าเจอข้อความแบบนี้ คือต้องตรวจสอบดูก่อนว่าเครื่องปลายทางที่เราจะล็อกเข้าไปนั้นเป็นเครื่องที่ถูกต้องจริงๆ โดยเปรียบเทียบคีย์ของ Secure Shell ซึ่งถูกเก็บไว้ในไฟล์ /etc/ssh/ssh_host_rsa_key.pub ซึ่งอาจมีการเปลี่ยนแปลงได้ ด้วยการติดตั้งลีนุกซ์ใหม่ หรือใช้คำสั่ง ssh-keygen ในการสร้างคีย์ใหม่</p>
<p>ถ้าดูแล้วเป็นเครื่องที่ถูกต้องจริงๆ วิธีการแก้ไขคือแก้ไฟล์ $HOME/.ssh/known_hosts โดยลบบรรทัดที่มี IP Address ของเครื่องปลายทางออกไป แล้วพิมพ์คำสั่ง ssh อีกครั้ง จะมีข้อความถาม yes หรือ no เหมือนครั้งแรก เพื่อเก็บคีย์ใหม่เข้าไปในไฟล์ known_hosts อีกครั้ง</p>
<p>คำเตือน แต่ถ้าตรวจสอบเครื่องปลายทางแล้วไม่ถูกต้อง อาจเป็นเครื่องของคนที่พยายามเจาะระบบด้วยการปลอมแปลง IP Address ก็เป็นได้เพื่อคอยดักเก็บรหัสของเรา เพราะฉะนั้นห้ามทำตามวิธีด้านบนเด็ดขาด ให้ปรึกษาคนดูแลระบบเพื่อแก้ไขโดยด่วน</p>
<h4>ระบุชื่อ user ที่ต้องการล็อกอิน (Specify user login)</h4>
<p>โดยดีฟอลต์เมื่อใช้คำสั่ง ssh บนไคลเอนต์ เพื่อล็อกไปยังเซิร์ฟเวอร์ โปรแกรม ssh จะพยายามล็อกอินด้วย username ของคนที่รันคำสั่ง เช่นผู้ใช้ที่ชื่อว่า user1 พิมพ์คำสั่ง ssh 192.168.0.1 จะเป็นการล็อกอินไปที่เครื่อง 192.168.0.1 ด้วยชื่อผู้ใช้ user1</p>
<p>ถ้าต้องการระบุเป็นชื่ออื่น สามารถใช้ออปชั่น ‘-l’ แล้วตามด้วยชื่อผู้ใช้ปลายทาง หรือพิมพ์ ในรูปแบบ <a href="mailto:user@hostname">user@hostname</a>  เช่น ต้องการล็อกอินไปยังปลายทางด้วยชื่อผู้ใช้ user2 สามารถทำได้สองวิธีแล้วแต่ถนัดดังนี้</p>
<p>วิธีแรก ใช้ออปชั่น ‘-l’ แล้วตามด้วยชื่อผู้ใช้ปลายทาง</p>
<pre>[user1@client ~]$ <strong>ssh -l user2 192.168.0.1
</strong>user1@192.168.0.1's password:</pre>
<pre>Last login: Thu Oct  2 11:22:24 2008 from 192.168.0.15
[user2@server ~]$</pre>
<p>วิธีที่สอง ใช้รูปแบบ user@hostname</p>
<pre>[user1@client ~]$ <strong>ssh user2@192.168.0.1
</strong>user1@192.168.0.1's password:</pre>
<pre>Last login: Thu Oct  2 11:23:13 2008 from 192.168.0.15
[user2@server ~]$</pre>
<h4>การรันคำสั่งบนเครื่องปลายทางด้วย SSH (Run remote command with SSH)</h4>
<p>ในบางครั้งเราต้องการเพียงแค่รันคำสั่งบนเครื่องปลายทาง เช่นต้องการตรวจสอบสถานะการทำงานของเครื่องปลายทางด้วยคำสั่ง uptime และ free แทนที่ต้องล็อกอินเข้าไปที่เครื่องปลายทางเลย สามารถใช้คำสั่ง ssh แล้วระบุคำสั่งที่ต้องการรันบนเครื่องรีโมตได้เลย โดยให้อยู่ในเครื่องหมาย single-quote ‘</p>
<p>ตัวอย่างการรันคำสั่งบนเครื่องปลายทางด้วย ssh</p>
<pre>[user1@client ~]$ <strong>ssh user2@192.168.0.1 'uptime; echo; free'
</strong>user1@192.168.0.1's password:
 16:01:39 up 2 days, 13:17,  4 users,  load average: 0.03, 0.02, 0.00</pre>
<pre>             total       used       free     shared    buffers     cached
Mem:        515064     235620     279444          0      48516     102124
-/+ buffers/cache:      84980     430084
Swap:       987956         52     987904</pre>
<p>ผลลัพธ์ที่ได้จะเหมือนกับการล็อกอินเข้าไปที่เครื่องปลายทางก่อน แล้วค่อยรันคำสั่งต่างๆ</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.openssh.com" target="_blank">OpenSSH</a></li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY: A Free Telnet/SSH Client</a></li>
</ul>
<p><a href="http://www.openssh" target="_blank"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/introduction_to_secure_shell_ssh/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ตรวจสอบเวอร์ชั่นของเว็บเซิร์ฟเวอร์ด้วยคำสั่ง telnet</title>
		<link>http://spalinux.com/2008/09/checking_web_server_version_by_telnet</link>
		<comments>http://spalinux.com/2008/09/checking_web_server_version_by_telnet#comments</comments>
		<pubDate>Sun, 28 Sep 2008 09:33:46 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Utility]]></category>
		<category><![CDATA[Web Server]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=209</guid>
		<description><![CDATA[เราสามารถใช้คำสั่ง telnet ตรวจสอบเวอร์ชั่นของเว็บเซิร์ฟเวอร์ที่รันอยู่บนเครื่องอื่นได้  ซึ่งเป็นข้อมูลส่วนหนึ่งของ HTTP Header ที่ส่งจากเซิร์ฟเวอร์กลับไปยังไคลเอนต์ วิธีการคือใช้คำสั่ง telnet ตามด้วยชื่อเว็บเซิร์ฟเวอร์ที่ต้องการตรวจสอบ ลงท้ายด้วยตัวเลข 80 ซึ่งเป็นพอร์ตที่รันโดยดีฟอลต์เป็นเว็บเซิร์ฟเวอร์ เมื่ออยู่ในคำสั่ง telnet ต้องกดปุ่ม [ Enter ] หนึ่งครั้งเพื่อขึ้นบรรทัดใหม่ พิมพ์ HEAD / HTTP/1.1 แล้วกดปุ่ม [ Enter ] อีกสองครั้ง ถ้าพิมพ์ถูกต้องข้อมูลของเว็บเซิร์ฟเวอร์จะแสดงผลออกมา สามารถดูเวอร์ชั่นที่ใช้จากบรรทัดที่ขึ้นต้นด้วยคำว่า Server ตัวอย่างการใช้คำสั่ง telnet เพื่อตรวจสอบเวอร์ชั่นของเว็บเซิร์ฟเวอร์ที่ติดตั้งมากลับ Fedora 9 [user@client ~]$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.1 HTTP/1.1 [...]]]></description>
			<content:encoded><![CDATA[<p>เราสามารถใช้คำสั่ง telnet ตรวจสอบเวอร์ชั่นของเว็บเซิร์ฟเวอร์ที่รันอยู่บนเครื่องอื่นได้  ซึ่งเป็นข้อมูลส่วนหนึ่งของ HTTP Header ที่ส่งจากเซิร์ฟเวอร์กลับไปยังไคลเอนต์</p>
<p>วิธีการคือใช้คำสั่ง telnet ตามด้วยชื่อเว็บเซิร์ฟเวอร์ที่ต้องการตรวจสอบ ลงท้ายด้วยตัวเลข 80 ซึ่งเป็นพอร์ตที่รันโดยดีฟอลต์เป็นเว็บเซิร์ฟเวอร์</p>
<p><span id="more-209"></span></p>
<p>เมื่ออยู่ในคำสั่ง telnet ต้องกดปุ่ม [ Enter ] หนึ่งครั้งเพื่อขึ้นบรรทัดใหม่ พิมพ์ HEAD / HTTP/1.1 แล้วกดปุ่ม [ Enter ] อีกสองครั้ง ถ้าพิมพ์ถูกต้องข้อมูลของเว็บเซิร์ฟเวอร์จะแสดงผลออกมา สามารถดูเวอร์ชั่นที่ใช้จากบรรทัดที่ขึ้นต้นด้วยคำว่า Server</p>
<p>ตัวอย่างการใช้คำสั่ง telnet เพื่อตรวจสอบเวอร์ชั่นของเว็บเซิร์ฟเวอร์ที่ติดตั้งมากลับ Fedora 9</p>
<pre>[user@client ~]$ <strong>telnet localhost 80
</strong>Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.</pre>
<pre><strong>HEAD / HTTP/1.1</strong></pre>
<pre>HTTP/1.1 400 Bad Request
Date: Sun, 28 Sep 2008 08:34:51 GMT
<span style="color: #0000ff;">Server: Apache/2.2.8 (Fedora)
</span>Connection: close
Content-Type: text/html; charset=iso-8859-1</pre>
<pre>Connection closed by foreign host.</pre>
<p>ตัวอย่างข้อมูลเว็บเซิร์ฟเวอร์ที่ google.com ใช้</p>
<pre>[user@client ~]$ <strong>telnet www.google.com 80
</strong>Trying 72.14.235.147...
Connected to www.google.com.
Escape character is '^]'.</pre>
<pre><strong>HEAD / HTTP/1.1</strong></pre>
<pre>HTTP/1.1 302 Found
Location: http://www.google.co.th/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=e69...; expires=Tue, 28-Sep-2010 09:26:21 GMT; path=/; domain=.google.com
Date: Sun, 28 Sep 2008 09:26:21 GMT
<span style="color: #0000ff;">Server: gws</span>
Content-Length: 221</pre>
<pre>Connection closed by foreign host.</pre>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/09/checking_web_server_version_by_telnet/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>วิธีการคอมไพล์ไฟล์ src.rpm ด้วยผู้ใช้งานธรรมดา</title>
		<link>http://spalinux.com/2008/09/compile_src_rpm_by_normal_user</link>
		<comments>http://spalinux.com/2008/09/compile_src_rpm_by_normal_user#comments</comments>
		<pubDate>Tue, 16 Sep 2008 18:28:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[compile rpm]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=166</guid>
		<description><![CDATA[การติดตั้งโปรแกรมบนลินุกซ์วิธีการหนึ่งที่นิยมกันคือใช้ไฟล์ประเภท rpm ซึ่งไฟล์ที่ติดตั้งนั้นจะถูกคอมไพล์เป็น binary โดยทีมงานที่พัฒนา Linux Distribution ซึ่งเป็นไฟล์จะติดตั้งได้สะดวกพร้อมใช้งาน ด้วยคำสั่ง rpm หรือ yum ไฟล์ binary เหล่านี้ชื่อไฟล์จะมีการเพิ่มเติมประเภทของเครื่องที่โปรแกรมนี้สามารถติดตั้งใช้งานได้เช่น i386, i586, i686, x86_64 เป็นต้น แต่ในบางครั้งเราจำเป็นต้องมีการคอมไพล์โปรแกรมใหม่ เพื่อปรับปรุงเรื่องเวอร์ชั่น ตัดหรือเพิ่มคุณสมบัติของโปรแกรมบางอย่างซึ่งไฟล์เหล่านี้อาจจะไม่มีในรูปแบบ binary วิธีการหนึ่งที่ทำได้คือดาวน์โหลดไฟล์ที่เป็น source code ในรูปแบบ src.rpm มา ซึ่งจะเป็นไฟล์ที่ประกอบด้วย source code ของโปรแกรมทั้งหมด พร้อมทั้งวิธีการคอมไพล์ เมื่อได้มาแล้วต้องคอมไพล์เอง ซึ่งแต่ก่อนคนที่จะคอมไพล์ได้ต้องเป็น root และคอมไพล์ในไดเร็คทอรี /usr/src/redhat/ ตัวอย่างลิ้งค์ที่สามารถดาวน์โหลดไฟล์ src.rpm ทั้งหมดของ Fedora 9 http://mirrors.kernel.org/fedora/releases/9/Fedora/source/SRPMS/ เตรียมโปรแกรมและไดเร็คทอรีสำหรับการคอมไพล์ แต่เนื่องด้วยเหตุผลทางด้านความปลอดภัย แนะนำให้คอมไพล์ไฟล์ src.rpm โดยใช้ผู้ใช้งานธรรมดา ไม่จำเป็นต้องใช้ root แต่ก่อนที่จะทำได้นั้นต้องมีการต้องติดตั้งโปรแกรมเพิ่มเติมที่ชื่อว่า rpmdevtools [...]]]></description>
			<content:encoded><![CDATA[<p>การติดตั้งโปรแกรมบนลินุกซ์วิธีการหนึ่งที่นิยมกันคือใช้ไฟล์ประเภท rpm ซึ่งไฟล์ที่ติดตั้งนั้นจะถูกคอมไพล์เป็น binary โดยทีมงานที่พัฒนา Linux Distribution ซึ่งเป็นไฟล์จะติดตั้งได้สะดวกพร้อมใช้งาน ด้วยคำสั่ง rpm หรือ yum</p>
<p>ไฟล์ binary เหล่านี้ชื่อไฟล์จะมีการเพิ่มเติมประเภทของเครื่องที่โปรแกรมนี้สามารถติดตั้งใช้งานได้เช่น i386, i586, i686, x86_64 เป็นต้น</p>
<p>แต่ในบางครั้งเราจำเป็นต้องมีการคอมไพล์โปรแกรมใหม่ เพื่อปรับปรุงเรื่องเวอร์ชั่น  ตัดหรือเพิ่มคุณสมบัติของโปรแกรมบางอย่างซึ่งไฟล์เหล่านี้อาจจะไม่มีในรูปแบบ binary</p>
<p><span id="more-166"></span></p>
<p>วิธีการหนึ่งที่ทำได้คือดาวน์โหลดไฟล์ที่เป็น source code ในรูปแบบ src.rpm มา ซึ่งจะเป็นไฟล์ที่ประกอบด้วย source code ของโปรแกรมทั้งหมด พร้อมทั้งวิธีการคอมไพล์ เมื่อได้มาแล้วต้องคอมไพล์เอง ซึ่งแต่ก่อนคนที่จะคอมไพล์ได้ต้องเป็น root และคอมไพล์ในไดเร็คทอรี /usr/src/redhat/</p>
<p>ตัวอย่างลิ้งค์ที่สามารถดาวน์โหลดไฟล์ src.rpm ทั้งหมดของ Fedora 9</p>
<p><a target="_blank" href="http://mirrors.kernel.org/fedora/releases/9/Fedora/source/SRPMS/">http://mirrors.kernel.org/fedora/releases/9/Fedora/source/SRPMS/</a></p>
<h4>เตรียมโปรแกรมและไดเร็คทอรีสำหรับการคอมไพล์</h4>
<p>แต่เนื่องด้วยเหตุผลทางด้านความปลอดภัย แนะนำให้คอมไพล์ไฟล์ src.rpm โดยใช้ผู้ใช้งานธรรมดา ไม่จำเป็นต้องใช้ root แต่ก่อนที่จะทำได้นั้นต้องมีการต้องติดตั้งโปรแกรมเพิ่มเติมที่ชื่อว่า rpmdevtools เพื่อให้สามารถคอมไพล์ ไฟล์ทั้งสองอยู่ในแผ่นติดตั้ง Fedora 9 อยู่แล้ว</p>
<pre>[root@server Packages]# <strong>rpm -ivh fakeroot-1.6.4-16.fc9.i386.rpm
</strong>Preparing...                ########################################### [100%]
   1:fakeroot               ########################################### [100%]

[root@server Packages]# <strong>rpm -ivh rpmdevtools-6.6-1.fc9.noarch.rpm
</strong>Preparing...                ########################################### [100%]
   1:rpmdevtools            ########################################### [100%]</pre>
<h4>สร้างไดเร็คทอรีสำหรับการคอมไพล์</h4>
<p>login เป็นผู้ใช้งานธรรมดา ที่ไม่ใช่ root แล้วรันคำสั่ง rpmdev-setuptree เพื่อสร้างไดเร็คทอรีสำหรับการคอมไพล์โปรแกรม ซึ่งหลังจากใช้คำสั่งนี้ จะมีไดเร็คทอรี rpmbuild ขึ้นมาในไดเร็คทอรี HOME ของผู้ใช้งานนั้น</p>
<p>ตัวอย่างการใช้คำสั่ง rpmdev-setuptree</p>
<pre>[user01@server ~]$ <strong>rpmdev-setuptree
</strong>[user01@server ~]$ <strong>ls -CF
</strong>rpmbuild/</pre>
<pre>[user01@server ~]$ <strong>find rpmbuild/
</strong>rpmbuild/
rpmbuild/BUILD
rpmbuild/SRPMS
rpmbuild/SOURCES
rpmbuild/SPECS
rpmbuild/RPMS</pre>
<p>ไดเร็คทอรีต่างๆ ที่ถูกสร้างขึ้นจะเหมือนกันใน /usr/src/redhat/ แต่ในที่นี้เราสามารถใช้ user01 ในการคอมไพล์ไฟล์ src.rpm ได้เลย โดยไฟล์ที่คอมไพล์เป็น binary เรียบร้อยแล้ว จะอยู่ใน rpmbuild/RPMS/</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/09/compile_src_rpm_by_normal_user/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
