เรียนรู้คำสั่ง Linux 'setfacl'

ยูทิลิตี้ Setfacl ตั้งค่า Access Control Lists (ACLs) ของไฟล์และ ไดเรกทอรี. บน บรรทัดคำสั่ง, ลำดับของคำสั่งจะตามมาด้วยลำดับของไฟล์ (ซึ่งสามารถตามมาด้วยลำดับของคำสั่งอื่น ฯลฯ)

  • ตัวเลือก -NS, และ -NS คาดหวัง ACL บนบรรทัดคำสั่ง รายการ ACL หลายรายการคั่นด้วยอักขระจุลภาค (`,') ตัวเลือก -NS, และ -NS อ่าน ACL จากไฟล์หรือจากอินพุตมาตรฐาน รูปแบบรายการ ACL ได้อธิบายไว้ในหัวข้อ รายการ ACL
  • NS --ชุด และ --set-file ตัวเลือกตั้งค่า ACL ของไฟล์หรือไดเร็กทอรี ACL ก่อนหน้าจะถูกแทนที่ รายการ ACL สำหรับการดำเนินการนี้ต้องมีสิทธิ์
  • NS -m (--แก้ไข) และ -M (--แก้ไข-ไฟล์) ตัวเลือกแก้ไข ACL ของ a ไฟล์ หรือไดเร็กทอรี รายการ ACL สำหรับการดำเนินการนี้ต้องมีสิทธิ์
  • NS -x (--ลบ) และ -X (--ลบไฟล์) ตัวเลือกลบรายการ ACL เฉพาะรายการ ACL ที่ไม่มี ดัด ฟิลด์ได้รับการยอมรับเป็นพารามิเตอร์เว้นแต่จะมีการกำหนด POSIXLY_CORRECT

เมื่ออ่านจากไฟล์โดยใช้ปุ่ม -NS, และ -NS ตัวเลือก setfacl ยอมรับเอาต์พุต getfacl ผลิต มีรายการ ACL ไม่เกินหนึ่งรายการต่อบรรทัด หลังเครื่องหมายปอนด์ (`#') ทุกอย่างที่ขึ้นบรรทัดสุดท้ายจะถือเป็นความคิดเห็น

หากใช้ setfacl บนระบบไฟล์ที่ไม่สนับสนุน ACL setfacl จะทำงานบนบิตการอนุญาตของโหมดไฟล์ หาก ACL ไม่พอดีกับบิตการอนุญาตอย่างสมบูรณ์ setfacl จะแก้ไขบิตการอนุญาตของโหมดไฟล์เพื่อสะท้อน ACL ให้ใกล้เคียงที่สุด เขียนข้อความแสดงข้อผิดพลาดไปยังข้อผิดพลาดมาตรฐาน และส่งคืนพร้อมสถานะการออกมากกว่า 0.

การใช้ Setfacl

ขั้นแรก ลองตั้งค่ารายการพื้นฐานสำหรับโฟลเดอร์ใน your โฮมไดเร็กตอรี่. เนื่องจากคุณกำลังทดลองใช้เป็นครั้งแรก ให้สร้างอันใหม่เพื่อเล่นด้วย ด้วยวิธีนี้ คุณจะไม่ต้องเสี่ยงกับการล็อกตัวเองจากเอกสารสำคัญ

mkdir ~/acl-test.mkdir 

ถัดไป ใช้ setfacl เพื่อให้ผู้ใช้รายอื่นในระบบของคุณสามารถเข้าถึงโฟลเดอร์ได้ Setfacl ใช้ -NS ตั้งค่าสถานะเพื่อแก้ไขรายการควบคุมการเข้าถึงสำหรับไฟล์ ซึ่งมักจะหมายถึงการเพิ่มผู้ใช้หรือกลุ่ม

setfacl -m u: ชื่อผู้ใช้: rwx ~/acl-test/

NS ยู ก่อนที่โคลอนแรกจะบอกคำสั่งที่คุณกำลังพูดถึงชื่อผู้ใช้ NS rwx ต่อจากที่สองให้ทุน NSอ่าน wพิธีกรรม และ eNSecute สิทธิ์

งานเดียวกันสำหรับกลุ่มโดยระบุ NS แทน ยู ก่อนโคลอนแรก

setfacl -m g: ชื่อกลุ่ม: rwx ~/acl-test/

มันทำงานเหมือนกับตัวอย่างก่อนหน้านี้ ยกเว้นว่ามันให้สิทธิ์กับทั้งกลุ่ม

NS -NS ธงทำงานตรงข้ามกับ -NS. มันจะเพิกถอนการเข้าถึงผู้ใช้หรือกลุ่มที่ระบุ

setfacl -x u: ชื่อผู้ใช้: w ~/acl-test/

คำสั่งเพิกถอนการเข้าถึงการเขียนไดเร็กทอรีไปยังผู้ใช้

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

setfacl -m u:: rx ~/acl-test/

สิ่งนี้ให้สิทธิ์แก่ผู้ใช้ที่มีอยู่ทั้งหมดในการอ่านและดำเนินการ แต่จะลบการเข้าถึงการเขียน

งานเดียวกันกับ -NS ตั้งค่าสถานะและลบสิทธิ์

setfacl -x u:: w ~/acl-test/

โดยพื้นฐานแล้วจะเหมือนกับตัวอย่างก่อนหน้านี้ที่กลับด้าน

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

แตะ ~/acl-test/file{1,2}.txt 

ตอนนี้ แก้ไขการอนุญาตของไฟล์แรก

setfacl -m u: ชื่อผู้ใช้: rx ~/acl-text/file1.txt 

ตอนนี้คุณสามารถไพพ์ผลลัพธ์ของ getfacl ซึ่งเป็นคำสั่งสำหรับการดึงข้อมูล ACL ปัจจุบัน ลงใน setfacl

getfacl ~/acl-test/file1.txt | setfacl --set-file=- ~/acl-text/file2.txt. 

การกรอกครั้งที่สองจะมีสิทธิ์เช่นเดียวกับครั้งแรก

สุดท้าย คุณสามารถลบรายการ ACL แบบขยายทั้งหมดที่สร้างโดยคำสั่งได้ การดำเนินการนี้จะปล่อยให้ไฟล์มีการอนุญาตของผู้ใช้และกลุ่มที่เดิมมี เมื่อต้องการทำสิ่งนี้ ให้ใช้แฟล็ก -b

setfacl -b ~/acl-test/

นี่เป็นการใช้ setfacl ที่พบบ่อยที่สุด หากคุณต้องการเจาะลึกลงไปอีก ส่วนถัดไปของคู่มือนี้คือรายละเอียดทางเทคนิคของคำสั่งทั้งหมด

รายละเอียดทางเทคนิคของ Setfacl

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] ไฟล์...

setfacl --restore=ไฟล์.

สิทธิ์

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

ตัวเลือก

-b, --remove-all

  • ลบรายการ ACL ที่ขยายออกทั้งหมด รายการ ACL พื้นฐานของเจ้าของ กลุ่ม และอื่นๆ จะถูกเก็บไว้

-k, --remove-default

  • ลบ ACL เริ่มต้น หากไม่มี ACL เริ่มต้น จะไม่มีการออกคำเตือน

-n, --no-mask

  • อย่าคำนวณมาสก์สิทธิ์ที่มีผลบังคับใช้ใหม่ ลักษณะการทำงานเริ่มต้นของ setfacl คือการคำนวณรายการรูปแบบ ACL ใหม่ เว้นแต่จะมีการระบุรายการรูปแบบไว้อย่างชัดเจน รายการมาสก์ถูกตั้งค่าเป็นการรวมสิทธิ์ทั้งหมดของกลุ่มที่เป็นเจ้าของ และรายการผู้ใช้และกลุ่มที่มีชื่อทั้งหมด (นี่คือรายการที่ได้รับผลกระทบจากรายการมาสก์)

--หน้ากาก

  • คำนวณรูปแบบสิทธิที่มีผลบังคับใช้ใหม่ แม้ว่าจะระบุรายการรูปแบบ ACL ไว้อย่างชัดเจนก็ตาม (ดู -NS ตัวเลือก.)

-d, --default

  • การดำเนินการทั้งหมดนำไปใช้กับ ค่าเริ่มต้น เอซีแอล. รายการ ACL ปกติในชุดอินพุตได้รับการเลื่อนระดับเป็นรายการ ACL เริ่มต้น รายการ ACL เริ่มต้นในชุดอินพุตจะถูกยกเลิก (หากมีการเตือนเกิดขึ้น)

--restore=ไฟล์

  • กู้คืนข้อมูลสำรองการอนุญาตที่สร้างโดย `getfacl -R' หรือคล้ายกัน สิทธิ์ทั้งหมดของทรีย่อยไดเร็กทอรีที่สมบูรณ์จะถูกกู้คืนโดยใช้กลไกนี้ หากอินพุตมีความคิดเห็นของเจ้าของหรือความคิดเห็นของกลุ่ม และ setfacl ทำงานโดยรูท เจ้าของและกลุ่มที่เป็นเจ้าของไฟล์ทั้งหมดจะได้รับการกู้คืนเช่นกัน ตัวเลือกนี้ไม่สามารถผสมกับตัวเลือกอื่นได้ ยกเว้น `--test'

--ทดสอบ

  • โหมดทดสอบ แทนที่จะเปลี่ยน ACL ของไฟล์ใดๆ ACL ที่เป็นผลลัพธ์จะแสดงรายการ

-R, --recursive

  • ใช้การดำเนินการกับไฟล์และไดเร็กทอรีทั้งหมดแบบเรียกซ้ำ ตัวเลือกนี้ไม่สามารถผสมกับ `--restore'

-L, --ตรรกะ

  • เดินตามตรรกะ ตามลิงค์สัญลักษณ์ ลักษณะการทำงานเริ่มต้นคือการติดตามอาร์กิวเมนต์ลิงก์สัญลักษณ์และข้ามลิงก์สัญลักษณ์ที่พบในไดเร็กทอรีย่อย ตัวเลือกนี้ไม่สามารถผสมกับ `--restore'

-P, --กายภาพ

  • เดินทางกายภาพ ข้ามทั้งหมด ลิงก์สัญลักษณ์. นอกจากนี้ยังข้ามอาร์กิวเมนต์ลิงก์สัญลักษณ์ ตัวเลือกนี้ไม่สามารถผสมกับ `--restore'

--รุ่น

  • พิมพ์เวอร์ชันของ setfacl และออก

--ช่วย

  • พิมพ์ช่วยอธิบายตัวเลือกบรรทัดคำสั่ง

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

หากพารามิเตอร์ชื่อไฟล์เป็นเส้นประเดี่ยว setfacl จะอ่านรายการไฟล์จากอินพุตมาตรฐาน

รายการ ACL

ยูทิลิตี setfacl รู้จักรูปแบบรายการ ACL ต่อไปนี้:

[d[efault]:] [เรา[ser]:]uid [:ดัด]

  • สิทธิ์ของผู้ใช้ที่มีชื่อ สิทธิ์ของเจ้าของไฟล์ if uid มันว่างเปล่า.

[d[efault]:] g[กลุ่ม]:gid [:ดัด]

  • สิทธิ์ของกลุ่มที่มีชื่อ สิทธิ์ของกลุ่มเจ้าของ if gid มันว่างเปล่า.

[d[efault]:] m[ask][:] [:ดัด]

  • หน้ากากสิทธิที่มีประสิทธิภาพ

[d[efault]:] o[เธอ][:] [:ดัด]

  • สิทธิ์ของผู้อื่น

ช่องว่างระหว่างอักขระตัวคั่นและอักขระที่ไม่ใช่ตัวคั่นจะถูกละเว้น

รายการ ACL ที่เหมาะสมรวมถึงการอนุญาตใช้ในการแก้ไขและตั้งค่าการดำเนินการ (ตัวเลือก -NS, -NS, --ชุด และ --set-file). รายการที่ไม่มี ดัด ฟิลด์ใช้สำหรับ การลบ ของรายการ (ตัวเลือก -NS และ -NS).

สำหรับ uid และ gid คุณสามารถระบุชื่อหรือตัวเลขได้

NS ดัด ฟิลด์คือการรวมกันของอักขระที่ระบุสิทธิ์: read (NS), เขียน (ญ), ดำเนินการ (NS), ดำเนินการเฉพาะเมื่อไฟล์นั้นเป็นไดเร็กทอรีหรือมีสิทธิ์ดำเนินการสำหรับผู้ใช้บางคนแล้ว(NS). อีกทางหนึ่งคือ ดัด ฟิลด์สามารถเป็นเลขฐานแปด (0-7)

รายการที่สร้างขึ้นโดยอัตโนมัติ

ในขั้นต้น ไฟล์และไดเร็กทอรีประกอบด้วยรายการ ACL พื้นฐานสามรายการสำหรับเจ้าของ กลุ่ม และอื่นๆ มีกฎบางอย่างที่ต้องปฏิบัติตามเพื่อให้ ACL ถูกต้อง:

  • สามรายการฐานไม่สามารถลบออกได้ รายการฐานแต่ละประเภทต้องมีรายการเดียวเท่านั้น
  • เมื่อใดก็ตามที่ ACL มีรายการผู้ใช้ที่มีชื่อหรืออ็อบเจ็กต์กลุ่มที่มีชื่อ จะต้องมีมาสก์สิทธิ์ที่มีประสิทธิภาพด้วย
  • เมื่อใดก็ตามที่ ACL มีรายการ ACL เริ่มต้น รายการฐาน ACL เริ่มต้นสามรายการ (เจ้าของเริ่มต้น กลุ่มเริ่มต้น และรายการอื่นๆ ที่เป็นค่าเริ่มต้น) จะต้องมีอยู่ด้วย
  • เมื่อใดก็ตามที่ ACL เริ่มต้นมีรายการผู้ใช้ที่มีชื่อหรืออ็อบเจ็กต์กลุ่มที่มีชื่อ ACL นั้นจะต้องมีมาสก์สิทธิ์ที่มีผลดีฟอลต์ด้วย

เพื่อช่วยให้ผู้ใช้มั่นใจในกฎเหล่านี้ setfacl จะสร้างรายการจากรายการที่มีอยู่ภายใต้เงื่อนไขต่อไปนี้:

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

ตัวอย่าง

  • ให้สิทธิ์การเข้าถึงแบบอ่านเพิ่มเติมแก่ผู้ใช้
  • setfacl -m u: ลิซ่า: r file
  • เพิกถอนสิทธิ์การเขียนจากทุกกลุ่มและผู้ใช้ที่มีชื่อทั้งหมด (โดยใช้มาสก์สิทธิ์ที่มีผล)
  • setfacl -m m:: rx file
  • การลบรายการกลุ่มที่มีชื่อออกจาก ACL. ของไฟล์
  • setfacl -x g: ไฟล์พนักงาน
  • การคัดลอก ACL ของไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง
  • getfacl file1 | setfacl --set-file=- file2
  • การคัดลอก ACL การเข้าถึงไปยัง ACL. เริ่มต้น
  • getfacl -a dir | setfacl -d -M- dir

เป็นไปตามมาตรฐาน Posix 1003.1e Draft Standard 17

หากมีการกำหนดตัวแปรสภาพแวดล้อม POSIXLY_CORRECT ลักษณะการทำงานเริ่มต้นของ setfacl จะเปลี่ยนแปลงดังนี้: ตัวเลือกที่ไม่ได้มาตรฐานทั้งหมดจะถูกปิดใช้งาน คำนำหน้า ``default:'' ถูกปิดใช้งาน NS -NS และ -NS ตัวเลือกยังยอมรับฟิลด์การอนุญาต (และละเว้น)