27 ตุลาคม 2548

คราวเคราะห์

      
สุดสัปดาห์ที่ผ่านมา ผมกลับไปเยี่ยมบ้านภรรยาเช่นเคย ครั้งนี้ร้านมินิมาร์ทที่ลงทุนทำร่วมกับทางน้องของภรรยาก็ดูเป็นรูปเป็นร่างที่ชัดเจน ข้าวของก็ค่อนข้างครบถ้วน ลูกค้าก็เข้าร้านไม่ขาด (ดีจัง ;-)

      
วันอาทิตย์ภรรยาให้ทำการห้อยลูกโป่งแบบพลาสติกใส ข้างในบรรจุโฟมและลูกกระดิ่งกลม ๆ ดูน่ารักเพื่อตกแต่งร้าน ผมจัดแจงยกเก้าอี้ไม้ยางพาราแบบพับได้มากางเพื่อปีนขึ้นไปห้อยลูกโป่ง จัดการห้อยไปเรียบร้อย เสียงภรรยาท้วงมาจากด้านหลังว่า "มันสูงไป ไม่สวยอ่ะ" ว่างั้น

"โอเค เดี๋ยวจัดให้" ผมบอกภรรยายิ้ม ๆ แล้วก็เขย่งเก็งกอยบนเก้าอี้ต่อ ขณะกำลังจะทำการมัดริบบิ้นให้สวยงาม ก็รู้สึกว่าตัวเองวูบหล่นลงมาที่พื้นพร้อม ๆ กับได้ยินเสียง 'แคร๊กกก' ดังพอควรตามด้วยเสียง 'พลั่กกกก' มารู้สึกตัวอีกทีผมก็ร่วงมาอยู่ที่พื้นเรียบร้อยแล้ว

พอตั้งสติได้ก็ทำการสำรวจร่างกายตัวเอง พบว่าเอวขยับไม่ได้เพราะปวดจี๊ด ๆ เหลียวไปมองดูซากเก้าอี้ก็หน้าเสีย เพราะตัวขาเก้าอี้ถึงกับฉีกออกมาเป็นไม้แหลม ๆ ดีที่มันไม่เสียบหลังเอา -_-! ภรรยาวิ่งเข้ามาคลำ ๆ หลังแล้วก็เลิกเสื้อด้านหลังขึ้นแล้วก็บอกว่า "โหยย เหมือนแตกเลย" สงสัยจะเพราะตัวพนักพิงของเก้าอี้ฟาดตอนตกลงมา
ผมค่อย ๆ พยุงตัวเองขึ้นมาแล้วก็เดินมาค่อย ๆ ทิ้งตัวลงบนเสื่อ พยายามข่มความเจ็บปวดด้วยการระลึกรู้ลมหายใจ ซักพักก็หลับไป ตื่นมาอีกทีรู้สึกหลังคลายความปวดไปเยอะพอควร รอบนี้ภรรยาเอายาหม่องมานวดให้ด้วย



      
ขากลับมากรุงเทพฯ ดันจองรถวีไอพี ๒๔ ที่นั่งไม่ได้ ได้รถ ป.๑ ธรรมดา แล้วที่นั่งก็อยู่เหนือล้อหลังซะด้วย -_-' กว่าจะถึงกรุงเทพฯ ก็เล่นเอาปวดหลังไปพอดู แล้วยังไม่ค่อยจะหลับด้วย



      
เมื่อวานไปตรวจกระดูกที่วิทยาลัยแพทย์ศาสตร์กรุงเทพมหานครและวชิระพยาบาลมา ไปถึงตั้งแต่ ๙ โมงครึ่ง กว่าจะได้ตรวจปาเข้าไป ๑๑ โมงครึ่ง หมอให้ไปเอ็กซเรย์ตอนใกล้ ๆ เที่ยง เจ้าหน้าที่ห้องเอ็กซเรย์บอกว่า "คุณต้องมายื่นตอนบ่ายโมงนะคะ ตอนนี้พักเที่ยง" นั่น ขนาดหมอเค้ายังไม่พักเที่ยงเลย บรรดาคุณ ๆ เจ้าหน้าที่กลับพากันพัก (ทำไมไม่แบ่งเวรกันไปกินข้าวฟะ) ได้ผลเอ็กซเรย์ตอนบ่ายโมงครึ่ง กลับไปหาคุณหมอ ๆ ก็ดู แล้วก็บอกว่าไม่เป็นอะไรมาก คงแค่ช้ำและกล้ามเนื้อฉีกเท่านั้น เฮ้อ โล่งอกไปที ถือเป็นคราวเคราะห์ละกัน ไม่ก็ผลกรรมอย่างใดอย่างหนึ่งมันคงมาเฉ่งเอาแหละ :-/



ป.ล. ช่วงนี้อารมณ์แปรปรวนมาก ไม่อยากใช้สมอง ขอพักอู้อีกหลายวันครับ :-P

20 ตุลาคม 2548

โหยยยย blogger ทำฉันได้ T_T

เมื่อกี๊พิมพ์มาซะเยอะ กด preview หน่อยเดียว ข้อความที่พิมพ์ หายเกลี้ยงงงงง โห่ยยยยยยยยยยยยยย วัยรุ่นเซ็งครับ วัยรุ่นเซ็ง..... เอาเป็นว่า ผมขอลาพักสุดสัปดาห์นี้ละกัน อาทิตย์หน้าค่อยมาว่ากันใหม่ :-p

17 ตุลาคม 2548

POSIX EAs & ACLs ตอนที่ 2

แนะนำ Access Control Lists บนระบบลินุกซ์


    Access Control Lists คืออะไร ทำไมต้องใช้ ?



    Access Control Lists ที่กล่าวถึงนี้
เป็นการกำหนดสิทธิ์แบบใหม่ ซึ่งระบุไว้ในร่างมาตรฐาน POSIX 1003.1e
และ POSIX
1003.2c
(POSIX ย่อมาจาก Portable Operating System Interface
ส่วนตัว X หมายถึงเกี่ยวพันกับ api ของระบบ Unix
- อ่านเพิ่มเติมได้ที่ http://en.wikipedia.org/wiki/POSIX)
โดยเป็นการขยายความสามารถในการกำหนดสิทธิ์การใช้งานแฟ้มเพิ่มขึ้นจากรูปแบบสิทธิ์ที่ใช้อยู่เดิม
ซึ่งสามารถกำหนดสิทธิ์ได้ถึงระดับผู้ใช้หลายคน
หรือระดับกลุ่มผู้ใช้หลายกลุ่มก็ได้ จึงช่วยให้การใช้งาน ALCs
แบบนี้มีความปลอดภัย แม่นยำ และยืดหยุ่นสูง ส่วนคำว่า EA ก็คือ Extended
Attributes นั่นเอง


    แต่เดิมในยุคที่ลินุกซ์ยังใช้เคอร์เนล 2.4 อยู่นั้น
ACL ยังเป็นเพียง patch เพิ่มเติมสำหรับเคอร์เนลเท่านั้นเอง
นั่นคือ หากใครต้องการใช้งาน ACL
ก็จำเป็นจะต้องทำการแพตช์เคอร์เนลให้รองรับการใช้งาน ACL เสียก่อน
ทำให้ในตอนนั้นยังไม่มีการใช้งาน ACL กันแพร่หลายนัก
จนมาถึงยุคเคอร์เนลรุ่น 2.6 ACL
ก็ถูกรวมเข้าไว้เป็นส่วนหนึ่งของเคอร์เนลเรียบร้อยแล้ว ส่งผลให้ปัจจุบัน
ลินุกซ์ดิสโทรชันแทบทุกค่ายที่มีในปัจจุบันนั้น
มีความสามารถพื้นฐานในการรองรับความสามารถในการกำหนดสิทธิ์ให้กับแฟ้มตามมาตรฐาน
ACL นี้ได้


    สำหรับกลุ่มระบบปฏิบัติการที่รองรับ POSIX ACL ในปัจจุบันก็เช่น


  • IBM AIX

  • FreeBSD

  • SGI Irix

  • Sun Solaris

  • HP Tru64

  • SCO UnixWare

  • Linux รุ่นใหม่ ๆ



    ส่วนระบบแฟ้มที่รองรับการทำงานกับ ACL ได้แก่


  • ReiserFS

  • Ext2

  • Ext3

  • JFS

  • XFS



    ทดลองใช้งาน ACL




    การใช้งาน ACL บนระบบแฟ้มต่าง ๆ นั้น
เราจะต้องทำการเพิ่มตัวเลือก acl 
ในการเมาทน์ระบบแฟ้มก่อนด้วย เช่น

    # mount -o remount,acl /dev/sda1 /

    หรืออาจจะเพิ่มไว้ในแฟ้ม /etc/fstab
ในส่วนตัวเลือกของแต่ละพาร์ติชันเลยก็ได้ เช่น

    /dev/hda7           
/                   
reiserfs   acl,user_xattr       
1 1






    สำหรับบนระบบลินุกซ์ที่ผมทดลองใช้ ACL อันได้แก่ SUSE
Linux OSS 10.0
และ Fedora
Core 3 และ 4 นั้น ทั้ง SUSE และ Fedora ได้เตรียมแพ็กเกจพื้นฐาน acl
ไว้ให้ใช้ในการจัดการกับ ACL เรียบร้อยแล้ว
ซึ่งแพ็กเกจ acl นี้จะให้คำสั่งในการใช้งานกับ acl มา 3 คำสั่ง ได้แก่


  • getfacl - เป็นคำสั่งในการขอดูสิทธิ์ที่อนุญาตในการใช้งานแฟ้มหรือไดเรกทอรี

  • setfacl - เป็นคำสั่งในการตั้งค่าสิทธิ์ที่จะอนุญาตในการใช้งานแฟ้มหรือไดเรกทอรี

  • chacl - เป็นคำสั่งในการเปลี่ยนสิทธิ์ต่าง ๆ ในการใช้งานแฟ้มหรือไดเรกทอรี



    ลองมาเรียกดู acl
ของแฟ้มจากพาร์ติชันที่ไม่ได้เมาทน์ด้วยตัวเลือก acl กันดูสักหน่อยครับ

donga@linux:/media/SHARES> getfacl Logo.svg
# file: Logo.svg
# owner: root
# group: root
user::rw-
group::r--
other::r--


    ส่วนผลลัพธ์การเรียกคำสั่ง ls ได้ผลดังนี้ครับ

donga@linux:/media/SHARES> ls -l Logo.svg
-rw-r--r-- 1 root root 2225 2005-06-21 22:40 Logo.svg


    ในส่วน user::rw- group::r-- และก็ other::r--
ที่ได้จากคำสั่ง getfacl นั้น เรียกว่า ACL Entry ครับ
ซึ่งจากตัวอย่างจะมีเพียง 3 ตัว ตามสิทธิ์ที่อนุญาตแบบเดิม ๆ
ที่เรากำหนดให้กับ user, group และ other นั่นเอง แต่จริง ๆ แล้ว ACL
Entry นั้นมีหลายประเภทนะ ซึ่งพอจะสรุปประเภทและรูปแบบของ ACL Entry
ประเภทต่าง ๆ ได้ตามตารางด้านล่างนี้










































ประเภท ใช้สำหรับ รูปแบบ
owner สิทธิ์ของเจ้าของแฟ้ม/ไดเรกทอรี user::rwx
named user สิทธิ์สำหรับผู้ใช้โดยระบุชื่อผู้ใช้ user:name:rwx
owning group สิทธิ์สำหรับกลุ่มเดียวกันกับเจ้าของแฟ้ม/ไดเรกทอรี group::rwx
named group สิทธิ์สำหรับกลุ่มตามชื่อกลุ่มที่ระบุ group:name:rwx
mask

มาสก์ของสิทธิ์ที่อนุญาต (ขอยกไปอธิบายภายหลัง) mask::rwx
other สิทธิ์สำหรับผู้ใช้อื่น ๆ other::rwx




    ทีนี้ลองมาดูเปรียบเทียบส่วน ACL Entry
ระหว่างแฟ้มที่ใช้ ACL กับไม่ได้ใช้ ACL กันอีกสักตัวอย่าง















พาร์ติชันที่ไม่ได้เมาทน์ด้วยตัวเลือก acl พาร์ติชันที่เมาทน์ด้วยตัวเลือก acl

donga@linux:/media/SHARES> getfacl Logo.svg
# file: Logo.svg
# owner: root
# group: root
user::rw-
group::r--
other::r--


donga@linux:~> getfacl wireless.log
# file: wireless.log
# owner: donga
# group: users
user::rw-
user:nipat:rw-
group::r--
mask::rw-
other::r--





    จะเห็นว่า ในฝั่งขวามือซึ่งเป็นส่วนที่มีการใช้ acl
นั้นจะมีรายละเอียดของ ACL Entry เพิ่มขึ้นมาหลายส่วน
เราลองมาเทียบผลลัพธ์ของ acl ที่เป็น ACL Entry
กับการกำหนดสิทธิ์ที่อนุญาตในรูปแบบเดิมกันดูมั่ง














owner
named user
owning group
mask
other


user::rw-
user:nipat:rw-
group::r--
mask::rw-
other::r--


<-->
 
 
<-->
<-->


  rw-  ==  สิทธิ์ของเจ้าของแฟ้ม
 
 
  rw- == สิทธิ์ของกลุ่มเดียวกันกับเจ้าของแฟ้ม
  --- == สิทธิ์ของผู้ใช้อื่น ๆ





    ลอง ls แฟ้ม wireless.log ดู

donga@linux:~> ls -l wireless.log
-rw-rw-r--+ 1 donga users 598 2005-10-16 22:22 wireless.log


    จะเห็นว่า หลังกลุ่มแอตทริบิวต์ระบุสิทธิ์ มีเครื่องหมาย "+"
ต่อท้ายเข้ามา นั่นหมายถึงแฟ้มนี้มีส่วนสิทธิ์ที่อนุญาตในแบบ ACL
เพิ่มเติมเข้ามานั่นเอง




    เอาละครับ ก่อนจบตอนที่ 2 นี้ เดี๋ยวเรามาทำความรู้จักกับคำสั่ง setfacl ซึ่งเป็นคำสั่งที่ย่อมาจาก set file access control lists
ใช้สำหรับการตั้งค่า ACL ให้กับแฟ้มหรือไดเรกทอรี ว่ามีพารามิเตอร์อะไรกันบ้าง และมีวิธีการใช้งานขั้นต้นอย่างไรบ้าง โดยขออ้างอิงจากพารามิเตอร์ --help ของคำสั่งครับ




   คำสั่ง setfacl





setfacl -- set file access control lists
รูปแบบคำสั่ง: setfacl [-bkndRLP] { -m|-M|-x|-X ... } แฟ้ม/ไดเรกทอรี ...
พารามิเตอร์ต่าง ๆ ได้แก่
-m, --modify=acl แก้ไขค่า acl ปัจจุบันของแฟ้ม/ไดเรกทอรี
-M, --modify-file=file แก้ไขค่า acl ปัจจุบันของแฟ้ม/ไดเรกทอรี โดยใช้ค่าจากรายการ ACL ที่อยู่ในแฟ้มที่ระบุ (=file)
-x, --remove=acl ลบ acl รายการที่กำหนด (=acl) ออกจาก ACL ของแฟ้ม/ไดเรกทอรี
-X, --remove-file=file ลบ acl ออกจากแฟ้ม/ไดเรกทอรี โดยใช้ค่าจากรายการ ACL ที่อยู่ในแฟ้มที่ระบุ (=file)
-b, --remove-all ลบรายการ ACL ทุกรายการออกจากแฟ้ม
-k, --remove-default ลบส่วนรายการปริยายของ ACL (default ACL)
--set=acl ตั้งค่า acl ของแฟ้ม/ไดเรกทอรี โดยทำการแทนที่ค่า acl เดิมที่มีอยู่
--set-file=file ตั้งค่า acl ของแฟ้ม/ไดเรกทอรี โดยใช้ค่าจากรายการ ACL ที่อยู่ในแฟ้มที่ระบุ (=file)
--mask ทำการประมวลผลสิทธิ์ที่ควรได้รับผลกระทบจากค่ามาสก์
-n, --no-mask ไม่ต้องทำการประมวลผลสิทธิ์ที่ควรได้รับผลกระทบจากค่ามาสก์
-d, --default ดำเนินการกับค่ารายการปริยายของ ACL (default ACL)
-R, --recursive กระทำกับแฟ้ม/ไดเรกทอรีย่อยภายในด้วย
-L, --logical ดำเนินการกับแฟ้มในแบบลอจิคอล ซึ่งจะมีการกระทำกับแฟ้มแบบ symbolic link ด้วย
-P, --physical ดำเนินการกับแฟ้มในแบบกายภาพ โดยไม่มีการกระทำกับแฟ้มแบบ symbolic link
--restore=file เรียกคืนค่ารายการ acl ของแฟ้ม/ไดเรกทอรี โดยใช้ค่าจากรายการ ACL ที่อยู่ในแฟ้มที่ระบุ (=file)
(ให้ผลตรงข้ามกับคำสั่ง `getfacl -R')
--test โหมดทดสอบ (ไม่มีการแก้ไขรายการ ACL ใด ๆ)
--version พิมพ์หมายเลขรุ่นและจบการทำงาน
--help แสดงข้อความช่วยเหลือ


    สำหรับการใช้งานคำสั่ง setfacl อย่างง่าย ก็เช่น

    - ต้องการกำหนดให้ผู้ใช้ชื่อ nipat ซึ่งไม่ได้เป็นกลุ่มผู้ใช้เดียวกันกับเรา ให้สามารถทำการอ่านและเขียนแฟ้ม wireless.log ซึ่งเราเป็นเจ้าของได้
และไม่ให้ผู้ใช้อื่นมีสิทธิ์ใด ๆ ในแฟ้มนี้ เราสามารถใช้คำสั่ง setfacl ได้ดังนี้

> setfacl -m user:nipat:rw wireless.log

    - ในกรณีที่รายการ acl user:nipat ของแฟ้ม wireless.log ยังไม่มีอยู่ คำสั่งนี้จะทำการเพิ่มรายการ acl user:nipat เข้าไป

    - แต่ถ้าแฟ้ม wireless.log มีรายการ acl user:nipat อยู่แล้ว คำสั่งนี้จะเป็นการแก้ไขสิทธิ์ของ acl user:nipat




    และสุดท้ายของตอนนี้ ก็มาดูคำสั่ง getfacl กันครับ


   คำสั่ง getfacl



getfacl -- get file access control lists
รูปแบบคำสั่ง: getfacl [-dRLP] file ...
พารามิเตอร์ต่าง ๆ ได้แก่
--access ให้แสดงเฉพาะรายการ acl ของแฟ้ม/ไดเรกทอรีเท่านั้น
-d, --default ให้แสดงเฉพาะรายการ acl ที่เป็นปริยายของแฟ้ม/ไดเรกทอรีเท่านั้น (default ACL)
--omit-header ไม่ต้องแสดงหมายเหตุส่วนหัว
--all-effective แสดงสิทธิ์ที่ได้รับทั้งหมด
--no-effective แสดงสิทธิ์ที่ไม่ได้รับทั้งหมด
--skip-base ข้ามแฟ้มที่มีเฉพาะรายการ acl พื้นฐาน (สิทธิ์แบบเดิม ๆ ที่ใช้กับคำสั่ง chmod)
-R, --recursive เรียกดูกับแฟ้ม/ไดเรกทอรีย่อยภายในด้วย
-L, --logical ดำเนินการกับแฟ้มในแบบลอจิคอล ซึ่งจะมีการกระทำกับแฟ้มแบบ symbolic link ด้วย
-P --physical ดำเนินการกับแฟ้มในแบบกายภาพ โดยไม่มีการกระทำกับแฟ้มแบบ symbolic link
--tabular ใช้รูปแบบการแสดงผลโดยการแบ่งช่องด้วยแท็บ
--numeric แสดงค่าหมายเลขของผู้ใช้/หมายเลขกลุ่มผู้ใช้
--absolute-names ไม่ต้องเครื่องหมาย '/' ที่นำหน้าพาธออก
--version พิมพ์หมายเลขรุ่นและจบการทำงาน
--help แสดงข้อความช่วยเหลือ


    สำหรับการใช้งานคำสั่ง getfacl อย่างง่าย ก็เช่น


> getfacl wireless.log
# file: wireless.log
# owner: donga
# group: users
user::rw-
user:nipat:rw-
group::r--
mask::rw-
other::r--

   ซึ่งก็เป็นสั่งให้แสดงค่าของรายการ acl ที่กำหนดให้กับแฟ้ม wireess.log นั่นเอง





   
เอาละครับ สำหรับตอนนี้ผมขอพักแค่นี้ก่อนละกัน
เดี๋ยวตอนหน้าเราค่อยมาต่อกันในเรื่อง mask ว่าเกี่ยวข้องกับ acl อย่างไร
การใช้ acl กับแฟ้มและไดเรกทอรีมีผลเหมือนหรือแตกต่างกันอย่างไร เดี๋ยวมาว่ากันตอนหน้าครับ
ตอนนี้เบลอแล้ว (html จัดหน้ายากชะมัด :P :lol:)







ข้อมูลอ้างอิง: http://acl.bestbits.at/about.html

POSIX EAs & ACLs ตอนที่ 1

    เมื่ออาทิตย์ก่อน ท่าน ผจก.ฝ่าย อยากจะกำหนดสิทธิ์ในการใช้งานแฟ้มบนเซิร์ฟเวอร์ให้รัดกุม โดยต้องการจะแยกแยะสิทธิ์ในการอ่าน, การเขียน และการประมวลผลแฟ้มและไดเรกทอรีอย่างชัดเจน โดยจะทำให้กำหนดสิทธิ์ให้กับผู้ใช้หรือกลุ่มแยกรายตัวหรือรายกลุ่มกันเลยทีเดียว จึงได้มอบหมายให้ผมทำการปรับแต่งสิทธิ์ในการใช้งานแฟ้มบนเซิร์ฟเวอร์ให้เป็นไปตามข้อกำหนด เอาล่ะสิครับ เคยรู้จักแต่การกำหนดสิทธิ์แบบเดิม ๆ ที่เรารู้จักกันในเรื่องการตั้งค่าสิทธิ์ที่อนุญาตหรือ Permissions โดยใช้คำสั่ง chmod ยอดนิยม :p

    แล้วจะทำไงดีหว่า ?

    ว่าแล้วก็ต้องอ่านคู่มือ Admin ที่ติดมากับ SUSE Linux OSS ก่อนละ แล้วก็มาสะดุดกับหัวข้อ POSIX ACLs ซึ่งเป็นเรื่องของการกำหนดสิทธิ์อนุญาตที่พิเศษและเหนือกว่าคำสั่ง chmod อ่าน ๆ ไป แล้วก็ค้นกูเกิ้ลต่อ ก็เลยเอามาสรุปไว้ที่นี่แหละ ;-)

ทบทวนเรื่องสิทธิ์ที่อนุญาตหรือ Permission


    หลาย ๆ ท่านคงคุ้นเคยกับการตั้งค่าสิทธิ์ที่อนุญาตหรือ Permission ที่ใช้กำหนดการเข้าใช้งานไดเรกทอรีและแฟ้มต่าง ๆ บนระบบยูนิกซ์รวมไปถึงระบบคล้ายยูนิกซ์เช่นลินุกซ์กันดีอยู่แล้ว โดยการตั้งค่าสิทธิ์ที่อนุญาตนี้ เราจะกระทำผ่านคำสั่ง chmod (change file access permissions) ซึ่งจะสามารถกำหนดระดับการเข้าถึงได้ 3 ระดับ นั่นคือ


  • การอ่าน (read - แฟล็ก r)

  • การเขียน (write - แฟล็ก w) และ

  • การประมวลผล (execute - แฟล็ก x) หากใช้กับไดเรกทอรีจะเป็นการอนุญาตให้เข้าใช้งานไดเรกทอรีได้


    จากระดับการเข้าถึงทั้ง 3 นั้น ยังใช้กำหนดแยกให้กับระดับผู้ใช้อีก 3 ระดับ นั่นคือ


  • เจ้าของแฟ้ม/ไดเรกทอรี (File Owner)

  • กลุ่มผู้ใช้ (Group) และ

  • ผู้ใช้อื่น (Other users)


    ลองดูผลลัพธ์ที่ได้จากคำสั่ง ls
เพื่อทบทวนกันสักหน่อยดีกว่า

donga@linux:~> ls -l Documents/KDE-SVN/th/messages
total 21
-rw-r--r-- 1 donga users 104 2005-09-29 21:17 flag.png
drwxr-xr-x 3 donga users 208 2005-10-05 21:48 kdeaccessibility
...

   
จากผลลัพธ์เราสามารถแบ่งกลุ่มตัวอักษรที่คอลัมน์แรกออกเป็น 4 กลุ่มด้วยกัน
โดยประกอบด้วย















-rw-r--r--
























อักษรตัวที่ 1ใช้บ่งบอกถึงประเภทของแฟ้ม
อักษรตัวที่ 2-4ใช้แสดงสิทธิ์ที่เจ้าของแฟ้ม/ไดเรกทอรีมีต่อแฟ้ม/ไดเรกทอรีนั้น
อักษรตัวที่ 5-7ใช้แสดงสิทธิ์ที่กลุ่มที่เป็นกลุ่มเดียวกันกับเจ้าของแฟ้ม/ไดเรกทอรีมีต่อแฟ้ม/ไดเรกทอรีนั้น
อักษรตัวที่ 8-10ใช้แสดงสิทธิ์ที่ผู้ใช้อื่น ๆ
มีต่อแฟ้ม/ไดเรกทอรีนั้น




    สำหรับความหมายของตัวอักษรตัวแรกก็มีความหมายคือ


-      หมายถึง เป็นแฟ้มปรกติ

d      หมายถึง เป็นไดเรกทอรี

c      หมายถึง เป็นแฟ้มแบบดีไวซ์ Character I/O

b      หมายถึง เป็นแฟ้มแบบดีไวซ์ Block I/O

l       หมายถึง เป็นแฟ้มแบบเชื่อมโยง (symbolic link)

s      หมายถึง เป็นแฟ้มแบบซ็อกเก็ต (socket file)

p      หมายถึง เป็นแฟ้มแบบ FIFO




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

   
http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php



    เอาละครับ ถึงตอนนี้จะเห็นว่า
เราสามารถที่จะกำหนดสิทธิ์ที่อนุญาตในการใช้งานแฟ้ม/ไดเรกทอรี
ให้กับผู้ใช้ในระดับต่าง ๆ ตั้งแต่ กำหนดสิทธิ์ให้กับตัวเจ้าของแฟ้มเอง,
กำหนดให้ผู้ใช้ที่อยู่ในกลุ่มเดียวกันกับเจ้าของแฟ้ม
และกำหนดให้กับผู้ใช้อื่น ๆ ซึ่งก็น่าจะเพียงพอ
และไม่น่าจะเป็นปัญหาแต่อย่างใดหากเป็นการใช้งานแฟ้มและไดเรกทอรีในระดับปรกติธรรมดา
แต่ในบางกรณี ถ้าเราต้องการระบุสิทธิ์การอนุญาตที่ซับซ้อนกว่านี้ล่ะ
จะทำอย่างไร ยกตัวอย่างกรณีต่าง ๆ เช่น


  • ต้องการให้เฉพาะผู้ใช้ชื่อ joe ซึ่งอยู่ในกลุ่มผู้ใช้ชื่อ users
    สามารถทำการอ่าน, เขียน และประมวลผลแฟ้มของเราได้เพียงคนเดียว
    แต่ไม่ให้ผู้ใช้อื่น ๆ ในกลุ่ม users มีสิทธิ์อ่าน, เขียน
    และประมวลผลแฟ้มของเราได้


  • เจ้าของแฟ้มเป็นผู้ใช้ในกลุ่ม marketing แต่ต้องการให้ผู้ใช้ซึ่งอยู่ในกลุ่มผู้ใช้ที่ชื่อ account สามารถทำการอ่านและเขียนแฟ้มได้เพียงกลุ่มเดียวเท่านั้น

  • ต้องการให้สามารถกำหนดสิทธิ์ผ่านระบบวินโดว์ส 2000 , XP หรือ 2003
    ตามรูปแบบสิทธิ์ที่กำหนดได้บนระบบวินโดว์สดังกล่าว (คือสามารถกำหนดแยกย่อยว่าจะอนุญาตเป็นราย ๆ ทั้งรายผู้ใช้ หรือรายกลุ่มได้)

  • ฯลฯ



    ฝากไว้ให้คิดเป็นการบ้านก่อน เดี๋ยวมาต่อตอนหน้าครับ
(ที่จริงเมื่อยพิมพ์ กะเมื่อยจัดหน้าอ่ะ :-P )

    อ้อ ต้องเตรียมลง Win2000 Evaluate บน QEMU
เพื่อทดสอบด้วย
:-P




ข้อมูลอ้างอิง: http://acl.bestbits.at/about.html

09 ตุลาคม 2548

"กระดิกไทย" ภาคกะโนม.. มาแว้ววว

          
มาแล้วครับ มาแล้ว "กระดิกไทย" ภาคกะโนม.. มาแว้ววว




          
เปล่าหรอกครับไม่ใช่ผลงานของผมแต่ประการใด แต่เป็นผลงานของท่านอาจารย์ Kitty แห่ง Thai Linux Working Group นั่นเอง :D

          
สงสัยคงเนื่องจากแม้ว่าผมจะโดนเสียดสี เยาะเย้ย และถากถางเอาจากทั้งท่านอาจารย์ Kitty และท่านเด่นสิน ใน IRC ห้อง #tlwg เพื่อยั่วยุให้ผมเปลี่ยนใจ (ทางโน้นบอกให้กลับตัวกลับใจ) จาก KDE เพื่อมาเขียน กระดิกไทย ที่เป็น GNOME based ให้ได้ แต่ถึงอย่างไร ผมก็ไม่สะทกสะท้านและไม่เขียน (ผมจนปัญญาเขียนตะหาก ลอล) จนกระทั่งท่านอาจารย์ Kitty ทนไม่ไหวเสียเอง ถึงกับต้องลงมือเขียนเองจนได้ GDictThai ภาคกะโนม ออกมาจนได้



          
ผู้ที่สนใจสามารถดาวน์โหลดได้ที่


          
ftp://ftp.kitty.in.th/pub/sources/gdictthai/


          
ถ้าใช้แล้วมีปัญหาใด ๆ แจ้งบักไปที่ท่านอาจารย์ Kitty ได้เลยนะครับ (ว่าแต่รับแจ้งแต่บัก แต่ไม่รับ wishlist หรือท่าน ;-)



          
ขอแสดงความยินดี และก็ร่วมโปรโมทให้ด้วยครับท่าน :-)

คำว่า "openSUSE" กับ "SUSE Linux"

          
เราเจอคำว่า "openSUSE" และคำว่า "SUSE Linux" มาได้ระยะหนึ่งแล้ว แล้วสองคำนี้มันต่างกันอย่างไร ?



          
คุณ Stephan Binner (Beineri) ได้บอกไว้ที่บล็อกของเขาว่า



          
"openSUSE" เป็นชื่อสำหรับโครงการในการพัฒนาเท่านั้น (only the name for the development project.)

          
"SUSE Linux" เป็นชื่อที่ใช้สำหรับดิสทริบิวชัน (name of the distribution)



          
นั่นหมายความว่าเมื่อโครงการ openSUSE ประกาศออกรุ่นใหม่ ลินุกซ์ตัวนั้นควรจะถูกเรียกว่า "SUSE Linux OSS" ซึ่งหมายถึงลินุกซ์ดิสทริบิวชันที่ชื่อว่า SUSE ที่เป็นรุ่น OpenSource (รุ่นคอมเมอร์เชียลจะไม่มีคำว่า OSS)



          
จะเห็นว่า หลาย ๆ คน (รวมทั้งผมด้วย อายจัง :P) แม้กระทั่งที่ wiki ของ โครงการ openSUSE เองก็ยังใช้คำว่า "openSUSE" กับ "SUSE Linux" เองไม่ถูกต้องเหมือนกัน คุณ Stephan Binner บอกเหตุผลเพิ่มเติมว่า อาจจะเนื่องมาจากที่ http://www.opensuse.org ใช้ระบบ wiki ซึ่งผู้ใช้ส่วนใหญ่สามารถทำการแก้ไขเองได้ทำให้เกิดความผิดพลาดในการใช้คำขึ้น
แต่ถ้าคุณเข้าไปที่เวบไซต์โครงการ openSUSE ในตอนนี้ ก็จะเห็นว่าได้มีการแก้ไขคำให้เข้าใจถูกต้องตรงกันแล้ว



          
ก็หวังว่าต่อไป เรา ๆ ชาวลินุกซ์ทั้งหลาย คงจะใช้คำเหล่านี้ให้ถูกต้อง และเข้าใจตรงกันนะครับ :D

07 ตุลาคม 2548

SUSE 10.0 Released



          มาแล้วครับ มาแล้ว SUSE 10.0 และ openSUSE 10.0 ตามคำมั่นสัญญาที่โนเวลล์ได้ให้ไว้ ;-)

          สำหรับฟีเจอร์เด่น ๆ ที่มี ก็ไม่ค่อยจะฉีกแนว หรือปรับจากตัว Release Candidte 1 มากนัก โดยในรุ่นนี้ก็รองรับสถาปัตยกรรมหลายแบบ ทั้ง ix86, x86_64, PPC และ PPC64 ส่วนซอฟต์แวร์หรือคุณสมบัติเด่น ๆ ในรุ่นนี้ก็เช่น (ขอยกมาจากแพ็กเกจของ openSUSE นะครับ)

  • Kernel 2.6.13 - ตัวนี้SUSE แพตช์มาค่อนข้างหนักเพื่อรองรับอุปกรณ์ต่าง ๆ ได้ดี

  • GCC 4.0.2 - ใหม่มาก ๆ :P

  • glibc 2.3.5 - No comments

  • KDE 3.4.2 - รุ่นที่สเถียรล่าสุด

  • GNOME 2.12 - รุ่นล่าสุดคือ 2.12.1

  • OpenOffice 2 Beta (1.9 build 125) - ไม่ใหม่เท่าไหร่แฮะ

  • Mozilla Firefox 1.0.6 - เอ๊ะ เห็นตัวอัพเดตของ SUSE เองมัน 1.0.7 แล้วไม่ใช่เรอะ ? :P

  • Mozilla ThunderBird 1.0.6 - No comments

  • Mozilla SunBird 0.2 - No comments

  • PostgreSQL 8.0.3 - ก็ใหม่ดี

  • MySQL 4.1.13 - No comments

  • Gimp 2.2.8 และตัว unstable 2.3.3 - แจ๋ว

  • อื่น ๆ อีกเยอะแยะ ตาแป๊ะไก๋ (คือแพ็กเกจมันเยอะจริง ๆ ครับ ตาลายน่ะ :P)



          เมื่อนับข้อดีได้มากโขขนาดนี้แล้ว ก็ทำการดาวน์โหลดได้เลยครับ

          Download openSUSE 10.0

          ส่วนตัวผมเองก็กำลังทำการดาวน์โหลดอยู่เช่นกัน ;-) เด๋วต้องทำตัว modified กันอีกรอบ ถ้าเป็นไปได้ผมอยากจะตัดแผ่นชุด x86_64 ให้คุณหน่อยด้วย ไม่รู้ว่าจะทำได้หรือเปล่า (แต่ที่แน่ ๆ openSUSE มี gcc crossplatform มาให้เพียบเลย) แต่ว่าทำแล้วมันทดลองไม่ได้นี่สิ ปัญหาใหญ่ -_-"

          จริง ๆ แล้วในช่วงนี้มีลินุกซ์ค่ายอื่น ๆ ก็ปล่อยรุ่นใหม่ของตนกันอย่างคึกคักอยู่หลายค่ายเหมือนกัน ไม่ว่าจะเป็น Mandriva Linux 2006 หรือ Ubuntu Linux 5.10 RC แต่ผมคงไม่กล่าวถึง เนื่องจากไม่ใช่บล็อกข่าวแต่ประการใด อิอิ

04 ตุลาคม 2548

Opera 8.50 บน OpenSUSE 10.0

หลังจาก Opera 8.50 ประกาศปลดแอ(ก)ดหรือปลอดโฆษณาไปอย่างครึกโครมแล้ว ผมเองก็เป็นคนหนึ่งที่ไม่รีรอที่จะต้องไปทำการดาวน์โหลดมาใช้มั่ง โดยไปดาวน์โหลดที่เวบไซต์ของ Operaโดยตรง โดยเลือกเป็นแบบ RPM ของ SuSE 9.3 กับ Fedora Core 4 เพื่อนำมาติดตั้งบน OpenSUSE 10.0RC1 ตัวโปรด (โดยกะว่าถ้า RPM ของ SuSE 9.3 ใช้ไม่ได้ ก็คงจะใช้ของ Fedora Core 4 ได้ เนื่องจากใช้ gcc เวอร์ชัน 4 เหมือน ๆ กัน)



ดาวน์โหลดเสร็จ ก็จัดแจงติดตั้งโดยแปลงร่างเป็น root กันซะก่อน ตามด้วยคำสั่ง rpm ที่แสนคุ้นเคย


# rpm -Uvh opera-8.50-20050916.5-shared-qt.i386-en.rpm

ได้เมนู Opera มา ก็จัดแจงเรียกโปรแกรม ......

.... เงียบบบบ และ เงียบบบ ..... วะ

ชักสงสัย เปิดคอนโซลขึ้นมาเรียกดูว่ามันแจ้งข้อผิดพลาดอะไร


donga@linux:~> opera
Segmentation fault

-_-" งงเป็นไก่ตาแตก ไรกันเนี่ย ...

เลยจัดการถอดถอนแพ็กเกจ Opera ของ SuSE 9.3 ออก เอาตัวของ Fedora Core 4 มาลงแทน แล้วทดสอบ

... Segmentation fault เหมือนเดิมเด๊ะ ....

โห ฉุน ๆ ๆ พักไว้ก่อนก็ได้ฟ่ะ ใช้ Konqueror ต่อก็ได้ ไม่เห็นง้อ

...

หลังจากทิ้งช่วงไปหลายวัน ก็พบว่าทาง openSUSE ได้จัดทำแพ็กเกจ Opera ของ OpenSUSE 10.0 มาให้แล้ว เลยดาวน์โหลดมาลองของอีกที


donga@linux:~# wget -c http://suse.inode.at/pub/i386/update/10.0/rpm/i586/opera-8.50-2.1.i586.rpm

เรียบร้อย จัดแจงติดตั้งตามกระบวนการเดิม แล้วทดลองโดยมีลุ้นอยู่ในใจ .....

... Segmentation fault .... แป่ววววววว -_-"

ลอง ldd ดู ก็ไม่เห็นว่า opera จะต้องการไลบรารีตัวไหนที่ไม่มีในระบบเพิ่ม

ลอง strace ดู ก็ไม่เห็นว่าจะผิดพลาดอะไร นอกจากคำว่า Segmentation fault ก่อนจบ strace -_-!

...

ชะรอยฟ้ายังต้องเข้าข้างคนดี ;-)

ขณะที่กำลังทดลอง eclipse ที่ติดมากับ openSUSE 10.0 แล้วลองเรียก Help ของ eclipse ขึ้นมา จังหวะหนึ่ง เผอิญเผลอไปคลิ้กที่ลิ้งค์ที่เชื่อมโยงอยู่บนอินเตอร์เน็ตเข้า ...

ปรากฏว่ามันเรียก Opera ขึ้นมาให้อย่างน่าอัศจรรย์ ... โอ คุณแม่ช่วย กล้วยปิ้ง ...

.. ผมไม่รอช้า รีบเรียกส่วนแสดง environment ของ eclipse ขึ้นมาดู (ผ่านกล่องโต้ตอบ About -> ปุ่ม Configuration Details) พบว่า มีส่วนหนึ่งของ java.library.path เป็นส่วนสุดท้ายที่แปลกตา นั่นคือมันชี้ไปยัง /opt/mozilla/lib ด้วย

โอ ไม่รอช้าครับ ปิด eclipse, เปิดคอนโซล ลองเรียก opera จากคอนโซลดูมั่ง


donga@linux:~> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mozilla/lib opera

ปรากฏว่า มันรันได้จริง ๆ ด้วย :D

จากนั้นเข้าไปบ่นใน irc ห้อง #tlwg ซะหน่อย

ก็ได้รับคำแนะนำจากคุณเด่นสินว่า ถ้าอยากรู้ว่ามันต้องการไลบรารีไหนกันแน่ ในเมื่อใช้ทั้ง ldd ก็แล้ว strace ก็แล้ว ก็ยังไม่รู้อยู่ดี ถ้ายังงั้นก็ให้ลองลบไลบรารีในไดเรกทอรี /opt/mozilla/lib ออกทีละตัว ๆ ดูดิ

...เออ.. เข้าท่าแฮะ

ลองไล่ลบไปเรื่อย ๆ จนพบว่ามันต้องการไลบรารี libxpcom.so โอ้ คุณแม่ช่วย.. พับผ่าเหอะ ...



โอเค ก็รู้ปัญหา รู้วิธีแก้ คลายความข้องใจไปได้ :D



สุดท้ายผมใช้การเพิ่มพาธ /opt/mozilla/lib ให้กับ ld.so.conf แล้วสั่ง ldconfig อีกรอบ ก็ใช้การได้ตลอดแล้ว

เย้ ๆ ๆ ๆ อิอิ

02 ตุลาคม 2548

ซื้อมาแว้วววว

วันนี้ไปทานข้าวเย็นที่ห้างกับภรรยา ระหว่างที่ทานข้าวอยู่นึกขึ้นได้เลยรีบเอ่ยกับภรรยา

"เดี๋ยววันนี้ทานข้าวเสร็จแล้วไปซื้อหนังสือนะ" ผมเอ่ยขึ้น

"หนังสืออะไร .. เท่าไหร่" ภรรยาผมเงยหน้า ถามเสียงคาดคั้น

"ก็หนังสือ ทางนฤพาน กับ กรรมพยากรณ์ ภาคแรก ของ ดังตฤณ ที่เคยบอกไว้ไง" ผมตอบด้วยน้ำเสียงอยากได้มาก(จริง ๆ)

"ก็แล้วมันเท่าไหร่เล่า" (อย่าให้)ถามซ้ำ

"ก็ .. ก็ ราว ๆ เจ็ดร้อยแหละ มันเล่มละสามร้อยกว่า ๆ นี่" ผมตอบเสียงละห้อย

"โหหหหห... เดือนนี้เดี๋ยวต้องจ่ายค่า xxx xxx xxx ฯลฯ ฯลฯ " เสียงภรรยามาเป็นชุด -_-"

"นะ .. นะ ผลัดเค้าหลายทีแล้วนะ" ผมรีบรุกด้วยการอ้อน "นะ.."

"....." "อ่ะ ก็ได้ แต่เดี๋ยวไปเดินดูของก่อนนะ" ......


เย้ ๆ ๆ ๆ


........

ตอนนี้ได้มาแว้วววววว

เล่มแรก


เรื่องนี้อ่านจบนานละ อ่านที่เว็บของคุณดังตฤณนั่นแหละครับ

แต่ได้มาเป็นรวมเล่มแล้ว เย้ :D



เล่มที่สอง
กรรมพยากรณ์ ภาคแรก ตอน ชนะกรรม


เรื่องนี้ก็อ่านจบนานแล้วเหมือนกัน ติดตามอ่านในนิตยสารบางกอกรายสัปดาห์

ได้รวมเล่มมาแล้วเหมือนกัน :D




งานนี้หมดไป ๗๕๕ บาท


อ่ะ ... แต่เดี๋ยวก่อน

ตอนนี้กรรมพยากรณ์ภาค ๒ ตอน เลือกเกิดใหม่รวมเล่มออกมาแล้วเหมือนกัน -_-"

งานนี้มีขออนุมัติอีกรอบอีกและ ..... เฮ้อ .... :P



เครื่องมือของผม

หลังจากขายทอดตลาดเดสก์ทอปเครื่องเดิม (ที่สเปคแรงโคตร ๆ)
ก็ถอยโน้ตบุ้คมาใช้ได้ 5 เดือนละ :P





  • Intel Pentium M 725 processor (1.6GHz, 400 MHz FSB, 2MB L2 cache)

  • 14.1" WXGA Acer CrystalBrite colour TFT LCD (1280x768)

  • ATI MOBILIY RADEON 9700/64MB (RV350 M11)

  • 768MB DDR RAM (1x512MB Kingston DDR, 1x256MB Bundle)

  • SAMSUNG MP0804H 80GB 5400RPM 2.5" HDD

  • Matsushita UJDA755 DVD/CDRW 9.5mm slim Combo

  • IPW2200 B/G 802.11b/g wireless LAN

  • Bluetooth built-in

  • 2.18kg weight

  • openSuSE 10.0 RC Operating System and

  • Fedora Core 4 Operating System



ไม่มีอะไรจะโพสต์ เอาวะแค่นี้ก็โอเค ลอล