Thaiadmin

มารู้จัก Posix ACL กันเถอะ

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ DisableAccount

  • *****
  • 3,690
  • 53
  • อยู่ด้วยความพอดี
    • my twitter
มารู้จัก Posix ACL กันเถอะ
« เมื่อ: 22 มิถุนายน 2005, 03:30:05 »
มารู้จัก Posix ACL กันเถอะ
จักรภาณุ โกมาสถิตย์
22 มิ.ย. 2548

ก่อนอื่นท่านควรรู้จัก File Permission ของระบบ Unix ก่อน โดยอ่านได้ที่ http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php

Posix ACL คืออะไร?

POSIX มาจากคำว่า Portable Operating System Interface  หมายถึงมาตฐานการอินเตอรเฟสของ OS
ACL มาจาก Access Control List หมายถึงรายการสิทธิต่างๆ

รวมๆ แล้ว หมายความว่ามาฐฐานการเข้าถึงข้อมูล(unix permission extended)

ปกติระบบ Unix จะมี classes ของ permission อยู่ 3 class คือ owner, group และ other
แต่ละ classes จะมีกลุ่มของ permission คือ read(r), write(w), และ execute(x)  รายละเอียดโปรดอ่าน "File Permission" ข้างบน

ยกตัวอย่างทำไมต้องมี ACL นอกจาก File Permission ปกติ

ยกตัวอย่างเช่น file  example มี permission เป็น  rw-,r--,--- โดยมี owner เป็น testuser1 และ group ว่า testgroup

แต่ถ้าเราต้องการให้ testuser2 สามารถอ่านเขียนได้ จะทำอย่างไร หลายๆ ท่านอาจให้เป็นสมาชิค testgroup แล้วให้ permission rw-  แต่ เราไม่อยากให้ user อื่นๆ ใน testgroup เขียนได้ เราจะทำอย่างไร
นี่คือปัญหาของ file permission แบบดั้งเดิม ที่ให้มี permission classes ได้แค่ 1 ชุดเท่านั้น

Posix ACL คือคำตอบ
หลักการแล้วเหมือนกับการใช้ chmod ใน unix  แต่ว่า Posix ACL สามารถมี permission classes ได้มากกว่า 1 ชุด!

ยกตัวอย่าวจาก file example ที่แล้ว

เรียกดู pessmission
$ls -al example
-rw-------  1 testuser1 testgroup 0 Jun 22 02:55 example
จะเห็นได้ว่ามีเพียง owner เท่านั้นที่สามารถอ่านเขียนได้
ลองใช้คำสั่ง getfacl กันมั่ง
$ getfacl example
# file: example
# owner: testuser1
# group: testgroup
user::rw-
group::---
mask::---
other::---

user::, group::, other::  หมายถึง owner ตาม chmod

เอาล่ะ ลองมาสั่งเพิ่ม permission ให้ testuser2 มีสิทธ rw กันดีกว่า

$ setfacl -m user:testuser2:rw example

เรียกดูอีกรอบ
$ getfacl example
# file: example
# owner: testuser1
# group: testgroup
user::rw-
user:testuser2:rw-
group::---
mask::--
other::---

จะเห็นได้ว่ามี user:testuser2  เพิ่มขึ้นมา
ลองเพิ่ม perssion ให้กับ group nogroup ดูมั่ง

$ setfacl -m group:nogroup:rw example
เรียกดูอีกรอบ
$ getfacl example
# file: example
# owner: testuser1
# group: users
user::rw-
user:testuser2:rw-
group::r--
group:nogroup:rw-
mask::rw-
other::---

มี permission ของ group:nogroup เพิ่มมาแล้ว

จำนวน  user:username, group:groupname  สามารถมีได้มากกว่า 1 ชุด ไม่เหมือน chmod ที่มีได้ชุดเดียว

ลำดับความสำคัญ  จะทำตาม permission ดั่งเดิมก่อน  ถ้าหาไม่เจอถึงจะมาค้นใน posix acl ครับ

ลองมาดูรายละเอียกคำสั่งของ setfacl, getfacl กันดีกว่า

ก่อนอื่นมารู้จักรูปแบบของ posix acl กันก่อน
posix acl เก็บข้อมูลรูปแบบ class:name:permission  โดย class หมายถึง ชนิดคือ user, group และ other
name หมายถึง ชื่อของ user หรือ group ส่้วน other จะใช้ร่วมกับ permission ปกติ(chmod)
permission หมายถึงค่าของ permission  เช่น r, w และ x

เอาล่ะมาเริ่มที่ setfacl ก่อน
setfacl ใช้สำหรับเปลี่ยนแปลงค่า acl เช่น  เพิ่ม, แก้ใข, ลบ

$ setfacl --help
setfacl 2.2.23 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  -m, --modify=acl        modify the current ACL(s) of file(s)
  -M, --modify-file=file  read ACL entries to modify from file
  -x, --remove=acl        remove entries from the ACL(s) of file(s)
  -X, --remove-file=file  read ACL entries to remove from file
  -b, --remove-all        remove all extended ACL entries
  -k, --remove-default    remove the default ACL
      --set=acl           set the ACL of file(s), replacing the current ACL
      --set-file=file     read ACL entries to set from file
      --mask              do recalculate the effective rights mask
  -n, --no-mask           don't recalculate the effective rights mask
  -d, --default           operations apply to the default ACL
  -R, --recursive         recurse into subdirectories
  -L, --logical           logical walk, follow symbolic links
  -P, --physical          physical walk, do not follow symbolic links
      --restore=file      restore ACLs (inverse of `getfacl -R')
      --test              test mode (ACLs are not modified)
      --version           print version and exit
      --help              this help text

จะแปลบางพารามิเตอรนะครับนะครับ
-m  ใช้เปลี่ยนแปลง acl ของ file ครับ  เช่นสร้าง acl เพิ่ม และแก้ใขค่า acl
   เช่น ถ้ายังไม่มี user:testuser2  เมื่อสั่ง $setfacl -m user:testuser2:rx example จะเป็นการเพิ่ม acl testuser2 เข้าไปที่ file example
   แต่ถ้ามี user:testuser2 อยู่แล้ว จะเป็นการแก้ใขค่า permission
-x   ใช้ลบ acl ออก
   ตัวอย่าง  $setacl -x user:testuser2 example  จะเป็นการลบ acl user:testuser2 ออกมาจาก file example
-b   ใช้ลบทุก acl
   ตัวอย่าง $setacl -b example
-R   ใช้เหมือน -R ของ chmod  คือให้มีผลกับไฟล์ที่อยู่ใน directory ย่อยด้วย


ส่วน getfacl ใช้ดูค่า acl ของ file วิธีใช้เช่น  $getfacl example


สุดท้ายนี้ก็ขออภัยทุกท่าน ถ้ามีบางอย่างอธิบายผิดพลาด



หมายเหตุ 1,  Posix โดยปกติ Unix เองไม่ได้รองรับเอาไว้ กรุณาอ่านคู่มือด้วย
   ผู้ใช้ Linux สามารถ compile kernel ใหม่ให้รองรับ โดยเลือก extended attribute - acl  ในโมดูของ filesystem ที่ท่านใช้ จากนั้น ใส่  acl เพิ่มใน /etc/fstab ด้วย
        Gentoo Linux http://gentoo-wiki.com/HOWTO_Use_filesystem_ACLs
        FreeBSD http://www.onlamp.com/pub/a/bsd/2003/08/14/freebsd_acls.html


อ้างอิง
   POSIX Access Control Lists on Linux http://www.suse.de/~agruen/acl/linux-acls/online/



ปล.ช่วย comment และยกตัวอย่างเพิ่มเติมกันด้วยนะครับ
อย่างการ implement ของผมใช้กับ web server คือ เพิ่ม user apache เข้าไปให้อ่าน .php ได้  และใช้ suphp  เพื่อมิให้ user อื่นๆ เข้ามาสั่ง open, include file config ต่างๆ ของคนอื่นไปแอบอ่านได้
« แก้ไขครั้งสุดท้าย: 22 มิถุนายน 2005, 03:37:40 โดย ชลดา โกมาสถิตย์ »