воскресенье, 18 августа 2013 г.

Грабли. Максим Мошков. Истории из жизни администратора Unix

  Максим Мошков. Истории из жизни администратора Unix, или Грабли

  История 1 со счастливым концом. Испорченный /etc/passwd
  > Один товарищ (не я :), это из Коми) решил своему root'y вместо положенного > /sbin/sh сделать /bin/ksh > Для чего отредактировал /etc/passwd, но неудачно, ошибся и назначил > /sbin/ksh. > Пробовали: > $ su root -c /sbin/sh > Не помогло. Теперь он горько плачет и хакера зовет. > Можешь помочь, или суровое: переустанови юних?
 Это мы проходили. Классика. Перво- наперво "никогда, НИКОГДА не меняй shell у суперюзера..." :-)
 0. Запустить shell из-под root'а все-таки можно: su root -m -s /bin/sh
 Но если еще и пароль забыт, тогда - поможет загрузка в single user mode или загрузка с CD/floppy/tape
 1. Дать команду df, посмотреть минор/мажор у девайса, на который монтируется корень, и затем почитать мануал по команде

 mknod # mkdev, mknode, mksf - создать специальный файл
 # или как там еще она называется
 и записать на бумажке команду, которой создается спец-файл /dev/root (или куда там монтируется "/"

 mknod /dev/root b 3 0x000002 # примерно так
 2. Загрузиться с инсталляционного стриммера/дискеты/CD. и там где уход на install/update/system maintance пойти на "system maintence" (это всего навсего root'вый shell)
 Осталось смонтировать /dev/root на /mnt и редактировать /mnt/etc/passwd
  Засада No 1
 Сразу после загрузки мини-системы специальных файлов соответствующих жесткому диску нет (!). Сделать его ручками - команда mknode уже записана на бумажке.
  Засада No 2
 Редактор vi не запускается (Нет terminfo) Ну и черт с ним. Придумаешь что нибудь. Например
 echo "toor::0:0:Yet another Super-User:/:" >> /mnt/etc/passwd
 ^^^^^^
 обрати внимание что >> а не > (Угадай почему :-)

 а можно и так: PATH=$PATH:/mnt/bin:/mnt/usr/bin export PATH TERMINFO=/mnt/usr/lib/terminfo # или где он там
 Короче - ты дома потренируйся, а потом в Коми напиши точные имена файлов и команд, а то боюсь необученный админ сможет промахнуться пару раз, а здесь промахиваться нельзя.

 Приложение: Обход root passwd в Motorola Unix SVR4/88.

 1. Посмотреть major/minor для / и /usr
 104 0 /dev/root 104 3 /dev/dsk/m197_c0d0s3

 2. Загрузка с ленты, уход на maintance .
 3. Подмонтировать разделы диска, соответствующие / и /usr, с восстановлением файловой системы (т.к. система была выключена некорректно при отсутствии root пароля).
 mkdir /mnt mknod /dev/rootn b 104 0 /etc/fs/ufs/fsck /dev/rootn mount -F ufs /dev/rootn /mnt

 аналогично для /usr
 mknod /dev/usr3 b 104 3 /etc/fs/ufs/fsck /dev/usr3 mount -F ufs /dev/usr3 /mnt/usr

 4. Отредактировать /etc/passwd, сделать беспарольного root
 echo "toor::0:1:Adm:/:/sbin/sh" >> /mnt/etc/passwd

 5. Cменить корень root'у (будет в /mnt)
 chroot /mnt /sbin/sh

 6. Обновить shadow
 pwconv
 Все.

  История 2 почти о том же. Испорченный /etc/fstab

 Date: 20 Apr 1997
 From: Bernshtam Pavel (barnshte@CS.bgu.ac.il)
 У меня тоже было - запортил я /etc/fstab и сделал reboot не заметив ошибки - бабах - поднимается (а это был Axil с SunOS 4.1) в single user.
 я делаю ls - Command not found - понятно - не замоунтил /usr
 посмотрел я на другом SUN'е что есть в /sbin - нашел mount, обрадовался - сделал /sbin/mount /usr.
 Есть VI!
 Помучался пока установил нужный set TERM с полчаса - запустил VI. открываю fstab - фигня со строками (вот оно - не работайте в PICO, учите VI !!!), исправил, save'лю - а root partition то READ ONLY !!!
 Делаю stop-A.
 Слава богу, посоветовали мне, что в boot-мониторе можно сделать b -rw (замаунтить с write), после этого я повторил всю процедуру с mount и VI и исправил /etc/fstab.
 а... еще забыл - VI не запускался пока я /var не замаунтил, т.к /tmp - линк на /var/tmp , а VI без /tmp не идет.
 /* а на Linux специальная команда есть - перемонтироваться на read-write - ее из single-user-mode можно выполнить
 mount -n -o remount / */

  Команда rm -rf в SCO

 Ввиду того, что под шаблон ".*" подходит каталог ".." НИКОГДА НЕ ДЕЛАЙТЕ КОМАНДЫ rm -r .*

 (Большинство unix'ов прощают подобную ошибку, но НЕ ВСЕ)
 
 From: Павел Северов
 "... решил я на нашем SCO-шном сервере с Oraclовской базой расчистить немного свободного места на диске..."

 # cd /usr/tmp
 # rm -rf *
 гляжу, а там всякий хлам остался /usr/tmp/.X11-0 ну и т.п. А я тогда

 # rm -rf .* # ОЙ!

 # du ldd: Can not open file
 # df ldd: Can not open file
 # ls -al ldd: Can not open file
  . . .

 У этой истории грустный конец. Вы уже догадались, что /usr/tmp/.* содержит в себе /usr/tmp/.. После reboot'а машина, не найдя каталога /usr уже не ожила.

  Удаленный доступ или "Запасной ключ от сейфа лежит в сейфе"

 Хорошая штука, Unix + TCP/IP - можно отконфигурить машину у черта на куличках не вставая с рабочего места и даже не выходя из дома.

  История 1. Вот и я однажды менял то ли IP-адрес, то ли роутинг на удаленной машине... Короче - промахнулся, сказал
 ifconfig eth0 down

 Вот собственно и все. Сказать ifconfig eth0 NEW-IP было уже некому.

 Вы конечно догадались, что _НАДО БЫЛО_ одной строкой писать ifconfig eth0 down ; ifconfig eth0 NEW-IP up ; route add ...

  История 2. Захотелось повысить уровень security. Пишем в /etc/hosts.deny ALL:ALL
 в /etc/hosts.allow ALL:193.263.12.13
 ^^^ вроде бы маленькая ошибочка, цифры переставить, а нельзя - я уже успел отлогиниться.

  Удаленный "доступ" или "Ключа вообще нет"

 Повис у нас однажды сервер, надо reset нажать, перегрузить, а комната заперта, и ключи уже унесли. И telnet'ом не войдешь - некуда.

 Вырубили свет на всем этаже, включили вновь - voila!

  Новая /lib/libc.so - апгрейд LIB C

 Linux. 1993 год. Потребовалось подменить LibC. Ну, вперед, делов-то - старую передвинуть, новую - на ее место.

 cd lib
 mv libc.so libc.so-old
 mv libc.so-new libc.so ldd: Can not execute, shared library not found
 Finish.

 Пришлось грузиться с дискеты, монтировать hd.

 Но, как это ни смешно, в следующий раз те же команды, записанные в одну строку, сработали. Или библиотечка в кэше оказалась... Темна вода в Linuxе. Впрочем, файлы из каталога /sbin - обычно staticaly-linked - им для работы разделяемая libc без надобности.

  История 3. Trusted mode - безопасность превыше всего

 В HP-UX новички администраторы очень любят sam'ом поиграть - GUI, мышиный интерфейс - администрируй на здоровье. Вот только читать сообщения надо - а они по-английски все.
 Очень легко, одним "Ok" в SAM включается перевод системы в trusted режим. Включают, и не замечают. А замечают через пару дней, когда с трех раз не угадают пароль root. В trusted режиме логин после этого блокируется совсем, а другого юзера ПЕРЕД ЭТИМ завести - не догадываются.

 Как всегда - нас спасет single user mode: перехват загрузки в prompt IPL и затем

 IPL> hpux -is
 А затем запуск sam. И переконвертировать систему в "untrusted"

 # mount -a
 # sam

 Но если вы ухитрились еще и пароль на boot включить - то помогайте себе сами.

  История 4. Security class C2: о том же, но в SCO
 Security class C2 - это повышенная безопасность. И повышенный геморрой для пользователей. И для администратора - тоже.
 Привелось нам позвонить на защищенную SCO машину из Москвы в Питер, по модему. Скорости getty с первого раза подобрать не смогли, на логин прорывался 6-битный мусор, после третьей попытки вместо getty Login мы увидели "Intruder attempts, tty line /dev/modem disabled".
 Через пару недель хозяин машины вернулся в Питер и вернул getty.

  Screen-сейвер и кнопка Enter
 Когда screen-saver гасит экран, что вы нажимаете? Не знаю, как остальные, а я жму клавишу CTRL.
 Один мой знакомый решил почистить каталог /tmp. Из-под root'а. Набирает он

 rm -rf /tmp/*, точнее хочет набрать, поскольку в момент
 rm -rf /_ звонит телефон и его куда-то вызывают.
 Через час он вернулся, увидел погашенный экран, и нажал _свою_ любимую клавишу. Угадайте, какую?

  Подключение SCSI диска онлайн
 echo "scsi add-single-device 0 0 {id} {lun}" > /proc/scsi/scsi

  Удаленный /dev/null
 Его, конечно, никто не удалял. Так, ерунда, неосторожно исполненная команда
 mv some/file/name /dev/null
 О том, что /dev/null уже не настоящий /dev/null, стало понятно, когда на корневом разделе кончилось место.
 mknod /dev/null c 1 3 спас бедного кота...

  Изящная форк-бомба
 Запишу ее сюда, чтоб не забыть.
 :(){:|:&};:
 При аккуратном рассмотрении видим реккурсивную функцию, которую тут же и вызываем. В записанном виде работать не будет - ибо пробелы нужны (кое-где)
 Вот для измывательств более безопасный вариант:
 :() { sleep 1; echo j; :; };:

  chmod -x chmod
 Запретить исполнение команде chmod Ломаем: chmod -x /bin/chmod
 Лечим: /lib/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod

Комментариев нет:

Отправить комментарий