วันพุธที่ 30 มิถุนายน พ.ศ. 2553

CentOS with KDE

yum groupinstall "KDE (K Desktop Environment)"

วันพฤหัสบดีที่ 24 มิถุนายน พ.ศ. 2553

Hardening the Linux server

Hardening the Linux server

Server ไม่ว่าจะสร้างมาเพื่อทดสอบ หรือว่าใช้งานจริงก็ล้วนแต่เป็นเป้าหมายของการถูกโจมตีทั้งนั้น ดังนั้นเพื่อเป็นการอุดช่องโหว่ เราจึงต้องเรียนรู้การใช้ SSH, ปรับแต่ง Firewall, และติดตั้ง Intrusion detecttion เพื่อแจ้งเตือนเวลาที่มีใครมาบุกรุกกล่องดวงใจ(Linux box)ของเรา

วัตถุประสงค์:
เรียน รู้ระบบความปลอดภัยเบื้องต้นสำหรับผู้ดูแลระบบ รวมไปถึง การใช้ SSH login, การใช้ Firewall และวิธีการวิเคราะห์ Log เพื่อตรวจหาการโจมตี
1. ป้องกันการโจมตี ทาง ssh
- Remove root access การใช้ username root ทำสิ่งต่างถือเป็นสิ่งที่ไม่เหมาะสม แต่ถ้าใช้ root login ผ่าน ssh ยิ่งเป็นการกระทำที่เสี่ยงต่อการถูก hack อย่างมาก ดังนั้นไม่ควรอนุญาตให้ root login ผ่านทาง ssh
เพื่อป้องกันการใช้ user root login ผ่านทาง ssh
sudo nano /etc/ssh/sshd_config

ค้นหาบรรทัด
PermitRootLogin yes

แก้ให้เป็นตามนี้
PermitRootLogin no

ปรับเวลาการรอรับ password ให้เร็วขึ้น แนะนำ 30 วินาทีกำลังดี (ค้นหาบรรทัดนี้แล้วเปลี่ยน เป็น 30วิ)
LoginGraceTime 120

จำกัดการเข้าใช้ ssh โดยระบุ username ที่สามารถ login ผ่าน sshได้ เพิ่มบรรทัดนี้เข้าไป (คั่นระหว่าง user โดยใช้ช่องว่าง)
AllowUsers someGuy someOtherGuy

เปลี่ยน port เอาตามใจ ขอให้มากกว่า 1024 แต่ไม่เกิน 65535
port 65222

save แล้วก้ restart ssh service
sudo /etc/init.d/ssh restart

ติดตั้งโปรแกรม Fail2ban
ติดตั้ง fail2ban
sudo apt-get install fail2ban

เปิดไฟล์ configure ขึ้นมาแก้ไข
sudo nano /etc/fail2ban/jail.conf
  • maxfailures = 5 ---> ในส่วนนี้หมายถึง connect แล้ว fail ครบ 5 ครั้งแล้วให้แบน ip
  • bantime = 600 ---> หมายถึงให้แบนเป็นเวลา 600 วินาที
  • ignoreip = 192.168.0.0/24 ---> หมายถึง ip ในวงนี้ไม่ต้องไปสนใจแบนเพราะว่าอยู่ใน lan วงเดียวกัน
  • รายละเอียดอ่านต่อ http://www.ubuntuclub.com/node/11

วันอังคารที่ 15 มิถุนายน พ.ศ. 2553

find and replace

find . -name test.mbox | xargs sed -i 's/ISO-8859-1/ISO-8859-11/g'


find path -name findname | xargs sed -i 's/word_old/word_new/g'

วันจันทร์ที่ 14 มิถุนายน พ.ศ. 2553

Apache Mod Rewrite เพื่อทำ Easy URL

เทคนิคนี้เป็นผลพลอยได้จากการเขียน Scriptdd ตัวใหม่นี่แหล่ะครับ
ด้วยความที่ ตัวเก่านั้นมีอายุหลายปีแล้ว ทำให้อะไรหลายๆอย่างดูเก่าตามไปด้วย

การทำ Easy URL นั้นเป็นเทคนิคอย่างหนึ่งที่ช่วยให้ URL ของเรา สวยงามและ
สื่อความหมายให้กับผู้ใช้โดยเฉพาะ Search Engine ต่างๆแล้วจะชอบมาก


เพราะอะไร ?

ผมขอยกตัวอย่างง่ายๆ เช่น URL นี้

แบบดั่งเดิม
http://www.unlimitpc.com/modules.php?name=Article&pa=showpage&pid=295

ถ้าเปลี่ยนใหม่เป็น
http://www.unlimitpc.com/Article/showpage/295.html

หรือ
http://www.unlimitpc.com/Article/POV-GF8500GT.html

3 URL นี้ถ้าเป็นคุณ คุณจะคลิกอันไหนครับ ? หรือพอเดาได้ไหมครับ
ว่า URL นี้เป็นเนื้อหาเกี่ยวกับอะไร ??

นี่แหล่ะครับการทำ Easy URL ซึ่งนอกจากจะทำให้ผู้ใช้สนใจจะคลิก Link แล้ว
ยังสามารถช่วยเพิ่มความน่าสนใจให้กับ Search Engine ได้ด้วย

เนื่องจากการทำ SEO (Search Engine Optimization) ก็มีการพิจารณาชื่อ URL
ในการทำ Index ของ Keyword ด้วย


แล้วทำยังไง ?

สำหรับ Apache แล้วนั้นเรียกได้ว่า หมูมากเพราะถูกออกแบบมาสำหรับเรื่องนี้โดยเฉพาะ

พระเอกของเรานั้นคือ Mod Rewrite ครับ

Mod Rewrite เป็นโมดูลที่เพิ่มเติมสำหรับ Apache ให้สามารถทำงานลักษณะแสดงเนื้อหา
(จาก php หรือ pl หรือ html ต่างๆ) ลงบน URL ที่กำหนดไว้ในเงื่อนไขได้

เช่น

การที่เราเห็น URL ว่า
http://www.songburi.com/interview/petch_album_lets_talk_about_love_1.html

ความจริงแล้วระบบภายในอาจจะเรียกเป็น
http://www.songburi.com/interview/index.php?id=petch_album_lets_talk_about_love_1

ซึ่งทั้งหมดอยู่ที่การ Config Mod Rewrite นั้นแหล่ะครับ

(ไม่ต้องแปลกใจแอบ Promote Web ให้เพื่อนซะงั้น :P)

ฉะนั้นจากที่ผมกล่าวมาการทำ Easy URL ด้วย Mod Rewrite ต้องทำตั้งแต่การออกแบบ Script ในฝั่ง
เนื้อหาให้สัมพันธ์กับการ Config Mod Rewrite ครับ


ว่าแล้วมาเริ่มกันที่การ Config Mod Rewrite ก่อนครับ

1. ตรวจสอบก่อนว่า Server มี Mod Rewrite หรือเปล่า
สำหรับ สาวก Apache เท่านั้น ลองเขียน php ขึ้นมา File นึงครับ

phpinfo();
?>


แล้ว Upload ขึ้นไปบน Server ลองดูจาก phpinfo ว่ามี Mod Rewrite ใน Server หรือเปล่า

จากรูปจะเห็นว่า php ตรวจสอบแล้วว่า Apache ได้ติดตั้ง mod rewrite เอาไว้
แบบนี้ก็มีโอกาสใช้ได้ 50% แล้วครับ ^^

2. ต่อไป ให้ลอง Download Script ตรวจสอบนี้ (คลิกที่นี่) ไป ติดตั้ง มีอยู่ 2 File น่ะครับ
.htaccess คือ File config mod rewrite และ index.php เป็นตัวอย่างการเรียก URL

ที่ Server ของคุณ เอาไว้ใน /rewrite/ นะครับ แล้วลองเรียก URL ว่า

/rewrite/test_rewrite.html (เปลี่ยนคำว่า test_rewrite เป็นคำที่คุณต้องการตามสะดวก)


ถ้าขึ้นตามรูปแสดงว่า Server ของคุณพร้อมใช้งาน Mod Rewrite แล้วล่ะครับ ^^


3. ถ้าลองตามข้อ 2 แล้วไม่สามารถใช้งานได้กรุณาแจ้ง Admin ครับ ให้เพิ่ม ใน httpd.conf
ว่า ให้ AllowOverride All ใน Home Path ของ Website ของคุณ


การ AllowOverride All คือการยอมรับการเรียก .htaccess จาก folder ใดๆก็ได้ครับ


ถ้าทุกอย่างเรียบร้อยคุณก็จะสามารถแปลงร่างเล่น Easy URL กันได้แล้วครับ เย้

แิอบโฆษณา

พี่ต่อสะกิดมาฝากข่าวโฆษณาครับ www.siamhosting.com Server ทุกตัว รองรับ Mod Rewrite ครับ ^^!


เริ่มออกแบบส่วน PHP เพื่อปรับการเรียกใช้

เนื่องจาก Script เดิมที่ผมเคยเขียนไว้ ในการเรียกเนื้อหาข้อมูลโดยใช้ id แทนฉะนั้น
ผมจึงเพิ่ม Field ขึ้นมา 1 ช่องเพื่อเก็บชื่อ Easy URL ที่เราต้องการเอาไว้


เสร็จแล้วผมจึงเปลี่ยน Script จากการเรียก id เป็นเรียก Easy URL แทน ดังนี้

Script วิธีเรียกแบบเดิม
content_detail.php?id=1234

แก้ใหม่
content_detail.php?path_url=easy_url_55555

เท่านี้ Script เดิมก็สามารถเรียกใช้งานแบบ Easy URL ได้แล้วครับ


เขียน .htaccess เพื่อรับกับส่วน PHP

จากที่เห็นผมจึงแก้ไข .htaccess ใหม่ดังนี้

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
-----



จาก .htaccess ฉะนั้นสรุปได้ว่า Easy URL ใหม่ที่จะเกิดขึ้นก็คือ

http://www.yourdomain.com/content/my_easy_url_if_i_want.html


กระบวนการของ URL ดังกล่าวนี้คือ
เมื่อมีการเรียก URL ที่อยู่ภายใต้ /content/ เข้ามา Apache จะตรวจสอบว่า
ถ้ามี Filename ใดๆ .html เข้ามา Apache จะส่ง Filename นั้นๆ ไปให้กับ
PHP ชื่อว่า content_detail.php?path_url=ชื่อ filename นั้นๆ นั้นเอง

ซึ่งการเขียน .htaccss นี้สามารถเขียนหลายๆ เงื่อนไขเข้าไปได้เช่น

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
RewriteRule ^page-(.*).html index.php?p=$1
-----


กรณีที่ เนื้อหามีหลายหน้า ปกติเราจะส่งข้อมูลเป็น index.php?p=2 ไป
แต่ผมเปลี่ยนใหม่ให้เรียกเป็น page-2.html แทนครับ


ทั้งหมดที่กล่าวมาเป็นเทคนิคแค่เบื้องต้นและ สรุปให้ดูง่ายที่สุด
ใครอ่านไม่รู้เรื่องลองอ่านซ้ำหลายๆรอบ น่ะครับ

ถ้าหากใครต้องการเทคนิคสูงๆ ผมก็ขอทิ้ง Link อ้างอิงเอาไว้ให้ลองไปศึกษากันดู
บทความนี้ก็ขอจบแค่นี้แหล่ะครับ

Apache Tips: Disable the HTTP TRACE method

I am trying to disable the HTTP TRACE method in Apache.
For that I add the following configuration lines in httpd.conf



RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]


After that I tried to check whether TRACE method is disabled or
not.
using the following commands.

telnet 172.16.16.25 80
Trying 172.16.16.25...
Connected to 172.16.16.25 (172.16.16.25).
Escape character is '^]'.
TRACE / HTTP/1.1
Host: 172.16.16.25

HTTP/1.1 200 OK
Date: Tue, 26 Feb 2008 21:06:29 GMT
Server: Apache
Transfer-Encoding: chunked
Content-Type: message/http

28
TRACE / HTTP/1.1
Host: 172.16.16.25

0

Connection closed by foreign host.

The output confirms that TRACE method was not disabled.
Please clarify me how to disable HTTP TRACE method.
I am using the following Apache version

Server version: Apache/2.2.8 (Unix)
Server built: Feb 18 2008 12:23:43

วันพฤหัสบดีที่ 10 มิถุนายน พ.ศ. 2553

sudo

การใช้คำสั่ง sudo

คำ สั่ง sudo เป็นอีกแนวทางหนึ่งที่ทำให้ผู้ใช้งานสามารถ Access เข้าสู่ระบบในลักษณะที่มีสิทธิ์จัดการกับระบบได้ เมื่อผู้ใช้งานใดก็ตามที่มีสิทธิ์ในการจัดการระบบดำเนินการใช้คำสั่ง sudo แล้ว จะได้รับการร้องขอและตรวจสอบรหัสผ่าน และเมื่อผ่านการตรวจสอบสิทธิ์แล้วก็สามารถจัดการกับระบบได้ราวกับว่าตนเป็น Root รูปแบบของการใช้คำสั่ง sudo มีดังนี้

Sudo <คำสั่ง>

ข้อควรระวัง

ผู้ ที่ใช้คำสั่ง sudo จะต้อง Logout ออกจากระบบก่อนที่จะเดินออกไปจากเครื่องที่กำลังใช้งาน เนื่องจาก sudo จะไม่ถามหารหัสผ่านหากมีการใช้คำสั่งก่อนห้วงหมดเวลา 5 นาที แต่ท่านก็สามารถตั้งค่าเปลี่ยนแปลงการทำงานนี้ได้ที่ /etc/sudoers

คำ สั่ง sudo เป็นคำสั่งที่มีความยืดหยุ่นในการใช้งานสูง ท่านสามารถกรอกชื่อผู้ใช้งานที่มีสิทธิ์ใช้งานคำสั่ง sudo ใน /etc/sudoers ซึ่งเป็น Configuration Files หลังจากที่เรียกใช้ sudo แล้ว ผู้ใช้งานสามารถเข้าสู่ Shell prompt ของตนเอง แต่ไม่ใช้ Root Shell ลักษณะนี้หมายความว่าท่านสามารถลบ Root Shell ออกไปได้ และใช้ sudo แทน

คำ สั่ง sudo ยังสามารถทำบันทึกการ login เข้ามาของผู้ใช้งานได้ โดยผู้ที่สามารถ login เข้ามาได้สำเร็จจะถูกเก็บบันทึกไว้ในไฟล์ /var/log/messages ส่วนคำสั่งที่เรียกใช้ รวมทั้งรายชื่อผู้ใช้งานที่ใช้คำสั่งนั้นจะถูกเก็บไว้ใน /var/log/secure

หากผู้บริหารจัดการเครือข่ายต้องการที่จะแก้ไขไฟล์ sudo configuration ก็สามารถทำได้โดยการใช้คำสั่ง visudo

หาก ต้องการให้ผู้ใช้งานคนใดคนหนึ่งสามารถใช้สิทธิ์ในการบริหารจัดการได้เต็มที่ ก็สามารถแก้ไขไฟล์ sudo configuration ด้วยการเพิ่มข้อความต่อไปนี้ลงไปในไฟล์หลังจากใช้คำสั่ง visudo ดังนี้

Vichai ALL=(ALL) ALL

มี ความหมายว่าผู้ใช้งานที่ชื่อ vichai สามารถใช้ sudo จากคอมพิวเตอร์เครื่องใดก็ได้ รวมทั้งสามารถเรียกคำสั่งใด ๆ มาใช้งานก็ได้เช่นกัน

วิธีการติดตั้ง sudo

ท่าน สามารถดาวน์โหลด sudo ได้ทั้งในรูปแบบของ RPM และซอร์สโค้ด (Source Code) เพื่อความสะดวกให้เลือกใช้ RPM ดีกว่า เนื่องจากมีการปรับแต่งดัดแปลงน้อยมากในขณะหรือหลังการติดตั้ง ต่อไปนี้เป็นตัวอย่างคำสั่งการติดตั้ง

[ root ]# rpm -q sudo
sudo-1.5.9p4-1

หาก ปรากฏภาพหน้าจอดังกล่าว (บรรทัดที่ 2) ก็แสดงว่าท่านได้ติดตั้ง sudo ไว้ก่อนหน้านี้แล้ว แต่เป็นเวอร์ชันเก่า ดังนั้นท่านต้องลบทิ้งและติดตั้งเวอร์ชันใหม่ต่อไปดังนี้

[ root ] # rpm -e sudo
[ root ] # rpm -i ./sudo-1.6.3p5-1rh62.i386.rpm
[ root ] # rpm -q sudo

ซึ่งจะปรากฏข้อความบรรทัดดังนี้

Sudo-1.6.3p5-1

การใช้งาน sudo

รูปแบบการใช้งาน sudo มีดังต่อไปนี้

Sudo [command line options] [username] [command]

ตัวอย่างการใช้งานคำสั่ง

สมมติว่าท่านต้องการดูสิ่งที่อยู่ภายในของ Shadow Password Directory ใช้คำสั่งดังนี้

sudo cat /etc/shadow

อย่าง ไรก็ดีขอแนะนำให้ท่านใช้คำสั่ง sudo อย่างเคร่งครัด โดยการจัดให้มีการบันทึกการเข้ามาใช้งานระบบโดยใช้อำนาจของ root จากการใช้ sudo ของผู้ใช้งานที่เราไว้วางใจ

รู้จักกับ sudo.log

โดย ปริยาย sudo จะมีการทำบันทึกกิจกรรมการทำงานทั้งหมดที่เกิดขึ้นไว้ในไฟล์ /var/log/sudo.log โดยมีรูปแบบของข้อมูลใน log files ดังนี้

Date:user:Host=hostname:TTY=terminal:PWD=dir:USER=user:Command=cmd

ในแต่ละฟิลด์ที่กล่าวมานี้มีความหมายต่อไปนี้

  • date : บันทึกเวลาที่ใช้งาน

  • user : ชื่อของผู้ใช้งานที่รันโปรแกรม sudo

  • hostname : เป็นแอดเดรส (Address) ของคอมพิวเตอร์ที่เข้ามาใช้งาน sudo

  • terminal : เทอร์มินัลที่ sudo ถูกใช้เพื่อควบคุมหรือจัดการ

  • dir : ไดเรกทอรีปัจจุบันที่ใช้คำสั่งของ sudo

  • user : ชื่อของผู้ใช้งานที่รันคำสั่ง

  • command : คำสั่งที่มีการเรียกใช้งานผ่าน sudo

ต่อไปนี้เป็นตัวอย่างหน้าจอ sudo.log

Sep 23 14:41:37 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/more /etc/shadow
Sep 23 14:43:42 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/usr/sbin/pwconv
Sep 23 14:43:51 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/more /etc/shadow
Sep 23 14:55:30 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/cat /etc/securetty
Sep 23 15:12:27 : ramon : HOST=redhat : TTY=pts/1 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/linuxconf
Sep 23 15:23:37 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/usr/sbin/pwunconv

การบริหารจัดการความปลอดภัย

เมื่อ ใดที่ท่านต้องการบริหารจัดการกับเครื่องหรือระบบ ท่านมักจะใช้ root usr หรือการใช้สิทธิ์พิเศษที่กำหนดขึ้นโดยโปรแกรมประเภท setuid เช่น sudo หรือ su เป็นต้น

ใน แง่ของการบริหารจัดการระบบภายในองค์กร ท่านที่เป็นผู้บริหารระบบจะต้องทราบดีว่ามีใครบ้างในองค์กรที่สามารถมี สิทธิ์พิเศษในการบริหารจัดการระบบภายในเครื่องที่เขาใช้งานอยู่ได้ โดยการใช้ PAM Modules ที่เรียกว่า pam_console.so กิจกรรมบางอย่างที่เคยถูกสงวนไว้สำหรับ root user เท่านั้น เช่น การ reboot และติดตั้งอุปกรณ์ฮาร์ดแวร์จะอนุญาตให้บุคคลแรกที่ Login เข้ามาในระบบ อย่างไรก็ตามงานอื่น ๆ ที่สำคัญ เช่น การจัดตั้ง Configuration สำหรับเครือข่าย หรือการจัด Configure Mouse ตัวใหม่ รวมทั้งการติดตั้งอุปกรณ์เครือข่ายจะถูกสงวนไว้ให้สำหรับการ Access จากผู้มีสิทธิ์บริหารจัดการเท่านั้น

การอนุญาตให้สามารถใช้ Root Access

สำหรับ องค์กรใดที่มีผู้ใช้งานเป็นที่น่าไว้วางใจก็ไม่ควรรีรอที่จะให้สิทธิ์ในการ ใช้ root access การทำเช่นนี้จะช่วยลดงานของผู้บริหารจัดการเครือข่าย เนื่องจากการที่ผู้ใช้งานแต่ละคนสามารถมีสิทธิ์ใน root access จะช่วยให้แต่ละคนสามารถแก้ไขปัญหาของตนเองได้ เช่น การติดตั้งอุปกรณ์เพิ่มเติมบางรายการ หรือจัด Configure Interface ให้กับการ์ด LAN จะได้ไม่ต้องรอคอยใช้บริการจากผู้ดูแลเครือข่าย อย่างไรก็ดีการทำเช่นนี้ก็มีข้อเสียดังนี้ (บางส่วนที่เป็นข้อเสีย)

  • การจัด Configuration ให้กับเครื่องที่ผิดพลาดทำให้ต้องคอยตามแก้ไข และอาจเปิดช่องโหว่ที่เกี่ยวกับความปลอดภัยโดยไม่ตั้งใจอีกด้วย

  • ผู้ ใช้งานอาจใช้เซอร์วิสที่ไม่ปลอดภัยโดยที่ตนเองก็ไม่รู้ตัว เช่น การใช้ Telnet ที่ใช้รหัสผ่านแบบ Plain Text หรืออักษรล้วน ๆ ที่อาจมีผู้ดักจับรหัสผ่านก็ได้

  • ผู้ใช้งานอาจจับส่งเมลในฐานะ root แม้เรื่องนี้จะเกิดขึ้นได้ยาก แต่ไวรัสก็สามารถติดบนเมลบน LINUX ได้

การ Disable Root Access

หาก ผู้บริหารจัดการเครือข่ายรู้สึกไม่สบายใจในเรื่องนี้ ดังนั้นรหัสผ่านของ root ควรเก็บไว้เป็นความลับ รวมทั้งให้สามารถ access เข้าไปในระดับหนึ่งได้ หรือกำหนดให้สามารถเข้าสู่โหมดที่เรียกว่า Single User Mode โดยผ่านการกรอกใส่ชื่อรหัสผ่านที่ Boot Loader ในตารางที่ 2 แสดงแนวทางที่ผู้บริหารจัดการเครือข่ายอาจต้อง Disable Root Access

การ Disable Root Shell

เพื่อ ป้องกันผู่ใช้งานมิให้สามารถ login เข้ามาโดยตรงด้วย root ผู้บริหารจัดการระบบสามารถจัดตั้ง shell ของ root account ให้เป็น /sbin/nologin ในไฟล์ /etc/passwd การกระทำเช่นนี้จะช่วยป้องกันการ access ไปที่ root account ผ่านคำสั่งที่ต้องการ shell เช่น su และ ssh

การ Disable Root Login

เพื่อ เป็นการจำกัดการ access เข้ามาที่ root account ผู้บริหารจัดการเครือข่ายสามารถ Disable Root Login ที่คอนโซล โดยการแก้ไข /etc/securetty ซึ่งภายในไฟล์นี้จะมีการแสดงรายการอุปกรณ์ทั้งหมดที่ root user สามารถ login เข้าไปใช้งานได้ ถ้าไฟล์นี้ไม่มีอะไร root user สามารถ login ผ่านอุปกรณ์สื่อสารหรืออุปกรณ์เครือข่ายเท่านั้น ซึ่งเป็นเรื่องอันตรายเนื่องจากว่าผู้ใช้งานสามารถใช้ Telnet เข้ามาที่เครื่องของเขาด้วย root และส่งรหัสผ่านที่เป็นอักษรเปล่าเข้าไปที่เครือข่าย แต่โดยดีฟอลต์ (Default) แล้ว /etc/securetty ของ LINUX จะยอมให้ root user สามารถ log เข้าไปที่คอนโซลทางกายภาพหรือโดยตรงที่หน้าจอ เพื่อป้องกันมิให้มีการ login เข้ามาที่ root ให้นำเนื้อหาที่อยู่ภายในไฟล์นี้ออกไปด้วยคำสั่งดังนี้

Echo > /etc/securetty

คำเตือน

การลบข้อความทั้งหมดออกจาก /etc/securetty ไม่ได้ป้องกัน root user ทำการ login จากการใช้ชุดโปรแกรม OpenSSH

การ Disable Root SSH Login

เพื่อ ป้องกันการ login ที่ root ด้วยโปรโตคอล SSH ท่านสามารถแก้ไขไฟล์ที่เป็น Daemon ของ SSH ต่อไปนี้ /etc/ssh/sshd_config จากนั้นให้เปลี่ยนข้อความในบรรทัดเป็น

# PermitRootLogin yes < ----------- ใส่เครื่องหมาย # ไว้ข้างหน้าเพื่อไม่ใช้ชั่วคราว

และแทนที่ด้วยข้อความดังนี้

permitRootLogin no

การสร้างข้อจำกัดการ Access ให้กับ root

แทน ที่จะตอบปฏิเสธการ login เข้ามาใช้งานของผู้ที่ทราบรหัสผ่านของ root ท่านอาจยังอนุญาตให้สามารถทำเช่นนั้นได้อยู่ แต่จำกัดการ access ด้วยการใช้ชุดโปรแกรมที่เกี่ยวข้องกับ setuid เช่น su และ sudo

เมื่อ ใดที่ผู้ใช้งานพิมพ์คำว่า su เครื่องจะหยุดรอถามรหัสผ่าน และหลังจากกระบวนการพิสูจน์สิทธิ์ผ่านไป ท่านก็จะสามารถเข้าสู่ Prompt ของ root shell ได้ เมื่อนั้นผู้ใช้งานจะกลายเป็น root user และสามารถบริหารจัดการระบบได้ นอกจากนี้ผู้ใช้งานยังสามารถใช้คำสั่ง su เพื่อการเปลี่ยนแปลงใด ๆ ที่มีผลต่อผู้ใช้งานอื่น ๆ บนระบบโดยไม่ต้องผ่านกระบวนการรหัสผ่านอีกด้วย

เนื่อง จากคำสั่งนี้มีประสิทธิภาพมาก ดังนั้นผู้บริหารจัดการเครือข่ายภายในองค์กรอาจต้องการจำกัดผู้ที่จะเข้ามา access คำสั่งได้ วิธีการทำที่ง่ายที่สุดได้แก่การเพิ่มผู้ใช้งานเข้าไปในกลุ่มที่สามารถควบ คุมหรือจัดการได้ เรียกว่า wheel โดยวิธีการพิมพ์คำสั่งดังต่อไปนี้

usermod -G wheel

ขั้นตอนต่อไปได้แก่การเปิดไฟล์ PAM Configuration สำหรับ su/etc/pam.d/su ด้วย text editor จากนั้นให้นำเครื่องหมาย # (commend) ออกจากบรรทัดดังต่อไปนี้

Auth required /lib/security/pam_wheel.so use_uid

การ กระทำเช่นนี้จะช่วยให้เกิดการอนุญาตสมาชิกของ Administrative group (กลุ่มคณะบุคคลที่สามารถจัดการระบบได้) ที่อยู่ใน wheel สามารถใช้ su ได้

หมายเหตุ

root user ปกติเป็นส่วนหนึ่งของ wheel group โดยดีฟอลต์

References: http://micro.se-ed.com/Content/mc221/MC221_114.asp

วันศุกร์ที่ 4 มิถุนายน พ.ศ. 2553

How to force qmail to process the outbound queue

  • The qmail utility programs are all in /var/qmail/bin.
  • Use qmail-qstat and/or qmail-qread to see that there are actually messages in the queue.
  • Run qmail-tcpok
  • Run ps axl and find the process id (PID) for qmail-send
  • Run kill -s ALRM pid
  • That's it! Qmail will start processing the queue.

แนวทางการแก้ไขปัญหาส่งอีเมล์ไปที่ Hotmail,Yahoo,Gmail แล้วผู้รับปลายทางไม่ได้รับ

  • วิธีที่ 1. แจ้งให้ผู้รับปลายทาง Add ที่อยู่อีเมล์ ของท่านเก็บไว้ใน Address Book ของ Hotmail, Yahoo, Gmail

  • วิธีที่ 2. สำหรับกรณีที่ต้องการส่งอีเมล์ไปถึงผู้รับปลายทางที่ Hotmail ในช่อง To: (ถึง) ให้ท่านใส่ที่อยู่อีเมล์ของท่านลงไปด้วย เช่น หากท่านต้องการส่งอีเมล์ไปถึง thai.hosting@hotmail.com ในช่อง To: ก็ให้ใส่เป็น thai.hosting@hotmail.com, your@emai.com หรืออาจจะใส่ที่อยู่อีเมล์ของท่านในช่อง cc: (สำเนาถึง) แทนก็ได้ค่ะ เพราะหากส่งอีเมล์ไปให้ thai.hosting@hotmail.com เพียงอีเมล์เดียวโดดๆ โอกาสที่อีเมล์จะสูญหายมีสูง (ท่านผู้รู้ที่แนะนำวิธีนี้มาบอกว่า อาจจะเป็น bug ของทาง Hotmail เอง แต่ทาง Hotmail ไม่ยอมรับ)

  • วิธีที่ 3. หลังจากที่ท่านส่งเมล์ไปแล้ว กรุณาแจ้งให้ผู้รับปลายทางเข้าไปเช็คเมล์ ดูด้วยว่าอีเมล์ของท่านเข้าไปอยู่ใน Inbox หรือไม่ หากใน Inbox ไม่มี ให้เข้าไปดู ใน Folder Junk (Hotmail), Bulk (Yahoo) หรือ Spam (Gmail) และหากพบว่ามีอีเมล์ของท่านอยู่ในนั้น ให้คลิก "Allow Sender" หรือ "Not Spam" หรือ "ไม่ใช่อีเมล์ขยะ" ระบบจะทำการย้ายอีเมล์เข้าไปเก็บไว้ใน Inbox แทน และครั้งต่อไปเมื่อท่านส่งอีเมล์ไปให้ผู้รับรายเดียวกันนี้อีก อีเมล์ของท่านก็จะเข้าไปอยู่ใน Inbox อย่างแน่นอน

  • วิธีที่ 4. ให้ผู้รับปลายทาง ทำการส่งอีเมล์มาหาคุณก่อน (โดยส่งจาก Hotmail, Yahoo, Gmail) เมื่อท่านได้รับอีเมล์ฉบับนั้นแล้ว ให้ทำการ Reply กลับไปหาเขา (ต้อง Reply เท่านั้น หากคลิก New message) และถ้าจะให้ชัวร์ ควรให้ผู้รับปลายทาง ทำการ Reply กลับมาให้ท่านอีกครั้ง ด้วยวิธีการเช่นนี้ ครั้งต่อไปเมื่อคุณส่งอีเมล์ไปถึงผู้รับคนเดิมนี้ รับรองว่าอีเมล์ของ คุณจะเข้าไปอยู่ใน Inbox ของ Hotmail, Yahoo, Gmail อย่างแน่นอน ค่ะ (ช่วยกันทดสอบหลายคนแล้ว ได้รับคำตอบว่าได้ผล 100%)

วันพฤหัสบดีที่ 3 มิถุนายน พ.ศ. 2553

Linux Service

NetworkManager
เป็น service ที่สามารถปรับเปลี่ยนคอนฟิกของ network เพื่อให้ต่อเชื่อมกับ network เช่น WiFi ได้อย่างอัตโนมัติ
คำแนะนำ

* ปิด – สำหรับ server
* เปิด – สำหรับ notebook ที่มีการเปลี่ยนที่ใช้งานเป็นประจำ

acpid
เป็น service สำหรับตรวจสอบสถานะของเครื่อง โดยจะใช้ได้สำหรับ BIOS บางรุ่น วิธีทดสอบง่ายๆ คือเข้าไปดูใน /proc/acpi/ แล้วใช้คำสั่ง cat ดูไฟล์ต่างๆ ว่าสามารถตรวจสอบสถานะของอุปกรณ์ได้หรือไม่
คำแนะนำ

* เปิด – สำหรับเครื่องที่ตรวจสอบสถานะได้
* ปิด – ถ้าเราไม่สนใจตรวจสอบ

anacron
การปิด/เปิด บ่อยๆ อาจทำให้ crontab ที่ตั้งไว้ไม่สามารถทำงานได้เลย เช่นโดยดีฟอลต์แล้วจะมี crontab รันอยู่ทุกวันเวลา 4:02 AM แต่ถ้าเราไม่ได้เปิดเครื่องเวลานี้ crontab นี้ ก็จะไม่ถูกรันเลย
คำแนะนำ

* เปิด – สำหรับ notebook, desktop ที่มีการปิด/เปิด อยู่เรื่อยๆ
* ปิด – สำหรับ server ที่เปิดเครื่องตลอดเวลา

atd
เป็น service สำหรับการตั้งเวลาในการรันโปรแกรมได้ ซึ่งตามประสบการณ์ส่วนตัวของผมแล้ว แทบไม่เคยใช้เลย
คำแนะนำ

* ปิด – ยกเว้นมีคนต้องการใช้จริงๆ

avahi-daemon
ใช้สำหรับหาอุปกรณ์เช่น printer, scanner ที่เชื่อมอยู่โดยอัตโนมัติ
คำแนะนำ

* ปิด – เวลาจะใช้อุปกรณ์ แล้วค่อยคอนฟิกเองดีกว่า

bluetooth
สำหรับเชื่อมต่อกับ bluetooth
คำแนะนำ

* ปิด – ยกเว้นต้องการใช้งาน

capi
สำหรับต่อเชื่อมอุปกรณ์ประเภท ISDN
คำแนะนำ

* ปิด

cpuspeed
เป็นการปรับความเร็วของ CPU ตามการใช้งาน
คำแนะนำ

* ปิด – สำหรับ server
* เปิด – สำหรับ notebook เพื่อการประหยัดไฟ

crond
เป็น service สำหรับการตั้งเวลาในการรันโปรแกรมต่างๆ จำเป็นต้องรันทุกเครื่อง
คำแนะนำ

* เปิดเท่านั้น

cups
สำหรับต่อเชื่อมกับ printer ไม่ว่าจะเป็นแบบต่อโดยตรง หรือสั่งผ่าน network
คำแนะนำ

* ปิด – ยกเว้นต้องการใช้งาน printer เช่น สั่งพิมพ์งานจากโปรแกรมที่รันอยู่ใน Linux

dund
เป็นโปรแกรมที่ทำให้สามารถสั่ง dial-up ได้ผ่านอุปกรณ์ Bluetooth
คำแนะนำ

* ปิด

gpm
ทำให้เราสามารถใช้ mouse ผ่านหน้าจอ console โดยตรงของเครื่องได้ เช่น copy, paste ไม่เกี่ยวกับใช้งาน mouse ผ่าน X Window หรือใช้งานผ่านโปรแกรมที่เรา Secure Shell เข้าไป
คำแนะนำ

* ปิด

haldaemon
ตรวจสอบสถานะของอุปกรณ์
คำแนะนำ

* เปิด

ip6tables
เป็น iptables firewall ที่รองรับ IPv6
คำแนะนำ

* ปิด – ไว้ IPv6 ใช้งานอย่างแพร่หลายแล้ว ค่อยมาว่ากันใหม่

iptables
ทำหน้าที่เป็น firewall
คำแนะนำ

* เปิด – โดยดีฟอลต์แล้ว จะอนุญาต เฉพาะ ping หรือ Secure Shell เข้ามายังเครื่องเราเท่านั้น แต่จากเครื่องเราสามารถออกไปข้างนอกได้หมด

irda
รองรับพอร์ต Infrared
คำแนะนำ

* ปิด

irqbalance
เพิ่มประสิทธิภาพในการทำงานสำหรับเครื่องที่มี multiprocessor ซึ่งรวมทั้ง multi-core ด้วย
คำแนะนำ

* เปิด – ยกเว้นเครื่องจะเก่ามากเป็นแบบ CPU เดียว

isdn
รองรับอุปกรณ์ ISDN
คำแนะนำ

* ปิด

mdmonitor
ตรวจสอบสถานะของ Software RAID ซึ่งไม่รวมถึง Hardware RAID
คำแนะนำ

* ปิด – ยกเว้นในเครื่องมีคอนฟิกฮาร์ดดิสก์เป็นแบบ Software RAID

messagebus
สำหรับส่งข้อมูลระหว่างโปรแกรม
คำแนะนำ

* เปิด

microcode_ctl
สำหรับปรับปรุงค่าใน CPU Intel เท่านั้น
คำแนะนำ

* เปิด – สำหรับ CPU Intel

multipathd
รองรับการเชื่อมต่อกับ Multi-path Storage Device พร้อมๆ กันหลายเครื่องได้
คำแนะนำ

* ปิด – ยกเว้นมีการเชื่อมต่อกับอุปกรณ์ประเภทนี้

netconsole
สำหรับส่ง console logging ผ่าน network
คำแนะนำ

* ปิด

netfs
เป็น service สำหรับใช้งานดิสก์ (mount) ผ่านทาง network ไม่ว่าจะเป็น NFS, Samba
คำแนะนำ

* ปิด

netplugd
ตรวจสอบและเปลี่ยนค่าคอนฟิกของ network interface เมื่อมีการเปลี่ยนแปลงสถานะ
คำแนะนำ

* ปิด

network
คอนฟิกค่า IP Address, Subnet mask และอื่นๆ สำหรับการเชื่อมต่อกับ network
คำแนะนำ

* เปิดเท่านั้น – ยกเว้นคุณต้องการให้เครื่องอยู่อย่างโดดเดี่ยว (standalone) ไม่คุยกับใคร

nfs
nfslock
เป็น service เพื่อให้สามารถใช้งานดิสก์ผ่านทาง network แบบ NFS ได้
คำแนะนำ

* ปิด – ยกเว้นเมื่อต้องการใช้งาน

nscd
เก็บค่าสำรอง (cache) สำหรับข้อมูลเช่น password ในการใช้งาน NIS, LDAP
คำแนะนำ

* ปิด

pand
รองรับอุปกรณ์ bluetooth
คำแนะนำ

* ปิด

pcscd
มีไว้สำหรับรองรับอุปกรณ์ประเภท Smart Card ที่ต่อเชื่อมกับเครื่องโดยตรง
คำแนะนำ

* ปิด

psacct
เก็บข้อมูลการใช้งาน process ว่าผู้ใช้งาน ใช้คำสั่ง อะไรบ้าง เมื่อเวลาเท่าไร โดยถ้ารัน service นี้แล้ว เราสามารถใช้คำสั่ง lastcomm เพื่อดูข้อมูลย้อนหลังได้
คำแนะนำ

* ปิด – ยกเว้นมีนโยบายในการตรวจสอบจริงๆ

rdisc
ไว้สำหรับค้นหา router ที่ต่อเชื่อมกับ network โดยอัตโนมัติ
คำแนะนำ

* ปิด – แล้วคอนฟิกเองดีกว่า

restorecond
เป็น service สำหรับตรวจสอบสถานะและปรับปรุงคอนฟิกของ SELinux
คำแนะนำ

* เปิด – ถ้าคุณตัดสินใจใช้ SELinux

rpcbind
ทำหน้าที่จัดการโปรแกรม NFS, NIS เหมือนกับ portmap
คำแนะนำ

* ปิด

rpcgssd
rpcidmapd
rpcsvcgssd
เป็น service สำหรับ NFSv4
คำแนะนำ

* ปิด

rsyslog
เป็นโปรแกรมที่ใช้แทนที่ syslog สำหรับเก็บ log ของเครื่อง
คำแนะนำ

* เปิดเท่านั้น

saslauthd
รองรับโปรแกรมที่ใช้แบบ SASL เช่นโปรแกรมประเภท Mail Server
คำแนะนำ

* ปิด – แนะนำให้ปิดไว้ก่อน ถ้าจะคอนฟิก Mail Server แล้วค่อยมาเปิดกันอีกที

sendmail
โดยคอนฟิกที่มาตอนติดตั้ง จะทำหน้าที่เป็น Mail Server แต่ใช้งานเฉพาะในเครื่องเท่านั้น (localhost, 127.0.0.1) ไม่รองรับการเชื่อมต่อจากเครื่องอื่นๆ บางคนก็แนะนำให้เปิดไว้ เพราะจะมี log บางอย่างเช่น จาก crontab ส่งไปยัง root แต่ถ้าคุณไม่สนใจ log พวกนี้ ก็ปิดไปได้เลย
คำแนะนำ

* ปิด

smartd
มีไว้สำหรับตรวจสอบสถานะเช่นอุณหภูมิของฮาร์ดดิสก์ได้ แต่ดิสก์บางรุ่นก็ไม่รองรับ หรืออาจมีปัญหาในการรัน service นี้ได้
คำแนะนำ

* เปิด – สำหรับเครื่องที่ตรวจสอบสถานะได้ แล้วไม่มีปัญหาในการรัน

sshd
เป็น service ที่ทำให้เราสามารถที่จะ remote login แบบ Secure Shell เข้าไปในเครื่องได้ โดยใช้โปรแกรมเช่น PuTTY
คำแนะนำ

* เปิด – สำหรับ server
* ปิด – สำหรับ notebook, desktop ที่ใช้งานส่วนตัว และไม่ต้องการให้เครื่องอื่น remote เข้ามาได้

udev-post
ใช้ตรวจสอบ แก้ไข คอนฟิกของอุปกรณ์ที่มีการเปลี่ยนแปลงได้
คำแนะนำ

* เปิด

winbind
ทำงานร่วมกับ Samba File Sharing
คำแนะนำ

* ปิด

wpa_supplicant
เป็น service เพื่อรองรับการเชื่อมต่อกับ Wireless แล้วมีการใช้งานแบบ WPA
คำแนะนำ

* ปิด – สำหรับเครื่องที่ไม่ได้ใช้ Wireless ในการเชื่อมต่อ network

ypbind
ทำให้เครื่องเป็น NIS Client
คำแนะนำ

* ปิด