Làm cách nào tôi có thể xác định những quyền mà người dùng của tôi bị thiếu khi nhận bộ dữ liệu ZFS?


9

Tôi có máy FreeNAS (11.1-U1) và máy FreeBSD (11.1-RELEASE-p6). Trên FreeNAS, tôi muốn zfs receiveđệ quy các ảnh chụp nhanh với tư cách là người dùng không root với các đặc quyền được ủy quyền. Điều này dường như hoạt động tốt cho hầu hết các bộ dữ liệu con. Nhưng các databộ dữ liệu của iocage , có thể được gắn vào nhà tù và được quản lý từ đó, chúng thất bại:

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

Các quyền của đứa trẻ cụ thể đó hoàn toàn giống với một trong các tập dữ liệu gốc:

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

Chạy zfs receivetrên FreeNAS như root hoạt động như mong đợi.

Người dùng của tôi cần những đặc quyền được ủy quyền nào để nhận các bộ dữ liệu bị bỏ tù của iocage và, nói chung, có cách nào để zfs receiveđưa ra thông báo lỗi chi tiết hơn cho bạn biết thiếu quyền gì không?

Câu trả lời:


3

Khi xử lý sự cố quyền phát sinh từ zfscác lệnh, hãy phân tích zfshoạt động theo các bước thành phần của nó.

Lệnh mẫu zfs receive -duvFgiải nén thành nhiều bước. Hai trong số các cờ đó không liên quan đến bất kỳ quyền đặc biệt nào:

-d ảnh hưởng đến việc đặt tên của tập dữ liệu mới (nếu có)
-v cho phép đầu ra dài dòng

Hai người kia làm.

-F có nghĩa là hệ thống tập tin sẽ được đưa trở lại ảnh chụp ban đầu của quá trình truyền tăng dần trước khi bắt đầu nhận
-u có nghĩa là hệ thống tập tin sẽ không được gắn kết sau khi kết thúc nhận

Linh cảm của tôi là bạn đang thiếu sự cho phép rollback. Cờ -F trong lệnh của bạn ngụ ý rằng zfs rollbacksẽ được thực hiện và zfs allowdanh sách của bạn không được liệt kê rollback.

Trong trường hợp chung, người ta có thể đoán suy đoán về các quyền cần thiết cho một zfslệnh đã cho .

Trang hướng zfsdẫn chỉ ra:

Tên quyền giống như tên tiểu ban và thuộc tính của ZFS.

và ...

Quyền nói chung là khả năng sử dụng một tiểu ban ZFS hoặc thay đổi thuộc tính ZFS. Các quyền sau đây có sẵn:

   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

Ví dụ trong tay bao gồm -ucờ, vì vậy hệ thống tệp sẽ không được gắn vào cuối hoạt động nhận. Tuy nhiên, nếu -ukhông có, hệ thống tập tin sẽ được gắn vào cuối quá trình nhận. Kể lại, sự receivecho phép đòi hỏi sự mountcho phép.

Vì một zfs mountthao tác sẽ tự động tạo bất kỳ điểm gắn kết cần thiết nào, người dùng có thể có zfsquyền gắn dữ liệu, nhưng không có quyền hệ thống tệp để tạo điểm gắn kết. Trong trường hợp zfs mount, gắn kết sẽ thất bại. Trong một zfs createhoặc renamehoạt động, hệ thống tệp sẽ được tạo hoặc đổi tên, nhưng nó sẽ vẫn chưa được kết nối nếu người dùng không có đủ quyền hệ thống tệp để tạo điểm gắn kết.

Tương tự, một zfs renamelệnh có thể thất bại vì thiếu quyền tại một số điểm trong hoạt động đổi tên. Thể hiện một cách lỏng lẻo, các bước thành phần có thể là:

1) ngắt kết nối hệ thống tập tin ( mountquyền)
2) tạo hệ thống tập tin mới ( createquyền)
3) ánh xạ siêu dữ liệu hệ thống tập tin vào tên mới ( renamequyền)

Bước thứ tư là gắn lại hệ thống tập tin mới được đặt tên tại điểm gắn kết mới, có thể thay đổi của nó, một lần nữa sử dụng mountquyền và có thể là quyền hệ thống tệp để tạo điểm gắn kết mới.

Tôi chưa thử nghiệm các thủ thuật như vậy, nhưng có thể thấy rằng zfsphân biệt giữa createrenamequyền, và giữa mountmountpointquyền. Người ta tưởng tượng có thể cho phép người dùng tạo các hệ thống tệp mới, nhưng một khi được tạo, người dùng không thể đổi tên chúng. Đối với các hệ thống tệp có các điểm gắn kết được kế thừa, việc đổi tên một hệ thống tệp thường cũng sẽ đổi tên điểm gắn kết của hệ thống tệp, như khi đổi tên tank/usr/localthành tank/usr/local.OLDthay đổi điểm gắn kết từ /usr/localthành /usr/local.OLD.

Việc tách mounthoặc renametừ mountpointquyền có nghĩa là người dùng có thể được phép đổi tên hệ thống tệp nhưng không được phép thay đổi điểm gắn kết của nó. Hoặc ngược lại, để có thể thay đổi nơi gắn hệ thống tệp, nhưng không thể thay đổi tên của hệ thống tệp.

Sự phong phú của các hoạt động hệ thống tập tin của nó và ủy thác các hoạt động đó, cùng với độ chi tiết của các quyền, có thể tạo ra zfsmột số thách thức, nhưng cũng rất mạnh mẽ.


Câu trả lời này được mở rộng từ bản gốc. Tôi hy vọng nó sẽ tiếp tục công đức upvote trước đó của nó.
Jim L.

0

Điều này trông giống như bạn có một ảnh chụp nhanh mà thiếu quyền.

Cố gắng đặt receivequyền trên neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03.

Có vẻ như nó được đặt đúng trên âm lượng, nhưng bị thiếu trên ảnh chụp nhanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.