Bagaimana cara mengotentikasi akun Linux terhadap Active Directory dan me-mount share Windows saat login?

18

Saya menggunakan Ubuntu 10.04 Server.

Jamie
sumber
Ini seharusnya diposting sebagai jawaban atas pertanyaan. Harap edit ini jadi pertanyaan dan pindahkan apa yang Anda poskan di atas untuk menjawabnya. Dari FAQ : "Bertanya dan menjawab pertanyaan Anda sendiri juga baik-baik saja, tetapi berpura-puralah Anda menggunakan Jeopardy: ungkapkan dalam bentuk pertanyaan."
Dijeda sampai pemberitahuan lebih lanjut.

Jawaban:

27

[Sunting] Saya telah menguji ini rilis penuh Ubuntu 10.04 Server (21 / Mei / 2010) .

Saya telah mengkonfigurasi Ubuntu 10.04 Server LTS saya yang berada di jaringan windows untuk mengautentikasi login menggunakan direktori aktif, kemudian me-mount share windows untuk dijadikan direktori home yang ada.

Inilah yang saya lakukan mulai dari instalasi awal Ubuntu.

  1. Unduh dan instal Ubuntu Server 10.04 LTS
  2. Dapatkan pembaruan

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

  3. Instal server SSH ( sshd)

    # sudo apt-get install openssh-server

    Beberapa orang berpendapat bahwa Anda harus "mengunci sshd" dengan menonaktifkan login root. Saya pikir jika Anda cukup pintar untuk meretas sesi ssh untuk kata sandi root, Anda mungkin tidak akan digagalkan oleh penambahan PermitRootLogin nodalam /etc/ssh/sshd_configfile. Jika paranoid Anda atau tidak hanya tidak yakin maka edit file atau beri putaran berikut:

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

  4. Instal paket yang diperlukan

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

  5. Lakukan pembersihan jaringan dasar sebagai persiapan untuk konfigurasi paket spesifik yang akan datang.

    1. Tentukan nama domain windows Anda, nama server DNS, dan alamat IP untuk server direktori aktif (untuk samba). Untuk penyelenggaraan, saya menetapkan variabel lingkungan untuk domain windows dan server DNS. Bagi saya itu (alamat IP AD saya adalah 192.168.20.11):

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

      Jika Anda ingin mengetahui domain dan server DNS Anda (saya adalah kontraktor dan tidak tahu jaringannya), periksa referensi yang bermanfaat ini .

    2. Kita perlu membaptis kotak Linux pada jaringan baru, ini dilakukan dengan mengedit file host (ganti DNS dengan FQDN dari DNS windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Kami juga harus memberi tahu layanan terinstal yang akan datang di mana mereka dapat menemukan pemimpin di sana: beberapa jaringan akan memiliki layanan pencarian nama netbios, tetapi untuk berjaga-jaga, tambahkan entri eksplisit dalam /etc/hostsfile Anda , dalam konfigurasi saya, saya menambahkan entri pada ketiga (3) baris:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Otentikasi dan proses berbagi file untuk kotak Windows dan Linux harus disetujui jamnya. Lakukan ini dengan layanan NTP, dan pada versi server Ubuntu, layanan NTP diinstal dan dikonfigurasi dengan satu (1) NTP sever. Tambahkan milik Anda sebelum Ubuntu (atau ganti seluruhnya). Jaringan saya bergabung memiliki server DNS yang melayani layanan NTP juga.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Mulai ulang daemon NTP:
      # sudo /etc/init.d/ntp restart

  6. Konfigurasi Kerberos.
    Instruksi yang mengikuti di sini tidak harus dipahami secara harfiah: nilai-nilai untuk MYDOMAIN.LOCALdan srv1.mydomain.localperlu diganti dengan apa yang sesuai untuk jaringan Anda ketika Anda mengedit file, tetapi perlu dicatat bahwa di mana UPPERCASE digunakan UPPERCASE diperlukan .
    Jika, selama apt-get installKerberos Anda memiliki wawasan untuk menanggapi pertanyaan "domain default" dengan benar, maka, baik bagi Anda, jika tidak, Anda harus melakukan yang berikut.

    1. Edit file (yang sebelumnya diinstal di atas) /etc/krb5.conf.

      1. Temukan [libdefaults]bagian dan ubah pasangan nilai kunci:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Tambahkan berikut ini ke [realms]bagian file:

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

      3. Tambahkan berikut ini ke [domain_realm]bagian file:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Tes yang bagus pada saat ini adalah untuk melihat apakah controller AD Anda akan mengeluarkan Anda tiket kerberos. Ini tidak perlu tetapi bisa membuat sebagian dari Anda pusing:
        # kinit <some_windows_domain_user>
        Kemudian untuk melihat tiket:
        # klist
        Anda akan melihat hal-hal tentang cache tiket dan expiries dan pembaruan. Setelah pusing reda, Anda juga dapat melepaskan / menghancurkan tiket:
        # kdestroy

  7. Konfigurasikan samba.
    Menurut yang berikut: Ada kalanya CIFS tidak dapat digunakan atau pilihan sistem file jaringan lainnya lebih baik. Jika dukungan otentikasi kerberos (krb5 / SPNEGO) diperlukan untuk keamanan tambahan, maka smbclient atau smbfs Samba harus digunakan sebagai pengganti cifs
    Alas, cifsdukungan di kernel untuk ubuntu 10.04 (berdasarkan kernel versi 2.6.32.9) ada di versi 1.61, dan menurut dokumentasi kernel, implementasi kerberos eksperimental telah ada sejak versi 1.54.
    Jadi begitulah. Saya tidak tahu apakah cifsakan berhasil, jadi saya memberikan Anda konfigurasi samba:

    1. Ganti /etc/samba/smb.conf(ingat saya bekerja dari distro bersih Ubuntu, jadi saya tidak khawatir akan merusak apa pun):
      [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. Mulai dan hentikan berbagai layanan.

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

  8. Siapkan otentikasi.

    1. Edit /etc/nsswitch.conf. Saya dapat menjalankan perintah berikut untuk mendapatkan apa yang saya butuhkan:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Berikut adalah isi /etc/nsswitch.conffile saya :
      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. Mulai dan hentikan berbagai layanan.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Bergabunglah dengan komputer ke domain. Saya tidak yakin ini perlu; terutama karena opsi keamanan dalam smb.conffile ( security = ads). Mungkin seseorang dapat mempertimbangkan ini ...
    # sudo net ads join -U any_domain_user_account
    Anda mungkin mendapatkan kesalahan DNS update failed!, tetapi Anda akan bergabung ke domain. Jika Anda mendapatkan kesalahan tentang tidak dapat menemukan server, catatan DNS Anda perlu dimodifikasi. Selama instalasi Ubuntu, server nama akan sering mengarah ke gateway Anda: sebagian besar router akan melakukan layanan DNS. Praktik terbaik untuk administrasi server windows adalah ADC harus menjalankan DNS juga. Dalam kasus saya, /etc/resolve.conftampilannya seperti ini:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    Ini 8.8.8.8adalah google DNS, cadangan yang cukup andal jika windowsnya rusak.

Pada titik ini saya bisa masuk (mungkin setelah reboot), direktori home tidak ada, tetapi saya bisa masuk.

  1. CIFS Pemasangan pada Login
    Langkah selanjutnya ini adalah ceri bagi saya; Saya tidak ingin tanggung jawab mencadangkan direktori kerja semua orang, dan kotak yang akan dijalankan Ubuntu dicurigai dalam hal keandalan. Dengan melakukan hal berikut, pengguna dapat masuk dan melihat direktori pengguna windows mereka secara otomatis .

    1. Unduh pam_mountmodul:
      # sudo apt-get install libpam-mount
      Saya ingin titik mount ke titik berada di /home/<user>lokasi tradisional : bagian ini dikonfigurasi oleh /etc/samba/smb.conffile ( template homedir = /home/%U). Tetapi saya membutuhkannya untuk menelusuri share dan menunjuk ke direktori windows mereka sendiri. Ini dilakukan dengan mengedit /etc/security/pam_mount.conf.xmlfile (yang meskipun memiliki niat, XML tidak dapat dibaca manusia):

    2. Tambahkan yang berikut ke /etc/security/pam_mount.conf.xmldan ubah sesuai:
      <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>

      Karena titik mount konyol saya, saya harus menambahkan baris ini juga:

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

      Dan sehingga direktori pengguna (untuk titik mount) akan dibuat secara otomatis menemukan baris dan membuatnya jadi:

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

      The remove="false"bit cukup penting: jika set itu untuk benar, pam_mount.somencoba untuk menghapus direktori mount point yang tidak bisa dilakukan jika pengguna telah login beberapa kali. Apa yang akhirnya Anda temukan dalam kasus ini adalah banyak mount liar pada sistem Anda.

      pam_mount.somasih belum cukup memenuhi yang dijanjikan. Dalam bentuk saat ini mount terus menumpuk dan direktori home tidak dibuat. Di suatu tempat antara sini dan rilis Beta 2 sebelumnya dari server 10,04, itu berfungsi. Saya tidak bisa membuat ulang ini.
      Sementara itu untuk pembuatan direktori saya mengandalkan pam_mkhomedir.so, dan terjebak garis tepat sebelum pam_mount.sobaris untuk mengakomodasi.
      Saya masih belum menyelesaikan beberapa masalah pemasangan. Tetapi sampai pam_mount.sodiperbaiki, inilah yang saya miliki di /etc/pam.d/common-sessionfile saya :

      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
      

Itu dia. Itu bekerja untuk saya, dan saya harap Anda merasa berguna.

Banyak sumber daya dipertimbangkan sehingga saya bisa mengetahuinya. Berikut adalah daftar singkat (sejumlah tautan ini mengarah ke pertanyaan saya sendiri tentang topik ini):

Jamie
sumber
1
Mematikan login ssh root jarak jauh adalah suatu keharusan. Serangan brutal / kamus terkadang berhasil. Jika root terganggu, ucapkan selamat tinggal pada apa pun yang Anda percayai di mesin.
JR Lawhorne
1
ubuntu tidak mengaktifkan akun root meskipun ... semuanya sudod, atau saya kehilangan sesuatu?
Jamie
'semuanya adalah sudo' - Dan ini lebih baik ... dalam hal apa? (Jika ada akun pengguna yang berhak untuk sudo dikompromikan, pada dasarnya hal yang sama. Dan pada dasarnya sama sederhana [atau tidak] untuk bruteforce root atau akun pengguna. Yang terbaik adalah mengatur login dengan kunci pub-key saja, dan nonaktifkan semua kata sandi- login berbasis.)
Kurt Pfeifle
Saya mengerti, tetapi pertimbangkan: "Yang terbaik adalah mengatur login khusus kunci-pub" , yang sepenuhnya akan mengalahkan tujuan dari posting ini.
Jamie
1
Anda juga dapat menggunakan sudoed atau root akun dan mengubah nama pengguna root sehingga bukan root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData