Як я можу визначити, яких дозволів бракує моєму користувачеві для отримання набору даних 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 дозволяє докладно виводити

Інші два роблять.

-F означає, що файлова система буде повернута до початкового знімка поступового передачі до початку прийому
-u означає, що файлова система не буде змонтована після завершення прийому

Моя думка, що вам не вистачає дозволу на відкат. Прапор -F у вашій команді означає, що zfs rollbackбуде виконано а, а ваш 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, якщо кріплення вийде з ладу. В операції zfs createабо renameоперації файлова система буде створена або перейменована, але вона залишиться відключеною, якщо користувач не має достатніх дозволів файлової системи для створення точки монтажу.

Аналогічно, zfs renameкоманда може відмовитись через відсутність дозволів у декількох точках операції з перейменуванням. Слабо вираженими кроками компонента можуть бути:

1) відключити файлову систему ( mountдозвіл)
2) створити нову файлову систему ( createдозвіл)
3) зіставити метадані файлової системи в нове ім'я ( renameдозвіл)

Четвертий крок - це знову встановити нову назву файлової системи на її новій, можливо, зміненій точці монтажу, яка знову використовує mountдозвіл та, можливо, дозволи файлової системи для створення нової точки монтажу.

Я не перевіряв таких хитрощів, але видно, що zfsрозрізняють createі renameдозволи, а також між mountі mountpointдозволами. Можна уявити, що можна дозволити користувачеві створювати нові файлові системи, але колись створений, користувач не може їх перейменовувати. У файлових системах із успадкованими точками кріплення перейменування файлової системи також часто перейменовує точку кріплення файлової системи, як при перейменуванні tank/usr/localдля tank/usr/local.OLDзміни точки монтування з /usr/localна /usr/local.OLD.

Відокремлення дозволів mountабо renameвід них mountpointозначає, що користувачеві може бути дозволено перейменувати файлову систему, але не дозволяти змінювати її точку монтажу. Або навпаки, мати змогу змінити місце встановлення файлової системи, але не мати змоги змінити ім’я файлової системи.

Багатство операцій з її файловою системою та делегування цих операцій у поєднанні із деталізацією дозволів може зробити zfsдещо складним, але й дуже потужним.


Цю відповідь викладаємо з оригіналу. Я сподіваюся, що вона продовжить заслуговувати своїх попередніх результатів.
Джим Л.

0

Схоже, у вас є знімок, де дозвіл відсутній.

Спробуйте ввімкнути receiveдозвіл neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03.

Схоже, він встановлений належним чином на гучність, але відсутній на знімку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.