Làm cách nào để xác thực tài khoản Linux với Active Directory và gắn kết chia sẻ Windows khi đăng nhập?


18

Tôi đang sử dụng máy chủ Ubuntu 10.04.


Điều này nên được đăng như là một câu trả lời cho một câu hỏi. Vui lòng chỉnh sửa nó để nó là một câu hỏi và di chuyển những gì bạn đã đăng ở trên để trở thành một câu trả lời cho nó. Từ Câu hỏi thường gặp : "Việc hỏi và trả lời câu hỏi của bạn cũng hoàn toàn tốt, nhưng giả vờ bạn đang gặp nguy hiểm: diễn đạt nó dưới dạng câu hỏi."
Tạm dừng cho đến khi có thông báo mới.

Câu trả lời:


27

[Chỉnh sửa] Kể từ đó, tôi đã thử nghiệm bản phát hành đầy đủ của Máy chủ Ubuntu 10.04 (21 tháng 5 năm 2010) .

Tôi đã cấu hình Ubuntu 10.04 Server LTS của tôi cư trú trên mạng windows để xác thực đăng nhập bằng thư mục hoạt động, sau đó gắn kết chia sẻ windows để phục vụ như thư mục chính.

Đây là những gì tôi đã làm bắt đầu từ cài đặt ban đầu của Ubuntu.

  1. Tải xuống và cài đặt Ubuntu Server 10.04 LTS
  2. Cập nhật

    # sudo apt-get update && sudo apt-get upgrade

  3. Cài đặt máy chủ SSH ( sshd)

    # sudo apt-get install openssh-server

    Một số người sẽ cho rằng bạn nên "khóa sshd xuống" bằng cách vô hiệu hóa đăng nhập gốc. Tôi nghĩ rằng nếu bạn đủ thông minh để hack phiên ssh cho mật khẩu root, có lẽ bạn sẽ không bị cản trở bởi việc thêm PermitRootLogin novào /etc/ssh/sshd_configtệp. Nếu bạn bị hoang tưởng hay không đơn giản là không bị thuyết phục thì hãy chỉnh sửa tệp hoặc đưa ra một spin sau:

    # (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."

  4. Cài đặt các gói yêu cầu

    # sudo apt-get install winbind samba smbfs smbclient ntp krb5-user

  5. Thực hiện một số cách sắp xếp mạng cơ bản để chuẩn bị cho các cấu hình gói cụ thể sắp tới.

    1. Xác định tên miền windows, tên máy chủ DNS và địa chỉ IP cho máy chủ thư mục hoạt động (đối với samba). Để triệu tập, tôi đặt các biến môi trường cho miền windows và máy chủ DNS. Đối với tôi đó là (địa chỉ IP AD của tôi là 192.168.20.11):

      # WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11

      Nếu bạn muốn tìm hiểu tên miền và máy chủ DNS của bạn là gì (Tôi là nhà thầu và không biết mạng), hãy xem tài liệu tham khảo hữu ích này .

    2. Chúng ta cần đặt tên cho hộp Linux trên mạng mới, điều này được thực hiện bằng cách chỉnh sửa tệp máy chủ (thay thế DNS bằng FQDN của DNS windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Chúng ta cũng nên nói với các dịch vụ được cài đặt sắp tới nơi họ có thể tìm thấy người lãnh đạo: một số mạng sẽ có dịch vụ tra cứu tên netbios, nhưng chỉ trong trường hợp, hãy thêm một mục rõ ràng trong /etc/hoststệp của bạn , trong cấu hình của tôi, tôi đã thêm mục vào thứ ba (3) hàng:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Các quy trình xác thực và chia sẻ tệp cho các hộp Windows và Linux cần phải có đồng hồ của chúng đồng ý. Thực hiện việc này với dịch vụ NTP và trên phiên bản máy chủ của Ubuntu, dịch vụ NTP được cài đặt và định cấu hình với một (1) sever NTP. Thêm của bạn trước Ubuntu một (hoặc thay thế hoàn toàn). Mạng tôi đang tham gia cũng có máy chủ DNS phục vụ dịch vụ NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Khởi động lại trình nền NTP:
      # sudo /etc/init.d/ntp restart

  6. Cấu hình Kerberos.
    Các hướng dẫn tuân theo ở đây không được thực hiện theo nghĩa đen: các giá trị cho MYDOMAIN.LOCALsrv1.mydomain.localcần được thay thế bằng những gì phù hợp với mạng của bạn khi bạn chỉnh sửa các tệp, nhưng lưu ý rằng cần sử dụng UPPERCASE .
    Nếu, trong apt-get installKerberos, bạn có cái nhìn sâu sắc để trả lời chính xác câu hỏi "miền mặc định", thì tốt cho bạn, nếu không bạn sẽ phải làm như sau.

    1. Chỉnh sửa tập tin (đã cài đặt ở trên) /etc/krb5.conf.

      1. Tìm [libdefaults]phần và thay đổi cặp giá trị khóa:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Thêm phần sau vào [realms]phần của tệp:

        MYDOMAIN.LOCAL = {
        kdc = srv1.mydomain.local
        admin_server = srv1.mydomain.local
        default_domain = MYDOMAIN.LOCAL
        }

      3. Thêm phần sau vào [domain_realm]phần của tệp:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Một thử nghiệm thú vị vào thời điểm này là để xem bộ điều khiển AD của bạn có cấp cho bạn vé kerberos hay không. Điều này không cần thiết nhưng nó có thể khiến một số bạn ham chơi:
        # kinit <some_windows_domain_user>
        Sau đó, để xem vé:
        # klist
        Bạn sẽ thấy nội dung về bộ đệm của vé và hết hạn và gia hạn. Khi sự ham chơi lắng xuống, bạn cũng có thể giải phóng / phá hủy vé:
        # kdestroy

  7. Cấu hình samba.
    Theo như sau: Đôi khi CIFS không thể được sử dụng hoặc lựa chọn hệ thống tập tin mạng khác tốt hơn. Nếu cần hỗ trợ xác thực kerberos (krb5 / SPNEGO) để tăng cường bảo mật, thì phải sử dụng smbclient hoặc smbfs của Samba thay cho cifs
    Alas, cifshỗ trợ trong kernel cho ubfox 10.04 (dựa trên phiên bản kernel 2.6.32.9) theo tài liệu kernel, việc triển khai kerberos thử nghiệm đã có từ phiên bản 1.54.
    Vì vậy, có bạn. Tôi không biết liệu cifsnó có hoạt động không nên tôi cung cấp cho bạn cấu hình samba:

    1. Thay thế /etc/samba/smb.conf(hãy nhớ rằng tôi đang làm việc từ một bản phân phối sạch của Ubuntu, vì vậy tôi không lo lắng về việc phá vỡ bất cứ điều gì):
      [global]
      security = ads
      realm = MYDOMAIN.LOCAL
      password server = 192.168.20.11
      workgroup = MYDOMAIN
      idmap uid = 10000-20000
      idmap gid = 10000-20000
      winbind enum users = yes
      winbind enum groups = yes
      template homedir = /home/%U
      template shell = /bin/bash
      client use spnego = yes
      client ntlmv2 auth = yes
      encrypt passwords = yes
      winbind use default domain = yes
      restrict anonymous = 2

    2. Bắt đầu và dừng các dịch vụ khác nhau.

      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  8. Thiết lập xác thực.

    1. Chỉnh sửa /etc/nsswitch.conf. Tôi đã có thể chạy lệnh sau để có được những gì tôi cần:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Dưới đây là nội dung của /etc/nsswitch.conftệp của tôi :
      passwd: compat winbind
      group: compat winbind
      shadow: compat winbind
      hosts: files dns
      networks: files
      protocols: db files
      services: db files
      ethers: db files
      rpc: db files

    2. Bắt đầu và dừng các dịch vụ khác nhau.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Tham gia máy tính vào miền. Tôi không tin điều này là cần thiết; đặc biệt vì tùy chọn bảo mật trong smb.conftệp ( security = ads). Có lẽ ai đó có thể cân nhắc về điều này ...
    # sudo net ads join -U any_domain_user_account
    Bạn có thể gặp lỗi DNS update failed!, nhưng bạn sẽ được tham gia vào miền. Nếu bạn gặp lỗi về việc không thể tìm thấy máy chủ, bản ghi DNS của bạn cần được sửa đổi. Trong quá trình cài đặt Ubuntu, máy chủ tên thường sẽ trỏ đến cổng của bạn: hầu hết các bộ định tuyến sẽ thực hiện dịch vụ DNS. Thực tiễn tốt nhất để quản trị máy chủ windows là ADC cũng nên chạy DNS. Trong trường hợp của tôi, tôi /etc/resolve.conftrông như thế này:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    Đây 8.8.8.8là một DNS của Google, một bản sao lưu khá đáng tin cậy trong trường hợp các cửa sổ bị hỏng.

Tại thời điểm này tôi có thể đăng nhập (có lẽ sau khi khởi động lại), các thư mục chính không tồn tại, nhưng tôi có thể đăng nhập.

  1. CIFS Gắn kết khi đăng nhập
    Bước tiếp theo này là anh đào cho tôi; Tôi không muốn có trách nhiệm sao lưu các thư mục làm việc của mọi người và hộp Ubuntu đang chạy bị nghi ngờ về độ tin cậy. Bằng cách thực hiện những người dùng sau có thể đăng nhập và xem thư mục người dùng windows của họ một cách tự động .

    1. Tải xuống pam_mountmô-đun:
      # sudo apt-get install libpam-mount
      Tôi muốn điểm gắn kết điểm ở /home/<user>vị trí truyền thống : phần này được cấu hình bởi /etc/samba/smb.conftệp ( template homedir = /home/%U). Nhưng tôi cần nó để đi sâu vào chia sẻ và trỏ đến thư mục windows của riêng họ. Điều này được thực hiện bằng cách chỉnh sửa /etc/security/pam_mount.conf.xmltệp (mặc dù có ý định, XML không thể đọc được bằng con người):

    2. Thêm vào sau /etc/security/pam_mount.conf.xmlvà thay đổi cho phù hợp:
      <volume
      user="*"
      server="srv1.mydomain.local"
      path="UserShares"
      mountpoint="home"
      fstype="cifs"
      />

      <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

      Vì điểm gắn kết ngớ ngẩn của tôi, tôi cũng phải thêm dòng này:

      <umount>umount %(MNTPT)/%(USER)</umount>

      Và do đó, các thư mục người dùng (cho điểm gắn kết) sẽ được tạo tự động tìm dòng và làm cho nó thành:

      <mkmountpoint enable="1" remove="false" />

      Các remove="false"bit là khá quan trọng: nếu nó set là true, pam_mount.socố gắng để xóa các thư mục điểm mà nó không thể làm gì nếu người dùng đã đăng nhập nhiều lần gắn kết. Những gì bạn kết thúc trong trường hợp đó là rất nhiều gắn kết đi lạc trên hệ thống của bạn.

      pam_mount.sovẫn không hoàn toàn giao hàng như đã hứa. Ở dạng hiện tại, các giá treo tiếp tục chồng chất và các thư mục chính không được tạo. Ở đâu đó giữa đây và bản phát hành Beta 2 trước đó của máy chủ 10.04, nó đã hoạt động. Tôi không thể tạo lại điều này mặc dù.
      Trong thời gian trung bình cho việc tạo thư mục mà tôi đang dựa vào pam_mkhomedir.sovà bị kẹt một dòng ngay trước pam_mount.sodòng để chứa.
      Tôi vẫn chưa giải quyết được vấn đề gắn kết. Nhưng cho đến khi pam_mount.sođược sửa chữa, đây là những gì tôi đã có trong /etc/pam.d/common-sessiontệp của mình :

      session [default=1]     pam_permit.so  
      session requisite       pam_deny.so  
      session required        pam_permit.so  
      session required        pam_unix.so  
      session optional        pam_winbind.so  
      session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022  
      session optional        pam_mount.so
      

Đó là nó. Nó làm việc cho tôi, và tôi hy vọng bạn thấy nó hữu ích.

Nhiều nguồn tài nguyên đã được xem xét để tôi có thể tìm ra điều này. Dưới đây là một danh sách ngắn (một số các liên kết này trỏ đến câu hỏi của riêng tôi về chủ đề này):


1
Tắt đăng nhập ssh root từ xa là phải. Brute lực lượng / từ điển tấn công đôi khi thành công. Nếu root bị xâm phạm, hãy nói lời tạm biệt với bất cứ điều gì bạn tin tưởng trên máy.
JR Lawhorne

1
Ubuntu không kích hoạt tài khoản root mặc dù ... mọi thứ đều sudod, hoặc tôi đang thiếu thứ gì đó?
Jamie

'mọi thứ là sudo' - Và điều này tốt hơn ... theo cách nào? (Nếu bất kỳ tài khoản người dùng nào có quyền sudo bị xâm phạm, về cơ bản thì điều đó cũng tương tự. đăng nhập dựa trên.)
Kurt Pfeifle

Tôi hiểu điều đó, nhưng hãy xem xét: "Tốt nhất là thiết lập đăng nhập chỉ khóa pub" , điều này sẽ hoàn toàn đánh bại mục đích của bài đăng này.
Jamie

1
bạn cũng có thể sử dụng tài khoản sudoed hoặc root và thay đổi tên của người dùng root để nó không phải là root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData
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.