web-dev-qa-db-ja.com

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

Ubuntu 10.04サーバーを使用しています。

18
Jamie

[編集]私はこれからUbuntu 10.04 Server(21/May/2010)の完全なリリースをテストしてきました。

私はUbuntu 10.04 Server LTSを構成して、Active Directoryを使用してログインを認証し、Windows共有をマウントしてホームとして機能させるディレクトリ。

これは、Ubuntuの初期インストールから始めたものです。

  1. ダウンロードしてインストール buntu 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. Windowsドメイン名、DNSサーバー名、およびActive Directoryサーバー(Samba用)のIPアドレスを決定します。便宜上、WindowsドメインとDNSサーバーの環境変数を設定しました。私にとっては(私のADのIPアドレスは192.168.20.11でした):

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

      ドメインとDNSサーバーが何であるかを知りたい場合(私は請負業者であり、ネットワークを知りませんでした)、この役立つ 参照 を確認してください。

    2. 新しいネットワークでLinuxボックスに名前を付ける必要があります。これは、Hostファイルを編集して行います(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サービスがインストールされ、one(1)NTP=切断。Ubuntuの前に追加します(または完全に置き換えます)。私が参加していたネットワークでは、DNSサーバーがNTPサービスも。
      # Sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      NTPデーモンを再起動します:
      _# Sudo /etc/init.d/ntp restart_

  6. Kerberos構成。
    以下の説明は文字どおりに行われるものではありません。_MYDOMAIN.LOCAL_および_srv1.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)認証サポートが必要な場合は、Sambaのsmbclientまたはsmbfsをcifsの代わりに使用する必要があります
    残念ながら、ubuntu 10.04のカーネルでのcifsサポート(カーネルバージョン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_は次のようになります。
    _nameserver 192.168.20.11_
    _nameserver 8.8.8.8_
    _8.8.8.8_はGoogle DNSであり、ウィンドウがダウンした場合のかなり信頼できるバックアップです。

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

  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.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
      _

それでおしまい。それは私にとってはうまくいきました、そしてあなたがそれが役に立つことを望んでいます。

多くのリソースが考慮されたので、これを理解することができました。以下に短いリストを示します(これらのリンクの多くは、トピックに関する自分自身の質問を指します)。

27
Jamie