Điểm:0

Truy cập bị từ chối khi cài đặt Kerberised NFS v4 Share

lá cờ de

Tôi muốn gắn một chia sẻ NFS4 nhưng đã bật bảo mật Kerberos. Đây là thiết lập của tôi:

  • Máy chủ Debian (dns fqdn: nfsv4test.subnet.example.org)

  • Máy khách Debian (dns fqdn: nfsv4client.subnet.example.org)

  • Windows ADC, cũng hoạt động như KDC

  • Vương quốc của tôi là REALM.EXAMPLE.ORG

  • Mạng con chứa cả hai máy Debian được gọi là subnet.example.org

  • Không có NAT đang diễn ra.

  • Cả hai máy đều được cập nhật.

Vì vậy, khi tôi vẫn đang vật lộn với Kerberos, đó là cách tôi đã cố gắng đạt được mục tiêu của mình:

Chương I: Thiết lập

1- Đặt cả hai máy vào cùng một Vương quốc/Miền (Cái này đã được người khác thiết lập và hoạt động)

2- Tạo hai người dùng (người dùng, không phải máy tính!) trên mỗi máy: nfs-nfsv4client, host-nfsv4client, nfs-nfsv4test và host-nfsv4test Sau khi tạo, tôi đã bật mã hóa AES256 Bit cho tất cả các tài khoản.

3- Đặt hiệu trưởng dịch vụ cho người dùng:

setspn -S nfs/[email protected] nfs-nfsv4test

Tôi đã làm điều này cho cả 4 người dùng/người đứng đầu.

3- Tạo keytab trên Windows KDC:

ktpass -princ host/[email protected] +rndPass -mapuser [email protected] -pType KRB5_NT_PRINCIPAL -out c:\temp\host-nfsv4test.keytab -crypto AES256- SHA1

Vì vậy, sau đó tôi đã có 4 keytabs.

4- Hợp nhất các tab bàn phím trên máy chủ (và máy khách):

ktutil  
read_kt host-nfsv4test.keytab   
read_kt nfs-nfsv4test.keytab    
write_kt /etc/krb5.keytab

Tệp có 640 quyền.

5- Đã xuất các thư mục trên máy chủ; điều này đã hoạt động mà không cần kerberos. Khi bật Kerberos, tệp xuất sẽ trông như thế này:

/srv/kerbnfs4 gss/krb5(rw,sync,fsid=0,crossmnt,no_subtree_check,insecure)
/srv/kerbnfs4/homes gss/krb5(rw,sync,no_subtree_check,insecure)

Chạy exportfs -rav hoạt động:

root@nfsv4test:~# exportfs -rav
xuất gss/krb5:/srv/kerbnfs4/homes
xuất gss/krb5:/srv/kerbnfs4

...và trên máy khách, tôi có thể xem các giá treo trên máy chủ:

root@nfsv4client:~# showmount -e nfsv4test.subnet.example.org
Xuất danh sách cho nfsv4test.subnet.example.org:
/srv/kerbnfs4/homes gss/krb5
/srv/kerbnfs4 gss/krb5

6a- krb5.conf có cấu hình mặc định cho môi trường mà nó đã được thiết lập và tôi không thay đổi bất cứ điều gì:

[libdefaults]
    ticket_lifetime = 24000
    default_realm = REALM.EXAMPLE.ORG
    default_tgs_entypes = rc4-hmac des-cbc-md5
    default_tkt__enctypes = rc4-hmac des-cbc-md5
    được phép_enctypes = rc4-hmac des-cbc-md5
    dns_lookup_realm = đúng
    dns_lookup_kdc = đúng
    dns_fallback = có

# Các biến krb5.conf sau chỉ dành cho MIT Kerberos.
    kdc_timesync = 1
    ccache_type = 4
    có thể chuyển tiếp = đúng
    có thể thay thế = đúng

# Các tham số libdefaults sau chỉ dành cho Heimdal Kerberos.
    fcc-mit-ticketflags = true

[cõi]
    REALM.EXAMPLE.ORG = {
        kdc = kdc.realm.example.org
        default_domain = kds.realm.example.org
    }

[miền_cõi]
    .realm.example.org = KDC.REALM.EXAMPLE.ORG
    lĩnh vực.example.org = KDC.REALM.EXAMPLE.ORG

[ứng dụng mặc định]
chiều = {
   gỡ lỗi = sai
   ticket_lifetime = 36000
   refresh_lifetime = 36000
   có thể chuyển tiếp = đúng
   krb4_convert = sai
}

6- Sau đó, tôi thiết lập sssd.conf của mình như thế này, nhưng tôi không thực sự hiểu chuyện gì đang xảy ra ở đây:

[sssd]
miền = lĩnh vực.example.org
dịch vụ = nss, pam
config_file_version = 2

[nss]
filter_groups = gốc
filter_users = root
default_shell = /bin/bash

[pam]
kết nối lại_retries = 3

[tên miền/realm.example.org]
krb5_validate = Đúng
krb5_realm = REALM.EXAMPLE.ORG
tên miền phụ_homedir = %o
default_shell = /bin/bash
cache_credentials = Đúng
id_provider = quảng cáo
access_provider = quảng cáo
chpass_provider = quảng cáo
auth_provide = quảng cáo
ldap_schema = quảng cáo
ad_server = kdc.realm.example.org
ad_hostname = nfsv4test.realm.example.org
ad_domain = lĩnh vực.example.org
ad_gpo_access_control = dễ dãi
use_fully_qualified_names = Sai
ad_enable_gc = Sai

7- idmap.conf trên cả hai máy:

[Tổng quan]

Độ dài = 0
Pipefs-Directory = /run/rpc_pipefs

Miền = lĩnh vực.example.org

[Lập bản đồ]

Không ai sử dụng = không ai
Không ai-Nhóm = nogroup

8- Và /etc/default/nfs-common trên cả hai máy:

NEED_STATD=có
NEED_IDMAPD=có
NEED_GSSD=có

9- Cuối cùng nhưng không kém phần quan trọng, nfs-kernel-server trên máy chủ:

RPCNFSDCOUNT=8
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS="--manage-gids --no-nfs-version 3"
NEED_SVCGSSD="có"
RPCSVCGSSDOPTS=""

10- Sau đó, sau khi khởi động lại cả máy chủ và máy khách, tôi đã cố gắng gắn kết chia sẻ (với tư cách là người dùng root):

mount -t nfs4 -o sec=krb5 nfsv4test.subnet.example.org:/srv/kerbnfs4/homes /media/kerbhomes -vvvv 

Nhưng đáng buồn thay, gắn kết không hoạt động. Tôi không nhận được quyền truy cập. Trong lần thử đầu tiên, sẽ mất khá nhiều thời gian và đây là kết quả:

root@nfsv4client:~# mount -t nfs4 -o sec=krb5 nfsv4test.subnet.example.org:/srv/kerbnfs4/homes /media/kerbhomes
mount.nfs4: thời gian chờ được đặt cho Thứ Tư ngày 15 tháng 12 15:38:09 năm 2021
mount.nfs4: thử các tùy chọn dựa trên văn bản 'sec=krb5,vers=4.2,addr=*********,clientaddr=*******'
mount.nfs4: mount(2): Quyền bị từ chối
mount.nfs4: truy cập bị máy chủ từ chối trong khi cài đặt nfsv4test.subnet.example.org:/srv/kerbnfs4/homes

Chương II: Gỡ lỗi

Để có nhật ký chi tiết hơn, tôi đã chạy

rpcdebug -m nfsd -s lockd
cuộc gọi rpcdebug -m rpc -s

trên máy chủ nhưng tôi thực sự không nhận được nhiều nhật ký như vậy.

Tuy nhiên, khi cố gắng gắn kết, nhật ký hệ thống cho tôi biết rằng:

Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.771800] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.771808] svc: svc_authenticate (0)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.771811] svc: bộ điều phối cuộc gọi
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.771840] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.773222] svc: máy chủ 00000000c1c7fb25, nhóm 0, vận chuyển 00000000fc9bd395, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.774697] svc: máy chủ 00000000c1c7fb25, nhóm 0, vận chuyển 00000000fc9bd395, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.774705] svc: svc_authenticate (6)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.774711] RPC: Muốn cập nhật, refage=120, age=0
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.774712] svc: svc_ process close
[...7x cùng một tin nhắn]
Ngày 6 tháng 12 11:20:02 nhân máy chủ kiểm tra: [ 2088.791514] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791519] svc: svc_authenticate (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791521] svc: xác thực không thành công (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791538] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791913] svc: máy chủ 00000000c1c7fb25, nhóm 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791918] svc: svc_authenticate (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791920] svc: xác thực không thành công (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.791940] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.792292] svc: máy chủ 00000000c1c7fb25, pool 0, vận chuyển 00000000c5641df0, inuse=2
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.792296] svc: svc_authenticate (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.792298] svc: xác thực không thành công (1)
Ngày 6 tháng 12 11:20:02 nhân máy chủ thử nghiệm: [ 2088.792316] svc: máy chủ 00000000c1c7fb25, nhóm 0, vận chuyển 00000000c5641df0, inuse=2

Vì điều này không thực sự giúp tôi chút nào, nên tôi đã ghi lại lưu lượng truy cập bằng tcpdump, điều này mang lại cho tôi điều này:

11:12:02.856200 IP ip-client.740 > ip-server.nfs: Flags [S], seq 763536441, win 65160, tùy chọn [mss 1460,sackOK,TS val 2364952579 ecr 2826266858,nop,wscale 7], độ dài 0
11:12:02.856295 IP ip-server.nfs > ip-client.740: Flags [S.], seq 2444950221, ack 763536442, win 65160, tùy chọn [mss 1460,sackOK,TS val 2826266858 ecr 2364952579,nop,wscale 7 ], chiều dài 0
11:12:02.856304 IP ip-client.740 > ip-server.nfs: Flags [.], ack 1, win 510, tùy chọn [nop,nop,TS val 2364952579 ecr 2826266858], độ dài 0
11:12:02.856324 IP ip-client.740 > ip-server.nfs: Flags [P.], seq 1:245, ack 1, win 510, tùy chọn [nop,nop,TS val 2364952579 ecr 2826266858], độ dài 244 : Yêu cầu NFS xid 4035461122 240 getattr fh 0,2/42
11:12:02.856408 IP ip-server.nfs > ip-client.740: Flags [.], ack 245, win 508, tùy chọn [nop,nop,TS val 2826266858 ecr 2364952579], độ dài 0
11:12:02.856421 IP ip-server.nfs > ip-client.740: Flags [P.], seq 1:25, ack 245, win 508, tùy chọn [nop,nop,TS val 2826266858 ecr 2364952579], độ dài 24 : NFS reply xid 4035461122 reply ERR 20: Auth Bogus Credentials (con dấu bị hỏng)
11:12:02.856425 IP ip-client.740 > ip-server.nfs: Flags [.], ack 25, win 510, tùy chọn [nop,nop,TS val 2364952579 ecr 2826266858], độ dài 0
11:12:02.867582 IP ip-client.740 > ip-server.nfs: Flags [F.], seq 245, ack 25, win 510, tùy chọn [nop,nop,TS val 2364952590 ecr 2826266858], độ dài 0
11:12:02.867751 IP ip-server.nfs > ip-client.740: Flags [F.], seq 25, ack 246, win 508, tùy chọn [nop,nop,TS val 2826266869 ecr 2364952590], độ dài 0
11:12:02.867759 IP ip-client.740 > ip-server.nfs: Flags [.], ack 26, win 510, tùy chọn [nop,nop,TS val 2364952590 ecr 2826266869], độ dài 0

(Tôi đã xử lý lại các địa chỉ IP thực)

Vì vậy, phần thú vị ở đây là Auth Bogus (Seal bị phá vỡ)? Thực sự có điều gì đó tồi tệ hay đó chỉ là lỗi xuất hiện khi có gì đó không ổn? Tôi không thể tìm thấy bất cứ điều gì hữu ích về lỗi này trên web.

Vì vậy, để quay lại chính Kerberos, keytab có vẻ ổn:

root@nfsv4client:~# klist -k -e
Tên tab khóa: TỆP:/etc/krb5.keytab
Hiệu trưởng KNO
---- ------------------------------------------ ----------------------------
   7 máy chủ/[email protected]
   6 nfs/[email protected]

Khi thử kiểm tra tệp keytab, nó có vẻ hoạt động:

root@nfsv4client:~# kinit -k nfs/nfsv4client.realm.example.org
root@nfsv4client:~#

Nhưng trên trang này người ta nói rằng keytab nên được kiểm tra với

kinit -k `tên máy chủ -s`$

mà giải quyết

kinit -k nfsv4client

không hoạt động vì không tìm thấy khóa nào [email protected]. Vì vậy, là keytab sai hoặc phương pháp kiểm tra?

Một nhật ký khác tôi tìm thấy trên máy khách đang lắp (trong tin nhắn):

 nhân nfsv4client: [ 4355.170940] svc: khởi tạo nhóm 0 cho gọi lại NFSv4
 nhân nfsv4client: [ 4355.170940] nfs_callback_create_svc: đã tạo dịch vụ
 hạt nhân nfsv4client: [ 4355.170941] NFS: tạo dữ liệu gọi lại trên mỗi mạng; lưới=f0000098
 hạt nhân nfsv4client: [ 4355.170942] svc: tạo vận chuyển tcp-bc[0]
 hạt nhân nfsv4client: [ 4355.171032] nfs_callback_up: dịch vụ đã bắt đầu
 nhân nfsv4client: [ 4355.171033] svc: svc_destroy(Gọi lại NFSv4, 2)
 hạt nhân nfsv4client: [ 4355.171034] NFS: nfs4_Discover_server_trunking: thử nghiệm 'nfsv4test.subnet.example.org'
 nhân nfsv4client: [ 4355.171040] RPC: khởi tạo tác vụ mới, procpid 9204
 hạt nhân nfsv4client: [ 4355.171041] RPC: nhiệm vụ được phân bổ 000000006bdb9e01
 nhân nfsv4client: [ 4355.171042] RPC: 110 __rpc_execute flags=0x5280
 hạt nhân nfsv4client: [ 4355.171044] RPC: 110 call_start nfs4 proc EXCHANGE_ID (đồng bộ hóa)
 hạt nhân nfsv4client: [ 4355.171045] RPC: 110 call_reserve (trạng thái 0)
 hạt nhân nfsv4client: [ 4355.171046] RPC: Wake_up_first(000000005af696f3 "xprt_sending")
 hạt nhân nfsv4client: [ 4355.171047] RPC: 110 req dành riêng 00000000d1a7d1a4 xid 04f914c3
 hạt nhân nfsv4client: [ 4355.171047] RPC: 110 call_reserveresult (trạng thái 0)
 hạt nhân nfsv4client: [ 4355.171048] RPC: 110 call_refresh (trạng thái 0)
 nfsv4client kernel: [ 4355.171049] RPC: gss_create_cred cho uid 0, hương vị 390004
 hạt nhân nfsv4client: [ 4355.171050] RPC: gss_create_upcall cho uid 0
 hạt nhân nfsv4client: [ 4355.171052] RPC: __gss_find_upcall không tìm thấy gì
 nhân nfsv4client: [ 4355.201976] RPC: __gss_find_upcall đã tìm thấy msg 000000000e5abcbc
 hạt nhân nfsv4client: [ 4355.201978] RPC: gss_fill_context trả về lỗi 13
 nhân nfsv4client: [ 4355.201982] RPC: gss_pipe_downcall trả về 16
 hạt nhân nfsv4client: [ 4355.201986] RPC: gss_create_upcall cho kết quả uid 0 -13
 hạt nhân nfsv4client: [ 4355.201987] RPC: 110 call_refreshresult (trạng thái -13)
 hạt nhân nfsv4client: [ 4355.201988] RPC: 110 call_refreshresult: làm mới tín dụng không thành công với lỗi -13
 hạt nhân nfsv4client: [ 4355.201989] RPC: 110 trả về 0, trạng thái -13
 hạt nhân nfsv4client: [ 4355.201990] RPC: 110 tác vụ phát hành

Có rất nhiều thứ, nhưng tôi không thể tìm ra ý nghĩa của lỗi -13, ngoại trừ việc nó bị Từ chối cấp phép.

Chương III: Câu hỏi

Các hiệu trưởng có trong keytab. Vì vậy, khi máy khách hỏi máy chủ về phần chia sẻ NFS và cố gắng truy cập nó, thì cả hai nên có các khóa để tương tác với nhau. Nhưng vì một số lý do nó không hoạt động. Có thể là do việc gán hiệu trưởng cho tài khoản người dùng?

Làm thế nào tôi có thể làm cho nó hoạt động? Làm cách nào để tôi nhận được thông tin tốt hơn khi gỡ lỗi? Xin lỗi cho bức tường của Trung Quốc của văn bản.

tái bút Tôi chủ yếu theo dõi hướng dẫn này. Nó dường như là một sự kết hợp hoàn hảo cho môi trường của tôi..

Semicolon avatar
lá cờ jo
Máy và người dùng của bạn có lẽ đang ở REALM.EXAMPLE.ORG, nhưng bạn đang cố gắng sử dụng SPN với SUBNET.EXAMPLE.ORG. Tại sao? Ngoài ra, "tên mạng con" là gì? Tôi không chắc, nhưng nó không ảnh hưởng gì đến SPN
Điểm:0
lá cờ jo

Biến nhận xét của tôi thành câu trả lời ...

SUBNET.EXAMPLE.ORG không thực sự tồn tại (có khả năng). Vương quốc/miền/rừng của bạn là REALM.EXAMPLE.ORG, vì vậy mọi đối tượng trong miền đó đều có lĩnh vực đó. Có vẻ như subnet.example.org chỉ là thứ bạn tạo ra để thuận tiện cho việc đặt tên.

Vì vậy, nếu bạn muốn sử dụng SUBNET.EXAMPLE.ORG, bạn sẽ cần phải có các bản ghi SRV thích hợp cho mạng con.example.org của vương quốc, chúng sẽ cần trỏ đến Bộ điều khiển miền AD, AD sẽ phải được định cấu hình để sử dụng bản ghi đó làm vương quốc bí danh (không chắc liệu điều đó có thực sự khả thi với triển khai của Microsoft). Ngoài ra, máy khách kết nối và bộ điều khiển miền sẽ phân giải FQDN thành IP và IP thành FQDN.

Tôi cũng sẽ xóa tất cả "tên viết tắt" khỏi SPN của bạn. Gắn bó với <service>\<FQDN>, máy chủ\<FQDN> hoặc Người dùngPrincipalName

Dòng này trong sssd.conf của bạn không hợp lệ. ad_hostname = nfsv4test.subnet.example.org

Tất cả các máy tính trong miền lĩnh vực.example.com có FQDN của <tên máy tính>@realm.example.com. Kết thúc câu chuyện. Bạn có thể sử dụng DNS để phân giải các máy có tên khác, nhưng trong AD/LDAP, tài khoản máy tính sẽ chỉ <tên máy tính>@realm.example.com


Nói tóm lại, để làm việc này nhanh chóng, hãy thay thế mạng con.example.org với lĩnh vực.example.org trong mọi thứ bạn đã cố gắng và bạn có thể sẽ hoạt động.

Standard avatar
lá cờ de
`SUBNET.EXAMPLE.ORG` không tồn tại, vì FQDN của máy thực sự là nfsv4test.subnet.example.org. Ít nhất đó là những gì tôi nhận được khi chạy `hostname --fqdn`. Và như tôi đã viết ở trên, có thể truy cập KDC vì khi tôi đăng nhập vào nfv4client bằng người dùng AD, tôi sẽ thực sự nhận được Tiền gốc mặc định (`[email protected]`) và Tiền gốc dịch vụ (`krbtgt/REALM. [email protected]`). Và vì tất cả các hướng dẫn/hướng dẫn mà tôi đã đọc đều nói rằng các hiệu trưởng cần phải có FQDN trong đó nên tôi đã sử dụng `nfsv4test.subnet.example.org`.
Semicolon avatar
lá cờ jo
Bạn có thể đăng nhập vào hộp vì bạn đã chỉ định đúng lĩnh vực trong tệp sssd.conf của mình (krb5_realm = REALM.EXAMPLE.ORG). Trong trường hợp này, tôi không nghĩ việc máy của bạn nghĩ FQDN là gì không quan trọng. Nếu máy của bạn NFSV4TEST nằm trong miền REALM.EXAMPLE.ORG thì FQDN của máy (ít nhất là cho Kerberos) trên thực tế là nfsv4test.realm.example.org. Đây không phải là phỏng đoán hay lý thuyết, đây là sự thật.
Standard avatar
lá cờ de
Vì vậy, cuối cùng tôi đã thử nghiệm điều này với mạng con được thay thế bằng lĩnh vực. Tôi đã xóa và tạo lại các SPN, tạo các tab bàn phím mới, nhập chúng (ít nhất chúng vẫn hoạt động tốt), cập nhật sssd.conf; nhưng lỗi vẫn như cũ (Thông tin xác thực không có thật của Auth (con dấu bị hỏng) trong tcpdump, Truy cập bị từ chối đối với lệnh gắn kết). Làm cách nào để xác minh rằng khi gắn khóa chính xác được yêu cầu từ keytab?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.