Active Directoryに対してLinuxアカウントを認証し、ログイン時にWindows共有をマウントする方法は?


18

Ubuntu 10.04 Serverを使用しています。


これは質問への回答として投稿されるべきでした。質問になるようにこれを編集し、上記に投稿した内容を移動して回答にしてください。FAQから:「あなた自身の質問をし、答えることはまったく問題ありませんが、あなたはJeopardyにいるふりをします:質問の形でそれを言います。」
追って通知があるまで一時停止します。

回答:


27

[編集] Ubuntu 10.04 Server(2010年5月21日)のフルリリースをテストしました。

Windowsネットワーク上にあるUbuntu 10.04 Server LTSを設定して、アクティブディレクトリを使用してログインを認証し、そこにホームディレクトリとして機能する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

    rootログインを無効にして「sshdをロックダウン」する必要があると主張する人もいます。rootパスワードの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. Active Directoryサーバー(samba用)のWindowsドメイン名、DNSサーバー名、およびIPアドレスを決定します。便宜上、WindowsドメインとDNSサーバーの環境変数を設定します。私にとっては(私のAD IPアドレスは192.168.20.11でした):

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

      ドメインとDNSサーバー(私は請負業者であり、ネットワークを知らなかった)が何かを知りたい場合は、この役立つリファレンスを参照してください

    2. 新しいネットワークでLinuxボックスに名前を付ける必要があります。これは、ホストファイルを編集して行います(DNSをWindows DNSのFQDNに置き換えます)。
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. また、今後のインストールされたサービスにリーダーを見つけることができます:一部のネットワークにはnetbios名前検索サービスがありますが、念のため、/etc/hostsファイルに明示的なエントリを追加します。私の構成では、3番目のエントリを追加しました(3)ライン:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. WindowsおよびLinuxボックスの認証およびファイル共有プロセスでは、クロックを一致させる必要があります。NTPサービスを使用してこれを行います。Ubuntuのサーバーバージョンでは、NTPサービスがインストールされ、1つの NTPサーバーで構成されます。Ubuntuの前に追加します(または完全に置き換えます)。私が参加していたネットワークには、NTPサーバーを提供するDNSサーバーもありました。
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      NTPデーモンを再起動します。
      # sudo /etc/init.d/ntp restart

  6. Kerberos構成。
    値:ここに従う命令は文字通りに解釈されてはならないMYDOMAIN.LOCALsrv1.mydomain.localあなたがファイルを編集するときに、あなたのネットワークに適した何と交換する必要がありますが、大文字が使用されている大文字が必要であることをメモしてください。Kerberosの実行
    中にapt-get install「デフォルトドメイン」の質問に正しく応答する洞察が得られた場合は、それで十分です。それ以外の場合は、以下を実行する必要があります。

    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. この時点での良いテストは、ADコントローラーがkerberosチケットを発行するかどうかを確認することです。これは必ずしも必要ではありませんが、気分を害する可能性があります。
        # kinit <some_windows_domain_user>
        次に、チケットを表示し
        # klist
        ます。チケットのキャッシュ、有効期限、更新に関する情報が表示されます。めまいが収まったら、チケットをリリース/破棄することもできます。
        # kdestroy

  7. sambaを構成します。
    以下によると: CIFSを使用できない場合や、別のネットワークファイルシステムの選択が適している場合があります。セキュリティを強化するためにKerberos(krb5 / SPNEGO)認証サポートが必要な場合は、cifs
    Alasの代わりにSambaのsmbclientまたはsmbfsを使用する必要がありますcifs。ubuntu10.04(カーネルバージョン2.6.32.9に基づく)のサポートはバージョン1.61です。カーネルのドキュメントによると、実験的なkerberosの実装はバージョン1.54からありました。
    あなたはそこにいます。うまくいくかどうかわからないcifsので、sambaの構成を説明します。

    1. 置き換えます/etc/samba/smb.conf(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ようになります:グーグルDNS、1つがダウンした窓の場合ではかなり信頼性の高いバックアップです。
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    8.8.8.8

この時点で(おそらく再起動後に)ログインできましたが、ホームディレクトリは存在しませんでしたが、ログインできました。

  1. ログイン時のCIFSマウント
    この次のステップは、私にとっては桜でした。私は全員の作業ディレクトリをバックアップする責任を望みませんでした。Ubuntuが実行されるはずだったボックスは、信頼性の点で疑わしいものでした。次の操作を行うことにより、ユーザーはログインして、Windowsユーザーディレクトリを自動的に表示できます。

    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"ビットは非常に重要です。これをtrueに設定すると、pam_mount.soディレクトリを削除しようとするには、ユーザーが複数回ログインしている場合、それは行うことができないマウントポイント。その場合、システムにたくさんの浮遊マウントができてしまいます。

      pam_mount.soまだ約束どおりに配信されません。現在の形式では、マウントは山積みになり、ホームディレクトリは作成されません。ここと以前の10.04サーバーのベータ2リリースの間のどこかで、機能していました。ただし、これを再作成することはできません。
      ディレクトリ作成の間に、私はに依存しておりpam_mkhomedir.sopam_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ローホーン

1
しかし、ubuntuはルートアカウントを有効にしません...すべてがsudodですか、何か不足していますか?
ジェイミー

「すべてがsudo -そしてこれはより良い...どのように?(sudoの資格を持つユーザーアカウントが侵害された場合、基本的に同じことです。また、ルートまたはユーザーアカウントをブルートフォースすることも基本的に同じです(またはそうではありません)。ベースのログイン。)
カートPfeifle

私はそれを取得しますが、考慮してください:「ベストはpub-keyのみのログインをセットアップすること、これはこの投稿の目的を完全に無効にするでしょう。
ジェイミー

1
sudoedまたはrootアカウントを使用して、rootでないようにrootユーザーの名前を変更することもできますlinuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.