ฉันจะกำหนดสิทธิ์ที่ผู้ใช้ของฉันหายไปจากการรับชุดข้อมูล ZFS ได้อย่างไร


9

ฉันมี FreeNAS (11.1-U1) และ FreeBSD (11.1-RELEASE-p6) ใน FreeNAS ฉันต้องการzfs receiveเรียกซ้ำสแนปชอตในฐานะผู้ใช้ที่ไม่ใช่รูทด้วยสิทธิ์ที่ได้รับมอบหมาย ดูเหมือนว่าจะทำงานได้ดีสำหรับชุดข้อมูลส่วนใหญ่ แต่dataชุดข้อมูลของ iocage ซึ่งสามารถติดตั้งในคุกและจัดการจากที่นั่นพวกเขาล้มเหลว:

root@freebsd:~> zfs send -RI "dozer@2018-02-21" "dozer@2018-03-08"  | ssh -T -i /root/backup_key backupuser@freenas zfs receive -dvuF neo/backups/freebsd
receiving incremental stream of dozer@2018-03-03 into neo/backups/freebsd@2018-03-03
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer@2018-03-07 into neo/backups/freebsd@2018-03-07
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer@2018-03-08 into neo/backups/freebsd@2018-03-08
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer/ROOT@2018-03-03 into neo/backups/freebsd/ROOT@2018-03-03
.
.
.
receiving incremental stream of dozer/iocage/jails/owncloud/root@2018-03-08 into neo/backups/freebsd/iocage/jails/owncloud/root@2018-03-08
received 578MB stream in 110 seconds (5.25MB/sec)
receiving incremental stream of dozer/iocage/jails/owncloud/root/data@2018-03-03 into neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03
cannot receive incremental stream: permission denied
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-03': signal received
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-07': Broken pipe
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-08': Broken pipe

การอนุญาตของเด็กคนนั้นเหมือนกันกับหนึ่งในชุดข้อมูลหลัก:

root@freenas:~ # zfs allow neo/backups/freebsd/iocage/jails/owncloud/root/data
---- Permissions on neo/backups/freebsd -----------------------------
Local+Descendent permissions:
        user backupuser atime,compression,create,dedup,exec,jailed,mount,mountpoint,quota,receive,rename,reservation,setuid,userprop

การรันzfs receiveบน FreeNAS ในฐานะ root ทำงานตามที่คาดไว้

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

คำตอบ:


3

เมื่อแก้ไขปัญหาสิทธิ์อนุญาตที่เกิดขึ้นจาก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ความท้าทายได้บ้าง แต่ก็มีประสิทธิภาพมาก


คำตอบนี้ขยายจากเดิม ฉันหวังว่ามันจะยังคงทำบุญ upvotes ก่อนหน้านี้
Jim L.

0

ดูเหมือนว่าคุณมีสแน็ปช็อตซึ่งสิทธิ์หายไป

พยายามที่จะกำหนดสิทธิ์ในการreceiveneo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03

ดูเหมือนว่าจะตั้งค่าไว้อย่างถูกต้องบนระดับเสียง แต่หายไปในภาพรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.