เมื่อแก้ไขปัญหาสิทธิ์อนุญาตที่เกิดขึ้นจากzfsคำสั่งวิเคราะห์การzfsดำเนินการในแง่ของส่วนประกอบขั้นตอน
คำสั่งตัวอย่างของการzfs receive -duvFคลายออกเป็นหลายขั้นตอน สองสถานะเหล่านี้ไม่เกี่ยวข้องกับการอนุญาตพิเศษ:
-d ส่งผลต่อการตั้งชื่อชุดข้อมูลใหม่ (ถ้ามี)
-v เปิดใช้งานเอาต์พุต verbose
อีกสองคนทำ
-F หมายถึงระบบไฟล์จะถูกย้อนกลับไปที่สแน็ปช็อตเริ่มต้นของการถ่ายโอนที่เพิ่มขึ้นก่อนที่จะเริ่มการรับ
-u หมายถึงระบบไฟล์จะไม่ถูกเมาท์หลังจากได้รับเสร็จ
ลางสังหรณ์ของฉันคือการที่คุณไม่มีสิทธิ์ย้อนกลับ ธง -F ในคำสั่งของคุณหมายถึงว่าzfs rollbackจะได้รับการดำเนินการและคุณไม่ได้รายการzfs allowrollback
ในกรณีทั่วไปผู้ใช้สามารถคาดเดาการอนุมานเกี่ยวกับสิทธิ์ที่จำเป็นสำหรับzfsคำสั่งที่กำหนด
หน้าคนสำหรับzfsชี้ให้เห็น:
ชื่อการอนุญาตเหมือนกับคำสั่งย่อย ZFS และชื่อคุณสมบัติ
และ ...
สิทธิ์โดยทั่วไปคือความสามารถในการใช้คำสั่งย่อย ZFS หรือเปลี่ยนคุณสมบัติ ZFS สิทธิ์ต่อไปนี้มีอยู่:
NAME TYPE NOTES
allow subcommand Must also have the permission
that is being allowed
clone subcommand Must also have the 'create'
ability and 'mount' ability in
the origin file system
create subcommand Must also have the 'mount'
ability
destroy subcommand Must also have the 'mount'
ability
diff subcommand Allows lookup of paths within a
dataset given an object number,
and the ability to create
snapshots necessary to 'zfs diff'
hold subcommand Allows adding a user hold to a
snapshot
mount subcommand Allows mount/umount of ZFS
datasets
promote subcommand Must also have the 'mount' and
'promote' ability in the origin
file system
receive subcommand Must also have the 'mount' and
'create' ability
release subcommand Allows releasing a user hold
which might destroy the snapshot
rename subcommand Must also have the 'mount' and
'create' ability in the new
parent
rollback subcommand Must also have the 'mount'
ability
send subcommand
share subcommand Allows sharing file systems over
the NFS protocol
snapshot subcommand Must also have the 'mount'
ability
groupquota other Allows accessing any
groupquota@... property
groupused other Allows reading any groupused@...
property
userprop other Allows changing any user property
userquota other Allows accessing any
userquota@... property
userused other Allows reading any userused@...
property
aclinherit property
aclmode property
atime property
canmount property
casesensitivity property
checksum property
compression property
copies property
dedup property
devices property
exec property
filesystem_limit property
logbias property
jailed property
mlslabel property
mountpoint property
nbmand property
normalization property
primarycache property
quota property
readonly property
recordsize property
refquota property
refreservation property
reservation property
secondarycache property
setuid property
sharenfs property
sharesmb property
snapdir property
snapshot_limit property
sync property
utf8only property
version property
volblocksize property
volsize property
vscan property
xattr property
ตัวอย่างในมือรวมถึง-uแฟล็กดังนั้นระบบไฟล์จะไม่ถูกเมาท์เมื่อสิ้นสุดการดำเนินการรับ อย่างไรก็ตามหาก-uขาดระบบไฟล์จะถูกเมาท์เมื่อสิ้นสุดกระบวนการรับ การreceiveขออนุญาตต้องmountได้รับอนุญาตอย่างชัดแจ้ง
เนื่องจากการzfs mountดำเนินการจะสร้างจุดเมานต์ที่จำเป็นใด ๆ โดยอัตโนมัติจึงเป็นไปได้ที่ผู้ใช้จะมีzfsสิทธิ์ในการเมาท์ชุดข้อมูล แต่ไม่มีสิทธิ์ระบบไฟล์เพื่อสร้างจุดเมานท์ ในกรณีของzfs mountการติดตั้งจะล้มเหลว ในzfs createหรือrenameการดำเนินการระบบไฟล์จะถูกสร้างหรือเปลี่ยนชื่อ แต่มันจะยังคงไม่ได้ต่อเชื่อมหากผู้ใช้ไม่มีสิทธิ์ระบบไฟล์ที่เพียงพอในการสร้างจุดเมานท์
ในทำนองเดียวกันzfs renameคำสั่งอาจล้มเหลวเนื่องจากขาดสิทธิ์ในหลาย ๆ จุดภายในการดำเนินการเปลี่ยนชื่อ ขั้นตอนส่วนประกอบอาจจะ:
1) ยกเลิกการต่อเชื่อมระบบไฟล์ (การmountอนุญาต)
2) สร้างระบบไฟล์ใหม่ (การcreateอนุญาต)
3) แมปเมตาดาต้าของระบบไฟล์เป็นชื่อใหม่ (การrenameอนุญาต)
ขั้นตอนที่สี่คือการติดตั้งระบบไฟล์ที่มีชื่อใหม่ที่จุดเมานท์ใหม่ซึ่งอาจมีการเปลี่ยนแปลงซึ่งใช้mountสิทธิ์อีกครั้งและอาจอนุญาตระบบไฟล์เพื่อสร้างจุดเมานต์ใหม่
ฉันไม่ได้ทดสอบเทคนิคดังกล่าว แต่จะเห็นได้ว่าzfsแยกความแตกต่างระหว่างcreateและrenameสิทธิ์และระหว่างmountและmountpointสิทธิ์ ภาพหนึ่งอาจเป็นไปได้ที่จะอนุญาตให้ผู้ใช้สร้างระบบไฟล์ใหม่ แต่เมื่อสร้างแล้วผู้ใช้จะไม่สามารถเปลี่ยนชื่อพวกเขาได้ สำหรับ filesystems กับ mountpoints สืบทอดการเปลี่ยนชื่อระบบแฟ้มมักจะเปลี่ยนชื่อจุดเมานท์ระบบแฟ้มที่เมื่อเปลี่ยนชื่อtank/usr/localที่จะtank/usr/local.OLDมีการเปลี่ยนแปลงจุดเมานท์จากไป/usr/local/usr/local.OLD
การแยกmountหรือrenameจากการmountpointอนุญาตหมายความว่าผู้ใช้สามารถได้รับอนุญาตให้เปลี่ยนชื่อระบบไฟล์ แต่ไม่ได้รับอนุญาตให้เปลี่ยนจุดเมานท์ หรือในทางกลับกันเพื่อให้สามารถเปลี่ยนตำแหน่งที่ติดตั้งระบบไฟล์ได้ แต่ไม่สามารถเปลี่ยนชื่อของระบบไฟล์ได้
ความสมบูรณ์ของการดำเนินการของระบบไฟล์และการมอบหมายการดำเนินการเหล่านั้นประกอบกับการอนุญาตที่ละเอียดสามารถสร้างzfsความท้าทายได้บ้าง แต่ก็มีประสิทธิภาพมาก