ZFS 데이터 세트를 수신하기 위해 사용자에게 어떤 권한이 없는지 어떻게 알 수 있습니까?


9

FreeNAS (11.1-U1)와 FreeBSD (11.1-RELEASE-p6) 머신이 있습니다. FreeNAS zfs receive에서 위임 된 권한을 가진 루트가 아닌 사용자로서 재귀 스냅 샷 을 만들고 싶습니다 . 이것은 대부분의 자식 데이터 집합에 잘 작동하는 것으로 보입니다. 그러나 iocage의 data데이터 세트는 감옥에 장착되어 거기에서 관리 될 수 있습니다.

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를 실행하면 예상대로 작동합니다.

내 사용자가 교도소의 감옥 데이터 세트를 수신하려면 어떤 위임 된 권한이 필요하며, 더 일반적으로 zfs receive어떤 권한이 누락되었는지 알려주는보다 자세한 오류 메시지를 제공 하는 방법 이 있습니까?

답변:


3

zfs명령으로 발생하는 권한 문제를 해결할 때는 zfs구성 요소 단계로 작업을 분석 하십시오.

샘플 명령 샘플은 zfs receive -duvF여러 단계로 압축을 풉니 다. 이 플래그 중 두 가지는 특별한 권한과 관련이 없습니다.

-d는 새로운 데이터 세트의 이름 (있는 경우)에 영향을
출력 상세를 가능 -v

다른 두 사람은 그렇습니다.

-F는 수신이 시작되기 전에
파일 시스템이 증분 전송의 초기 스냅 샷으로 롤백 됨을 의미 합니다. -u는 수신이 완료된 후 파일 시스템이 마운트되지 않음을 의미합니다.

내 직감은 롤백 권한이 없다는 것입니다. 명령의 -F 플래그는 a zfs rollback가 수행되고 your zfs allow는 나열하지 않음을 의미합니다 rollback.

일반적으로 주어진 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마운트가 실패합니다. A의 zfs create또는 rename작업, 파일 시스템을 만들거나 이름을 변경하지만, 사용자가 마운트 지점을 만들 수있는 파일 시스템 권한이없는 경우가 마운트 해제 남아됩니다.

마찬가지로 zfs rename이름 바꾸기 작업 내 여러 지점에서 권한이 없으면 명령이 실패 할 수 있습니다. 느슨하게 표현 된 구성 요소 단계는 다음과 같습니다.

1) 파일 시스템 마운트 해제 ( mount권한)
2) 새 파일 시스템 생성 ( create권한)
3) 파일 시스템 메타 데이터를 새 이름에 맵핑 ( rename권한)

네 번째 단계는 새로 이름이 변경된 파일 시스템을 새로운 마운트 지점에서 다시 마운트하여 mount권한 을 다시 사용하여 파일 시스템 권한을 사용하여 새 마운트 지점을 작성하는 것입니다.

나는 그런 트릭을 테스트하지 않은,하지만이 있음을 알 수있다 zfs을 구별 create하고 rename, 또한 간의 권한 mountmountpoint권한. 사용자는 새로운 파일 시스템을 만들 수 있지만, 일단 만든 후에는 이름을 바꿀 수 없다고 생각합니다. 상속 된 마운트 지점이있는 파일 시스템의 경우 파일 시스템 이름 tank/usr/local을 바꾸면 이름 을 tank/usr/local.OLD바꿀 때 마운트 지점을에서 /usr/local로 변경하는 경우와 마찬가지로 파일 시스템의 마운트 지점의 이름 도 변경 됩니다 /usr/local.OLD.

권한을 분리 mount하거나 권한 rename에서 분리 mountpoint한다는 것은 사용자가 파일 시스템의 이름을 바꿀 수는 있지만 마운트 지점을 변경할 수는 없다는 것을 의미합니다. 또는 파일 시스템이 마운트 된 위치를 변경할 수 있지만 파일 시스템의 이름은 변경할 수 없습니다.

파일 시스템 작업의 풍부함과 이러한 작업의 위임은 권한의 세분성과 함께 zfs다소 어려울 수 있지만 매우 강력합니다.


이 답변은 원본에서 확장되었습니다. 나는 그것이 이전 공보를 계속 쓸만한 가치가 있기를 바랍니다.
Jim L.

0

권한이없는 스냅 샷이있는 것 같습니다.

receive권한 을 설정하십시오 neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03.

볼륨에서 올바르게 설정되어 있지만 스냅 샷에서 누락 된 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.