Материалы · эксплуатация Linux-сервера
Методичка
Как вести работу по ТЗ самостоятельно: с чего начать, где искать ответ, как не сломать сервер, как работать в паре через Git и как защитить работу.
Перед началом
- Сделайте снимок виртуальной машины: VirtualBox, меню «Машина» → «Сделать снимок». Если сломаете sudo или вход в систему, вернётесь к снимку за минуту.
- Стенд можно разворачивать заново сколько угодно раз. Запутались — разверните стенд и повторите по журналу.
- Стенды запускаются только в виртуальной машине: они создают и удаляют учётные записи и правила sudo.
- Если в машине нет git:
sudo apt install git.
Порядок работы
- Прочитать ТЗ целиком. Оба в паре, до первой команды. Непонятные слова выписать и найти в лекциях.
- Составить чек-лист. Каждое требование — строка с номером из ТЗ. По нему пара делит работу и отмечает сделанное.
- Осмотреть сервер, ничего не меняя. Что лежит, что работает, от чьего имени, что пишут журналы. Записать в журнал работ.
- Составить план. Порядок шагов важен: то, от чего зависят другие шаги, делают первым.
- Делать маленькими шагами. Одна команда — проверка результата — строка в журнале. Ошибку проще найти сразу, чем через двадцать команд.
- Проверять от имени того, для кого делаете. От своего имени с sudo доступно всё, поэтому доступ роли проверяют через
sudo -u ИМЯ. - Прогнать приёмку. FAIL — найти требование по названию пункта и разобраться, почему оно не выполнено.
- Финальный прогон с нуля. Стенд заново, решение по скрипту или журналу, приёмка, снимок.
Где искать ответ
man команда | полная справка; поиск по тексту — / и слово, следующее совпадение — n, выход — q |
команда --help | краткий список ключей |
man -k слово | какие команды связаны со словом, например man -k group |
man 5 sudoers | формат файла настроек: раздел 5 — форматы файлов |
| сообщение программы | читать целиком: в нём обычно есть путь, имя или номер процесса |
| журналы служб | каталоги журналов из ТЗ; tail, less, grep |
| исходный текст программ | программы на серверах из ТЗ — скрипты, их можно прочитать: less /usr/local/bin/ИМЯ |
| лекции курса | в каждом ТЗ раздел «Куда смотреть» ссылается на нужные части |
Безопасные привычки
- Перед
rmиfind -deleteвыполнить ту же команду со списком и прочитать его. - Перед правкой файла настроек сделать копию:
sudo cp -a файл файл.bak. - Правила sudo — только через
visudo. chmod 777иchmod -Rна системных каталогах не решают проблему доступа, а создают новую.- Сначала TERM, затем проверка, и только потом KILL.
- Не работать постоянно из
sudo -i: каждая команда через sudo попадает в журнал, команды внутриsudo -i— нет.
Частые сообщения
| Сообщение | Что значит | С чего начать |
|---|---|---|
Permission denied | у процесса нет нужного права на файл или на один из каталогов пути | namei -l путь, затем id того, от чьего имени работаете |
Operation not permitted | действие разрешено только root или владельцу: смена владельца, сигнал чужому процессу | выполнить через sudo, если это ваша задача по ТЗ |
command not found | программы нет в каталогах PATH или опечатка | type имя, полный путь /usr/local/bin/имя |
sudo: … is not in the sudoers file | у пользователя нет правил sudo | sudo -l -U имя; правило — через visudo |
parse error in /etc/sudoers.d/… | синтаксическая ошибка в правиле, sudo может отказать всем | править через visudo -f; если sudo уже сломан — откат к снимку ВМ |
useradd: user … already exists | шаг уже выполнен | в скрипте: id имя || useradd … |
userdel: user … is currently used by process | у пользователя есть процессы | pgrep -u имя, завершить, затем повторить |
No space left on device | файловая система заполнена | df -h путь, du -sh путь/* | sort -h |
Device or resource busy | раздел или каталог занят процессом | выйти из каталога, найти процессы, у которых он открыт |
address already in use | порт занят другим процессом | sudo ss -ltnp, найти и остановить процесс |
Terminated / Killed | процесс снят сигналом TERM / KILL | код завершения 143 / 137 |
Git в паре
Репозиторий создаёт практикант 1: GitHub → New repository, затем Settings → Collaborators → добавить напарника. Каждый работает в своей ветке.
git clone https://github.com/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ.git cd РЕПОЗИТОРИЙ git switch -c engineer-1 # … работа: файлы, снимки, журнал git add . git commit -m "ТЗ 1: учётные записи и правило sudo" git push -u origin engineer-1
Дальше на GitHub: Compare & pull request. Напарник открывает вкладку Files changed, повторяет команды на своём стенде и оставляет замечания или Approve. После одобрения — Merge, и оба обновляют main: git switch main, git pull.
Конфликт в runbook.md возникает, когда оба дописали строки в одно место. Git покажет обе версии между метками <<<<<<< и >>>>>>>: оставьте строки обоих в порядке времени, удалите метки, затем git add и git commit.
Защита работы
- Каждый в паре объясняет любую строку журнала, а не только свою часть.
- Типичные вопросы: почему права именно такие; что будет, если убрать этот шаг; как вы нашли причину; как проверили, что требование выполнено.
- Пункт приёмки, выполненный без понимания, считается невыполненным.