Kết hợp NFS, máy chủ Samba với người dùng từ Active Directory


8

Tôi muốn xây dựng một máy chủ xuất các thư mục nhà của người dùng qua SMB / CIFS và NFS. Máy chủ này sẽ được kết nối với bộ điều khiển miền Win2k3 AD chứa cơ sở dữ liệu người dùng của chúng tôi. Theo tôi hiểu, winbind sẽ phát minh ra UID cho những người dùng này một cách nhanh chóng. Ánh xạ tên người dùng-UID này cần có sẵn cho các máy khách NFS gắn thư mục gốc hoặc quyền sở hữu tệp sẽ không được trình bày chính xác.

Tôi cho rằng điều này có thể đạt được bằng SFU, nhưng theo như tôi có thể nói SFU bị ngưng và sẽ không được hỗ trợ trên các phiên bản Windows gần đây, vì vậy tôi không muốn sử dụng nó.

Làm cách nào để cung cấp ánh xạ này tốt nhất cho khách hàng NFS?

(Bạn sẽ nghĩ đây là trường hợp sử dụng phổ biến, nhưng tôi không tìm thấy cách làm liên quan. Google-fu của tôi có thể yếu.)

EDIT: Trong một trường hợp khác, liệu người dùng có thể kết nối qua NFS mà không cần kết nối qua SMB / CIFS không?

Câu trả lời:


4

(Chỉnh sửa cho 2017-07-05) Tôi thường khuyên bạn nên sử dụng sssd ngay bây giờ. Để lại câu trả lời ban đầu dưới đây để tham khảo lịch sử. Ghi chú hiện tại của tôi cho Ubuntu là:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • Trong /etc/sssd/sssd.conf, [sssd]phần, thêm default_domain_suffix = example.comfull_name_format = %1$s. Trong [domain/example.com]phần, chỉnh sửa fallback_homedir = /home/%d/%uvà thêm ignore_group_members = True. Đối với các tên miền lớn hơn, hãy thêm enumerate = falseđể ngăn sssd di chuyển khắp AD tìm kiếm thành viên nhóm (và trì hoãn đăng nhập không lưu trong bộ nhớ cache trong một hoặc hai phút mỗi lần).
  • Nối session required pam_mkhomedir.so skel=/etc/skel/ umask=0076vào cuối /etc/pam.d/common-session. (hoặc bất cứ điều gì bạn muốn sử dụng).
  • Khởi động lại sssddịch vụ với service sssd restart.
  • Hãy thử đăng nhập vào văn bản thứ hai hoặc bảng điều khiển GUI hoặc bằng ssh localhost.

winbindsẽ tạo UID theo mặc định trên các phiên bản cũ hơn của Samba hoặc sẽ phải tham khảo cửa hàng LDAP để giữ mọi thứ nhất quán. Điều đó đã không xảy ra trong một thời gian bây giờ (tháng 11 năm 2004, nếu thông tin của tôi là chính xác) - idmap_ridlà một phụ trợ có thể tạo UID từ Active Directory RID (định danh tương đối, một phần của SID của người dùng).

Tôi đã viết cấu hình của mình để buộc các hệ thống Debian vào một AD hiện có ở đây - nó sử dụng Puppet, nhưng nếu bạn chỉ đọc qua nó để bắt đầu cấu hình Samba và PAM, thì nó sẽ hoạt động trên mọi hệ thống UNIX có thể so sánh được.

Lưu ý rằng tôi không sử dụng SFU hoặc sửa đổi lược đồ AD theo bất kỳ cách nào. Tất cả những gì tôi muốn là một bộ UID phù hợp cho người dùng của tôi.


Bài đăng này đã đưa tôi đi đúng hướng. Xem bên dưới để biết đầy đủ những gì tôi đã làm.
Bittrance

2

Thành phần NFS của Dịch vụ cho Unix hiện là một phần của vai trò Dịch vụ cho Hệ thống tệp mạng trong Máy chủ 2003 R2 trở lên.

Có một blog tuyệt vời của Microsoft về SFU - http://bloss.msdn.com/b/sfu/ . Mục blog có liên quan giải thích cách thiết lập và bài viết Technet dứt khoát có ở đây .

Bạn có thể sử dụng tiện ích mở rộng lược đồ Quản lý danh tính cho UNIX Active Directory để ánh xạ cho phép các máy khách NFS kết nối với máy chủ của bạn mà không cần phải CIFS trước (nếu chúng có thể CIFS, thì không có ý nghĩa gì với NFS?).


1

Theo đề xuất của Mike Renfro ở trên, idmap_rid là thành phần trung tâm. Dưới đây là danh sách các lệnh shell giúp mở hộp và chạy, được cung cấp một hộp RHEL5.5 mới:

client_packages:

yum -y install samba3x-winbind krb5-workstation nfs-utils portmap pam_krb5
chkconfig --add winbind
chkconfig winbind --level 345 on
chkconfig --add rpcidmapd
chkconfig rpcidmapd --level 345 on
chkconfig --add portmap
chkconfig portmap --level 345 on
chkconfig --add nfslock
chkconfig nfslock --level 345 on

client_setup:

umount /cpy/shared || true
umount /cpy/users || true

install samba-winbind.conf /etc/samba/smb.conf
install krb5.conf /etc/krb5.conf
install idmapd.conf /etc/idmapd.conf

if ! net -S ad.example.com ads testjoin ; then
    net -S ad.example.com ads join -UAdministrator
fi

if ! grep -q winbind /etc/nsswitch.conf ; then
    sed -r  -e 's/^(passwd|shadow|group):.*$/& winbind/g' \
        -e 's/^hosts:.*$/& wins/g' -i /etc/nsswitch.conf
fi

( grep -v '172.18.0.2:' /etc/fstab && cat fstab.nfs-client ) \
    > /tmp/fstab.new && mv /tmp/fstab.new /etc/fstab

service winbind restart
service rpcidmapd restart
install -d /cpy/shared
install -d /cpy/users
mount -a
authconfig --enablewinbind --enablewinbindauth --enablekrb5 --update
echo "Make sure that /etc/hosts has an entry with .example.com"

samba-winbind.conf:

[global]
unix charset = LOCALE
workgroup = EXAMPLE
realm = example.com
security = ADS
log level = 2
syslog = 0
log file = /var/log/samba/%m
max log size = 50
idmap backend = idmap_rid:EXAMPLE=10000-20000
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
template homedir = /cpy/users/%u
winbind separator = +
winbind cache time = 60
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes

krb.conf:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]

 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 PILOTFISH.SE = {
  kdc = ad.example.com
  admin_server = ad.example.com
  default_domain = example.com
 }

[domain_realm]
 .pilotfish.se = EXAMPLE.COM
 pilotfish.se = EXAMPLE.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

idmapd.conf

[General]

Verbosity = 1
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = example.com

[Mapping]

Nobody-User = nfsnobody
Nobody-Group = nfsnobody

[Translation]
Method = nsswitch

fstab.nfs-khách hàng

172.18.0.2:/users       /cpy/users              nfs4    defaults        0 0
172.18.0.2:/shared      /cpy/shared             nfs4    defaults        0 0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.