Гид по технологиям

Настройка тонких клиентов LTSP, DHCP и монтирование Windows-шар

7 min read Системное администрирование Обновлено 22 Oct 2025
LTSP: DHCP, монтирование SMB и Kerberos
LTSP: DHCP, монтирование SMB и Kerberos

Кратко

Кратко: пошаговое руководство по настройке DHCP для PXE-загрузки тонких клиентов LTSP, установке окружения рабочего стола, автоматическому монтированию Windows-шар (CIFS) при входе через Kerberos, безопасному размонтированию при выходе и включению SSH без пароля. Включены скрипты, чек-листы, варианты альтернатив и отладка.

Введение

Это руководство описывает практическую настройку тонких клиентов на базе LTSP и сервера thinserver: что изменить в DHCP, как подготовить профиль рабочего стола, как автоматически монтировать Windows-шары при входе пользователя с Kerberos-аутентификацией, как корректно размонтировать их при выходе и как включить passwordless SSH через GSSAPI. Примеры скриптов и конфигураций можно адаптировать под вашу сеть.

Важно

  • Перед началом убедитесь, что вы понимаете влияние изменений в DHCP и что у вас есть доступ к консоли сервера.
  • Не храните открытые пароли в /etc/fstab в продакшн-среде — рассмотрите использование ключей, kerberos или защищённых credential helpers.

Содержание

  • DHCP Server Settings
  • Настройка рабочего стола для тонких клиентов
  • Как сделать профиль по умолчанию для всех пользователей
  • Монтирование Windows-шар при входе
  • Удаление шар при выходе
  • Passwordless SSH через Kerberos
  • Проблемы и решения
  • Чек-листы и методика развертывания
  • Краткая глоссарий и рекомендации по безопасности

DHCP Server Settings

Ниже приведён пример конфигурации DHCP, которую нужно добавить на сервер DHCP, если тонкие клиенты должны PXE-загружаться и получать статические IP для отдельных MAC-адресов. Комментарии здесь русифицированы для понятности — сами параметры и значения оставлены как в примере.

default-lease-time            21600;
max-lease-time                21600;

option subnet-mask            255.255.255.0;
option broadcast-address      10.255.255.255;
option routers                10.0.0.1;
option domain-name-servers    10.0.0.10
option domain-name            "domain.internal";
option root-path              "/opt/ltsp/i386";

host thinclient1 {
        next-server             10.0.0.10;
        hardware ethernet       00:AA:BB:CC:DD:EE;
        fixed-address           10.0.0.100;
        filename                "ltsp/i386/pxelinux.0";
        option root-path        "10.0.0.10:/opt/ltsp/i386";
}

host thinclient2 {
        next-server             10.0.0.10;
        hardware ethernet       00:BB:CC:DD:EE:FF;
        fixed-address           10.0.0.101;
        filename                "ltsp/i386/pxelinux.0";
        option root-path        "10.0.0.10:/opt/ltsp/i386";
}

Совет по отладке DHCP

  • После изменения конфигурации перезапустите службу DHCP и наблюдайте лог (/var/log/syslog или /var/log/messages) при загрузке клиента.
  • Убедитесь, что PXE-сервер (TFTP/next-server) доступен по адресу, указанному в next-server.

Настройка рабочего стола для тонких клиентов

Чтобы упростить работу пользователей тонких клиентов, автор установил тему XPGnome и изменил меню «Пуск», а также добавил Adobe Reader 9 и Skype. Вы можете повторить эти шаги для вашего образа.

Если у вас отсутствует иконка «Выйти», её можно сгенерировать из большого изображения и сохранить в наборах иконок. Автор сделал так:

  1. Взял иконку 48×48 с Google.
  2. В GIMP масштабировал в 32×32, 24×24, 22×22 и 16×16.
  3. Переименовал файл в system-log-out.png и разместил в /usr/share/icons/GnomeXP/{размер}/actions.

Результат выглядит так:

Рабочий стол тонкого клиента с темой XPGnome

Сделать профиль по умолчанию для всех пользователей

Чтобы эти настройки стали стандартными для каждого вновь вошедшего пользователя, скопируйте из домашней папки установившего темы пользователя следующие каталоги в /etc/skel:

  • .config
  • .gconf
  • .icons
  • .local
  • .themes

Дальше: любые изменения, которые вы хотите распространить на всех, нужно будет копировать в /etc/skel и при необходимости переподготавливать образ.

Монтирование Windows-шар при входе

Подход, выбранный автором, использует простой запуск bash/perl-скриптов через «Startup Applications» в Ubuntu. Альтернативы включают autofs, systemd-automount, pam_mount и другие. Ниже полный набор шагов, как это сделать на примере.

Предварительные условия

  • NETLOGON шар DC должен быть доступен на thinserver.domain.internal.
  • Нужен доменный аккаунт, который может читать содержимое NETLOGON, например public/password (в учебных примерах). В продакшне используйте защищённые методы хранения учётных данных.

Создайте точку монтирования для NETLOGON:

sudo mkdir /mnt/logon

Добавьте в /etc/fstab строку для автоматического монтирования NETLOGON через CIFS (для примера):

//dc.domain.internal/netlogon      /mnt/logon           cifs   username=public,password=password 0  0

Затем выполните:

sudo mount -a

Структура и идея скриптов

  • /usr/local/bin/win_share.sh — запускается при входе пользователя; удаляет старые .mount.sh/.umount.sh, генерирует новые и запускает .mount.sh.
  • /usr/local/bin/mount.pl — парсит logon.bat (из NETLOGON) и генерирует для каждого пользователя ~/.mount.sh и ~/.umount.sh с нужными mount.cifs и umount.cifs.

Скрипт win_share.sh (сохраняйте в /usr/local/bin/ с правом исполнение):

#!/bin/sh
# Check to see if .mount.sh and .umount.sh exist, if so delete them!

if [ -f /home/$USER/.mount.sh ]; then
   rm /home/$USER/.mount.sh
fi

if [ -f /home/$USER/.umount.sh ]; then
   rm /home/$USER/.umount.sh
fi

# Create the .mount.sh and .umount.sh scripts from users batch file

/usr/local/bin/mount.pl $USER

# Mount network shares when logging on.
/home/$USER/.mount.sh

Скрипт mount.pl (поместите в /usr/local/bin/ и разрешите исполнение):

#!/usr/bin/perl
# Build dynamic ~user/.mount.sh based on logon.bat

$user = $ARGV[0];
$file = "/mnt/logonbat/$user.bat";  # <-- Change this from $user to the name of the batch script if you only use one.

die if ! $user;
die if ! -e $file;

open (PAM_CONF, ">/home/$user/.mount.sh");
open (LOGOFF, ">/home/$user/.umount.sh");

print PAM_CONF qq{#!/bin/sh
if [ ! -d /home/$user/Home ]; then
mkdir /home/$user/Home
fi
mount.cifs //server/$user /home/$user/Home -o username=$user,sec=krb5
};

print LOGOFF qq{#!/bin/sh
if [ "`cat /proc/mounts | grep /home/$user/Home | wc -l`" -ge "1" ]; then 
umount.cifs /home/$user/Home 
fi \n};

my(@arr)=`cat /mnt/logonbat/$user.bat`;
$mounts = parse_batfile(\@arr);
foreach $mount (@$mounts) {
  chomp($mount);
  ($server,$share) = $mount =~ /\\\\(.*)\\(.*)/;
  $share =~ tr/\cM//d;
  $mnt = $share;

  # skip AUDIT.  It's for PCs only
  next if $mnt =~ /AUDIT/;

  # skip personal shares.  
  next if lc("$mnt") eq lc("$user");
  next if ! $mnt;

  #strip dollar sign from mount point
  $mnt =~ s/\$\$//;

  # make sure mount point is unique
  $mnt .= "-$server"  if $seen{$mnt}++;

  # upshift first letter of mnt point
  $mnt =~ s/^(.)(.*)/\u$1$2/g;

#  print PAM_CONF "volume $user cifs $server $share  /home/$user/$mnt  - - -\n";
  print PAM_CONF qq{if [ ! -d /home/$user/$mnt ]; then
mkdir /home/$user/$mnt
fi
mount.cifs //$server/$mnt /home/$user/$mnt -o username=$user,sec=krb5 \n};

  print LOGOFF qq{if [ "`cat /proc/mounts | grep /home/$user/$mnt | wc -l`" -ge "1" ]; then 
umount.cifs /home/$user/$mnt 
fi \n};
}

close PAM_CONF;
close LOGOFF;
system ("chown $user:16777729 /home/$user/.mount.sh");   #  16777729 is my GID for "Domain Users"
system ("chown $user:16777729 /home/$user/.umount.sh");  #  16777729 is my GID for "Domain Users"
system ("chmod +x /home/$user/.mount.sh");
system ("chmod +x /home/$user/.umount.sh");

# All done

sub parse_batfile {
  my($file) = @_;
  my(@mounts);
  foreach $line (@$file) {
    (@val) = split / /,$line;
    if (uc($val[0]) eq "NET" && uc($val[1]) eq "USE") {
       push (@mounts,$val[3]);
    }
    if ($val[0] eq "CALL") {
      my($match) = $val[1]  =~ /\\\\.*\\NETLOGON\\(.*)/ ;
      if ($match) {
        chop($match);
        my(@arr)=`cat /mnt/logonbat/$match`;
        $mounts = parse_batfile(\@arr);
        unshift @mounts, @$mounts;
      }
    }
  }
  return \@mounts;
}

Пример ~/.mount.sh, сгенерированного для пользователя jdoe:

#!/bin/sh
if [ ! -d /home/jdoe/Home ]; then
mkdir /home/jdoe/Home
fi
mount.cifs //server/jdoe /home/jdoe/Home -o username=jdoe,sec=krb5
if [ ! -d /home/jdoe/common ]; then
mkdir /home/jdoe/common
fi
mount.cifs //server/common /home/jdoe/common -o username=jdoe,sec=krb5 
if [ ! -d /home/jdoe/IT ]; then
mkdir /home/jdoe/IT
fi
mount.cifs //server/IT /home/jdoe/IT -o username=jdoe,sec=krb5 

Создание «Startup Application» для запуска win_share.sh

Добавьте запуск /usr/local/bin/win_share.sh в «Preferences → Startup Applications». На экране это выглядит так:

Окно 'Программы запуска' в GNOME

Альтернативы и когда их использовать

  • autofs/systemd-automount: хороши для больших сетей, где нужно ленивое монтирование и масштабируемость.
  • pam_mount: монтирует шары в момент сессии и разгружает работу от пользовательских скриптов, но требует настройки PAM и форматов конфигурации.
  • Если нужна центральная политика: используйте скрипты, генерируемые на сервере, и распространяйте через конфигурационный менеджер (Ansible/Puppet).

Удаление Windows-шар при выходе

Автор использовал pam_script.so — PAM-модуль, который позволяет запускать скрипты при открытии и закрытии сессии. Поскольку входные скрипты у автора зависят от $USER, он запускал их от имени пользователя (через Startup Applications), а размонтирование выполняется через pam_script при закрытии сессии.

Установка libpam-script (пример .deb):

sudo dpkg -i libpam-script_1.1.4-1_i386.deb

Пример ~/.umount.sh для jdoe (сгенерировано mount.pl):

#!/bin/sh
if [ "`cat /proc/mounts | grep /home/jdoe/Home | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/Home 
fi 
if [ "`cat /proc/mounts | grep /home/jdoe/common | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/common 
fi 
if [ "`cat /proc/mounts | grep /home/jdoe/IT | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/IT 
fi 

Создайте /usr/share/libpam-script/pam_script_ses_close со следующим содержимым и разрешениями:

#!/bin/sh
# pam_script_ses_close script to remove windows shares

/home/$PAM_USER/.umount.sh 2>&1 >> /var/log/umount.log

Добавьте в /etc/pam.d/common-session строку:

session     optional                  pam_script.so

Проверьте: войдите под пользователем, замонтируйте шары; выйдите и убедитесь, что umount выполнился и монтирования отсутствуют (проверка /proc/mounts и /var/log/umount.log).

Passwordless SSH через Kerberos

Если сервер и рабочая станция находятся в домене с Kerberos, можно включить GSSAPI-аутентификацию для SSH, чтобы пользователи не вводили пароль.

На сервере (в /etc/ssh/sshd_config) включите:

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UseDNS yes

На рабочей станции (в /etc/ssh/ssh_config) включите:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Тестирование:

ssh -v thinserver

Если Kerberos аутентификация работает, вы увидите в выводе сообщение вроде:

debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Delegating credentials
debug1: Delegating credentials
debug1: Authentication succeeded (gssapi-with-mic).

Если это не срабатывает — проверьте время на клиентах/сервере (Kerberos чувствителен к рассинхронизации), /etc/krb5.conf и доступность KDC.

Проблемы и решения

Ниже — краткие известные проблемы и решения, с которыми столкнулся автор.

PROBLEM : LTSP client authenticates but logs out immediately SOLUTION:

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set /desktop/gnome/session/required_components/windowmanager metacity

PROBLEM : No VNC on thin clients SOLUTION: http://bootpolish.net/home_ltsp_installx11vnconltsp5

PROBLEM : Change the default login screen to a custom one SOLUTION: https://help.ubuntu.com/community/EdubuntuFAQ

PROBLEM : How to setup root password on thin client SOLUTION: https://help.ubuntu.com/community/EdubuntuFAQ

PROBLEM : No logout icon SOLUTION: http://ubuntuforums.org/archive/index.php/t-815188.html

Расширенные рекомендации по диагностике

  • Проверьте логи: /var/log/auth.log, /var/log/syslog и ~/.xsession-errors.
  • Убедитесь, что права на ~/.mount.sh и ~/.umount.sh корректны и принадлежат пользователю.
  • Для Kerberos проверьте klist и kinit для пользователя.

Чек-листы и методика развертывания

Мини-план развертывания для администратора (SOP)

  1. Подготовка сервера
    • Обновить систему и установить LTSP-пакеты, tftpd-hpa, isc-dhcp-server.
    • Настроить /etc/dhcp/dhcpd.conf согласно секции DHCP.
  2. Настройка PXE/TFTP
    • Разместить pxelinux.0 и конфиги в /srv/tftp или эквивалент.
  3. Подготовка образа рабочего стола
    • Настроить пользователя с нужными темами и программами.
    • Скопировать .config/.gconf/.icons/.local/.themes в /etc/skel.
  4. Настройка NETLOGON
    • Смонтировать NETLOGON в /mnt/logon; положить bat-файлы.
  5. Развернуть скрипты
    • Разместить win_share.sh и mount.pl в /usr/local/bin/, chown/chmod.
  6. Настройка автозапуска
    • Добавить win_share.sh в Startup Applications.
  7. Настройка pam_script для размонтирования
    • Установить libpam-script, создать pam_script_ses_close и добавить pam_script.so в common-session.
  8. Тестирование
    • Проверить логин/выход, корректность монтирования/размонтирования, Kerberos SSH.

Роли и обязанности

  • Системный администратор: DHCP, TFTP, Kerberos, server-side конфигурации.
  • Отдел поддержки: подготовка образов рабочего стола, иконок, приложений.
  • Безопасность/инфраструктура: аудит fstab, прав доступа, контроль учётных данных.

Безопасность и соответствие

  • Не храните пароли в /etc/fstab на постоянной основе. Используйте Kerberos или credential files с ограниченными правами и защитой.
  • Логи размонтирования должны быть доступны аудиторам, но защищены от удаления пользователями.
  • При работе с доменом проверяйте политику паролей и доступов. Если вы обрабатываете персональные данные (GDPR), убедитесь, что доступ к файловым шарам соответствует правилам хранения и разграничения прав.

Краткая методология внедрения (мини-метод)

  1. Разверните тестовый сервер и одну тестовую рабочую станцию.
  2. Настройте DHCP и PXE, убедитесь, что один тонкий клиент грузится корректно.
  3. Настройте NETLOGON и протестируйте парсинг .bat файлов вручную.
  4. Включите автоматическое монтирование и отладьте права и Kerberos.
  5. Разверните в пилоте на 5–10 пользователей, соберите обратную связь.
  6. Перенесите в продакшн, документируйте все изменения.

Мини-глоссарий

  • LTSP — Lightweight Terminal Server Protocol, способ централизованной загрузки тонких клиентов.
  • PXE — Preboot Execution Environment, загрузка по сети.
  • CIFS/SMB — протоколы доступа к файлам Windows-шары.
  • Kerberos — протокол сетевой аутентификации, поддерживающий SSO.
  • GSSAPI — интерфейс для механизмов аутентификации (включая Kerberos) в SSH.

Резюме

  • DHCP-конфигурация обеспечивает PXE-загрузку и статические привязки по MAC.
  • Профиль рабочего стола можно централизованно распространить через /etc/skel.
  • Скриптовый подход (win_share.sh + mount.pl) прост для кастомизации и подходит для небольших/средних сред; для крупных сред рассмотрите autofs или pam_mount.
  • pam_script позволяет корректно снимать шар при выходе, а GSSAPI/Kerberos — получить вход по SSH без пароля.

Важно

Перед массовым внедрением обязательно тестируйте сценарии выхода, восстановления паролей и поведения при обрыве сети.

Дополнительные ресурсы

  • Документация LTSP и Ubuntu Help для EdubuntuFAQ (ссылки в разделе Проблемы и решения).
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Microsoft Mood Board: быстрый мудборд для идей
Дизайн

Microsoft Mood Board: быстрый мудборд для идей

Замена слов в Microsoft Word: быстрый гид
Документы

Замена слов в Microsoft Word: быстрый гид

Изменить GPS на iPhone с iToolab AnyGo
Технологии

Изменить GPS на iPhone с iToolab AnyGo

Установка Elasticsearch на Ubuntu
DevOps

Установка Elasticsearch на Ubuntu

Не удаётся войти в аккаунт в Windows 11
Windows 11

Не удаётся войти в аккаунт в Windows 11

Как создать децентрализованный сайт — шаги и советы
Веб-разработка

Как создать децентрализованный сайт — шаги и советы