Как подключиться к портативному компьютеру с Ubuntu 17.04 для домена Windows, я ищу самый простой способ, поскольку у меня ограниченные знания Ubuntu. Мы рассматриваем это как альтернативу окнам для наших настольных компьютеров. то, что мне нужно, - это руководство (скриншоты были бы полезны), поскольку у меня есть 30 ноутбуков для настройки, а затем 30 рабочих станций плюс IT-апартаменты, если ноутбуки работают успешно.
Как вы упомянули, чтобы интегрировать большое количество хостов, я бы рекомендовал вам использовать какой-то инструмент управления конфигурацией. Я использую Ansible для таких вещей. Попробуйте это вручную один раз, и когда все будет автоматизировать его.
Как вы также упомянули, чтобы сделать это в корпоративной среде, я бы предложил использовать Ubuntu 16.04 вместо 17.04, потому что 17.04 не является долговременной версией поддержки и, следовательно, является только поддерживаемый до января 2018 г.
Кроме того, этот вопрос хорошо подходит для Ansible .
Хорошей отправной точкой было бы официальная документация: https://help.ubuntu.com/lts/serverguide/sssd-ad.html. Я также нашел, что этот учебник весьма полезен (и у него много скриншотов): http://www.wolffhaven45.com/blog/linux/join_ubuntu_workstation_windows_domain/.
Основываясь на упомянутых How-Tos (и многих других), я создал файл https://help.ubuntu.com/lts/serverguide/sssd-ad.html для автоматизации этого процесса. Структура каталогов выглядит следующим образом:
ansible/
├── adIntegration.yaml
└── roles
└── ad-integration
├── handlers
│ └── main.yaml
├── tasks
│ └── main.yaml
└── templates
├── etc
│ ├── krb5.conf.jinja2
│ ├── realmd.conf.jinja2
│ └── sssd
│ └── sssd.conf.jinja2
└── usr
└── share
└── lightdm
└── lightdm.conf.d
└── 50-ubuntu.conf.jinja2
(мне нравится помещать файлы в структуру каталогов, которые напоминают целевую структуру)
Некоторые файлы ниже, адаптируются к вашим потребностям :
adintegration.yaml
---
# execute like:
# ansible-playbook ~/ansible/adIntegration.yaml --inventory ~/ansible/production.hosts
# or
# ansible-playbook ~/ansible/adIntegration.yaml -i ~/ansible/production.hosts
- hosts: "ad-integration"
remote_user: "admin" # change to whatever user you have with sudo rights
become: yes
vars_prompt: # the vars are later used for the join
- name: "ad_admin_name"
prompt: "username for AD join"
private: no
- name: "ad_admin_password"
prompt: "password for AD"
private: yes
confirm: yes
roles:
- role: "ad-integration"
...
main.yaml (обработчики)
---
- name: "restart sssd"
service:
name: "sssd"
state: "restarted"
listen: "sssd needs restart"
...
main.yaml (задачи)
---
- name: "install needed packages"
apt:
name: "{{ item }}"
state: "present"
with_items:
- "adcli"
- "krb5-user"
- "libnss-sss"
- "libpam-sss"
- "libwbclient-sssd"
- "realmd"
- "sssd"
- "sssd-tools"
- "samba-common"
# copy this from a working one
- name: "template krb5.conf"
template:
src: "etc/krb5.conf.jinja2"
dest: "/etc/krb5.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
- name: "template realmd.conf"
template:
src: "etc/realmd.conf.jinja2"
dest: "/etc/realmd.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
- name: "join domain"
shell: "echo '{{ ad_admin_password }}' | realm join COMPANY.COM -U '{{ ad_admin_name }}' --install=/ -v" # --install=/ needed because of realm bug in package detection
register: "realm_join"
changed_when: "'Successfully enrolled machine in realm' in realm_join.stderr"
failed_when: "'Couldn\\'t join realm' in realm_join.stderr"
- name: "template sssd.conf"
template:
src: "etc/sssd/sssd.conf.jinja2"
dest: "/etc/sssd/sssd.conf"
owner: "root"
group: "root"
mode: "0600"
backup: yes
notify: "sssd needs restart"
- name: "activate automatic creation of home directories"
lineinfile:
dest: "/etc/pam.d/common-session"
line: "session optional pam_mkhomedir.so "
state: "present"
insertbefore: "# end of pam-auth-update config"
backup: yes
- name: "create lightdm directories"
file:
path: "/usr/share/lightdm/lightdm.conf.d/"
state: "directory"
owner: "root"
group: "root"
mode: "0755"
# the important part here is to add greeter-show-manual-login=true under [SeatDefaults]
- name: "activate username on login window"
template:
src: "usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf.jinja2"
dest: "/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
...
realmd.conf.jinja2
[active-directory]
default-client = sssd
os-name = {{ ansible_distribution }}
os-version = {{ ansible_distribution_version }}
[service]
automatic-install = no
[users]
default-home = /home/%D/%U
default-shell = /bin/bash
[company.com]
fully-qualified-names = no
automatic-id-mapping = yes
user-principal = yes
manage-system = no
enumerate = yes
sssd.conf.jinja2
[sssd]
domains = company.com
config_file_version = 2
services = nss, pam
[domain/company.com]
realmd_tags = manages-system joined-with-adcli
ad_domain = company.com
krb5_realm = COMPANY.COM
id_provider = ad
cache_credentials = True
krb5_store_password_if_offline = True
enumerate = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
default_shell = /bin/bash
# maybe needed for older AD schemes
#ldap_id_mapping = False
#ldap_schema = ad
#ldap_user_object_class = person
#ldap_user_name = msSFU30Name
#ldap_user_uid_number = msSFU30UidNumber
#ldap_user_gid_number = msSFU30GidNumber
#ldap_user_home_directory = msSFU30HomeDirectory
#ldap_user_shell = msSFU30LoginShell
#ldap_user_gecos = displayName
#ldap_group_object_class = group
#ldap_group_name = msSFU30Name
#ldap_group_gid_number = msSFU30GidNumber
Как вы упомянули, чтобы интегрировать большое количество хостов, я бы рекомендовал вам использовать какой-то инструмент управления конфигурацией. Я использую Ansible для таких вещей. Попробуйте это вручную один раз, и когда все будет автоматизировать его.
Как вы также упомянули, чтобы сделать это в корпоративной среде, я бы предложил использовать Ubuntu 16.04 вместо 17.04, потому что 17.04 не является долговременной версией поддержки и, следовательно, является только поддерживаемый до января 2018 г.
Кроме того, этот вопрос хорошо подходит для Ansible .
Хорошей отправной точкой было бы официальная документация: https://help.ubuntu.com/lts/serverguide/sssd-ad.html. Я также нашел, что этот учебник весьма полезен (и у него много скриншотов): http://www.wolffhaven45.com/blog/linux/join_ubuntu_workstation_windows_domain/.
Основываясь на упомянутых How-Tos (и многих других), я создал файл https://help.ubuntu.com/lts/serverguide/sssd-ad.html для автоматизации этого процесса. Структура каталогов выглядит следующим образом:
ansible/
├── adIntegration.yaml
└── roles
└── ad-integration
├── handlers
│ └── main.yaml
├── tasks
│ └── main.yaml
└── templates
├── etc
│ ├── krb5.conf.jinja2
│ ├── realmd.conf.jinja2
│ └── sssd
│ └── sssd.conf.jinja2
└── usr
└── share
└── lightdm
└── lightdm.conf.d
└── 50-ubuntu.conf.jinja2
(мне нравится помещать файлы в структуру каталогов, которые напоминают целевую структуру)
Некоторые файлы ниже, адаптируются к вашим потребностям :
adintegration.yaml
---
# execute like:
# ansible-playbook ~/ansible/adIntegration.yaml --inventory ~/ansible/production.hosts
# or
# ansible-playbook ~/ansible/adIntegration.yaml -i ~/ansible/production.hosts
- hosts: "ad-integration"
remote_user: "admin" # change to whatever user you have with sudo rights
become: yes
vars_prompt: # the vars are later used for the join
- name: "ad_admin_name"
prompt: "username for AD join"
private: no
- name: "ad_admin_password"
prompt: "password for AD"
private: yes
confirm: yes
roles:
- role: "ad-integration"
...
main.yaml (обработчики)
---
- name: "restart sssd"
service:
name: "sssd"
state: "restarted"
listen: "sssd needs restart"
...
main.yaml (задачи)
---
- name: "install needed packages"
apt:
name: "{{ item }}"
state: "present"
with_items:
- "adcli"
- "krb5-user"
- "libnss-sss"
- "libpam-sss"
- "libwbclient-sssd"
- "realmd"
- "sssd"
- "sssd-tools"
- "samba-common"
# copy this from a working one
- name: "template krb5.conf"
template:
src: "etc/krb5.conf.jinja2"
dest: "/etc/krb5.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
- name: "template realmd.conf"
template:
src: "etc/realmd.conf.jinja2"
dest: "/etc/realmd.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
- name: "join domain"
shell: "echo '{{ ad_admin_password }}' | realm join COMPANY.COM -U '{{ ad_admin_name }}' --install=/ -v" # --install=/ needed because of realm bug in package detection
register: "realm_join"
changed_when: "'Successfully enrolled machine in realm' in realm_join.stderr"
failed_when: "'Couldn\\'t join realm' in realm_join.stderr"
- name: "template sssd.conf"
template:
src: "etc/sssd/sssd.conf.jinja2"
dest: "/etc/sssd/sssd.conf"
owner: "root"
group: "root"
mode: "0600"
backup: yes
notify: "sssd needs restart"
- name: "activate automatic creation of home directories"
lineinfile:
dest: "/etc/pam.d/common-session"
line: "session optional pam_mkhomedir.so "
state: "present"
insertbefore: "# end of pam-auth-update config"
backup: yes
- name: "create lightdm directories"
file:
path: "/usr/share/lightdm/lightdm.conf.d/"
state: "directory"
owner: "root"
group: "root"
mode: "0755"
# the important part here is to add greeter-show-manual-login=true under [SeatDefaults]
- name: "activate username on login window"
template:
src: "usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf.jinja2"
dest: "/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf"
owner: "root"
group: "root"
mode: "0644"
backup: yes
...
realmd.conf.jinja2
[active-directory]
default-client = sssd
os-name = {{ ansible_distribution }}
os-version = {{ ansible_distribution_version }}
[service]
automatic-install = no
[users]
default-home = /home/%D/%U
default-shell = /bin/bash
[company.com]
fully-qualified-names = no
automatic-id-mapping = yes
user-principal = yes
manage-system = no
enumerate = yes
sssd.conf.jinja2
[sssd]
domains = company.com
config_file_version = 2
services = nss, pam
[domain/company.com]
realmd_tags = manages-system joined-with-adcli
ad_domain = company.com
krb5_realm = COMPANY.COM
id_provider = ad
cache_credentials = True
krb5_store_password_if_offline = True
enumerate = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
default_shell = /bin/bash
# maybe needed for older AD schemes
#ldap_id_mapping = False
#ldap_schema = ad
#ldap_user_object_class = person
#ldap_user_name = msSFU30Name
#ldap_user_uid_number = msSFU30UidNumber
#ldap_user_gid_number = msSFU30GidNumber
#ldap_user_home_directory = msSFU30HomeDirectory
#ldap_user_shell = msSFU30LoginShell
#ldap_user_gecos = displayName
#ldap_group_object_class = group
#ldap_group_name = msSFU30Name
#ldap_group_gid_number = msSFU30GidNumber