[Sysadmins] Политика управления ярлычками в Samba AD
Evgeny Sinelnikov
sin на altlinux.org
Вс Авг 15 18:46:31 MSK 2021
Добрый день,
в продолжении обсуждения задачи "организация автоматически
подключаемой папки пользователя домена" хочу дать дополнительные
пояснения и сообщить новости по отношению к предыдущему обсуждению:
https://lists.altlinux.org/pipermail/sysadmins/2021-July/038358.html
Кратко. Если для решения задачи подключения сетевых каталогов не
требуется явное монтирование через cifs, а достаточно доступа по
UNC-путям (в linux по протоколу smb:// доступно в любом, практически,
файловом менеджере), то достаточно раскидать каждому пользователю свой
ярлычок со ссылкой на сетевой каталог в формате:
smb://ИМЯ_СЕРВЕРА/ИМЯ_ШАРЫ/ПУТЬ_ШАРЕ.
Строго говоря, управление ярлычками называется не политикой, а
предпочтением (или Настройкой в русском переводе утилиты
редактирования шаблона групповой политики в RSAT), поскольку,
по-первых, такие изменения в конфигурации невозможно откатить (они как
татуировки - несмываемые), а во-вторых - потому что такие изменения
невозможно запретить изменять. Ну, можно как-то на уровне файлового
доступа что-то накрутить, конечно. Но не для всех задач это подходит.
Итого, в качестве решения для раскидывания каждому пользователю
"своего" ярлычка с именем пользователя в качестве имени шары
(домашнего каталога на файловом сервере samba), я предлагал
использовать групповые политики в ALT (пакет alterator-gpupdate для
поддержки на клиентах) со ссылкой для ярлычок в формате (см.
https://drive.google.com/uc?export=view&id=1eeBu49ju9Le1XeIrrtWFrZxBgSjvj6fk):
smb://SAMBA_SERVER/%LogonUser%
Данное решение в тот момент требовало доработки нашего инструмента
применения групповых политик. Хочу сообщить, что необходимая доработка
была успешно внесена в релизе gpupdate-0.9.2, пересобрана и включена в
бранч p9:
- https://github.com/altlinux/gpupdate/releases/tag/0.9.2-alt1
- http://git.altlinux.org/gears/g/gpupdate.git
Детали по поводу управления ярлыками через групповые политики можно
уточнить у нас на wiki:
https://www.altlinux.org/Групповые_политики/Управление_ярлыками
В качестве примера нас на wiki приводится пример машинной политики для
создания ярлыка:
{GUID GPT}/Machine/Preferences/Shortcuts/Shortcuts.xml
Приведу другой похожий пример, которым можно воспользоваться даже не
разворачивая RSAT под Windows, чтобы попробовать:
<?xml version="1.0" encoding="utf-8"?>
<Shortcuts
clsid="{872ECB34-B2EC-401b-A585-D32574AA90EE}">
<Shortcut clsid="{4F2F7C55-2790-433e-8127-0739D1CFA327}"
userContext="1"
name="Точка SSH"
status="Точка SSH"
image="1"
changed="2021-08-03 16:35:50"
uid="{033064C7-140C-4371-9709-2089D718A196}">
<Properties pidl=""
targetType="FILESYSTEM"
action="R"
comment=""
shortcutKey="0"
startIn=""
arguments=""
iconIndex="0"
targetPath="%HOME%/.ssh"
iconPath="ssh"
window=""
shortcutPath="%DesktopDir%\Точка SSH"/>
</Shortcut>
</Shortcuts>
В новом релизе была внесена доработка, позволяющая раскрывать
подстановки не только для файла самого ярлыка (shortcutPath), но и для
пути, на который он ссылается (targetPath).
Таким образом, для рассматриваемой задачи следует создать
пользовательскую политику:
{GPT}/User/Preferences/Shortcuts/Shortcuts.xml
где следует указать
shortcutPath="%DesktopDir%\Документы на сервере"
и targetPath="smb://server.my.domain/%LogonUser%"
при этом на samba сервере должна быть включена шара [homes], а
пользователь должен, например, хотя бы раз залогинится, чтобы у него
существовал домашний каталог на samba-сервере. Можно этот каталог
создать вручную админом, задав ему владельца и группу.
Создаём объект групповой политики.
# kinit DOMAIN_ADMIN
# samba-tool gpo create "Home shares on server policy" -k yes
Using temporary directory /tmp/.private/root/tmpjreop66v (use --tmpdir
to change)
Password for [administrator на DOMAIN.ALT]:
GPO 'Home shares on server policy' created as
{06975BC5-8858-44B0-934C-10D550877476}
Проверяем, создался ли к нему каталог с шаблоном групповой политики (GPT):
# ls -t /var/lib/samba/sysvol/*/Policies | head -1
{06975BC5-8858-44B0-934C-10D550877476}
Важно помнить про то, что расширенные права на файлы в каталоге GPT
имеют существенное значение для целостности инфраструктуры. Как
минимум для того, чтобы компьютеры могли получить доступ к
соответствующим файлам в сетевом каталоге SysVol.
# getfacl /var/lib/samba/sysvol/*/Policies/{06975BC5-8858-44B0-934C-10D550877476}
getfacl: Removing leading '/' from absolute path names
# file: var/lib/samba/sysvol/domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476}
# owner: DOMAIN\\domain\040admins
# group: DOMAIN\\domain\040admins
user::rwx
user:NT\040AUTHORITY\\system:rwx
user:NT\040AUTHORITY\\authenticated\040users:r-x
user:DOMAIN\\enterprise\040admins:rwx
user:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x
group::rwx
group:NT\040AUTHORITY\\system:rwx
group:NT\040AUTHORITY\\authenticated\040users:r-x
group:DOMAIN\\domain\040admins:rwx
group:DOMAIN\\enterprise\040admins:rwx
group:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x
mask::rwx
other::---
default:user::rwx
default:user:NT\040AUTHORITY\\system:rwx
default:user:NT\040AUTHORITY\\authenticated\040users:r-x
default:user:DOMAIN\\domain\040admins:rwx
default:user:DOMAIN\\enterprise\040admins:rwx
default:user:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x
default:group::---
default:group:NT\040AUTHORITY\\system:rwx
default:group:NT\040AUTHORITY\\authenticated\040users:r-x
default:group:DOMAIN\\domain\040admins:rwx
default:group:DOMAIN\\enterprise\040admins:rwx
default:group:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x
default:mask::rwx
default:other::---
# smbcacls //dc0/sysvol
domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476} -k yes
REVISION:1
CONTROL:SR|PD|DP
OWNER:DOMAIN\Domain Admins
GROUP:DOMAIN\Domain Admins
ACL:DOMAIN\Domain Admins:ALLOWED/OI|CI/FULL
ACL:DOMAIN\Enterprise Admins:ALLOWED/OI|CI/FULL
ACL:CREATOR OWNER:ALLOWED/OI|CI|IO/FULL
ACL:DOMAIN\Domain Admins:ALLOWED/OI|CI/FULL
ACL:NT AUTHORITY\SYSTEM:ALLOWED/OI|CI/FULL
ACL:NT AUTHORITY\Authenticated Users:ALLOWED/OI|CI/READ
ACL:NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS:ALLOWED/OI|CI/READ
Создаём каталог с политикой для ярлычков:
# mkdir -p /var/lib/samba/sysvol/domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts
Создаём файл с предпочтением:
# cat >/var/lib/samba/sysvol/domain.alt/Policies/\{06975BC5-8858-44B0-934C-10D550877476\}/User/Preferences/Shortcuts/Shortcuts.xml
<?xml version="1.0" encoding="utf-8"?>
<Shortcuts clsid="{872ECB34-B2EC-401b-A585-D32574AA90EE}">
<Shortcut clsid="{4F2F7C55-2790-433e-8127-0739D1CFA327}"
userContext="1"
name="Домашний на сервере"
status="Домашний на сервере"
image="1"
changed="2021-08-15 18:00:00"
uid="{033064C7-140C-4371-9709-2089D718A196}">
<Properties pidl=""
targetType="FILESYSTEM"
action="R"
comment=""
shortcutKey="0"
startIn=""
arguments=""
iconIndex="0"
targetPath="smb://SERVER/%LogonUser%"
iconPath="ssh"
window=""
shortcutPath="%DesktopDir%\Домашний на сервере"/>
</Shortcut>
</Shortcuts>
Назначаем политику одному из подразделений
# samba-tool ou list
OU=desktop
OU=orgTest
OU=gsettings
OU=Deny Login
OU=Allow Login
OU=Win Department
OU=Allow/Deny Login
OU=Domain Controllers
# samba-tool gpo setlink OU=gsettings,DC=domain,DC=alt
{06975BC5-8858-44B0-934C-10D550877476} -k yes
Added/Updated GPO link
GPO(s) linked to DN OU=gsettings,DC=domain,DC=alt
GPO : {06975BC5-8858-44B0-934C-10D550877476}
Name : Home shares on server policy
Options : NONE
В некоторых ситуациях может потребоваться проверить и сбросить права на файлы:
# getfacl /var/lib/samba/sysvol/*/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts/Shortcuts.xml
# smbcacls //dc0/sysvol
domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts/Shortcuts.xml
-k yes
# samba-tool ntacl sysvolreset
Мне не потребовалось, но видно, что права урезаны:
# smbcacls //dc0/sysvol
domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts/Shortcuts.xml
-k yes
REVISION:1
CONTROL:SR|DP
OWNER:DOMAIN\Administrator
GROUP:S-1-22-2-0
ACL:DOMAIN\Administrator:ALLOWED/0x0/RWDPO
ACL:S-1-22-2-0:ALLOWED/0x0/
ACL:NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS:ALLOWED/0x0/R
ACL:DOMAIN\Enterprise Admins:ALLOWED/0x0/RWDPO
ACL:DOMAIN\Domain Admins:ALLOWED/0x0/RWDPO
ACL:NT AUTHORITY\Authenticated Users:ALLOWED/0x0/R
ACL:NT AUTHORITY\SYSTEM:ALLOWED/0x0/RWDPO
ACL:NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS:ALLOWED/0x0/R
ACL:DOMAIN\Enterprise Admins:ALLOWED/0x0/RWDPO
ACL:DOMAIN\Domain Admins:ALLOWED/0x0/RWDPO
ACL:NT AUTHORITY\Authenticated Users:ALLOWED/0x0/R
ACL:NT AUTHORITY\SYSTEM:ALLOWED/0x0/RWDPO
ACL:Everyone:ALLOWED/0x0/
# getfacl /var/lib/samba/sysvol/*/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts/Shortcuts.xml
getfacl: Removing leading '/' from absolute path names
# file: var/lib/samba/sysvol/domain.alt/Policies/{06975BC5-8858-44B0-934C-10D550877476}/User/Preferences/Shortcuts/Shortcuts.xml
# owner: root
# group: root
user::rw-
user:NT\040AUTHORITY\\system:rwx #effective:rw-
user:NT\040AUTHORITY\\authenticated\040users:r-x #effective:r--
user:DOMAIN\\domain\040admins:rwx #effective:rw-
user:DOMAIN\\enterprise\040admins:rwx #effective:rw-
user:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x #effective:r--
group::---
group:NT\040AUTHORITY\\system:rwx #effective:rw-
group:NT\040AUTHORITY\\authenticated\040users:r-x #effective:r--
group:DOMAIN\\domain\040admins:rwx #effective:rw-
group:DOMAIN\\enterprise\040admins:rwx #effective:rw-
group:NT\040AUTHORITY\\enterprise\040domain\040controllers:r-x #effective:r--
mask::rw-
other::---
Все эти штуки с правами обычно никто не проверяет, потому что не очень
понимает, а какими они должны быть.
_______________________________
Всё готово, проверяем на клиенте.
Заходим в клиента с выключенными политиками:
clw0 ~ # ssh suser на localhost
suser на localhost's password:
Last login: Sun Aug 15 17:55:46 2021 from 127.0.0.1
suser на clw0 ~ $ выход
Connection to localhost closed.
Домашний каталог условно пуст:
clw0 ~ # ls /home/DOMAIN.ALT/suser/
Применение групповых политик было отключено:
clw0 ~ # gpupdate-setup
disabled
Включение применения групповых политик (для включения через alterator
доступен соответствующий графический модуль управления, а также
"галочка" во время введения машины в домен):
clw0 ~ # gpupdate-setup enable
workstation
clw0 ~ # control system-policy
gpupdate
Логинимся через ssh, видим уведомление о применении групповых политик.
clw0 ~ # ssh suser на localhost
suser на localhost's password:
Apply group policies for suser.
Last login: Sun Aug 15 17:56:55 2021 from 127.0.0.1
Проверяем наличие и содержание ярлычка.
suser на clw0 ~ $ ls Desktop/Домашний\ на\ сервере.desktop -l
-rwxr--r-- 1 suser domain users 137 авг 15 17:58 'Desktop/Домашний на
сервере.desktop'
suser на clw0 ~ $ cat Desktop/Домашний\ на\ сервере.desktop
[Desktop Entry]
Type=Application
Version=1.0
Name=Домашний на сервере
Terminal=false
Exec=smb://SERVER/suser
Icon=ssh
_________________________________
PS: следует учесть, что полная поддержка (в режиме создать, удалить,
обновить, и заменить) для ярлыков запланирована только на следующий
ближайший релиз. Пока ярлыки только пересоздаются.
PPS: Думаю, что это всё стоит дополнить и перенести на вики и в документацию.
PPPS: Локальная проверка на клиенте доступа на в сервер:
clw0 ~ # ssh suser на localhost
suser на localhost's password:
Apply group policies for suser.
Last login: Sun Aug 15 18:30:23 2021 from 127.0.0.1
suser на clw0 ~ $ kinit
Password for suser на DOMAIN.ALT:
Warning: Your password will expire in 365 days on Вт 16 авг 2022 17:50:24
suser на clw0 ~ $ smbclient -k -L //dc0.domain.alt
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.14.5)
suser Disk Home directory of DOMAIN\suser
SMB1 disabled -- no workgroup available
suser на clw0 ~ $ gio list smb://dc0.domain.alt/suser
gio: smb://dc0.domain.alt/suser/: Указанный адрес не подключён
suser на clw0 ~ $ gio mount smb://dc0.domain.alt/suser
suser на clw0 ~ $ gio list smb://dc0.domain.alt/suser
suser на clw0 ~ $ gio mkdir smb://dc0.domain.alt/suser/data
suser на clw0 ~ $ gio list smb://dc0.domain.alt/suser
data
Почему этот mount - не настоящий cifs mount:
suser на clw0 ~ $ mount | grep gvfs
gvfsd-fuse on /run/user/549401134/gvfs type fuse.gvfsd-fuse
(rw,nosuid,nodev,relatime,user_id=549401134,group_id=549400513)
suser на clw0 ~ $ mountpoint /run/user/549401134/gvfs
/run/user/549401134/gvfs is a mountpoint
suser на clw0 ~ $ ls /run/user/549401134/gvfs
'smb-share:server=dc0.domain.alt,share=suser'
suser на clw0 ~ $ ls
/run/user/549401134/gvfs/smb-share:server=dc0.domain.alt,share=suser
data
suser на clw0 ~ $ rpm -qa|grep gvfs|grep smb
gvfs-backend-smb-1.48.1-alt1.x86_64
suser на clw0 ~ $ rpm -ql gvfs-backend-smb
/usr/libexec/gvfs/gvfsd-smb
/usr/libexec/gvfs/gvfsd-smb-browse
/usr/share/GConf/gsettings/gvfs-smb.convert
/usr/share/glib-2.0/schemas/org.gnome.system.smb.gschema.xml
/usr/share/gvfs/mounts/smb-browse.mount
/usr/share/gvfs/mounts/smb.mount
suser на clw0 ~ $ ldd /usr/libexec/gvfs/gvfsd-smb | grep libsmbclient
libsmbclient.so.0 => /usr/lib64/libsmbclient.so.0 (0x00007f64fd3fb000)
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Sysadmins