เรียนรู้คำสั่ง 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 ตัวเลือกยังยอมรับฟิลด์การอนุญาต (และละเว้น)