Omarine Native Directory (OND): Hệ thống file mạng NFSv4

Tương tự như ldap, hệ thống file mạng cần có principal dịch vụ nfs. Tuy nhiên, trước khi trao đổi yêu cầu rpc sử dụng rpcsec_gss, khách phải thiết lập một ngữ cảnh an ninh gss nên cần thêm principal dịch vụ nfs cho khách. Chúng ta tạo hai principal dịch vụ, nfs/omarine.omarine.org cho server và nfs/toshi.omarine.org cho khách.

kadmin: addprinc -randkey nfs/omarine.omarine.org

kadmin: addprinc -randkey nfs/toshi.omarine.org

Thêm nfs/omarine.omarine.org vào bảng khóa trên máy chủ

kadmin: ktadd nfs/omarine.omarine.org

Thêm nfs/toshi.omarine.org vào một bảng khóa tạm thời

kadmin: ktadd -k /tmp/keytab nfs/toshi.omarine.org

Tệp /tmp/keytab cần được chép tới /etc/krb5.keytab trên máy khách.

Ánh xạ tên ↔ id

rpc.idmapd thực hiện ánh xạ tên nfsv4 tới số id và ngược lại. Bạn soạn thảo tệp cấu hình /etc/idmapd.conf có nội dung như sau, áp dụng cho cả máy chủ và máy khách

[General]

Verbosity = 0

Domain = nfsv4.omarine.org

Local-Realms = OMARINE.ORG

Pipefs-Directory = /var/lib/nfs/rpc_pipefs

[Mapping]

Nobody-User = nobody

Nobody-Group = nogroup

Ánh xạ dùng để xác định chủ và nhóm của các file chia sẻ. Nếu ánh xạ không thành công, khách không thể biết chủ và nhóm file, rồi xem chúng như thuộc về nobody và nhóm nogroup. Nếu khách nhìn thấy chủ file chia sẻ chính là mình thì có thể sử dụng file như thể chúng ở trong thư mục nhà của mình vậy. Dưới đây là hình diễn tả quá trình ánh xạ

Xuất khẩu thư mục trên server

Bạn tạo thư mục /export để xuất khẩu

sudo mkdir /export

sudo chmod 1777 /export

Soạn thảo tệp /etc/exports có nội dung sau

/export toshi(rw,no_subtree_check,sec=krb5p:krb5i:krb5)

Chạy dịch vụ

Trên máy chủ bạn chạy dịch vụ nfs-server

systemctl enable nfs-server

systemctl start nfs-server

Trên máy khách bạn chạy dịch vụ nfs-client

systemctl enable nfs-client

systemctl start nfs-client

Gắn vào thư mục chia sẻ

Máy khách là toshi.omarine.org. Trên toshi, lệnh mount được thực hiện để gắn thư mục chia sẻ. krb5p được sử dụng để bảo mật thông tin, mọi yêu cầu rpc được mã hóa để tránh lộ dữ liệu đi qua mạng:

sudo mount -t nfs4 -osec=krb5p omarine:/export /mnt

Lệnh mount được chạy như root trên khách. root không phải xin cấp vé TGT bằng kinit như thông thường dành cho người sử dụng, bởi vì toshi đã có khóa nfs/toshi.omarine.org trong tay và việc cấp TGT được bao gồm trong quá trình thiết lập ngữ cảnh an ninh. nfs/toshi.omarine.org là một principal dịch vụ phục vụ quản lý trạng thái chia sẻ với server trong vận tải mạng sử dụng dịch vụ an ninh GSSAPI. TGT được cấp cho đối tượng yêu cầu liên lạc, không nhất thiết là người sử dụng, và nfs/toshi.omarine.org là principal của máy toshi, xin cấp vé cho máy toshi. Vé loại này được gọi là chứng chỉ máy. Trong ví dụ, nó được cache tại /tmp/krb5ccmachine_OMARINE.ORG. Việc cấp chứng chỉ máy được tiến hành tự động, một khóa nfs/toshi.omarine.org hợp lệ cho kết quả xác thực thành công. root không phải xin cấp vé, nó sử dụng chứng chỉ máy. Trong khi đó, nfs/omarine.omarine.org phục vụ xác thực cho dịch vụ chia sẻ file và thư mục.

Truy cập file chia sẻ trong ngữ cảnh an ninh

Khác với root, người sử dụng bình thường phải xin cấp vé để truy cập file chia sẻ.

Trong hình trên, lệnh hostname cho biết chúng ta đang ở máy khách toshi. Người sử dụng hiện hành là emin không truy cập được thư mục chia sẻ vì chưa có vé. Sau đó emin dùng kinit để xin cấp vé. Emin dù có thuộc tính xác thực trước nhưng bên máy toshi không có chứng chỉ nên phải vào mật khẩu. Sau khi có vé, lệnh ls trình bày danh sách các file trong thư mục chia sẻ. Ở đó emin nhìn rõ file1 và thư mục pics thuộc về mình, còn file2 có chủ nhân là emin-air.

Thư mục chia sẻ xem trong cửa sổ đồ họa như sau

Tổng quan về điều khiển truy cập file chia sẻ với NFSv4 ACLs

Danh sách điều khiển truy cập POSIX ACL cung cấp định nghĩa mịn hơn về quyền truy cập file và thư mục so với cách phân loại đơn giản user/group/other mà vẫn thường dùng với lệnh chmod. Hơn thế nữa, NFSv4 ACLs mịn hơn POSIX ACL, dùng cho điều khiển truy cập file chia sẻ của hệ thống file mạng NFSv4.

Một ACL là một danh sách phép kết hợp với một file hoặc thư mục, bao gồm một hay nhiều mục điều khiển truy cập (ACEs – Access Control Entries). Một NFSv4 ACL được kí hiệu là acl_spec, bao gồm các mục NFSv4 ACE được kí hiệu là ace_spec. Các ace_spec trong acl_spec ngăn cách nhau bởi dấu phẩy (,) hoặc tab, nhưng thường được soạn thảo mỗi ace_spec trên một dòng. Một ace_spec gồm có 4 trường cách nhau bởi dấu hai chấm (:), có dạng sau:

kiểu:các_cờ:chủ_thể:các_phép

Kiểu

Có 4 kiểu:

  • A

    Cho-phép: cho phép chủ_thể thực hiện hành động với các_phép

  • D

    Từ-chối: không cho phép chủ_thể thực hiện hành động với các_phép

  • U

    Kiểm-tra: ghi nhật ký (tùy thuộc hệ thống) bất kỳ nỗ lực truy cập bởi chủ_thể với các_phép. Yêu cầu đi với một hoặc cả hai cờ truy-cập-thành-côngtruy-cập-thất-bại.

  • L

    Báo-động: tạo ra báo động hệ thống (tùy thuộc hệ thống) tại bất kỳ nỗ lực truy cập bởi chủ_thể với các_phép. Yêu cầu đi với một hoặc cả hai cờ truy-cập-thành-côngtruy-cập-thất-bại.

Cờ

Có 3 loại cờ: cờ nhóm, cờ kế thừa và cờ quản trị. Kiểu Cho-phép hoặc Từ-chối có thể không có cờ, nhưng kiểu Kiểm-tra hoặc Báo-động phải đi với ít nhất một trong hai cờ truy-cập-thành-côngtruy-cập-thất-bại.

Các ACE được kế thừa từ ACL của thư mục cha vào lúc tạo file hay thư mục con. Theo đó, cờ kế thừa chỉ có thể được sử dụng trong các ACE trong ACL của một thư mục, và do đó bị tước bỏ khỏi các ACE kế thừa trong ACL của một file mới.

  • Cờ nhóm: có thể sử dụng trong bất kỳ ACE

    • g

      Chỉ ra chủ_thể là một nhóm.

  • Cờ kế thừa: có thể sử dụng trong bất kỳ ACE thư mục

    • d

      kế-thừa-thư-mục: thư mục con tạo mới sẽ kế thừa ACE.

    • f

      kế-thừa-file: file tạo mới sẽ kế thừa ACE, ngoại trừ cờ kế thừa. Thư mục con tạo mới sẽ kế thừa ACE. Nếu kế-thừa-thư-mục không chỉ ra trong ACE cha, chỉ-kế-thừa sẽ được thêm tới ACE kế thừa.

    • n

      không-truyền-kế-thừa: thư mục con tạo mới sẽ kế thừa ACE, ngoại trừ cờ kế thừa.

    • i

      chỉ-kế-thừa: ACE không quan tâm tới việc kiểm tra phép, nhưng nó di truyền được. Tuy nhiên, cờ chỉ-kế-thừa bị tước bỏ khỏi các ACE kế thừa.

  • Cờ quản trị: có thể đi với kiểu Kiểm-traBáo-động

    • S

      truy-cập-thành-công: kích hoạt một báo động/kiểm tra khi chủ_thể được phép thực hiện một hành động được phủ bởi các_phép.

    • F

      truy-cập-thất-bại: kích hoạt một báo động/kiểm tra khi chủ_thể bị ngăn chặn thực hiện một hành động được phủ bởi các_phép.

Chủ thể

chủ_thể là người sử dụng hoặc nhóm, hoặc là một trong ba chủ_thể đặc biệt: OWNER@, GROUP@, EVERYONE@ mà tương ứng tương tự với user/group/other dùng trong lệnh chmod.

Phép truy cập

Không chỉ có ba phép đọc, viết, thực hiện như POSIX, NFSv4 ACLs có 13 phép cho file và 14 phép cho thư mục. các_phép là một chuỗi kí tự, mỗi kí tự đại diện cho một phép có ý nghĩa như sau:

  • r

    Đọc dữ liệu (file) / xem danh sách (thư mục)

  • w

    Viết dữ liệu (file) / tạo file (thư mục)

  • a

    Thêm dữ liệu (file) / tạo thư mục con (thư mục)

  • x

    Thực hiện (file) / chuyển thư mục (thư mục)

  • d

    Xóa file / thư mục

  • D

    Xóa con: xóa file hoặc thư mục con bên trong thư mục

  • t

    Đọc thuộc tính: đọc thuộc tính của file / thư mục (là thuộc tính cơ bản của file / thư mục, được trình bày với ls -l, stat)

  • T

    Viết thuộc tính: viết thuộc tính của file / thư mục

  • n

    Đọc thuộc tính được đặt tên: đọc thuộc tính được đặt tên của file / thư mục (thuộc tính được đặt tên nằm ngoài thuộc tính cơ bản và thuộc tính được đề nghị – thuộc tính ACL)

  • N

    Viết thuộc tính được đặt tên: viết thuộc tính được đặt tên của file / thư mục

  • c

    Đọc ACL: đọc NFSv4 ACL của file / thư mục

  • C

    Viết ACL: viết NFSv4 ACL của file / thư mục

  • o

    Viết chủ: thay đổi chủ và nhóm của file / thư mục

  • y

    Đồng bộ: cho phép khách sử dụng đồng bộ I/O với server

Bí danh phép

Trong trường hợp sử dụng đơn giản, chữ viết tắt có thể được sử dụng làm bí danh thể hiện phép một cách chung chung. Đó là các phép đọc ( R ), viết ( W ) và thực hiện ( X ) quen thuộc với các bit chế độ truy cập file của lệnh chmod:

  • R tương đương với rntcy

  • W tương đương với watTNcCy (thêm D đối với thư mục)

  • X tương đương với xtcy

Điều chỉnh

Các RFC dành cho NFSv4: RFC 3530 tháng 4 năm 2003, RFC 7530 tháng 3 năm 2015, RFC 7931 tháng 7 năm 2016, RFC 5661 tháng 1 năm 2010 (4.1), RFC 7862 tháng 11 năm 2016 (4.2).

Server không nhất thiết hỗ trợ đầy đủ các thuộc tính NFSv4 ACL. Mặc dù khách đặt các thuộc tính, server có trách nhiệm diễn dịch các yêu cầu và chỉ thực hiện các hoạt động quản trị tin tưởng nơi server. Nó chuyển đổi NFSv4 ACL sang POSIX ACL và loại bỏ các thuộc tính không hỗ trợ. Ví dụ hệ thống Unix không cho phép xóa file, yêu cầu đặt phép d từ khách sẽ được trả về bit 0 trong mặt nạ truy cập, rồi khách đơn giản là bỏ qua giá trị này.

Chú ý là file không được xóa trực tiếp trong Unix. Khi bạn xóa một file trong thư mục nhà, bạn đã không sử dụng vai trò chủ file vì chủ file không xóa được file, cụ thể là phép viết file không bao hàm xóa file. Tuy nhiên bạn vẫn xóa được file. Lý do là bạn đã sử dụng phép xóa file (D) bên trong thư mục cha được bao hàm trong phép viết thư mục cha mà trong trường hợp này chính là thư mục nhà thuộc sở hữu của bạn. Unix quan niệm rằng file và thư mục con là nội dung của thư mục nên cho phép viết thư mục kéo theo cho phép xóa file và thư mục con. NFSv4 qui định chi tiết hơn, phép w cho phép tạo file bên trong thư mục, nhưng phải có phép khác để xóa file và thư mục con, là phép D. Việc xóa file có thể cần một sự thận trọng khác với tạo file.

OND không hỗ trợ các các thành phần ACE sau đây:

  • Các kiểu Kiểm tra (U) và Báo động (L), kéo theo các cờ quản trị là không hỗ trợ.
  • Các thuộc tính được đặt tên của file / thư mục (phép n, N).
  • Phép d.
  • Phép o. Trên Unix, đây là khả năng của root để chạy chown và chgrp, nhưng khách không được ánh xạ sang root của server.

Bí danh phép sẽ thay đổi như sau:

  • R tương đương với rtcy

  • W tương đương với watTcCy (thêm D đối với thư mục)

  • X tương đương với xtcy

Ngoài ra, chỉ chủ file / thư mục có quyền viết ACL và thuộc tính nên những người khác được đặt W sẽ bị rút phép T và C. Tuy nhiên, họ còn giữ được phép D đối với thư mục.

Chúng ta có thể suy ra RW tương đương với rwatTcCy đối với file và rwaDtTcCy đối với thư mục.

Server có thể biến đổi các thuộc tính ACL chút ít để tránh va chạm hoặc tự động cung cấp thuộc tính khi khách đặt chưa đủ thông tin, theo hướng giữ nhiều thông tin nhất có thể với ý định của khách. Việc này được thực hiện theo thứ tự: thuộc tính bit chế độ trước, rồi thuộc tính ACL sau. Để tránh biến đổi tự động, bạn có thể đặt kết hợp chặt chẽ giữa kiểu A và kiểu D.

nfs4_getfacl

Lệnh nfs4_getfacl trình bày NFSv4 ACL của file hoặc thư mục chia sẻ. Cách sử dụng như sau:

nfs4_getfacl file

nfs4_getfacl sẽ trình bày acl của file.

Ví dụ chúng ta xem acl của file /mnt/file1

nfs4_setfacl

Đặt, soạn thảo NFSv4 ACL của file hoặc thư mục chia sẻ. Cách sử dụng như sau:

nfs4_setfacl [lựa_chọn] lệnh file…

file đại diện cho file hoặc thư mục.

Có một lệnh bổ sung là nfs4_editfacl, tương đương với nfs4_setfacl -e

Các lệnh

  • -a acl_spec [index]

    thêm các ACE từ acl_spec tới ACL của file. Các ACE được chèn tại ví trí thứ index (mặc định là 1) của ACL của file.

  • -A acl_file [index]

    thêm các ACE từ acl_spec trong acl_file tới ACL của file. Các ACE được chèn tại ví trí thứ index (mặc định là 1) của ACL của file.

  • -x acl_spec | index

    xóa các ACE khớp từ acl_spec, hoặc xóa ACE thứ index từ ACL của file.

  • -X acl_file

    xóa các ACE khớp từ acl_spec trong acl_file từ ACL của file.

  • -s acl_spec

    đặt ACL của file tới acl_spec.

  • -S acl_file

    đặt ACL của file tới acl_spec trong acl_file.

  • -e, --edit

    soạn thảo ACL của file. Nếu có nhiều file được chỉ ra, trình soạn thảo sẽ được gọi lần lượt cho từng file.

  • -m from_acl to_acl

    sửa đổi ACL của file bằng cách thay from_ace với to_ace.

  • --version

    trình bày phiên bản chương trình và thoát ra.

Lựa chọn

  • -R, --recursive

    áp dụng đệ qui tới các file và thư mục con của thư mục. Theo sau các liên kết tượng trưng (symlinks) trên dòng lệnh và bỏ qua symlinks gặp phải trong khi đệ qui xuyên qua thư mục.

  • -L, --logical

    trong liên hợp với -R/--recursive, đi luận lý theo tất cả symlinks.

  • -P, --physical

    trong liên hợp với -R/--recursive, đi vật lý theo tất cả symlinks.

  • --test

    trình bày kết quả của lệnh nhưng không giữ thay đổi.

Ví dụ

emin là người sử dụng hiện hành. Lệnh ls -l cho biết tệp chia sẻ /mnt/file2 có chủ là emin-air, nhóm users. Lệnh nfs4_getfacl trình bày ACL của tệp. emin viết tệp /mnt/file2 nhưng bị từ chối vì không có phép. Rồi emin sử dụng nfs4_setfacl để thêm phép viết tệp cho mình nhưng không thành công vì không có phép viết ACL. Như vậy phải login sang emin-air là chủ nhân của tệp. emin-air xem tệp nhưng không được vì chưa có vé. Sau khi lấy vé bằng kinit, emin-air dùng nfs4_setfacl để thêm một ACE bao gồm phép viết tệp cho emin. Lệnh nfs4_getfacl tiếp theo trình bày thông tin mới. Xong việc, emin-air thoát ra. Người sử dụng hiện hành lại trở về emin. Bây giờ emin đã có phép nên viết được tệp. Lệnh cuối cùng trình bày nội dung mới của tệp chia sẻ /mnt/file2.

Công cụ đồ họa soạn thảo NFSv4 ACL

Chương trình này nằm trong menu Development. Bạn cũng có thể chạy chương trình từ dòng lệnh, ví dụ soạn thảo tệp /mnt/file2:

nfs4-acl-editor /mnt/file2

Sau khi đã hiểu tính chất các thuộc tính ACL, bạn sử dụng công cụ đồ họa rất tiện lợi.

Omarine Native Directory (OND) đã hoàn thành. OND gồm nhiều bộ phận như chúng ta đã biết nhưng có thể gói gọn trong công thức sau:

OND = Kerberos 5 + Openldap + NFSv4 + TLS + ACL

OND không có gì sáng tạo, chỉ là một mô hình tổ hợp các gói phần mềm nguồn mở miễn phí đang phát triển khắp nơi trên thế giới. Thế giới nguồn mở đa dạng phong phú như tài nguyên thiên nhiên và OND chắt lọc từ đó với một công thức như một bài thuốc nam.

*Tâm sự cùng bạn đọc

Loạt bài về OND chưa thể bao quát nhiều kỹ thuật thú vị khác, mà chỉ tập trung vào vấn đề thiết thực như an ninh mật mã. Các bạn học sinh, sinh viên, mọi cá nhân, tổ chức có câu hỏi xin mời gửi mail về địa chỉ phamtyn@gmail.com, hoặc gọi số +84 913 509 520.

Thân ái,

Phạm Thành Tuyên

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.