File permission
ลินุกซ์ทุกค่ายจะมีการกำหนดสิทธิ์การใช้งานและเข้าถึง file เหมือนกันซึ่งจะกำหนด 3 สิทธิ์หลักๆ คือ
- read (r) - สิทธิ์การอ่าน
- write (w) - สิทธิ์การเขียน-ลบ
- execute (x) - สิทธ์การใช้งาน
โดยปกติแล้ว file แต่ละ file จะมีถูกกำหนดว่าเป็นของใคร (user) และ เป็นของกลุ่มผู้ใช้ไหน (group) ดังนั้นการควบคุมการเข้าถึงจะอ้างผู้ใช้ (user) และ กลุ่มผู้ใช้ (group) เป็นสำคัญ นอกจากนี้ยังกำหนดสิทธิ์ครอบคลุมไปยังผู้ใช้นอกเหนือจาก user และ group หรือเรียกว่า other ซึ่งในกลุ่มหลังนี้ให้ท่านจิตนาการเปรียบกับของใช้ที่เป็นสาธารณะ นั้นหมายถึงถ้ามีการกำหนดให้ other สามารถทำการใดๆ ได้แสดงว่าใครก็ได้ที่มีโอกาสเข้าถึงก็สามารถใช้งาน หรือ อ่าน-เขียนมันได้จึงต้องระวังเป็นพิเศษเมื่อกำหนดสิทธิ์ให้กับ other
ท่านสามารถตรวจสอบสิทธิ์ของ file ได้โดยใช้คำสั่ง ls ดังนี้
$ ls -l
total 8
drwxr-xr-x 2 mrchoke mrchoke 4096 2007-12-20 16:32 dir1
drwxr-xr-x 2 mrchoke mrchoke 4096 2007-12-20 16:32 dir2
-rw-r--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
-rw-r--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file2
-rw-r--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file3
ชนิดและสิทธิ์ จำนวน link เจ้าของ กลุ่ม ขนาด เวลาที่แก้ไขล่าสุด ชื่อ
| | | | | | |
-rw-r--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file3
จากตัวอย่างด้านบนการแสดงสิทธิ์การเข้าถึงจะเป็น column ที่ 1 ซึ่งจะประกอบด้วยตัวอักษร 10 ตัวดังนี้
- ตัวที่ 1 เป็นชนิดของ file
- - เป็น file
- d คือ Directory
- l คือ Symlink
- s คือ socket
- p คือ pipe
- c คือ character (unbuffered) device
- b คือ block (buffered) device
- ตัวที่ 2 - 4 เป็นสิทธิ์ของเจ้าของ (User,u)
- r เจ้าของอ่านได้
- w เจ้าของเขียน - ลบได้
- x เจ้าของใช้งานได้
- ตัวที่ 5 - 7 เป็นสิทธิ์ของกลุ่มผู้ใช้ (Group,g)
- r กลุ่มเดียวกันอ่านได้
- w กลุ่มเดียวกันเขียน - ลบได้
- x กลุ่มเดียวกันใช้งานได้
- ตัวที่ 8 - 10 เป็นสิทธิ์ของสาธารณะ (Other,o)
- r สาธารณะอ่านได้
- w สาธารณะเขียน - ลบได้
- x สาธารณะใช้งานได้
ในส่วนของตัวที่ 2 - 10 นั้นท่านสามารถพบตัวอักษรได้ 5 แบบด้วยกัน คือ
- r (อ่าน) จะพบได้เฉพาะตัวที่ 2,5 และ 8 เท่านั้น
- w (เขียน-ลบ) จะพบได้เฉพาะตัวที่ 3,6 และ 9 เท่านั้น
- x (ใช้งาน) จะพบได้เฉพาะตัวที่ 4,7 และ 10 เท่านั้น
- s,S (SID) จะพบได้เฉพาะตัวที่ 4,7 และ 10 เท่านั้น
- t,T (Sticky bit) จะพบได้เฉพาะตัวที่ 4,7 และ 10 เท่านั้น
- - พบตัวนี้ที่ไหนแสดงว่าตัวนั้นปิด เช่นพบในตัวที่ 2 แสดงว่า เข้าของอ่านไม่ได้
เนื้อหา[ซ่อน] |
การกำหนดสิทธิ์ให้กับ file
กำหนดสิทธ์แบบง่ายๆ
อย่างที่กล่าวในข้างต้นว่าเราแบ่งการควบคุมออกเป็นสามกลุ่ม คือ
# User (Owner) , u
# Group , g
# Other , o
และขอเพิ่ม all , a เข้าไปอีกหนึ่งเพื่อใช้กำหนดในคำสั่ง
และ สิทธิ์ 3 แบบหลักๆ คือ
# r
# w
# x
ดังนั้นการกำหนดวิธีนี้เพียงแค่บอกว่าแต่ละกลุ่มจะตั้งค่า ลบค่า หรือ เพิ่มค่า อะไรลงไปดังนี้
$ chmod u+r filename : เพิ่ม r ให้ user
$ chmod g-x filename : ลบ x ใน group
$ chmod o=r filename : ให้ o เท่ากับ r--
$ chmod a=rx filename : ทุกกลุ่มเท่ากับ rx
ตัวอย่าง
-rw-r--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
เมื่อกำหนดแบบต่างๆ จะได้ดังนี้
$ chmod u+x file1
-rwxr--r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
$ chmod g-r file1
-rwx---r-- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
$ chmod o=rwx file1
-rwx---rwx 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
$ chmod uo-x,g+r file1
-rw-r--rw- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
$ chmod a=rw file1
-rw-rw-rw- 1 mrchoke mrchoke 0 2007-12-20 16:32 file1
กำหนดสิทธิ์โดยใช้เลขฐานแปด
การกำหนดสิทธิ์วิธีนี้อาจจะดูยุ่งยากหน่อยสำหรับผู้เริ่มต้นแต่ขอเสนอวิธีลัดก็แล้วกันแค่จำไปใช้งานก็พอ
เริ่มต้นโดยกำนหนดค่าของสิทธิ์ดังนี้
* r = 4
* w = 2
* x = 1
* - = 0
ถ้าต้องการกำหนด
rw-
ก็แค่เอา
4 + 2 + 0 = 6
พอจะนึกออกไหมครับ งั้นมาดูตัวอย่างอย่างกันเลย
ถ้าจะกำหนดค่าเท่ากับ -rwxrwxrwx ก็จะได้ (4+2+1)(4+2+1)(4+2+1) = 777
$ chmod 777
ถ้าจะกำหนดค่าเท่ากับ -r--r--r-- ก็จะได้ (4+0+0)(4+0+0)(4+0+0) = 444
$ chmod 444
ถ้าจะกำหนดค่าเท่ากับ -rw-rw-rw- ก็จะได้ (4+2+0)(4+2+0)(4+2+0) = 666
$ chmod 666
ถ้าจะกำหนดค่าเท่ากับ -rwxr-xr-x ก็จะได้ (4+2+1)(4+0+1)(4+0+1) = 755
$ chmod 755
ง่ายใช่ไหมครับงั้นเอาสรุปสูตรไปดังนี้
* --- = (0+0+0) = 0
* --x = (0+0+1) = 1
* -w- = (0+2+0) = 2
* -wx = (0+2+1) = 3
* r-- = (4+0+0) = 4
* r-x = (4+0+1) = 5
* rw- = (4+2+0) = 6
* rwx = (4+2+1) = 7
กำหนดค่าขั้นสูง
(Soon)
การประยุกต์ใช้เพื่อความปลอดภัย
อ่านได้ที่ http://www.thaicert.nectec.or.th/paper/unix_linux/file_permission.php