+0 000-000-00-00

Установка и настройка Ubuntu для работы в качестве сервера терминалов

Описанное решение успешно работает с 2008 года в моем офисе. Изначально решение было опробовано на базе Ubuntu 9.10, потом были сделаны upgrade сначала до 12.04, потом до 14.04. Сейчас работает на Linux Mint 20.04.

Сначала, конечно, устанавливаем Убунту. Устанавливать нужно обязательно версию desktop, а не серверную версию Ubuntu. Для работы в качестве сервера терминалов серверная версия недостаточна, т.к. требуется окружение рабочего стола, броузер, офисный пакет и другие программы, которые есть в десктопной версии, и которых нет в серверной версии. И самое главное, должна быть оболочка управления x windows. Поэтому устанавливать нужно версию для десктопа.

Перед upgrade сохранил полностью папки /etc и var/www. При переустановке локальные сайты перенес в /home/www, чтобы в будущем можно было при переустановках форматировать раздел /var без лишних движений по резервному копированию и перенастройке сайтов.

1. Ставим десктопную версию Ubuntu, желательно LTS, т.к. практика показывает, что система на сервере обновляется редко - даже при upgrade компьютера был перенесен жесткий диск с системой и все работает прекрасно.

При установке выбираем ручное разбиение диска, форматируем все разделы кроме /home, привязываем к точкам монтирования. Да, на 9.1 были у меня отдельный разделы для /boot и /temp, очень скоро они забились и стали выдавать ошибку, пришлось регулярно удалять старые версии ядра, а также заменить раздел /temp файлом в основном разделе. Поэтому в этот раз я эти разделы удалил и объединил с корневым /. В последующих версиях выделяю разделы под /, /usr, /var (это, как показывает практика, не обязательно), /home и /tmp (этот раздел нужно сделать как минимум в 2 ГБ, чтобы он не забивался при работе нескольких клиентов терминального сервера). Все разделы на ext4, кроме /tmp (ext2)

Как обычно, после установки настраиваем сетевые карты для статических IP, доустанавливаем русский язык.

Как изменить IP?

В последних версиях по умолчанию не используется файл   /etc/network/interfaces, настройки можно делать через network-manager. Через GUI заменить настройки сетевого интерфейса легко, но как это сделать удаленно через терминал?

Можно, конечно, удалить network-manager и делать настройки как раньше - через правку файла interfaces

Как запустить GUI nnetwork-manager пока не нашел, но вот запустить апплет значка можно.

sudo nm-applet

Получим значок сетевого подключения удаленного компьютера, в меню по правой кнопке мыши можно вызвать NM и сделать необходимые настройки соединения.

Список интерфейсов можно посмотреть набрав:

~$ifconfig –a

Если необходимо иметь больше одного ip-адреса, то можно создать виртуальный сетевой интерфейс, добавив в /etc/network/interfaces строки:

 
 
 
 
auto eth0:1
iface eth0:1 inet static
address 192.168.1.11
netmask 255.255.255.0
  1. Смена MAC-адреса, это бывает необходимо, если есть привязка к MAC-адресу и была заменена сетевая карта:
    ~#ifconfig eth0 down #отключим интерфейс eth0
    ~#ifconfig eth0 hw ether 00:0F:FF:33:22:01 # укажем новый MAC-адрес
    ~#ifconfig eth1 up # включим интерфейс eth0
    Что бы не писать это каждый раз после перезагрузки системы, добавим строчку в /etc/network/interfaces после  dns-nameservers 192.168.1.1:
 
 
hwaddress ether 00:0F:FF:33:22:01

После всех операций перезапускаем сеть:

 
~#/etc/init.d/networking restart

 

Потом нужно установить open-ssh, samba, nfs, lamp. Как это сделать - в инете полно информации.

 

Настройка SSH стороне сервера

В конфигах машины-сервера, к которой будем подсоединяться (у вас ведь есть её рутовый пароль, так ведь?) в /etc/ssh/sshd-config ищем и меняем ключи на:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

Этим мы разрешаем серверу запускать удалённо графические приложения и отправлять их на клиентскую машину. Перестартуем сервис:

sudo /etc/init.d/ssh restart

Теперь мы сможем заходить на машину не только в консольном режиме, но и с запуском иксовых приложений.

Если хочется разрешить вход только с определённых машин, нужно подправить строки в конфиге /etc/ssh/sshd_config

AllowUsers hacker@*

AllowUsers *@192.168.1.*

Впрочем, это уже для более продвинутых товарищей.

Настройка клиентов

Для начала записываем имена серверов в файле /etc/hosts в виде

172.18.4.1 server1 vtiger solarhome

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

Установка SSH

Устанавливаем  ssh

sudo apt-get install ssh

После установки идем в /etc/ssh/ssh_config и раскомментируем следующее:

   ForwardX11 no
   ForwardX11Trusted yes


для того, чтобы можно было открывать окна программ сервера на клиенте,

В принципе, можно на клиентской стороне ничего не менять, а логиниться на удалённую машину так:

$ ssh -X user@server1

а также для улучшения скорости работы добавим:

Ciphers aes128-cbc,3des-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
Compression yes

Можно вместо второй опции всегда вводить команду

ssh -XYC user@server

большинстве программ для форварда хватает -X но некоторым надо еще и -Y (я, честно говоря, ни разу таких не встречал), -C для компрессии трафика.

А вот Ciphers очень сильно ускоряют работу, так как по умолчанию по туннелю передается очень большое количество данных. Эта опция очень сильно ускоряет работу на медленных линиях.

Далее, чтобы не вводить пароли при логине на сервер, делаем следующее:

Генерируем ключи, на вопросы жмем Enter

$ ssh-keygen -t rsa

Копируем этот ключ на сервер:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

Источник

 

Установка NFS

Запуск и настройка NFS 

sudo apt-get install nfs-kernel-server nfs-common portmap

После этого в /etc/fstab добавляем записи для автомонтирования типа:

server1:/home/user3 /home/server/user3 nfs auto 0 0

Здесь первый параметр - путь к расшаренной папке, второй - точка монтирования на компьютере клиента. Опции монтирования можно изменить.

После этого sudo mount -a (или перезагрузка, если нет прав для sudo) - и папки на сервере примонтированы у клиента.

После установки LAMP нужно доустановить модуль php-imap командой

aptitude install php5-imap

После установки перезагружаем apache2

apache2ctl graceful 

OR

/usr/sbin/apache2ctl graceful

Группы пользователей и права

NFS идентифицирует пользователей по UID. Поэтому необходимо после создания  всех пользователей посмотреть их UID в /etc/passwd и присвоить такие же для пользователей на клиентских компьютерах.

Заводить в системе нового пользователя удобнее всего командой useradd.

Я применял такую команду

$ sudo useradd -u UID -g userXX -G users,operator -m -d /home/userXX -s /bin/bash -c COMMENT ИМЯ_ПОЛЬЗОВАТЕЛЯ

здесь вместо UID пишем id нового пользователя  (у меня в виде 10XX)
-m - создает директорию по образцу, заданному в /etc/skel/
-c - любые комментарии, например, реальное имя пользователя, можно разделять запятыми
-g - GID, группа пользователя
-G - членство в других группах, через запятую можно добавить в несколько групп

Если по умолчанию в качестве шелла ставится не bash, можно поменять поведение командой useradd -D -s /bin/bash

You can change it permanently with the -D option.

# To see current settings
# useradd -D

# To change default shell for all new accounts
# useradd -D -s /bin/bash
Для существующих пользователей шелл можно поменять в файле /etc/passwd

b) find the line that belongs to the user (foo) that we about to modify

  • foo:x:1001:1001::/home/foo:/bin/sh

c) change from /bin/sh to /bin/bash

  • foo:x:1001:1001::/home/foo:/bin/bash

Кстати, для samba нужно создавать пользователей без шелла и домашней директории, можно командой типа

sudo useradd -G samba_users -d /dev/null -s /bin/false ИМЯ_ПОЛЬЗОВАТЕЛЯ
 Вообще, опций для useradd много, основные из них:
  • данные о пользователя (имя и т.д.), записываемые в поле комментария в файле /etc/passwd (опция -c);
  • имя или номер группы, к которой будет отнесен пользователь (опция –g);
  • список групп, в которые будет включен данный пользователь (опция –G);
  • UID пользователя, назначаемый вместо UID, задаваемого системой (опция –u);
  • какая оболочка назначается пользователю (опция –s)

 

После ввода нового пользователя надо задать ему первоначальный пароль, что делается командой passwd login_name.

 

Что делаем для изменения UID у клиентов?

Заходим под администратором на клиенте или по ssh (у меня все клиенты имеют ssh сервер и я могу их обновлять и мониторить не подходя к ним. В файле /etc/passwd меняем UID пользователя на такой же, как у его пользователя на сервере. В файле /etc/group меняем его основную группу (как правило, создается группа с тем же номером GID).

Команда usermod имеет те же опции, что и useradd, только используется для изменения параметров существующего пользователя, причем на момент применения этой команды суперпользователем данный пользователь не должен быть логирован в системе.

Синтаксис и опции usermod

Утилита usermod нужна для управления пользователями Linux, их основными и дополнительными группами. При ее выполнении в терминале нужно указать опции и конкретного пользователя, к которому применяются изменения. Синтаксис здесь следующий:

$ usermod опции имя_пользователя

Рассмотрим некоторые опции.

-a, --append – добавить пользователя в одну или несколько дополнительных групп. Опция будет работать только вместе с опцией -G.

-b, --badnames – разрешить использование имен, которые не соответствуют стандартам.

-d, --home – указать новое местоположение домашнего каталога пользователя. При использовании опции -m содержимое текущего домашнего каталога будет перемещено на новое место.

-e, --expiredate – указать дату, при наступлении которой учетная запись будет отключена. Дата вводится в формате ГГГГ-ММ-ДД. Если использовать эту опцию без указания даты, то отключение пользователя будет отменено.

-f, --inactive – установить количество дней для блокировки пользователя, которое должно пройти после устаревания пароля. При значении -1 опция блокировки отключается, а при значении 0 блокировка случится сразу же после устаревания.

-g, --gid – выбрать новую основную группу для пользователя и для файлов в его домашнем каталоге. Нужно задать имя или номер новой группы.

-G, --groups – указать список дополнительных групп, в которые должен входить пользователь. Между собой группы разделяются запятой. Если пользователь входит в дополнительную группу, которая не была указана в списке, то он будет из нее удалён. Но при использовании опции -a можно добавлять новые дополнительные группы, не удаляя старые.

-l, --login – изменить имя пользователя на новое. Данная опция не затрагивает никакие другие данные. А значит, название домашнего каталога и почты придется изменять вручную, чтобы они совпадали с новым именем пользователя.

-L, --lock – заблокировать пароль пользователя. Эта опция помещает символ ! (восклицательный знак) перед паролем в зашифрованном виде, отключая его. Данную опцию нельзя использовать с -p и -U.

-m, --move-home – изменить местоположение домашнего каталога пользователя. Опция будет работать только вместе с -d. Утилита попытается обновить права собственности на файлы и скопировать режимы, ACL и расширенные атрибуты.

-o, --non-unique – разрешить заменить идентификационный номер пользователя на не уникальное значение. Работает в паре с опцией -u.

-p, --password – изменить пароль в зашифрованном виде.

-R, --root – выполнить chroot в указанный каталог и использовать его вместо корневого каталога / с хранящимися в нем конфигурационными файлами.

-s, --shell – указать новую командную оболочку shell для пользователя. При использовании опции -s с пустым значением будет выбрана оболочка по умолчанию.

-u, --uid – изменить параметр UID (числовой идентификатор пользователя). Данные изменения автоматически применятся к почтовому ящику и содержимому домашнего каталога. Для остальных файлов UID придется изменять вручную.

-U, --unlock – разблокировать пароль пользователя. Данная опция убирает символ ! (восклицательный знак) перед паролем в зашифрованном виде, разрешая использовать его для входа. Не сработает с -p и -L.

Дополнительная информация 1 2

Каждый пользователь может быть включен в произвольное число групп. Включение пользователя в различные группы может быть осуществлено путем "ручного" редактирования файла /etc/group суперпользователем, а может быть выполнено с помощью команд groupadd и groupmod.

Если у пользователя уже есть домашняя папка, то у нее настроены права в соответствии со "старыми" UID:GID. Чтобы после изменения UID пользователь мого зайти в свою папку (и вообще войти в систему) нужно поменять владельца и группу у файлов и папок домашней папки пользователя.

Меняем владельца и группу домашней папки на новые, например так
sudo сhown -R user1:user1 /home/user1

Долго я мучился с правами доступа и владельцами и  группами для новых файлов на сервере. Приходилось периодически давать команды chown и chmod для изменения прав доступа и владельцев для новых файлов. Кстати, вот эти команды для изменения прав на папки и на файлы:

sudo find /path/to/files -type f -exec chmod -R 0664 {} \;
sudo find /path/to/folder -type d -exec chmod -R 0775 {} \;

Все оказалось до безобразия просто - нужно было только установить маркер SetGID для общих папок. Источник

Выставляется бит setgid с помощью команды:

chmod 2775 /home/server/...../Users

Тут надо подробнее про 2775:

  • 2 - это и есть setgid
  • 7 - это все права для собственников
  • 7 - все права для группы
  • 5 - только чтение и выполнение для остальных

chown :users /home/server/...../Users

Теперь все новые файлы в папке Users будут иметь группу users и права доступа 664

Update. Еще команда для изменения прав доступа на файлы и папки

Если вы хотите установить разрешения для всех файлов на a+r и все каталоги на a+x и сделать это рекурсивно через полное дерево подкаталогов, используйте:

chmod -R a+rX *

X (то есть капитал X, не маленький X!) игнорируется для файлов (если они уже не исполняются для кого-то), но используется для каталогов.

Замечание. NFS имеет слабую защиту и рекомендована только для локальной сети, где нет "чужих" или с "шаловливыми ручками". Так как идентификация происходит по UID, то, зная UID какого-то пользователя на сервере, можно получить полный доступ к его файлам  с любого компьютера локальной сети. Для этого нужно создать нового пользователя на клиенте и присвоить ему требуемый UID. Так как к общей папке на сервере в /etc/exports обычно указывается диапазон IP,  то  можно подключиться к серверу как другой пользователь и иметь полный доступ к файлам.

Можно предпринять некоторые меры защиты, а именно:

  1. не давать права администратора пользователям клиентских компьютеров, чтобы они не могли создавать новых пользователей или менять свой uid. Остается, конечно, вариант принести свой ноутбук и там создать нового пользователя с требуемым uid.
  2. давать доступ к конкретным IP, а не диапазону (работает со статическими IP).
  3. если кто знает как еще можно защититься в NFS - напишите в комментариях

 

Для справки

ФАЙЛЫ
/etc/passwd -     содержит информацию о пользователях
/etc/shadow -     содержит защищаемую информацию о пользователях
/etc/group -    содержит информацию о группах
/etc/default/useradd -    содержит защищаемую информацию о пользователях
/etc/skel/ -    каталог, содержащий пользовательские файлы по умолчанию
/etc/login.defs -    содержит конфигурацию подсистемы теневых паролей

Установка samba

Быстрая и простая настройка samba

Если коротко, то пошагово

  1. Установить пакет samba
  2. Настроить конфиг в /etc/ - указать рабочую группу, расшаренные ресурсы, метод авторизации пользователей (я делал по паролю) и т.п.
  3. создать пользователя
  4. внести его в список пользователей samba и задать пароль командой
    # smbpasswd -a user
  5. зайти с удаленного компьютера по имени или IP сервера

Установка тем

Для того, чтобы при запуске программ в режиме терминала использовались темы рамок окна и значков, нужно, чтобы одинаковые темы были установлены на клиенте и на сервере. Иначе терминальные программы будут выглядеть убого.

Устанавливать темы на клиентах и сервере нужно не в папку пользователя, а для всех. Как это сделать - наверное, есть много вариантов (например, распаковать под рутом в общую папку /user/share/themes), но проще всего сделать это из репозиториев тем.

Я установил темы, рекомендованные здесь и здесь

Из темных хороша Numix. Из светлых - Faience. Иконки - из Trevilla или Faence/Faenza

Тема рамок окна также неплоха из Adwaita-X-dark

Полезные команды по обслуживанию сервера

В процессе обновления Ubuntu 12.04/12.10 в системе накапливается большое количество старых редакций ядер, неиспользующихся в текущее время. В случае, если Вы установили Ubuntu 12.04/12.10 полностью в директорию "/", особой проблемы это не вызывает. Однако, если в процессе установки системы Вы создали отдельную директорию "/boot" с объемом 100-200Мb (как это советуют на многих форумах по Ubuntu), то в какой-то момент при очередном автоматическом обновлении системы Вы получите сообщение об отсутствии свободного места, и обновление будет прервано.

В этом случае необходимо удалить устаревшие ядра со всеми сопутствующими дополнениями. Некоторые из способов проведения данной операции уже публиковались, но я приведу еще один - полностью автоматический способ очистки системы.

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/(.*)-([^0-9]+)/1/")"'/d;s/^[^ ]* [^ ]* ([^ ]*).*/1/;/[0-9]/!d' | head -n -1) --assume-yes

После выполнения команды остаются только текущая и предыдущая версии ядра системы. Остальные вычищаются.

Советую сохранить данную команду в файл и сделать его исполняемым как программу (в свойствах файла). В этом случае операцию можно будет проводить простым запуском данного файла.

Источник

Выключение компьютера из терминала без ввода пароля

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

Для определенной группы:

%users ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown

Для отдельных пользовтелей сначала нужно создать для них алиас:

# User alias specification
User_Alias USERS = user1, user2

#includedir /etc/sudoers.d
USERS ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown

 

Можно сделать еще проще - записать алиас в  ~/.bash_aliases.

nano ~/.bash_aliases

Insert the following line at the end of the file:

alias shutdown='sudo shutdown now' 

Finally, load the changes to the .bash_aliases file...

source ~/.bash_aliases

Try it out!

shutdown

Решение проблем

После установки сервера терминалов на LinuxMint 20.04 возникла проблема с запуском графических приложений через терминал под root
Ошибка была такая:
X11 connection rejected because of wrong authentication

Решается следующим образом:

The problem is that the X session for the superuser doesn't know what the cookie is.

After logging into the Pi execute the following:

$ xauth list $DISPLAY

This prints the cookie, something like this:

pi:10 mit-magic-cookie-1 4d22408aga55sad1ccd165723g77923ae

Then switch the superuser with su and set the cookie:

# xauth add pi:10 mit-magic-cookie-1 4d22408aga55sad1ccd165723g77923ae

X-forwarding should now work for root.

Дополнительная информация тут
 

Так работает до окончания сессии.  Другой совет:
 


Solution:

1. ssh vmk@server

2. $ sudo su

3. # xauth merge /home/vmk/.Xauthority

Configure $DISPLAY variable, if it is not configured.

 

    Опубликовано

    Menu