Установка и настройка 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 |
- Смена MAC-адреса, это бывает необходимо, если есть привязка к MAC-адресу и была заменена сетевая карта:
Что бы не писать это каждый раз после перезагрузки системы, добавим строчку в /etc/network/interfaces после dns-nameservers 192.168.1.1:~#ifconfig eth0 down #отключим интерфейс eth0 ~#ifconfig eth0 hw ether 00:0F:FF:33:22:01 # укажем новый MAC-адрес ~#ifconfig eth1 up # включим интерфейс eth0
|
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 для простых смертных: настройка и использование SSH в Linux
- Установка и настройка веб-сервера LAMP для разработки на PHP LAMP
Устанавливаем 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
Ошибка запуска sudo в GUI
Иногда при попытке запуска через удаленный терминал возникает ошибка:
Вероятно, вы используете Synaptic на Wayland с использованием полномочий администратора.
Пожалуйста, повторно запустите ваш сеанс, без использования Wayland или Synaptic без полномочий администратора
Для решения этой проблемы рекомендуется после логина запустить команду
export XAUTHORITY=$HOME/.Xauthority
После этого можно запускать
sudo synaptic
или
sudo mintupdate
Установка 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) - и папки на сервере примонтированы у клиента.
- Настройка NFS сервера и клиента в Ubuntu 12.04/12.10
- Network File System (NFS) на Linux
- Еще по установке NFS
После установки 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
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 нужно создавать пользователей без шелла и домашней директории, можно командой типа
- данные о пользователя (имя и т.д.), записываемые в поле комментария в файле /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.
Каждый пользователь может быть включен в произвольное число групп. Включение пользователя в различные группы может быть осуществлено путем "ручного" редактирования файла /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, то можно подключиться к серверу как другой пользователь и иметь полный доступ к файлам.
Можно предпринять некоторые меры защиты, а именно:
- не давать права администратора пользователям клиентских компьютеров, чтобы они не могли создавать новых пользователей или менять свой uid. Остается, конечно, вариант принести свой ноутбук и там создать нового пользователя с требуемым uid.
- давать доступ к конкретным IP, а не диапазону (работает со статическими IP).
- если кто знает как еще можно защититься в NFS - напишите в комментариях
Для справки
ФАЙЛЫ
/etc/passwd - содержит информацию о пользователях
/etc/shadow - содержит защищаемую информацию о пользователях
/etc/group - содержит информацию о группах
/etc/default/useradd - содержит защищаемую информацию о пользователях
/etc/skel/ - каталог, содержащий пользовательские файлы по умолчанию
/etc/login.defs - содержит конфигурацию подсистемы теневых паролей
Установка samba
Быстрая и простая настройка samba
Если коротко, то пошагово
- Установить пакет samba
- Настроить конфиг в /etc/ - указать рабочую группу, расшаренные ресурсы, метод авторизации пользователей (я делал по паролю) и т.п.
- создать пользователя
- внести его в список пользователей samba и задать пароль командой
# smbpasswd -a user
- зайти с удаленного компьютера по имени или 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), то в какой-то момент при очередном автоматическом обновлении системы Вы получите сообщение об отсутствии свободного места, и обновление будет прервано.
В этом случае необходимо удалить устаревшие ядра со всеми сопутствующими дополнениями. Некоторые из способов проведения данной операции уже публиковались, но я приведу еще один - полностью автоматический способ очистки системы.
Советую сохранить данную команду в файл и сделать его исполняемым как программу (в свойствах файла). В этом случае операцию можно будет проводить простым запуском данного файла.
Выключение компьютера из терминала без ввода пароля
Чтобы дать некоторым пользователям право на выключение компьютера без ввода пароля, нужно добавить в файл /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.
Опубликовано