ОПИСАНИЕ
Первый день на новом сервере. Вы подключились по SSH — и перед вами чёрный экран с мигающим курсором. Никаких кнопок, никаких меню, никакого проводника. Только командная строка. Именно здесь начинается настоящая работа с Linux. Командная строка — это не неудобный реликт прошлого, это самый быстрый и точный инструмент управления сервером. Через 15 минут вы будете ориентироваться в системе как у себя дома.
ЧТО ВЫ УЗНАЕТЕ
Как перемещаться по файловой системе
Как работать с файлами и директориями
Как читать содержимое файлов
Как искать файлы и текст в них
Как получать помощь прямо в терминале
Какие команды критически важны для анализа безопасности
НАВИГАЦИЯ
Первое что нужно знать — где вы находитесь. В Linux вы всегда находитесь в какой-то директории — это называется рабочая директория.
pwd — показывает где вы находитесь прямо сейчас. Print Working Directory. Запускайте эту команду всякий раз когда теряете ориентацию.
cd — смена директории. Change Directory. Основная команда навигации.
pwd # где я нахожусь?
cd /etc # перейти в /etc
cd .. # перейти на уровень выше
cd ~ # перейти в домашнюю директорию
cd - # вернуться в предыдущую директорию
cd /var/log/nginx # перейти по абсолютному пути
ls — список файлов и директорий. Самая используемая команда в Linux.
ls # простой список
ls -l # подробный список с правами, размером, датой
ls -la # включая скрытые файлы (начинаются с точки)
ls -lh # размеры в читаемом формате (KB, MB, GB)
ls -lt # сортировка по времени изменения
ls -ltr # сортировка по времени, старые сначала
ls /etc/ssh # список конкретной директории
Скрытые файлы в Linux начинаются с точки — .bashrc, .ssh, .config. Они не показываются при обычном ls. Флаг -a показывает их все. Злоумышленники часто прячут свои инструменты именно в скрытых файлах и директориях.
РАБОТА С ФАЙЛАМИ И ДИРЕКТОРИЯМИ
mkdir logs # создать директорию
mkdir -p /opt/app/logs # создать всю цепочку директорий
touch file.txt # создать пустой файл
cp file.txt backup.txt # копировать файл
cp -r /etc/nginx /tmp/nginx-backup # копировать директорию рекурсивно
mv file.txt newname.txt # переименовать файл
mv file.txt /tmp/ # переместить файл
rm file.txt # удалить файл
rm -rf /tmp/old-dir # удалить директорию со всем содержимым
Про rm -rf отдельный разговор. Это одна из самых опасных команд в Linux. В современных системах rm -rf / защищён — система выдаст ошибку «Operation not permitted». Но rm -rf /tmp/mydir/ или rm -rf /var/www/ — удалит всё без вопросов и без возможности восстановления. Один лишний пробел или слеш — и вы можете уничтожить нужные данные. Всегда проверяйте путь перед выполнением — запустите ls на том пути который собираетесь удалять.
ЧТЕНИЕ ФАЙЛОВ
cat /etc/hostname # вывести весь файл целиком
cat /etc/ssh/sshd_config # прочитать конфиг SSH
less /var/log/auth.log # постраничный просмотр (q для выхода)
head /var/log/syslog # первые 10 строк файла
head -20 /var/log/syslog # первые 20 строк
tail /var/log/auth.log # последние 10 строк
tail -50 /var/log/auth.log # последние 50 строк
tail -f /var/log/auth.log # следить за файлом в реальном времени
tail -f — команда которую вы будете использовать постоянно при мониторинге. Она показывает новые строки лога в реальном времени по мере их появления. Запустили tail -f /var/log/auth.log и наблюдаете за попытками входа прямо сейчас.
ПОИСК ФАЙЛОВ И ТЕКСТА
# поиск файлов
find / -name "sshd_config" # найти файл по имени
find /etc -name "*.conf" # найти все .conf файлы в /etc
find /tmp -type f -newer /tmp/marker # файлы новее чем marker
find / -perm -4000 -type f # найти все SUID файлы (важно для безопасности!)
find /home -name "*.key" -o -name "*.pem" # найти ключи и сертификаты
# поиск текста в файлах
grep "Failed password" /var/log/auth.log # найти неудачные входы
grep -r "password" /etc/ # рекурсивный поиск в директории
grep -i "error" /var/log/nginx/error.log # без учёта регистра
grep -n "root" /etc/passwd # с номерами строк
grep -v "^#" /etc/ssh/sshd_config # исключить строки с комментариями
find / -perm -4000 — это команда которую стоит запомнить. SUID-файлы запускаются с правами владельца, а не запустившего пользователя. Злоумышленники ищут SUID-файлы чтобы получить права root. Вы должны знать какие SUID-файлы есть в вашей системе и почему.
ПРАВА ДОСТУПА И ВЛАДЕНИЕ
ls -la /etc/ssh/sshd_config # посмотреть права файла
chmod 600 ~/.ssh/id_rsa # установить права на приватный ключ
chmod 755 /usr/local/bin/script.sh # сделать скрипт исполняемым
chown user:group file.txt # изменить владельца файла
chown -R www-data:www-data /var/www # рекурсивно для директории
Вывод ls -la читается так: -rwxr-xr-- — первый символ тип файла (- файл, d директория, l ссылка), потом три тройки прав для владельца, группы и остальных. r — чтение, w — запись, x — выполнение.
ПОЛУЧЕНИЕ ПОМОЩИ
Не нужно знать наизусть все флаги всех команд. Нужно знать как найти нужную информацию прямо в терминале.
man ls # полная документация команды
man ssh # документация SSH
ls --help # краткая справка
info ls # альтернативный формат документации
whatis ls # одна строка — что делает команда
which nginx # где находится исполняемый файл
type cd # тип команды (встроенная, внешняя, алиас)
man — ваш лучший друг. Любая проблема с командой — сначала man. Внутри man: пробел — следующая страница, b — предыдущая, /слово — поиск, q — выход.
ПОЛЕЗНЫЕ КОМБИНАЦИИ
# конвейер — передача вывода одной команды в другую
ls -la /etc | grep "ssh" # найти ssh-файлы в /etc
cat /var/log/auth.log | grep "Failed" | wc -l # посчитать неудачные входы
ps aux | grep nginx # найти процессы nginx
# перенаправление вывода
ls -la /etc > /tmp/etc-list.txt # сохранить вывод в файл
grep "error" /var/log/nginx/error.log >> /tmp/errors.txt # добавить к файлу
cat /etc/nonexistent 2>/dev/null # подавить ошибки
ИСТОРИЯ КОМАНД
history # список всех выполненных команд
history | grep ssh # поиск по истории
!! # повторить последнюю команду
!grep # повторить последнюю команду начинающуюся с grep
Ctrl+R # интерактивный поиск по истории
История команд хранится в ~/.bash_history. При расследовании инцидентов — это ценный источник информации о том что делал пользователь. Злоумышленники часто очищают history командой history -c или удаляют ~/.bash_history. Пустая история у пользователя — повод насторожиться.
ТИПИЧНЫЕ ОШИБКИ
Путаница между / и ~. / — корень файловой системы. ~ — домашняя директория текущего пользователя. cd / и cd ~ ведут в совершенно разные места.
rm без проверки пути. Всегда выполните ls на том пути который собираетесь удалять — убедитесь что там именно то что нужно удалить. rm -rf это необратимо.
Игнорирование man. Половина вопросов «как сделать X в Linux» решается за 30 секунд чтением man. Привыкайте читать документацию прямо в терминале.
Работа в / или /etc без необходимости. Всегда осознавайте где вы находитесь (pwd) перед выполнением команд с rm, mv, cp.
ВАЖНО ЗНАТЬ
Tab — автодополнение. Начните вводить путь или команду и нажмите Tab. Linux дополнит автоматически. Двойной Tab — покажет все варианты. Используйте постоянно — экономит время и предотвращает опечатки.
Ctrl+C — остановить выполняющуюся команду. Ctrl+D — выйти из текущей сессии или интерпретатора. Ctrl+L — очистить экран.
Стрелки вверх/вниз — перемещение по истории команд. Не вводите одно и то же дважды.
Точка в начале имени файла делает его скрытым. .bashrc, .ssh, .config — нормальные скрытые файлы. .malware, .backdoor — красные флаги которые стоит искать при аудите.
ПРОВЕРЬТЕ СЕБЯ
1. Какая команда показывает текущую рабочую директорию?
2. Как показать скрытые файлы командой ls?
3. Чем отличается tail от tail -f?
4. Что делает команда find / -perm -4000 и почему она важна для безопасности?
5. Где хранится история команд пользователя и почему это важно при расследовании инцидентов?
ВЫВОДЫ
Командная строка Linux — это не страшно и не сложно. Десяток команд покрывает 80% повседневных задач администратора. pwd и ls чтобы ориентироваться, cat и tail чтобы читать файлы, grep и find чтобы искать, man чтобы разобраться с остальным. Эти команды — ваш базовый инструментарий на все случаи жизни. Чем раньше они станут рефлексом — тем быстрее вы будете реагировать когда что-то пойдёт не так.