Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Справочник основных команд Linux с примерами

 

1 Общая информация

1.1 Основные команды | 1.2 Объединение команд | 1.3 Специальные символы |1.4 Просмотр содержимого файлов | 1.5 nano

1.1 Основные команды

# ls -lash /home # Просмотр содержимого католога

# pwd # Путь к текущему каталогу

# su - # стать root + его переменные окружения

# cd /home # Переход в другой каталог

 

# touch index.htm # Создать новый файл

# mkdir -p /home/name/www/{tools,i} # Создать каталог с подкаталогами

# cp www/index.htm. # Копируем файл в текущий каталог

# cp -la /dir1 /dir2 # Архивирование каталога с подкаталогами

# cp -R /home/name /home/name_bak # Копируем каталог

# cp index.htm{,.bak} # Копируем файл с новым расширением, быстрый backup

# mv -v /home/name_bak /home/name # Перемещение/переименование файлов и каталогов

# rm -Rf /home/name/www # Удаление каталога со всем содержимым

# shred /home/name/www/* # Удаление с перезаписью случайными числами 25 раз

 

# which ls # Полный путь имени/расположение команды

# whatis ls # Очень короткая справка о команде

# whereis grep # Путь к исполняемым файлам, исходным файлам и справочному рук-ву

# ldd /bin/grep # Список необходимых библиотек для работы команды

# ldconfig -n /path/to/libs/ # Добовляем путь к библиотеке(настройка динамического связывания)

 

# date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

# date 031713402011 # Устанавливаем дату: Чтв Мар 17 13:40:00 MSK 2011

# time ls -lash /root # Время выполнение команды

# cal -3 # Календарь на 3 месяца

# set | grep $USER # Список переменных окружения

 

# openssl md5 index.htm.bak # Делаем md5 hash файла

1.2 Объединение команд

# cd /home/name; ls -la #; - последовательное выполнение команд

# ls file.txt && echo "DATA" >>file.txt # && - выполнение команды при условии успешного завершения предыдущих

# ls file1.txt || echo "DATA" >file1.txt # || - выполнение команды при условии, что предыдущая завершилась с ошибкой

# touch $(echo $(date "+%Y-%m-%d").txt) # $() - использование выходных данных одной команды при вызове другой команды

# ls -la /usr/bin | more # | - передача выходных данных одной команды на вход другой команды

# ls > menu.txt # > - перенаправление выходных данных в файл

# wc -l < menu.txt # < - использование содержимого файла в качестве входных данных

# find / -name.profile 2>&1 |less # 2>&1 - поток ошибок туда, куда направлен вывод

 

stdin | 0 | поток ввода | клавиатура

stdout | 1 | поток вывода | терминал

stdin | 2 | поток ошибок | терминал

1.3 Специальные символы (групповые операции)+(см. regexp)

# rm file*.*; rm -Rf /home/name/www/* # * - любое количество(в том числе нулевое) любых символов

# rm foto1?.jpg #? - один произвольный символ

# rm foto[12].[jpgpnif]; rm foto[3-6].jpg# [] - определенный набор символов

# mkdir -p /home/name/www/{tools,i} # {} - определить множество

В именах файлов нельзя использовать:
/ - использовать запрещено
- - нельзя ипользовать в начале имени файла или каталога
{}, *,?, ', ", [, ], \, >, <, |, &, пробел - каждый из этих символовдолжен быть предварен \. Применять не рекомендуется.

# rm -Rf Рабочий\ стол # удаляем папку - Рабочий стол

# rm "Рабочий стол"; rm \[13\]foto.jpg # удаляем [13]foto.jpg

В конфигурационных файлах:
# - комментарий
// - комментарий

1.4 Просмотр содержимого файлов

# cat.bashrc; cat index.htm i/index.htm # вывод содержимого файла\файлов

# less -N /etc/named.conf # постраничный вывод текста с нумерацией строк (с прокруткой файла)

# head -t 20 /etc/named.conf # вывод первых 20 строк файла

# tail -f -n 100 /var/log/messages # вывод последних 100 строк + вывод добавленных строк в реальном времени

# more /etc/named.conf # вывод содержимого файла на экран отдельными страницами

# nano /etc/named.conf # просмотр и релактирование файла

1.5 nano

nano - редактор файлов, более дружелюбный чем vim;)

# nano /etc/hosts # просмотр и релактирование файла

# export EDITOR=nano # делаем nano редактором файлов по умолчанию

· Ctrl-X - закрыть редактор

· Ctrl-O - сохранить

· Ctrl-C - номер строки\текущая позиция

· Ctrl-W - поиск

· Ctrl-W затем Ctrl-T - переход к строке №

· Ctrl-K - вырезать строку

· Ctrl-U - вставить из буфера

· Alt-A - выделение (вне X)

· Alt-6 - копировать в буфер

nano-памятка

2 Система

2.1 Загрузка | 2.2 Hardware | 2.3 Ресурсы и статистика | 2.4 Ограничения | 2.5 Runlevels |2.6 Восстановить пароль root | 2.7 kernel | 2.8 grub | 2.9 Пользователи

2.1 Загрузка

Последовательность при загрузке:

Инициализация BIOS => Загрузчик (grub) => Инициализация ядра (kernel initialization) => выполнение init -> {/etc/rc.d/rc.sysinit, /etc/rc.d/rc, /etc/rc.d/rc[0-6].d/, /etc/rc.d/rc.local} => virtual consoles => X

=> Инициализация BIOS:

Определение переферийных устройств и устройств для загрузки. BIOS читает и выполняет инструкцию расположенную в первом секторе загрузочного устройства. Обычно это первые 512 bytes жесткого диска.

=> Загрузчик:

Первоначальный загрузчик находит и загружает программу загрузки 2 этапа (stage 2) и передаёт ей управление (grub); используется BIOS API; обычное место загрузчика 2 этапа - /boot/. Загрузчик 2 этапа выбирает, находит и загружает ядро и RAM диск (initrd) в память; grub читает конфигурацию из /boot/grub/grub.conf. Подробнее о grub.

=> Инициализация ядра:

Обнаружение устройств. Инициализация драйверов устройств. Монтирование корневой файловой системы в режиме только чтения (read-only). Запуск процесса init.

=> Выполнение init:

init читает /etc/inittab (как загружать систему для каждого runlevel). Определяется run level, директории для запуска скриптов, стартует /etc/rc.d/rc.sysinit: udev, selinux, устанавливаются параметры ядра в /etc/sysctl.conf, устанавливаются часы, загружается keymap, подключается swap, устанавливается hostname, проверяется и перемонтируется корневая файловая система в режиме чтения-записи.

2.2 Hardware

Версия системы, дистрибутив

# uname -a # Версия ядра (kernel version)

# lsb_release -a # Информация о дистрибутиве

# cat /etc/redhat-release # Информация о версии Centos/Redhat

# cat /etc/debian_version # Информации о версии Debian

 

# uptime # Как долго система работает

# hostname # Имя системы (hostname)

# man hier # Информация о системных каталогах, справка

# last reboot # История перезагрузок системы

Оборудование определенное ядром

# dmesg # Обнаруженные устройства и сообщения выводимые при загрузке

# lsdev # информация об установленном оборудовании

# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # Читаем BIOS

 

# cat /proc/cpuinfo # информация о CPU

# cat /proc/meminfo # информация о RAM и swap

# watch -n1 'cat /proc/interrupts' # Просмотр изменений прерываний

# cat /proc/devices # Конфигурация устройств

# lspci -tv # Смотреть PCI устройства

# lsusb -tv # Смотреть USB устройства

# lshal # Смотрим список устройств и их свойства

# dmidecode # Смотреть DMI/SMBIOS: hardware информация из BIOS

 

# grep HIGHMEM /boot/config-$(uname -r) # Узнать максимально возможный размер RAM в системе

# grep --color=tty pae /proc/cpuinfo # если pae-то с ним будет работать xen; vmx(intel),svm(AMD)-для полной виртуализации

2.3 Ресурсы и статистика

Ресурсы RAM и HDD

# free -m # Используемая и свободная оперативная память (-m for MB)

# grep MemTotal /proc/meminfo # Информация о RAM

 

# df # Показать свободное пространство на дисках и смонтированные устройства

# du -sh * # Размер каталога (листинг файлов и подкаталогов)

# du -csh # Размер текущей директории

# du -ks * | sort -n -r # Сортировать по размеру (kbytes)

# ls -lSr # Показать файлы с сортировкой по размеру

Статистика

# top # Статистика процессов cpu

# htop # Текущее состояние системы

# iotop # Анализа потребления дисковой полосы

# atop # Статистика загрузки cpu, блочных устройств, сетевых интерфейсов

# iftop # Наблюдение за трафиком в реальном времени (сеть)

# powertop # Показывает время, затраченное на обслуживание процессором

# dnstop # Анализатор DNS-трафика на интерфейсе

# iptstate # Монитор contrack из iptables, показывает активные трансляции с возможностью их убить

# mpstat 1 # Статистика загрузки процессора

# vmstat 2 # статистика использования виртуальной памяти

# iostat 2 # Статистика I/O (2 s интервал)

# tail -n 500 /var/log/messages # Последнии 500 kernel/syslog сообщений

# tail /var/log/warn # Предупреждения об ошибках, см. syslog.conf

2.4 Ограничения

Ограничения shell/script

# ulimit -a # Смотрим ограничения

# ulimit -n 10240 # Меняем ограничение на количество открытых файлов, только shell

Ограничения user/process

# cat /etc/security/limits.conf

* hard nproc 250 # Ограничения пользовательских процессов

asterisk hard nofile 409600 # Ограничения на открытые файлы приложения

Ограничения на всю систему

# sysctl -a # Смотрим системные ограничения

# sysctl fs.file-max # Максимальное количество открытых файлов

# sysctl fs.file-max=102400 # Меняем максимальное каличество открытых файлов

# echo "1024 50000" > /proc/sys/net/ipv4/ip_local_port_range # диапазон портов

# cat /etc/sysctl.conf

fs.file-max=102400 # Ввод по умолчанию sysctl.conf

# cat /proc/sys/fs/file-nr # Сколько дескрипторов файлов используется

Отключаем ответы сервера на ping

# sysctl net.ipv4.icmp_echo_ignore_all # проверяем значение

# sysctl -w net.ipv4.icmp_echo_ignore_all=1 # отключаем ответ на ping

# чтоб сохранялось при перегрузке

# nano /etc/sysctl.conf

net.ipv4.icmp_echo_ignore_all=1 # выставляем 1 и сохраняем

2.5 Runlevels

Ядро стартует init, init читает /etc/inittab и запускает rc, который в свою очередь стартует скрипты определенного уровня (runlevel). Скрипты находятся в /etc/init.d и ссылаются (линкуются) с /etc/rc.d/rcN.d где N номер runlevel
Уровень запуска по умолчанию указывается в /etc/inittab, обычно это 3 или 5.

# grep default: /etc/inittab

id:3:initdefault:

Уровень запуска можно быстро поменять с init

# init 5 # переход с runlevel 3 на 5

# init 6 # reboot

0 # Выключить, poweroff, shutdown now -h

1, S # Single-User mode

2 # Multi-user без сети

3 # Multi-user с сетью

4 # Не используется

5 # Multi-user с X

6 # Перезагрузка, Reboot

chkconfig - конфигурирует какие программы будут запускаться при запуске OS с определенным runlevel

# chkconfig --list # Список всех init скриптов

# chkconfig --list sshd # Статус sshd

# chkconfig sshd --level 35 on # Запуск sshd на уровне 3 и 5

# chkconfig sshd off # Отключить sshd для всех runlevels

В Debian и основанных на Debian дистрибутивах используется update-rc.d для управления скриптами runlevels. По умолчанию стартует в 2,3,4,5 и выключается в 0,1 и 6.

# update-rc.d sshd defaults # активирует sshd на runlevels по умолчанию

# update-rc.d sshd start 20 2 3 4 5. stop 20 0 1 6. # Применяем аргументы

# update-rc.d -f sshd remove # Выключаем sshd для всех runlevels

# shutdown -h now # Выключаем систему

2.6 Восстановить пароль root

Вариант 1

Когда стартует grub, появляется возможность выбора режима загрузки в grub_boot_screen (иногда при загрузке нужно нажать F4)
1.Нажимем <пробел> - попадаем в меню выбора вариантов загрузки kernel и initrd.
2.Нажимаем <e> - для редактирования режима загрузки и дописывем S (загрузка в single user mode).

kernel /vmlinuz-2.6.35.11-83.fc14.i686 ro root=/dev/vg00/logvol00 rhgb quiet S

3.Нажимаем <b> для загрузки с установленным параметром.
4.Выполняем команду и вводим нужный пароль.

#passwd

Смена пароля для пользователя root.

Новый пароль:

Вариант 2

В момент загрузки grub, задаем:

init=/bin/sh

Ядро примонтирует корневой раздел, init запустит shell. Выполняем:

# mount -o remount,rw /

# passwd # или удаляем пароль root в (/etc/shadow)

# sync; mount -o remount,ro / # sync до перемонтирования в read only

# reboot

Вариант 3

1.Загружаемся с внешнего носителя в rescue mode (liveCD или installation CD).
2.Находим корневой раздел с помошью fdisk.
3.Выполняем:

# mount -o rw /dev/ad4s3a /mnt # монтируем корневой раздел в /mnt системы с LiveCD

# chroot /mnt # chroot в /mnt

# passwd

# reboot

2.7 kernel (update kernel)

Варианты ядра для x86:

1.Regular: несколько процессоров, максимально 4GB RAM
2.PAE: 32 процессора, 16GB RAM
3.Xen: поддержка виртуализации

Варианты ядра для x86_64:

1.Regular: 64 процессора, максимально 256GB RAM
2.Xen: поддержка виртуализации
Ядро обычно устанавливается в /boot/vmlinuz-*

# /proc/<PID> # информация о процессах (top,ps)

# /proc/cmdline # boot time опции

# /proc/cpuinfo # CPU

# /proc/mdstat # software RAID (mdadm)

# /proc/meminfo # использование памяти (free, vmstat)

# /proc/swaps # swap

# /proc/modules # загруженные модули (lsmod)

# /proc/mounts # смонтированные файловые системы(mounts)

# /proc/net # сетевая активность и конфигурация (ifconfig,netstat)

# /proc/partitions # block devices

# /proc/version # версия Linux kernel (uname)

Некоторые устройства:

# block devices

# /dev/hda, /dev/hdc # IDE hdd, CD/DVD-ROM

# /dev/sda, /dev/sdb # SCSI, SATA, USB-hdd

# /dev/md0, /dev/md1 # Software RAID

# character devices

# /dev/tty[0-6] # virtual consoles

# /dev/null, /dev/zero # software devices, "ноль"

# /dev/random, /dev/urandome # генератор случайных чисел

2.8 grub

# /sbin/grub-install /dev/hda # обновить MBR

# grub-crypt # получить hash sha-512, для пароля на grub

# nano /boot/grub/grub.conf

password --sha-512 $6$tdi8VPVCnSkGZbjw$oCy/ # вставляем строчку с hash

default=0

2.9 Пользователи

# id # Показывает активного пользователя с логином и группой uid и gid

# last # Выводит список последних логинов (подключений) в стистему

# who # Список подключенных пользователей к системе

# groupadd admin # Добовляет группу "admin" и пользователя myname

# useradd -c "Имя Фамилия" -g admin -m myname

# usermod -a -G <group> <user> # Добовляет существующего пользователя в группу (Debian)

# groupmod -A <user> <group> # Добовляет существующего пользователя в группу (SuSE)

# userdel myname # Удаляет пользователя myname (Linux/Solaris)

В /etc/shadow хранится пара: hash пароля и логин.

# for USER in petr alex vadim sergey # Устанавливаем перечисленным пользователям пароль: password

# do

# useradd $USER

# echo password | passwd --stdin $USER

# done

 

# while read u n # Добовляем пользователей с паролем: password

# do

# useradd --comment "$n" --create-home $u

# echo password | passwd --stdin $u

# done

3 Процессы

3.1 Просмотр процессов | 3.2 Приоритеты | 3.3 Background/Foreground | 3.4 top | 3.5 kill

3.1 Просмотр процессов

<PID> - уникальный номер(идентификатор) процесса

# ps -auxefw # Расширенный список всех запущенных процессов

# ps axww | grep cron

586?? Is 0:01.48 /usr/sbin/cron -s

# ps axjf # Процессы как дерево процессов

# ps aux | grep 'ss[h]' # Найти все ssh pids без grep pid

# pgrep -l sshd # Найти PIDs процессов по имени (части имени)

# echo $$ # PID нашего shell

# fuser -va 22/tcp # Процессы использующие порт 22

# pmap PID # Карта памяти процесса (поиск утечки памяти), используемые библиотеки

# fuser -va /home # Процессы работаюшие с разделом /home

3.2 Приоритеты

Изменить приоритет запущенного процесса можно с renice. Отрицательные числа имеют наивысший приоритет. Границы от -20 до 20

# renice -5 586 # Приоритетный

586: old priority 0, new priority -5

Приоритет запускаемых процессов устанавливаем с nice.

# nice -n -5 top # Высокий приоритет (/bin/nice)

# nice -n 5 top # Низкий приоритет (/bin/nice)

# nice +5 top # Низкий приоритет

nice меняет планировщик CPU, ionice меняет планировщик I/O дисков.

# ionice c3 -p123 # Устанавливает класс idle для pid 123

# ionice -c2 -n0 firefox # Запускает firefox с best effort и высоким приоритетом

# ionice -c3 -p$$ # Устанавливает актуальный shell idle приоритет

Последняя команда удобна для отладки и компиляции больших проектов. Кождая команда запущенная из этого shell будет иметь подобный приоритет (приоритет $$, если $$ PID shell).

3.3 Background/Foreground

Процесс запущенный в shell может быть убран на задний план(Background), а потом вызван на передний план(Foregroun) нажатием <Ctrl>+<Z>. Запускайте процесс с nohup, чтоб он продолжил работу, когда shell будет закрыт.

# ping ya.ru > ping_ya.ru.log

<Ctrl>+<Z> # ping приостановлен, <Ctrl>+<Z>

# bg # убрали в background и продолжили выполнение

# jobs -l # смотрим что в background

[1] - 31574 Running ping ya.ru > ping_ya.ru.log

[2] + 36233 Suspended (tty output) top

# fg %2 # Вызвать процесс в foreground

# nohup ping -i 60 > ping_ya.ru.log &

3.4 Top, htop

Top - выводит информацию в реальном времени о запущенных процессах. Htop - продвинутая версия top, ставится из репозиториев.
<u> [username] Показывает процессы принадлежащие пользователю username
<k> [pid] Убить процесс с pid
<1> Покажет статистику использования процессоров
<R> Сортировка

3.5 Kill, signals

# ping -i 60 ya.ru > ping_ya.ru.log &

[1] 4712

# kill -s TERM 4712 # также kill -15 4712

# killall -1 httpd # Завершить HUP процесс по имени

# pkill -9 http # Завершить TERM процесс по имени (части имени)

# pkill -TERM -u www # Завершить TERM процессы принадлежащие www

# fuser -k -TERM -m /home # Завершить все процессы использующие /home (для umount)

Сигналы:

# -1 HUP # Дать отбой, перегрузка конфигурационных файлов и перезапуск программы

# -2 INT # Прервать

# -3 QUIT # Выйти

# -9 KILL # Прекратить все выполняющиеся действия и завершить работу

# -15 TERM # Мягкое завершение с удаление порожденных процессов и закрытием файлов

4 Файловая система

4.1 Права | 4.2 Информация о дисках | 4.3 Использование дисков | 4.4 Открытые файлы | 4.5 Mount/remount |4.6 Увеличить SWAP | 4.7 Mount SMB | 4.8 Монтируем образ | 4.9 Запись ISO | 4.10 Создать образ |4.11 Memory disk | 4.12 Производительность дисков

Права

1 --x execute/выполнять | Mode 764 = exec/read/write | read/write | read

2 -w- write/писать | For: |-- Owner --| |- Group-| |Oth|

4 r-- read/читать |

ugo=a u=user, g=group, o=others, a=everyone

 

# chmod [OPTION] MODE[,MODE] FILE # MODE имеет вид [ugoa]*([-+=]([rwxXst]))

# chmod 640 /var/log/maillog # Установили log -rw-r-----

# chmod u=rw,g=r,o= /var/log/maillog # Установили log -rw-r-----

# chmod -R o-r /home/* # Рекурсивно запрещаем чтение всем пользователям в /home/*

# chmod u+s /path/to/prog # Устанавливаем SUID bit

# find / -perm -u+s -print # Находим все программы использующие SUID bit

# chown user:group /path/to/file # Меняем хозяина и группу файла

# chgrp group /path/to/file # Меняем группу файла

# chmod 640 `find./ -type f -print` # Меняем права на 640 для всех файлов

# chmod 751 `find./ -type d -print` # Меняем права на 751 для всех директорий

 

# umask 0174 /test

# touch /test/foo

# mkdir /test/dir

# ls -la /test

drw-----wx 2 root root 512 Sep 1 20:59 dir

-rw-----w- 1 root root 0 Sep 1 20:59 foo

4.2 Информация о дисках

# hdparm -I /dev/sda # Информация о IDE/ATA (Linux)

# fdisk /dev/ad2 # Работа с таблицей разделов

# smartctl -a /dev/ad2 # Отобразить информацию SMART

4.3 Точки монтиования, разделы, использование дисков

# mount | column -t # Смонтированные файловые системы

# df # Свободное пространство на дисках

# cat /proc/partitions # Все зарегетсрированные разделы (Linux)

# du -sh * # Список с размерами папок

# du -csh # Размер текущей папки (сумма поддиректорий)

# du -ks * | sort -n -r # Размер в kilobytes с сортировкой

# ls -lSr # Показать файлы, большие в конце

4.4 Блокировка файлов, кто использует файлы?

# umount /home/

umount: unmount of /home # Выполнить umount не возможно, файлы в home заблокированы

failed: Device busy

Найти открытые файлы, для Xorg:

# ps ax | grep Xorg | awk '{print $1}'

# fstat -p 1252

USER CMD PID FD MOUNT INUM MODE SZ|DV R/W

root Xorg 1252 root / 2 drwxr-xr-x 512 r

root Xorg 1252 text /usr 216016 -rws--x--x 1679848 r

root Xorg 1252 0 /var 212042 -rw-r--r-- 56987 w

Файл с inum 212042 нашелся в /var:

# find -x /var -inum 212042

/var/log/Xorg.0.log

Поиск открытых файлов в точках монтирования с fuser или lsof

# fuser -m /home # Список процессов использующих /home

# lsof /home

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

tcsh 29029 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)

lsof 29140 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)

Приложение:

ps ax | grep Xorg | awk '{print $1}'

# lsof -p 3324

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log

Файл:

# lsof /var/log/Xorg.0.log

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log

4.5 Mount/remount

# mount /cdrom #если есть в /etc/fstab

/dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0 #строчка из /etc/fstab

# mount -t auto /dev/cdrom /mnt/cdrom # монтруем CD-ROM

# mount /dev/hdc -t iso9660 -r /cdrom # IDE

# mount /dev/scd0 -t iso9660 -r /cdrom # SCSI CD-ROM

# mount /dev/sdc0 -t ntfs-3g /windows # SCSI

 

# mount -o remount,ro / # перемонтирование без размонтирования

# mount -n -o remount,rw / # перемонтировать в режиме чтения|записи

4.6 Увеличиваем SWAP

Иногда нужно увеличить swap, прямо сейчас, на лету

# dd if=/dev/zero of=/swap2gb bs=1024k count=2000

# mkswap /swap2gb # создаем место для swap

# swapon /swap2gb # запускаем swap. сейчас используется swap

# swapoff /swap2gb # отключаем swap

# rm /swap2gb

4.7 Монтируем SMB share

cifs использует ip или DNS имя

# smbclient -U user -I 192.168.1.2 -L //smbshare/ # Смотрим шары

# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare

# mount -t cifs -o username=winuser,password=winpwd //192.168.1.2/myshare /mnt/share

Если используется mount.cifs, то можно хранить учетные данные в файле /home/user/.smb:

username=winuser

password=winpwd

Монтируем:

# mount -t cifs -o credentials=/home/user/.smb //192.168.1.2/myshare /mnt/smbshare

4.8 Монтируем image (образ)

# mount -t iso9660 -o loop file.iso /mnt # Монтируем CD-image

# mount -t ext3 -o loop file.img /mnt # Монтируем образ с ext3 fs

4.9 Создание и запись ISO образа

Без conv=notrunc содержимое будет меньше объема диска, если данные не занимают весь диск (DVD запишем на CD).

# dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc

Используем mkisofs для создания CD/DVD образа из файлов в папке. Для переодоления ограничений на имена файлов: -r разрешает Rock Ridge расширения для UNIX истем, -J разрешает Joliet расширения используемые Microsoft ОС. -L разрешает имена согласно ISO9660.

# mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir

Запись:

# cdrecord -scanbus # Находим устройство для записи (1,0,0)

# cdrecord dev=1,0,0 imagefile.iso

 

# cdrecord dev=ATAPI -scanbus # Можно использовать native ATAPI

Конвертируем Nero.nrg файл в.iso

 

# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300 # Nero просто добавляет 300Kb заголовок к нормальному iso

4.10 Монтируем образ (файл как образ)

# dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024

# mkfs.ext3 /usr/vdisk.img

# mount -o loop /usr/vdisk.img /mnt

# umount /mnt; rm /usr/vdisk.img # Очистили

/dev/zero быстрее urandom, но менее безопасный.

# dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024

# losetup /dev/loop0 /usr/vdisk.img # Создали и определили /dev/loop0

# mkfs.ext3 /dev/loop0

# mount /dev/loop0 /mnt

# losetup -a # Проверка использования loops

# umount /mnt

# losetup -d /dev/loop0 # Удаление

# rm /usr/vdisk.img

4.11 Memdisk

Tmpfs очень быстрая файловая система для IO приложений. Создадим 64 MB раздел, смонтируемый в /memdisk:

# mount -t tmpfs -osize=64m tmpfs /memdisk

4.12 Производительность дисков

# time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000 # Читаем и пишим 1GB в /home (/dev/ad4s3c)

# time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file

# hdparm -tT /dev/hda

5 Сеть

5.1 Устранение ошибок | 5.2 Routing | 5.3 Дополнительный IP | 5.4 Сменить MAC | 5.5 Порты | 5.6 Firewall |5.7 Разрешить роутинг | 5.8 NAT | 5.9 DNS | 5.10 DHCP | 5.11 Анализ трафика | 5.12 QoS | 5.13 NIS |5.14 Netcat (nc)

5.1 Устранение ошибок (+ анализ трафика)

# arping 192.168.1.2 # Ping на канальном уровне (ethernet layer)

# tcptraceroute -f 5 zabrosov.ru # Используем tcp вместо icmp для трассировки через firewalls

# ping zabrosov.ru

# traceroute zabrosov.ru # Маршрут до zabrosov.ru

# netstat -s # Сетевая статистика для каждого протокола системы

Работа с NIC

# ethtool eth0 # Смотрим свойства nic

# ethtool -s eth0 speed 100 duplex full # Устанавливаем 100Mbit Full duplex

# ethtool -s eth0 autoneg off # Отключаем auto negotiation

# ethtool -p eth1 # Мигнуть светодиодом (если поддерживается)

# ip link show # Показать все интерфейсы (или ifconfig)

# ip link set eth0 up # Включить eth0 (или отключить - down)

# ifconfig eth0 up # Включить eth0 (или отключить - down)

# ip addr show # Посмотреть все IP (аналог ifconfig)

# ip neigh show # arp

# arp -a # Работа с arp

eth0 из shell

# Вывод списка NIC с сортировой

# ifconfig | sed 's/ / /g' | cut -d" " -f1 | uniq | grep -E "[a-z0-9]+" | sort -r

# Вывод всех IP машины с сортировой

# ifconfig | sed '/.*inet addr:/!d;s///;s/.*//'|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n

 

# nano /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

BROADCAST=192.168.1.255

HWADDR=00:C0:26:30:EA:32

IPADDR=192.168.1.2

NETMASK=255.255.255.0

NETWORK=192.168.1.0

ONBOOT=yes

GATEWAY=192.168.1.1

TYPE=Ethernet

USERCTL=no

IPV6INIT=no

PEERDNS=yes

5.2 Routing

# route -n

# netstat -rn

# ip route

Добавить/удалить маршрут

# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.1.2

# ip route add 192.168.20.0/24 via 192.168.1.2 # Аналог

# route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0

# route add default gw 192.168.1.2

# ip route add default via 192.168.1.2 dev eth0 # Аналог

# route delete -net 192.168.20.0 netmask 255.255.255.0

5.3 Дополнительный IP

# ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # Первый IP

# ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # Второй IP

# ip addr add 192.168.50.254/24 dev eth0 # Аналог

# ip addr add 192.168.51.254/24 dev eth0 label eth0:1

5.4 Сменить MAC

# ifconfig eth0 down

# ifconfig eth0 hw ether 00:01:02:03:04:05

Wireless:

 

5.5 Занятые порты

# netstat -an | grep LISTEN

# lsof -i # Просмотр всех соединений

# socklist # Список открытых сокетов

# netstat -anp --udp --tcp | grep LISTEN

# netstat -tup # Активные соединения

# netstat -tupl # Список открытых портов системы

5.6 Firewall

# iptables -L -n -v # Листинг правила

Open the iptables firewall

# iptables -P INPUT ACCEPT # Разрешить все

# iptables -P FORWARD ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -Z # Обнулить все счетчики во всех цепочках

# iptables -F # Очистить все цепочки

# iptables -X # Удалить все цепочки

5.7 Разрешить роутинг

# cat /proc/sys/net/ipv4/ip_forward # Проверка IP forward 0=off, 1=on

# echo 1 > /proc/sys/net/ipv4/ip_forward

 

или редактируем /etc/sysctl.conf with:

net.ipv4.ip_forward = 1

5.8 NAT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # NAT

# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \

--to 192.168.1.44:22 # Проброс 20022 порта на внутренний IP порт ssh

# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \

--to 192.168.16.254:993-995 # Проброс портов 993-995

# iptables -L -t nat # Состояние NAT

# netstat-nat -n # смотрим сесси с IPS

Проброс портов можно отменить, заменив в правиле -A на -D.

5.9 DNS

Настройки DNS храняться в /etc/resolve.conf:

nameserver 8.8.8.8

search mydomain.local studdomain.lab

domain mydomain.local

 

# hostname -d # Имя системы (аналог: dnsdomainname)

dig - утилита для тестирования DNS. В качестве DNS сервера используем свободный google dns с ip: 8.8.8.8

# dig zabrosov.ru

;; ANSWER SECTION:

zabrosov.ru. 600 IN A 77.221.130.2

;; SERVER: 8.8.8.8#53(8.8.8.8)

Некоторые полезные запросы:

# dig MX zabrosov.ru

# dig @127.0.0.1 NS zabrosov.ru # Тест локального DNS-сервера (если есть)

# dig @8.8.8.8 NS MX zabrosov.ru # Запрос к внешнему DNS-сервер

# dig AXFR @ns1.infobox.org zabrosov.ru # Получить зону (zone transfer)

# аналог dig

# host -t MX zabrosov.ru # Посмотреть MX записи

# host -t NS -T zabrosov.ru # Получить NS записи через tcp

# host -a zabrosov.ru # Вся информция по домену

Имя по IP адресу (in-addr.arpa., обратная зона). Используется dig, host and nslookup:

# dig -x 77.221.130.2

# host 77.221.130.2

# nslookup 77.221.130.2

Для локального преобразовния имен (в рамках системы) можно использовть файл /etc/hosts:

# cat /etc/hosts

127.0.0.1 myibm localhost.localdomain localhost

192.168.1.2 myibm.zabrosov.local myibm

5.10 DHCP

Интерфейс используемый по умолчанию - eth0

# dhcpcd -n eth0 # Обновить (не всегда работает)

# dhcpcd -k eth0 # Освободить

Полная информация о аренде:

/var/lib/dhclient/dhclient-eth0.leases

5.11 Анализ трафика

Bmon - консольный монитор загрузки сетевых интерфейсов.

Sniff с tcpdump

# tcpdump -nl -i eth0 not port ssh and src \(192.168.1.10 or 192.168.1.15\)

# tcpdump -n -i eth0 net 192.168.1.15 # трафик с/на IP

# tcpdump -n -i eth0 net 192.168.1.0/24 # трафик с/в сеть

# tcpdump -l > dump && tail -f dump # Вывод с записью в файл

# tcpdump -i eth0 -w traffic.eth0 # Информация о трафике записывается в бинарный файл traffic.eth0

# tcpdump -i eth0 -s 0 -w traffic.eth0 # Запись + загрузка в бинарник

# tcpdump -r traffic.eth0 # Читаем из файла

# tcpdump port 80 # Весь трафик на 80 порт и ответы

# tcpdump host google.com # Весь с/на google.com

# tcpdump -i eth0 -X port \(110 or 143\) # Проверка pop и imap на безопасность

# tcpdump -n -i eth0 icmp # Ловим pings

# tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 весь пакет, -A для ASCII

Важные опции:
-A Отображает каждый пакет в открытом виде (текст), без заголовка
-X Показывает пакеты в hex и ASCII
-l Вывод в буффер
-D Печать всех доступных интерфейсов (# tcpdump -D)

 

Nmap

nmap - сканер портов с возможностью определения OS.

# nmap zabrosov.ru # сканирует все зарезервированные TCP порты на хосте

# nmap -sP 192.168.1.0/24 # Узнать занятые IP в сети 1.0/24 (IP, MAC, hostname)

# nmap -sS -sV -O cb.vu # Скрытое SYN сканирование с определением типа и версии ОС

 

# nmap -sX -p 22 192.168.10.10-250 -oN /data/host.txt # Сканирование машин с ip от 10 по 250 \

# на порт ssh с записью в файл

# grep 192.168.10 /data/host.txt > /data/host # Пишем строки с ip адресами в файл

# sed 's/Interesting ports on //g' /data/host | sed 's/://g' |sed 'w /data/host.txt'

# Итог: получаем файл с IP машин, у который открыт ssh порт

pdsh -w [email protected].[10-100] "uptime" | sort -n # параллельная работа с несколькими машинами

5.12 QoS

Ограничение скорости отдачи (Limit upload)

Целесообразно использовать для взаимодействия с DSL устройствами и различными модемами для согласования скорости.

# Для модема с upload 512Kbit. 90% от 512Kbit примерно 480Kbit

# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540

# tc -s qdisc ls dev eth0 # Статус

# tc qdisc del dev eth0 root # Удалить очередь

# tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540

Качество обслуживания (QoS)

tc - используем для приортета VoIP. Пусть VoIP спользует udp на портах 10000:11024 и интерфейс eth0. Команды в примере зададут качество обслуживания для 3 очередей и выделят VoIP для очереди 1 с QoS 0x1e (установлены все биты). По умолчанию потоков в очереди 3 и QoS Minimize-Delay поток в очереди 2.

# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0

# tc qdisc add dev eth0 parent 1:1 handle 10: sfq

# tc qdisc add dev eth0 parent 1:2 handle 20: sfq

# tc qdisc add dev eth0 parent 1:3 handle 30: sfq

# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \

match ip dport 10000 0x3C00 flowid 1:1 # используем диапазон портов сервера

match ip dst 195.96.0.1 flowid 1:1 # и/или сервер IP

Статус и удаление QoS

# tc -s qdisc ls dev eth0 # Состояние очереди

# tc qdisc del dev eth0 root # Удалить все QoS

Расчет диапазона портов и маски: tc фильтр определяет диапазон портов с портом и маской, которые мы будемем использовать для расчета. Определим 2^N границы диапазона портов, расчитаем диапазон и переведем в HEX. Это и есть маска. Например для 10000 -> 11024, диапазон 1024.

# 2^13 (8192) < 10000 < 2^14 (16384) # граница 2^14 = 16384

# echo "obase=16;(2^14)-1024" | bc # маска 0x3C00

5.13 NIS

# ypwhich # вернуть имя сервера YP с оригиналом базы данных

# domainname # NIS domain name

# ypcat group # Показать группы с NIS сервера

# cd /var/yp && make # Перестроить YP базу

# rpcinfo -p servername # Отчет о RPC сервисах на сервере

 

# ps auxww | grep ypbind # статус NIS

/usr/sbin/ypbind

# yppoll passwd.byname

Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007

The master server is servername.domain.net.

 

# cat /etc/yp.conf

ypserver servername

domain domain.net broadcast

5.14 Netcat (nc)

Создаёт или читает/пишет TCP/IP соединения

Передать файл

Копирование файлов по сети напрямую по tcp. Копирование быстрое и не нужно создвать ftp, smb и т.д, мы просто делаем файлы доступными по сети. Пусть 192.168.1.1 IP сервера.

# Передача папки

server# tar -cf - -C VIDEO_TS. | nc -l -p 4444 # Сделаем архив папки и прикрепим на 4444 порт

client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS # Получим файл с порта 4444 и распакуем

server# tar -czf - /etc/ | nc -l 3333 # Быстрый backup

client# nc 192.168.1.1 3333 | pv -b > mybackup.tar.gz

# Передача файла

server# cat largefile | nc -l 5678 # Публикуем файл largefile на 5678 порт

client# nc 192.168.1.1 5678 > largefile # Принимаем файл с 5678 порта в новый файл largefile

server#cat backup.iso | pv -b | nc -l 3333 # Передаем файл с информацией о состоянии (прогресс)

client#nc 192.168.1.1 3333 | pv -b > backup.iso # Получаем файл с информацией о состоянии (прогресс)

# Передача образа

server# dd if=/dev/sda0 | nc -l 4444 # Передаем образ раздела

client# nc 192.168.1.1 4444 | dd of=/dev/sda0 # Клонируем раздел

client# nc 192.168.1.1 4444 | dd of=sda0.img # или записываем образ в файл

server# dd if=/dev/hdb5 | gzip -9 | nc -l 3333

client# nc 192.168.1.1 3333 | pv -b > myhdb5partition.img.gz

Сканер портов

# nc -v -w 1 localhost -z 1-5901 |grep succeeded!

Connection to localhost 22 port [tcp/ssh] succeeded!

Connection to localhost 25 port [tcp/smtp] succeeded!

# nc -z 192.168.1.112 1-90

Connection to 192.168.1.112 22 port [tcp/ssh] succeeded!

Connection to 192.168.1.112 80 port [tcp/http] succeeded!

Чат

zabrosov# nc -lp 4444

boss # nc 192.168.1.11 4444

Hacks

# nc -lp 4444 -e /bin/bash # Удаленый shell (server backdoor)

# nc -lp 4444 -e cmd.exe # Удаленый shell для Windows; -e только для win?

# webserver

# while true; do nc -l -p 80 < zabrosov.html; done # Петля на 80 порту, отдаёт html страничку

 

# Бэкап по шифрованному тунелю, с автозакрытием в конце операции

server# cat backup.iso | nc -l 3333

client# ssh -f -L 23333:127.0.0.1:3333 [email protected] sleep 10; nc 127.0.0.1 23333 | pv -b > backup.iso

6 SSH SCP

6.1 Public key | 6.2 Проверка подписи | 6.3 SCP | 6.4 Туннелирование | 6.5 SSH tricks

6.1 Public key аутентификация

Аутентификация - подтверждение подлинности; установление соответствия лица названному им идентификатору.
Авторизация - процесс предоставления определенному лицу прав на выполнение некоторых действий.
Идентификация - присвоение субъектам и объектам идентификатора и/или сравнение идентификатора с перечнем присвоенных идентификаторов.

Используем ssh-keygen для создания пары ключей. ~/.ssh/id_dsa приватный ключ, ~/.ssh/id_dsa.pub публичный ключ.
Копируем публичный ключ на сервер и добовляем его в файл ~/.ssh/authorized_keys2 в вашу домашнюю папку.

# ssh-keygen -t dsa -N ''

# cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2"

Соединяемся с хостом без пароля используя public key аутентификацию

# ssh-keygen -q # Генерируем пару ключей

# nmap -sX -p 22 192.168.10.10-250 -oN /data/host.txt # Сканирование машин с ip от 10 по 250 \

# на порт ssh с записью в файл

# grep 192.168.10 /data/host.txt > /data/host # Пишем строки с ip адресами в файл

# sed 's/Interesting ports on //g' /data/host | sed 's/://g' |sed 'w /data/host.txt'

# Копируем публичный ключ на каждую машиу из списка /data/host.txt

# cat /data/host.txt | while read i; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@"$i"; done

# Копируем /etc/hosts сразу на все хосты из списка

# cat /data/host.txt | while read i; do scp /etc/hosts root@"$i":/etc/; done

6.2 Проверка подписи (fingerprint)

При первом логине на хост, ssh сппросит сохранить ли подпись хоста и является ли этот хост доверенным. Если мы сомневаемся и подозреваем хост в man-in-the-middle attack, то администратор хоста, может отправить вам подпись для сравнения. Получить ей можно с помощью команды ssh-keygen -l

host# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub # RSA key

2048 47:a5:c6:27:78:06:89:f8:97:3d:02:90:17:29:96:a5 /etc/ssh/ssh_host_rsa_key.pub

host# ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub # DSA key (default)

1024 46:b8:07:38:7a:23:ba:bd:d5:b4:ba:27:cd:a9:38:e5 /etc/ssh/ssh_host_dsa_key.pub

 

ssh host

The authenticity of host '192.168.50.55 (192.168.50.55)' can't be established.

RSA key fingerprint is 47:a5:c6:27:78:06:89:f8:97:3d:02:90:17:29:96:a5.

Are you sure you want to continue connecting (yes/no)?

6.3 Безопасная передача файлов

# scp file.txt host-two:/tmp

# scp joe@host-two:/www/*.html /www/tmp

# scp -r joe@host-two:/www /www/tmp # Копируем папки, -r рекурсия

# с помощью опции -P, указываем на какой порт подключаемся, если ssh на 2525 порту.

# scp -P 2525./file_to_copy root@remote_host:/tmp/copied_file

6.4 Туннелирование (Tunneling)

SSH туннелирование позволяет перенаправлять порты через SSH соединения, тем самым обеспечивая трафик и доступ к портам, которые иначе были бы заблокированы. Работает только для TCP.

# localhost:localport <- destport:gate

# ssh -L localport:desthost:destport user@gate # Хост назначения будет представлять из себя локальный порт

# localhost:localport -> destport:gate

# ssh -R destport:desthost:localport user@gate # Локальный порт будет перенаправлен на указанный порт удаленного хоста

# ssh -X user@gate # Форвардинг Х сеанса

Прямое перенаправление на шлюз

Нужно получить доступ к CVS (порт 2401) и http (порт 80), запущенных на удаленном хосте. Мы подключаем к локальному порту 2401, соответствующий порт удаленного хоста, а для доступа к удаленному порту 80 используем локальный порт 8080. Единожды открыв ssh сессию, все соответствующие сервисы удаленного хоста, будут доступны на локальных портах.

# ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate

Форвардинг портов Netbios и RDP

# ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gate

Теперь SMB шара доступна по адресу \\127.0.0.1\, но только если отключена локальные шара, поскольку локальная шара тоже использует 139 порт. Что-бы иметь возможность оставить локальные расшаренные русурсы включенными, нужно создать новый виртуальный интерфейс с новым IP адресом для создания туннеля, SMB шара будет подключена через этот IP адрес. Кроме того, локальный RDP уже использует порт 3389, поэтому мы выбираем 3388. Для приведенного ниже примера, будем использовать виртуальный IP адрес 10.0.0.1.
Создаем loopback интерфейс с IP адресом 10.1.1.1:

# System->Control Panel->Add Hardware # Добавляем новое устройство

# Устанавливаем устройство выбрав его вручную Network adapters -> Microsoft -> Microsoft Loopback Adapter.

Настраиваем IP адрес созданного устройства на 10.1.1.1 маска 255.255.255.0, без шлюза.

advanced-> WINS, Enable LMHosts Lookup; Disable NetBIOS over TCP/IP.

# Enable Client for Microsoft Networks. # Отключить общие файлы и принтеры для сетей Microsoft

Подключение клиентов, находящихся за NAT

Есть две машины, находящиеся за NAT шлюзом, клиенты имеют доступ к Linux-шлюзу по ssh. Поскольку будут использованы порты, выше 1024, root доступ не понадобится. На шлюзе мы используем порт 2022.

cliuser# ssh -R 2022:localhost:22 user@gate # Форвардинг порта клиента 22, на порт 2022, шлюза

cliadmin# ssh -L 3022:localhost:2022 admin@gate # Форвардинг порта клиента 3022, на порт 2022 шлюза

cliadmin# ssh -p 3022 admin@localhost # local:3022 -> gate:2022 -> client:22

Подключение к рабочему столу, расположенному за NAT

Нужно получить доступ к Windows клиенту с VNC слушающем на 5900 порту.

cliwin# ssh -R 15900:localhost:5900 user@gate

cliadmin# ssh -L 5900:localhost:15900 admin@gate

cliadmin# vncconnect -display:0 localhost

Multi-hop ssh tunnel

Мы не можете получить прямой доступ к ssh сервера,а возможно это только через промежуточные хосты(например из-за проблем с маршрутизацией), но получить соединение клиент-сервер необходимо, к примеру что-бы скопировать файлы через SCP или пробросить порт для SMB. Сделать это можно, организовав туннель из цепочки хостов. Допустим нам нужно перебросить ssh порт клиента к серверу, в два скачка. Когда туннель будет создан, будет возможно прямое подключение клиент - сервер.

Создание туннеля: cli -> host_1 -> host_2 -> сервер and dig tunnel 5678

cli# ssh -L 5678:localhost:5678 host_1 # 5678 произвольный порт для туннеля

host_1# ssh -L 5678:localhost:5678 host_2 # 5678 с host_1 на host_2

host_2# ssh -L 5678:localhost:22 server # и туннель на порт 22 сервера

client -> server используя туннель и порт 5678

# ssh -p 5678 localhost # Соединение напрямую cli -> server

# scp -P 5678 myfile localhost:/tmp/ # Копируем файлы через туннель

# rsync -e 'ssh -p 5678' myfile localhost:/tmp/ # или rsync

Автосоединение (Autoconnect)

/home/admin/port_forward.sh

#!/bin/sh

COMMAND="ssh -N -f -g -R 3022:localhost:22 admin@gate"

pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND

exit 0

crontab -e

1 * * * * admin /home/admin/port_forward.sh # Поддерживаем соединение

# Другой вариант, не проверял

# while [! -f /tmp/stop ];

do ssh -o ExitOnForwardFailure=yes -R 2222:localhost:22 target "while nc -zv localhost 2222;

do sleep 5; done"; sleep 5;done

6.5 SSH tricks

# ssh-copy-id user@host # Копируем ключ на host, для доступа на host без пароля

# cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys” # Копируем ключ без ssh-copy-id

# ssh -4 -C -c blowfish-cbc # Быстрый и безопасный ssh клиент

# ssh-keygen; ssh-copy-id user@host; ssh user@host # Передаем public key одной командой

# sed -i 8d ~/.ssh/known_hosts # Удалить строку 8, если “ssh host key change”

 

# ssh -N -L2001:localhost:80 user@host # Туннель с host:80 к вашей машине, порт 2001. http://localhost:2001/

# dd if=/dev/dsp |ssh -c arcfour -C username@host dd of=/dev/dsp # Передача звука микрофона на удаленный host

# ssh user1@local_server 'play /usr/share/sounds/gaim/arrive.wav # Удаленное выполнение команды

# ssh user@host cat /path/to/remotefile |diff /path/to/localfile # Сравнение локального и удаленного файлов

# sshfs name@server:/path/to/folder /path/to/mount/point # Монтируем через ssh

# ssh -t reachable_host ssh unreachable_host # Соеденение через хост

# Копируем с host1 на host2 через наш компьютер

# ssh root@host1 “cd /somedir/tocopy/ && tar -cf –.” | ssh root@host2 “cd /samedir/tocopyto/ && tar -xf -”

# ssh -fX user@host firefox # Удаленный запуск GUI программ

# ssh -t remote_host screen -r # screen через ssh

# ssh host -l user “`cat cmd.txt`” # Комплексное выполнение команд через ssh

 

# mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME

| ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME” # Dumps MySQL DB на новый сервер

 

# yes | pv | ssh $host “cat > /dev/null” # Скорость ssh соединения, yum install pv

# ssh -t [email protected] /usr/bin/screen -xRR #Сохранить удаленную сессию screen для re-connect

# rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file # Копируем большой файл. rsync на обоих машинах

# autossh -M50000 -t server.example.com ‘screen -raAd mysession’ # SSH сессия открыта всегда, помогает если теряется соединение

# tar -cj /backup |cstream -t 777k |ssh host ‘tar -xj -C /backup’ # Ограничиваем скорость с cstream до 777k bit/s

# ssh user@host cat /path/to/some/file | xclip # Копируем stdin в наш X11 buffer

# while read server; do ssh -n user@$server "command"; done < servers.txt # запускаем команды из списка на сервере

Постоянное соединение:

# ssh -MNf user@host # Создать постоянное соединение с машиной, удобно для rsync/sftp/cvs/svn, работает в bg

# Редактируем ~/.ssh/config или /etc/sshd_config

ControlPath ~/.ssh/master-%r@%h:%p

ControlMaster no

 

Port Knocking

# knock host 3000 4000 5000 && ssh -p port user@host && knock host 5000 4000 3000

 

# Установить knock. Обращаемся к определенным портам, чтоб от крыть доступ к ssh, а потом его закрыть.

# nano /etc/knockd.conf:

[options]

logfile = /var/log/knockd.log

[openSSH]

sequence = 3000,4000,5000

seq_timeout = 5

command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT

tcpflags = syn

[closeSSH]

sequence = 5000,4000,3000

seq_timeout = 5

command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT

tcpflags = syn

7 VPN с SSH

7.1 P-2-P | 7.2 Lan-2-Lan

OpenSSH поддерживает устройства tun/tap, позволяющие создавать шифрованный туннель. Плюс протокола SSH в том, что для реализации не нужно устанавливать и настраивать дополнительный софт, минус - низкая производительность на медленных линиях.

В /etc/ssh/sshd_config, должны стоять опции:

PermitRootLogin yes

PermitTunnel yes

7.1 P-2-P

Соединим два хоста client и server. Соединение инициирует client к server, при этом он должен обладать правами root. Конечные адреса туннеля 10.0.0.1 (server) и 10.0.0.2 (client), кроме того мы создаем устройство tun1.

# modprobe tun # Проверка поддержки tun ядром

 

client# ssh -w1:1 root@server

server# ifconfig tun1 10.0.1.1 netmask 255.255.255.252 # Выполняем в server shell

 

client# ifconfig tun1 10.0.1.2 netmask 255.255.255.252 # SSH клиент

7.2 Lan-2-Lan

Есть две сети, их нужно соединить, сеть А с адресом 192.168.51.0/24 и сеть Б с адресом 192.168.16.0/24. 192.168.51.0/24 (сеть A)|шлюз A <-> шлюз Б|192.168.16.0/24 (сеть Б)

# сеть B

gateA># ssh -w5:5 root@gateB

gateB># ifconfig tun5 10.0.1.1 netmask 255.255.255.252

gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5

gateB># echo 1 > /proc/sys/net/ipv4/ip_forward

gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# сеть A

gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252

gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5

gateA># echo 1 > /proc/sys/net/ipv4/ip_forward

gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

8 Backup

8.1 rsync | 8.2 tar | 8.3 dd

8.1 rsync

rsync используется для удаленного копирования (локально тоже используется) или синхронизации файлов и каталогов. Может практически целиком заменить cp и scp, поддерживает сжатие и рекурсию, прерванные передачи можно перезапустить.

# rsync -a /home/zabrosov/ /backup/zabrosov/ # "archive" mode

# rsync -a /var/ /var_bak/

# rsync -aR --delete-during /home/user/ /backup/ # Используется относительный путь

Копируем через сет с компрессией. По-умолчанию, Rsync использует для передачи протокол SSH в том числе и с ключами, если таковые имеются. Символ ":" используется как в SCP.

rsync -axSRzv /home/user/ user@server:/backup/user/

Исключить из процесса удаленного копирования директорию tmp в /home/user/ и сохранить иерархию, удаленная директория будет иметь структуру /backup/home/user/:

# rsync -azR --exclude /tmp/ /home/user/ user@server:/backup/

# rsync -az -e 'ssh -p 20022' /home/colin/ user@server:/backup/colin/ # Использовать 20022 порт для SSH

Можно использовать rsync с "::", это гораздо быстрее, но трафик не шифруется. Местонахождение папки для резервного копирования (например /backup) можно настроить в файле /etc/rsyncd.conf. Переменная RSYNC_PASSWORD служит для того, что-бы избежать необходимости ввода пароля вручную.

# rsync -axSRz /home/ user@hostname::rmodule/backup/

# rsync -axSRz user@hostname::rmodule/backup/ /home/ # Обратно

 

# Опции:

-a, --archive # режим архивирования; как -rlptgoD (без -H)

-r, --recursive # обходить директории (рекурсия)

-R, --relative # относительные пути

-H, --hard-links # сохранять жесткие ссылки (hardlink)

-S, --sparse # эффективная обработка файлов

-x, --one-file-system # не пересекать границы файловой системы

--exclude=PATTERN # исключить файлы заданного образца

--delete-during # удаление файлов при передаче (источник)

--delete-after # удаление файлов после передачи

8.2 tar

tar - архивирование файлов и директорий. Сам по себе tar, это не сжатый архив, сжатые архивы имеют расширения.tgz или.tar.gz (gzip) или.tbz (bzip2).

Создание архива tar:

# cd /

# tar -cf home.tar home/ # Создать архив, поместив в него директорию /home (ключ -c, для создания)

# tar -czf home.tgz home/ # То-же, но с gzip компрессией

# tar -cjf home.tbz home/ # То-же, но с bzip2 компрессией

 

# Рекомендуется использовть относительные пути, чтоб можно было распаковать в любое место

# tar -C /usr -czf local.tgz local/etc local/www # Cоздаlbv архив, содержащий директории /usr/local/etc,

# /usr/local/www, директория local/ должна быть началом дерева

# tar -C /usr -xzf local.tgz # Распаковать архив директорию local в дерево /usr

# cd /usr; tar -xzf local.tgz # То-же, что выше

Распаковать архив tar:

# tar -tzf home.tgz # Просмотр содержимого архива без его распаковки (листинг)

# tar -xf home.tar # Распаковать архив в текущую папку(ключ "x" для распаковки)

# tar -xzf home.tgz # То-же для архива с zip компрессией

# tar -xjf home.tbz # То-же для архива с bzip2 компрессией

# tar -xjf home.tbz home/zabrosov.ru/file.txt # Распаковать один файл

Полезно:

# tar c dir/ | gzip | ssh user@remote 'dd of=dir.tgz' # Создать архив, содержащий директорию dir/ и сохранить удаленно

# tar cvf - `find. -print` > backup.tar # Создать архив с текущей директорией

# tar -cf - -C /etc. | tar xpf - -C /backup/etc # Копировать директории

# tar -cf - -C /etc. | ssh user@remote tar xpf - -C /backup/etc # Удаленное копирование

# tar -czf home.tgz --exclude '*.o' --exclude 'tmp/' home/ # Создать архив с сжатием, исключив '*.o', tmp/

8.3 dd

dd (disk dump или destroy disk) - используется для копирования (конвертирования) дисков, разделов, и прочих операций копирования.

Синтаксис:

# dd if=<source> of=<target> bs=<byte size> conv=<conversion>

# Опции conv:

notrunc # Не обрезать нули в файле на выходе, записывая их как нули

noerror # Продолжать после ошибок чтения

sync # Дополнять каждый входящий блок нулями до размера ibs-size

Размер входных данных по-умолчанию 512 байт (1 блок). Увеличение размера блока ускоряет процесс копирования, но требует больше памяти.

Резервное копирование и восстановление

# dd if=/dev/hda of=/dev/hdc bs=16065b # Копировать с диска на диск с таким-же размером

# dd if=/dev/sda7 of=/home/root.img bs=4096 conv=notrunc,noerror # Резервное копирование в файл образа

# dd if=/home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # Восстановление из файла образа

# dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz # Сделать резервную копию и заархивировать в Zip

# gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M # Восстановить из архива

# dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # Что и выше, удаленно

# gunzip -dc ad4s3e.gz | ssh root@host 'dd of=/dev/ad0s3e bs=1M'

# dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror # Пропустить MBR (Master Boot Record)

# Необходимо если диск назначения (ad2) меньше

Recover

dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию conv=sync,noerror, при этом dd будет пропускать битые блоки и записывать нули на диск назначения. Поэтому важно, установить размер блока, равным, или меньшим, чем размер блока на диске. Вполне подходящим будет размер блока в 1 килобайт, установить размер на входе и выходе можно опцией bs=1k. Если на диске имеются сбойные сектора, но основные данные нужно сохранить с данного раздела, можно создать файл образа, смонтировать образ и копировать данные на новый диск. С установленной опцией noerror, dd пропустит поврежденные блоки, записав на их место нули, при этом, потеряны будут, только данные, содержавшиеся в сбойных секторах диска.

# dd if=/dev/hda of=/dev/null bs=1m # Проверить на наличие бэд блоков

# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh root@fry 'dd of=hda1.gz bs=1k' # Отправить на удаленный хост

# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img # Сохранить в образ

# mount -o loop /hda1.img /mnt # Создание и монтирование образа

# rsync -ax /mnt/ /newdisk/ # Копировать на новый диск

# dd if=/dev/hda of=/dev/hda # Обновить

# Обновление диска, безопасная операция, но диск при этом должен быть размонтирован

Удаление данных

# dd if=/dev/zero of=/dev/hdc # Удалить все данные с диска (забивает диск нулями)

# dd if=/dev/urandom of=/dev/hdc # Удалить все данные с диска (более предпочтительный вариант, но дольше)

# kill -USR1 PID # Посмотреть текущее состояние dd

MBR

MBR содержит код загрузчика и таблицу разделов. Первый 466 байт отводятся под загрузчик, 466-512 байт под таблицу размещения разделов.

# dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1 # Сделать резервную копию MBR

# dd if=/dev/zero of=/dev/sda bs=512 count=1 # Удалить MBR и таблицу размещения разделов

# dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1 # Восстановить MBR целиком

# dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1 # Восстановить только загрузчик

# dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Восстановить таблицу размещения разделов

9 sudo

sudo - повысить уровень привелегий, дать права на выполнение, без выдачи пароля на root.

# sudo /etc/init.d/dhcpd restart # Запустить стартовый скрипт от имени root

# sudo -u sysadmin whoami # Запустить команду от имени другого пользователя

sudo конфигурируется в файле /etc/sudoers или с помощью команды visudo

user hosts = (runas) commands # В /etc/sudoers, базовый синтаксис. разделитель:,

 

users - один или более пользователей или %group (например %wheel) для расширения прав доступа

hosts - список хостов (или ALL)

runas - список пользователей (или ALL) от чьего имени могут выполняться


<== предыдущая | следующая ==>
Глава ccxXXII | Источники для исследовательской работы

Date: 2015-06-08; view: 703; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию