วิธีการรับรองความถูกต้องของบัญชี Linux กับ Active Directory และติดตั้ง Windows share ไว้ในการเข้าสู่ระบบ


18

ฉันใช้ Ubuntu 10.04 Server


สิ่งนี้ควรถูกโพสต์เป็นคำตอบสำหรับคำถาม โปรดแก้ไขสิ่งนี้เพื่อให้เป็นคำถามและย้ายสิ่งที่คุณโพสต์ด้านบนเพื่อเป็นคำตอบ จากคำถามที่พบบ่อย : "นอกจากนี้ยังเป็นการดีที่จะถามและตอบคำถามของคุณเอง แต่แสร้งทำเป็นว่าคุณกำลังตกอยู่ในอันตราย: วลีในรูปของคำถาม"
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

คำตอบ:


27

[แก้ไข] ผมได้ทดสอบตั้งแต่นี้การเปิดตัวเต็มรูปแบบของUbuntu 10.04 Server (21 / May / 2010)

ฉันกำหนดค่าUbuntu 10.04 Server LTSของฉันที่อยู่บนเครือข่าย windows เพื่อรับรองความถูกต้องเข้าสู่ระบบโดยใช้ไดเรกทอรีที่ใช้งานอยู่จากนั้นติดตั้ง windows ที่ใช้ร่วมกันเพื่อทำหน้าที่เหมือนมีโฮมไดเร็กตอรี่

นี่คือสิ่งที่ฉันเริ่มต้นจากการติดตั้งเริ่มต้นของ Ubuntu

  1. ดาวน์โหลดและติดตั้งUbuntu Server 10.04 LTS
  2. รับการอัพเดท

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

  3. ติดตั้งเซิร์ฟเวอร์ SSH ( sshd)

    # sudo apt-get install openssh-server

    บางคนโต้แย้งว่าคุณควร "ล็อค sshd down" โดยปิดการใช้งานการเข้าสู่ระบบราก ฉันคิดว่าคุณฉลาดพอที่จะแฮ็กเซสชัน ssh สำหรับรหัสผ่านรูทคุณอาจจะไม่ถูกขัดขวางโดยการเพิ่มPermitRootLogin noเข้าไปใน/etc/ssh/sshd_configไฟล์ หากความหวาดระแวงของคุณหรือไม่เพียงไม่เชื่อแล้วแก้ไขไฟล์หรือให้หมุนต่อไปนี้:

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

  4. ติดตั้งแพ็คเกจที่จำเป็น

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

  5. ทำการทำความสะอาดเครือข่ายพื้นฐานบางอย่างเพื่อเตรียมการสำหรับการกำหนดค่าแพคเกจเฉพาะที่จะมาถึง

    1. กำหนดชื่อโดเมน windows, ชื่อเซิร์ฟเวอร์ DNS ของคุณและที่อยู่ IP สำหรับเซิร์ฟเวอร์ไดเรกทอรีที่ใช้งาน (สำหรับ samba) สำหรับ conveniance ฉันตั้งค่าตัวแปรสภาพแวดล้อมสำหรับโดเมน windows และเซิร์ฟเวอร์ DNS สำหรับฉันมันคือ (ที่อยู่ IP โฆษณาของฉันคือ 192.168.20.11):

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

      หากคุณต้องการทราบว่าโดเมนและเซิร์ฟเวอร์ DNS ของคุณคืออะไร (ฉันเป็นผู้รับเหมาและไม่ทราบเครือข่าย) โปรดดูข้อมูลอ้างอิงที่มีประโยชน์นี้

    2. เราจำเป็นต้องสร้างช่องลินุกซ์ในเครือข่ายใหม่ซึ่งทำได้โดยการแก้ไขไฟล์โฮสต์ (แทนที่ DNS ด้วย FQDN ของ windows DNS):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. เราควรบอกบริการที่ติดตั้งแล้วซึ่งพวกเขาสามารถค้นหาผู้นำได้: เครือข่ายบางแห่งจะมีบริการค้นหาชื่อ netbios แต่ในกรณีนี้ให้เพิ่มรายการที่ชัดเจนใน/etc/hostsไฟล์ของคุณในการกำหนดค่าของฉันฉันได้เพิ่มรายการที่สาม (3) ไลน์:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. กระบวนการรับรองความถูกต้องและการแบ่งปันไฟล์สำหรับกล่อง Windows และ Linux จำเป็นต้องมีนาฬิกาของพวกเขาตกลง ทำสิ่งนี้ด้วยบริการ NTP และบน Ubuntu รุ่นเซิร์ฟเวอร์เซิร์ฟเวอร์บริการ NTP จะถูกติดตั้งและกำหนดค่าด้วยNTP หนึ่ง (1) เซิร์ฟเวอร์ เพิ่มของคุณก่อน Ubuntu หนึ่ง (หรือแทนที่ทั้งหมด) เครือข่ายที่ฉันเข้าร่วมมีเซิร์ฟเวอร์ DNS ที่ให้บริการ NTP ด้วย
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      รีสตาร์ท NTP daemon:
      # sudo /etc/init.d/ntp restart

  6. การกำหนดค่า Kerberos
    คำแนะนำที่เป็นไปตามที่นี่ไม่ได้ที่จะนำตัวอักษร: ค่าสำหรับMYDOMAIN.LOCALและsrv1.mydomain.localจำเป็นที่จะต้องถูกแทนที่ด้วยสิ่งที่เหมาะสมสำหรับเครือข่ายของคุณเมื่อคุณแก้ไขไฟล์ แต่ทำที่ทราบว่ามีการใช้ตัวพิมพ์ใหญ่พิมพ์ใหญ่เป็นสิ่งจำเป็น
    หากในระหว่างapt-get installKerberos คุณมีความเข้าใจอย่างถ่องแท้เพื่อตอบคำถาม "โดเมนเริ่มต้น" อย่างถูกต้องแล้วคุณจะต้องทำสิ่งที่ดี

    1. แก้ไข (ติดตั้งก่อนหน้านี้ด้านบน) /etc/krb5.confไฟล์

      1. ค้นหา[libdefaults]ส่วนและเปลี่ยนคู่ค่าคีย์:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. เพิ่มสิ่งต่อไปนี้ใน[realms]ส่วนของไฟล์:

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

      3. เพิ่มสิ่งต่อไปนี้ใน[domain_realm]ส่วนของไฟล์:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. การทดสอบที่ดี ณ จุดนี้คือการดูว่าผู้ควบคุมโฆษณาของคุณจะออกตั๋ว kerberos ให้คุณหรือไม่ สิ่งนี้ไม่จำเป็น แต่สามารถทำให้คุณบางคนหวั่นไหว:
        # kinit <some_windows_domain_user>
        จากนั้นเพื่อดูตั๋ว:
        # klist
        คุณจะเห็นข้อมูลเกี่ยวกับแคชตั๋วและการหมดอายุและการต่ออายุ เมื่อ giddiness ลดลงคุณก็สามารถปล่อย / ทำลายตั๋วได้เช่นกัน:
        # kdestroy

  7. กำหนดค่าแซมบ้า
    มีดังต่อไปนี้: มีบางครั้งที่ CIFS ไม่สามารถใช้หรือตัวเลือกระบบไฟล์เครือข่ายอื่นดีกว่า ถ้าจำเป็นต้องมีการสนับสนุนการพิสูจน์ตัวตน kerberos (krb5 / SPNEGO) เพื่อความปลอดภัยที่เพิ่มขึ้นดังนั้นต้องใช้ smbclient หรือ smbfs ของ Samba แทน cifs
    Alas cifsการสนับสนุนในเคอร์เนลสำหรับ ubuntu 10.04 (ขึ้นอยู่กับรุ่นเคอร์เนล 2.6.32.9) ที่เวอร์ชัน 1.61 และ ตามเอกสารของเคอร์เนลการใช้งาน Kerberos แบบทดลองได้มีมาตั้งแต่รุ่น 1.54
    ดังนั้นคุณจะมี ฉันไม่ทราบว่าcifsจะใช้งานได้หรือเปล่าดังนั้นฉันจึงให้การตั้งค่าแซมบ้าแก่คุณ:

    1. แทนที่/etc/samba/smb.conf(จำได้ว่าฉันทำงานจาก distro ที่สะอาดของ Ubuntu ดังนั้นฉันจึงไม่กังวลเกี่ยวกับการทำลายสิ่งใด):
      [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. เริ่มและหยุดบริการต่าง ๆ

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

  8. ตั้งค่าการรับรองความถูกต้อง

    1. /etc/nsswitch.confแก้ไข ฉันสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อรับสิ่งที่ฉันต้องการ:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      นี่คือเนื้อหาของ/etc/nsswitch.confไฟล์ของฉัน:
      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. เริ่มและหยุดบริการต่าง ๆ
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. เข้าร่วมคอมพิวเตอร์กับโดเมน ฉันไม่เชื่อว่านี่เป็นสิ่งจำเป็น โดยเฉพาะอย่างยิ่งเนื่องจากตัวเลือกความปลอดภัยในsmb.confไฟล์ ( security = ads) บางทีใครบางคนสามารถชั่งน้ำหนักในเรื่องนี้ ...
    # sudo net ads join -U any_domain_user_account
    คุณอาจได้รับข้อผิดพลาดDNS update failed!แต่คุณจะเข้าร่วมกับโดเมน หากคุณได้รับข้อผิดพลาดเกี่ยวกับการหาเซิร์ฟเวอร์ไม่ได้ระเบียน DNS ของคุณจะต้องได้รับการแก้ไข ในระหว่างการติดตั้ง Ubuntu ผู้ใช้งานเซิร์ฟเวอร์มักจะชี้ไปที่เกตเวย์ของคุณ: เราเตอร์ส่วนใหญ่จะใช้บริการ DNS แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการเซิร์ฟเวอร์ windows คือ ADC ควรใช้ DNS เช่นกัน ในกรณีของฉัน/etc/resolve.confหน้าตาของฉัน:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    นี่8.8.8.8คือ google DNS ซึ่งเป็นข้อมูลสำรองที่เชื่อถือได้พอสมควรในกรณีที่หน้าต่างหนึ่งหยุดทำงาน

ณ จุดนี้ฉันสามารถเข้าสู่ระบบ (อาจหลังจากรีบูต) ไดเรกทอรีบ้านไม่อยู่ แต่ฉันสามารถเข้าสู่ระบบ

  1. CIFS การติดตั้งเมื่อเข้าสู่ระบบ
    ขั้นตอนต่อไปนี้เป็นสิ่งสำคัญสำหรับฉัน ฉันไม่ต้องการความรับผิดชอบในการสำรองข้อมูลไดเรกทอรีการทำงานของทุกคนและกล่อง Ubuntu ที่จะใช้งานนั้นเป็นที่น่าสงสัยในแง่ของความน่าเชื่อถือ โดยการทำดังต่อไปนี้ผู้ใช้สามารถเข้าสู่ระบบและดูไดเรกทอรีที่ใช้หน้าต่างของพวกเขาโดยอัตโนมัติ

    1. ดาวน์โหลดpam_mountโมดูล:
      # sudo apt-get install libpam-mount
      ฉันต้องการให้จุดเชื่อมต่ออยู่ในตำแหน่งดั้งเดิม/home/<user>: ส่วนนี้กำหนดค่าโดย/etc/samba/smb.confไฟล์ ( template homedir = /home/%U) แต่ฉันต้องการให้มันเจาะลึกการแชร์และชี้ไปที่ไดเรกทอรี windows ของตัวเอง สิ่งนี้สามารถทำได้โดยการแก้ไข/etc/security/pam_mount.conf.xmlไฟล์ (ซึ่งแม้จะเป็นความตั้งใจ XML ไม่สามารถอ่านได้โดยมนุษย์):

    2. เพิ่มรายการต่อไปนี้/etc/security/pam_mount.conf.xmlและแก้ไขให้เหมาะสม:
      <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>

      เนื่องจากจุดเมานต์ที่โง่ของฉันฉันจึงต้องเพิ่มบรรทัดนี้ด้วย:

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

      และเพื่อให้ไดเรกทอรีผู้ใช้ (สำหรับจุดเชื่อมต่อ) จะถูกสร้างขึ้นโดยอัตโนมัติค้นหาบรรทัดและทำให้มัน:

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

      remove="false"บิตเป็นสิ่งสำคัญมากถ้ามันตั้งค่าเป็นจริงpam_mount.soพยายามที่จะลบไดเรกทอรีจุดที่มันไม่สามารถทำอย่างไรถ้าผู้ใช้มีการบันทึกไว้ในหลายครั้งติด สิ่งที่คุณจะได้รับในกรณีนี้คือการติดตั้งจรจัดบนระบบของคุณ

      pam_mount.soยังไม่ส่งค่อนข้างตามสัญญา ในรูปแบบปัจจุบันเมานท์จะซ้อนขึ้นและโฮมไดเร็กทอรีจะไม่ถูกสร้างขึ้น อยู่ระหว่างที่นี่กับรุ่นเบต้า 2 รุ่นก่อนหน้าของเซิร์ฟเวอร์ 10.04 มันใช้งานได้ ฉันไม่สามารถสร้างมันขึ้นมาใหม่ได้
      ในเวลาเฉลี่ยสำหรับการสร้างไดเรกทอรีที่ฉันต้องพึ่งพาpam_mkhomedir.soและติดบรรทัดไว้ข้างหน้าpam_mount.soบรรทัดเพื่อรองรับ
      ฉันยังไม่ได้แก้ไขปัญหาการเมานต์หลายตัว แต่จนกว่าpam_mount.soจะได้รับการแก้ไขนี่คือสิ่งที่ฉันได้รับใน/etc/pam.d/common-sessionไฟล์ของฉัน:

      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
      

แค่นั้นแหละ. มันใช้งานได้สำหรับฉันและฉันหวังว่าคุณจะพบว่ามีประโยชน์

มีการพิจารณาทรัพยากรมากมายเพื่อที่ฉันจะได้เข้าใจ นี่คือรายการสั้น ๆ (ลิงก์จำนวนหนึ่งชี้ไปที่คำถามของฉันเองในหัวข้อ):


1
การปิดการล็อกอินรูท ssh เป็นสิ่งจำเป็น การโจมตีด้วยกำลัง / พจนานุกรมเดรัจฉานบางครั้งก็ประสบความสำเร็จ หากรูทถูกบุกรุกให้บอกลาทุกสิ่งที่คุณไว้วางใจในเครื่อง
JR Lawhorne

1
อูบุนตูไม่เปิดใช้งานบัญชีรูทแม้ว่า ... ทุกอย่างเป็นsudod หรือฉันขาดอะไรไป?
Jamie

'ทุกอย่างคือsudo' - และนี่จะดีกว่า ... ในวิธีใด? (หากบัญชีผู้ใช้ใด ๆ ที่มีสิทธิ์ในการ sudo ถูกบุกรุกมันเป็นสิ่งเดียวกันและโดยพื้นฐานแล้วมันก็ง่ายพอ ๆ กันที่จะลบล้างบัญชีผู้ใช้ root หรือบัญชีผู้ใช้วิธีที่ดีที่สุดคือการตั้งค่าการเข้าสู่ระบบ pub-key เท่านั้น ตามการเข้าสู่ระบบ)
Kurt Pfeifle

ฉันได้รับที่ แต่พิจารณา: "ที่ดีที่สุดคือการติดตั้งผับที่สำคัญเพียงเข้าสู่ระบบ"ซึ่งจะสิ้นเชิงพ่ายแพ้วัตถุประสงค์ของบทความนี้
เจมี่

1
คุณสามารถใช้บัญชี sudoed หรือรูทและเปลี่ยนชื่อผู้ใช้รูทเพื่อไม่ให้รูทlinuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.