Информатика · 11 класс · профиль · урок 3 · практическая работа

SSH-квест: работа на удалённом компьютере

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

Debian 13

Цель и правила работы

Цель работы: освоить подключение к удалённому компьютеру по протоколу SSH, создание и удаление учётных записей, разграничение прав пользователей и проверку журнала входов.

Порядок подключений

Учитель присваивает каждому участнику порядковый номер. Участник с номером k подключается к компьютерам участников с номерами k+1 и k+2; номера, превышающие число участников, отсчитываются с начала списка (кольцевая схема). В результате к каждому компьютеру подключаются ровно два удалённых пользователя, и каждый участник выполняет ровно два удалённых сеанса.

В тексте работы используются следующие термины. Владелец — участник, на компьютере которого выполняется сеанс; он является администратором этого компьютера. Гость — участник, подключающийся к компьютеру владельца под созданной для него гостевой учётной записью.

Обязательные правила

  1. Гостевые учётные записи создаются без права на sudo и не включаются в группу sudo.
  2. Пароль гостевой учётной записи является временным и не совпадает с паролем владельца. По окончании работы гостевые учётные записи удаляются.
  3. На компьютере владельца гость вправе изменять и удалять только созданные им самим файлы. Выключение и перезагрузка компьютера владельца гостем запрещены.
  4. Перед вводом каждой команды проверяйте приглашение: оно показывает, от имени какого пользователя и на каком компьютере будет выполнена команда.
  5. Не перезагружайте свой компьютер до окончания этапа 3: в Debian 13 каталог /tmp очищается при перезагрузке, и регистрационные файлы гостей будут утрачены. Если перезагрузка всё же произошла, повторите шаг 4 этапа 1 (информационный файл) и сообщите гостям, что регистрационные файлы необходимо создать повторно; гостевые учётные записи при перезагрузке сохраняются.
Команды с правами администратора записаны через sudo. Если на вашем компьютере sudo не настроен (при установке был задан пароль root), выполните команду в оболочке root: su -, затем команду без слова sudo, затем exit. Используйте именно su - с дефисом: без него команды adduser и deluser не будут найдены.

Бланк участника

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

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

Этап 0. Подготовка рабочего места

роль: владелец · около 5 минут
  1. Проверьте службу SSH. Выполните:
    student@pc-07:~$ systemctl status ssh
    ● ssh.service - OpenBSD Secure Shell server
         Active: active (running) since …
    Для выхода из просмотра состояния нажмите клавишу q. Возможны три результата проверки:
    1. active (running): служба работает; перейдите к шагу 2.
    2. inactive (dead) или disabled: служба установлена, но не запущена. Выполните sudo systemctl enable --now ssh и повторите проверку.
    3. Unit ssh.service could not be found: SSH-сервер не установлен. Выполните sudo apt update, затем sudo apt install openssh-server, затем повторите проверку.
  2. Определите имя и адрес компьютера. hostname выводит имя, hostname -I выводит IP-адреса; для подключения используется первый адрес вида 192.168.x.x или 10.x.x.x. Внесите оба значения в бланк и в общую таблицу на доске.
  3. Проверьте уникальность имени. Сравните имя своего компьютера с именами в таблице на доске. Если имя совпадает с именем другого компьютера (например, у нескольких компьютеров имя debian), переименуйте компьютер в pc-номер в кольце из двух цифр:
    1. Задайте новое имя: sudo hostnamectl set-hostname pc-07.
    2. Исправьте старое имя в файле /etc/hosts: sudo nano /etc/hosts. В строке 127.0.1.1  debian замените debian на новое имя, сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X). Без этого sudo будет выводить предупреждение unable to resolve host.
    3. Проверьте результат: hostname и cat /etc/hosts.
    4. Закройте окно терминала и откройте новое: приглашение командной строки должно содержать новое имя.
    5. Исправьте имя в таблице на доске.
    Имя может содержать только строчные латинские буквы, цифры и дефис.
  4. Проверьте работу сервера подключением к собственному компьютеру. ssh ваш_логин@localhost. При первом подключении ответьте yes на вопрос о ключе, введите свой пароль, выполните whoami и exit. Успешный вход означает, что SSH-сервер принимает подключения.

Бланк: этап 0

Этап 1. Гостевые учётные записи

роль: владелец · около 8 минут

Создайте отдельную учётную запись для каждого из двух гостей. Логин гостя совпадает с его фамилией, записанной строчными латинскими буквами, например petrov.

  1. Создайте учётную запись первого гостя: sudo adduser petrov. Дважды введите временный пароль. Запросы полного имени, номера комнаты и телефонов пропустите клавишей Enter, в конце подтвердите данные ответом Y.
  2. Создайте учётную запись второго гостя тем же способом.
  3. Проверьте результат:
    1. ls /home: появились каталоги обоих гостей;
    2. id petrov: в списке групп нет группы sudo;
    3. grep petrov /etc/passwd: учётная запись внесена в файл учётных записей;
    4. ls -ld /home/petrov: права drwx------, то есть домашний каталог доступен только самому гостю.
  4. Создайте информационный файл для гостей: nano /tmp/info.txt. Каталог /tmp доступен для чтения всем пользователям системы. Образец содержимого приведён ниже; кодовое слово после КОД: выберите самостоятельно. Сохраните файл и проверьте его содержимое командой cat /tmp/info.txt.
    Компьютер: pc-07
    Владелец: Анна Смирнова
    КОД: маяк
    Регистрационный файл: /tmp/session-<логин гостя>.txt
    Завершение сеанса: команда exit
  5. Сообщите данные для входа. Внесите логины гостей и временный пароль в таблицу на доске.

Бланк: этап 1

Этап 2. Работа на удалённых компьютерах

роль: гость · около 15 минут

Выполните приведённую последовательность действий на каждом из двух компьютеров. Результаты заносите в бланк.

  1. Подключение. ssh petrov@192.168.1.27, где petrov — ваш гостевой логин, а адрес указан в таблице на доске. При первом подключении ответьте yes на вопрос Are you sure you want to continue connecting. Пароль при вводе не отображается. После входа приглашение имеет вид petrov@pc-07:~$.
  2. Определение окружения. whoami, hostname, pwd, id.
  3. Активные сеансы. who выводит пользователей, вошедших в систему в данный момент. Зафиксируйте их число.
  4. Информационный файл владельца. ls /tmp, затем grep "КОД" /tmp/info.txt. Зафиксируйте кодовое слово.
  5. Версия системы. cat /etc/os-release | grep PRETTY.
  6. Границы прав. Выполните sudo whoami и ls /home/логин_владельца. Обе команды должны завершиться отказом. Зафиксируйте текст сообщений. Ожидаемые варианты: is not in the sudoers file (или sudo: command not found, если sudo на компьютере не установлен) и Permission denied.
  7. Регистрационный файл сеанса.
    1. mkdir session && cd session
    2. echo "Гость: Пётр Петров" > note.txt
    3. date >> note.txt
    4. echo "КОД владельца: маяк" >> note.txt
    5. cp note.txt /tmp/session-petrov.txt
    6. cat /tmp/session-petrov.txt
  8. Завершение сеанса. exit. Убедитесь с помощью команды hostname, что командная строка вновь относится к вашему компьютеру.

Дополнительные задания

  1. Выполните одну команду на удалённом компьютере без входа в оболочку: ssh petrov@192.168.1.27 hostname.
  2. Передайте файл со своего компьютера в домашний каталог гостя: scp ~/terminal-lab/notes/linux.txt petrov@192.168.1.27:~/session/.
  3. Определите число созданных на удалённом компьютере регистрационных файлов: find /tmp -name 'session-*'.

Типичные ошибки подключения

СообщениеПричина и действие
Connection refusedНа удалённом компьютере не запущен SSH-сервер. Владелец повторяет этап 0, шаг 1.
Connection timed out, No route to hostНеверный IP-адрес. Сверьте адрес с выводом команды hostname -I на компьютере владельца.
Permission denied, please try againНеверный логин или пароль. Логин вводится строчными буквами.
REMOTE HOST IDENTIFICATION HAS CHANGEDРанее этот адрес принадлежал другому компьютеру. Удалите сохранённый ключ: ssh-keygen -R 192.168.1.27.

Бланк: этап 2

Удалённый сеанс 1
Удалённый сеанс 2

Этап 3. Аудит и удаление гостевых учётных записей

роль: владелец · около 7 минут

Установите по системным журналам, какие пользователи и когда подключались к вашему компьютеру, проверьте регистрационные файлы гостей и удалите гостевые учётные записи.

  1. Текущие сеансы. Во время сеанса гостя who показывает его логин и адрес, с которого выполнено подключение.
  2. Журнал входов по SSH. sudo journalctl -u ssh --since today | grep Accepted. Каждая строка содержит время, логин и IP-адрес гостя, например Accepted password for petrov from 192.168.1.31.
  3. Попытки использовать sudo. sudo journalctl -t sudo --since today | grep petrov. Попытка гостя выполнить команду через sudo зарегистрирована в системном журнале.
  4. Регистрационные файлы гостей. ls -l /tmp | grep session и cat /tmp/session-*.txt. Проверьте кодовое слово в каждом файле и владельца файла по выводу ls -l.
  5. Файлы гостя в его домашнем каталоге. sudo ls -l /home/petrov/session. Администратор имеет доступ к домашним каталогам всех пользователей, тогда как гостю домашний каталог владельца недоступен.
  6. Удаление учётных записей. Убедитесь командой who, что гостей в системе нет. Затем для каждого гостя: sudo deluser --remove-home petrov. Если команда сообщает, что пользователь используется процессом, завершите процессы пользователя: sudo pkill -u petrov, и повторите удаление.
  7. Удаление файлов квеста. sudo rm /tmp/info.txt /tmp/session-*.txt. Регистрационные файлы принадлежат гостям, поэтому для их удаления требуются права администратора.
  8. Контроль. Вывод команд ls /home и grep petrov /etc/passwd не содержит гостевых учётных записей.
Работа считается завершённой только после удаления гостевых учётных записей: учётная запись, пароль которой известен другим лицам, является уязвимостью системы.

Бланк: этап 3

Гость 1
Гость 2

Критерии оценивания

Максимум 10 баллов. Дополнительные задания этапа 2 засчитываются сверх максимума либо взамен баллов, не полученных вследствие недоступности компьютера другого участника.

РезультатБаллы
Этап 0: SSH-сервер работает, имя компьютера уникально, проверка через localhost выполнена1
Этап 1: две гостевые учётные записи без права sudo, информационный файл в /tmp2
Этап 2: два удалённых сеанса выполнены, бланк заполнен2 + 2
Этап 2: оба кодовых слова верны (сверяется с бланками владельцев)1
Этап 3: журнал входов и попыток sudo проанализирован, бланк заполнен1
Этап 3: гостевые учётные записи и файлы работы удалены1