Khi xử lý sự cố quyền phát sinh từ zfs
các lệnh, hãy phân tích zfs
hoạt động theo các bước thành phần của nó.
Lệnh mẫu zfs receive -duvF
giả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 rollback
sẽ được thực hiện và zfs allow
danh 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 zfs
lệnh đã cho .
Trang hướng zfs
dẫ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 -u
cờ, 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 -u
khô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ự receive
cho phép đòi hỏi sự mount
cho phép.
Vì một zfs mount
thao 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ó zfs
quyề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 create
hoặc rename
hoạ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 rename
lệ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 ( mount
quyền)
2) tạo hệ thống tập tin mới ( create
quyền)
3) ánh xạ siêu dữ liệu hệ thống tập tin vào tên mới ( rename
quyề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 mount
quyề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 zfs
phân biệt giữa create
và rename
quyền, và giữa mount
và mountpoint
quyề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/local
thành tank/usr/local.OLD
thay đổi điểm gắn kết từ /usr/local
thành /usr/local.OLD
.
Việc tách mount
hoặc rename
từ mountpoint
quyề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 zfs
một số thách thức, nhưng cũng rất mạnh mẽ.