[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