среда, 11 января 2017 г.

Администрирование → Памятка пользователям ssh

abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Оглавление:
  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)

Управление ключами


Теория в нескольких словах: ssh может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (я утрирую) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).

Генерация ключа


Свой ключ можно сгенерировать с помощью команды ssh-keygen. Если не задать параметры, то он сохранит всё так, как надо.

Ключ можно закрыть паролем. Этот пароль (в обычных графических интерфейсах) спрашивается один раз и сохраняется некоторое время. Если пароль указать пустым, он спрашиваться при использовании не будет. Восстановить забытый пароль невозможно.

Сменить пароль на ключ можно с помощью команды ssh-keygen -p.

Структура ключа


(если на вопрос про расположение ответили по-умолчанию).
~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ. (Я не шучу, примерно 10% людей, которых просишь дать ssh-ключ постят id_rsa, причём из этих десяти процентов мужского пола 100%).

Копирование ключа на сервер


В каталоге пользователя, под которым вы хотите зайти, если создать файл ~/.ssh/authorized_keys и положить туда открытый ключ, то можно будет заходить без пароля. Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет. В ключе последнее поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.

Если вы знаете пароль пользователя, то процесс можно упростить. Команда ssh-copy-id user@server позволяет скопировать ключ не редактируя файлы вручную.

Замечание: Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.

Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id '-p 443 user@server' (внимание на кавычки).

Ключ сервера


Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо несекьюрно).

Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить).

Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.

Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.

Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.

Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.


Копирование файлов


Передача файлов на сервер иногда может утомлять. Помимо возни с sftp и прочими странными вещами, ssh предоставляет нам команду scp, которая осуществляет копирование файла через ssh-сессию.

scp path/myfile user@8.8.8.8:/full/path/to/new/location/

Обратно тоже можно:
scp user@8.8.8.8:/full/path/to/file /path/to/put/here

Fish warning: Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения. (Я вспомнил свою очень раннюю молодость, когда не зная про scp, я копировал ~5Гб через fish в mc, заняло это чуть больше 12 часов на FastEthernet).

Возможность копировать здорово. Но хочется так, чтобы «сохранить как» — и сразу на сервер. И чтобы в графическом режиме копировать не из специальной программы, а из любой, привычной.

Так тоже можно:

sshfs


Теория: модуль fuse позволяет «экспортировать» запросы к файловой системе из ядра обратно в userspace к соответствующей программе. Это позволяет легко реализовывать «псевдофайловые системы». Например, мы можем предоставить доступ к удалённой файловой системе через ssh так, что все локальные приложения (за малым исключением) не будут ничего подозревать.

Собственно, исключение: O_DIRECT не поддерживается, увы (это проблема не sshfs, это проблема fuse вообще).

Использование: установить пакет sshfs (сам притащит за собой fuse).

Собственно, пример моего скрипта, который монтирует desunote.ru (размещающийся у меня на домашнем комьютере — с него в этой статье показываются картинки) на мой ноут:

#!/bin/bash
sshfs desunote.ru:/var/www/desunote.ru/ /media/desunote.ru -o reconnect


Делаем файл +x, вызываем, идём в любое приложение, говорим сохранить и видим:



Параметры sshfs, которые могут оказаться важными: -o reconnect (говорит пытаться пересоединиться вместо ошибок).

Если вы много работаете с данными от рута, то можно (нужно) сделать idmap:

-o idmap=user. Работает она следующим образом: если мы коннектимся как пользователь pupkin@server, а локально работаем как пользователь vasiliy, то мы говорим «считать, что файлы pupkin, это файлы vasiliy». ну или «root», если мы коннектимся как root.

В моём случае idmap не нужен, так как имена пользователей (локальное и удалённое) совпадают.

Заметим, комфортно работать получается только если у нас есть ssh-ключик (см. начало статьи), если нет — авторизация по паролю выбешивает на 2-3 подключение.

Отключить обратно можно командой fusermount -u /path, однако, если соединение залипло (например, нет сети), то можно/нужно делать это из-под рута: sudo umount -f /path.



Удалённое исполнение кода


ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:

ssh user@server ls /etc/

Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.

Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
ssh user@server -t remove_command

Кстати, мы можем сделать что-то такого вида:
ssh user@server cat /some/file|awk '{print $2}' |local_app

Это нас приводит следующей фиче:

Проброс stdin/out


Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл

ssh user@8.8.8.8 command >my_file

Допустим, мы хотим локальный вывод положить удалённо

mycommand |scp — user@8.8.8.8:/path/remote_file

Усложним пример — мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.1.1.2, который нам не доступен снаружи:

mycommand | ssh user@8.8.8.8 «scp — user@10.1.1.2:/path/to/file»

Есть и вот такой головоломный приём использования pipe'а (любезно подсказали в комментариях в жж):

tar -c * | ssh user@server "cd && tar -x"

Tar запаковывает файлы по маске локально, пишет их в stdout, откуда их читает ssh, передаёт в stdin на удалённом сервере, где их cd игнорирует (не читает stdin), а tar — читает и распаковывает. Так сказать, scp для бедных.

Алиасы


Скажу честно, до последнего времени не знал и не использовал. Оказались очень удобными.

В более-менее крупной компании часто оказывается, что имена серверов выглядят так: spb-MX-i3.extrt.int.company.net. И пользователь там не равен локальному. То есть логиниться надо так: ssh ivanov_i@spb-MX-i3.extrt.int.company.net. Каждый раз печатать — туннельных синдромов не напасёшься. В малых компаниях проблема обратная — никто не думает о DNS, и обращение на сервер выглядит так: ssh root@192.168.1.4. Короче, но всё равно напрягает. Ещё большая драма, если у нас есть нестандартный порт, и, например, первая версия ssh (привет цискам). Тогда всё выглядит так: ssh -1 -p 334 vv_pupkin@spb-MX-i4.extrt.int.company.net. Удавиться. Про драму с scp даже рассказывать не хочется.

Можно прописать общесистемные alias'ы на IP (/etc/hosts), но это кривоватый выход (и пользователя и опции всё равно печатать). Есть путь короче.

Файл ~/.ssh/config позволяет задать параметры подключения, в том числе специальные для серверов, что самое важное, для каждого сервера своё. Вот пример конфига:

Host ric
        Hostname ооо-рога-и-копыта.рф
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.dyndns.org
        User vasya
        PasswordAuthentication no


Все доступные для использования опции можно увидеть в man ssh_config (не путать с sshd_config).


Опции по умолчанию


По подсказке UUSER: вы можете указать настройки соединения по умолчанию с помощью конструкции Host *, т.е., например:

Host *
User root
Compression yes


То же самое можно сделать и в /etc/ssh/ssh_config (не путать с /etc/ssh/sshd_config), но это требует прав рута и распространяется на всех пользователей.




Проброс X-сервера


Собственно, немножко я проспойлерил эту часть в примере конфига выше. ForwardX11 — это как раз оно.

Теория: Графические приложения в юникс обычно используют X-сервер (wayland в пути, но всё ещё не готов). Это означает, что приложение запускается и подключается к X-серверу для рисования. Иными словами, если у вас есть голый сервер без гуя и есть локальный x-сервер (в котором вы работаете), то вы можете дать возможность приложениям с сервера рисовать у вас на рабочем столе. Обычно подключение к удалённом X-серверу — не самая безопасная и тривиальная вещь. SSH позволяет упростить этот процесс и сделать его совсем безопасным. А возможность жать трафик позволяет ещё и обойтись меньшим трафиком (т.е. уменьшить утилизацию канала, то есть уменьшить ping (точнее, latency), то есть уменьшить лаги).

Ключики: -X — проброс X-сервера. -Y проброс авторизации.

Достаточно просто запомнить комбинацию ssh -XYC user@SERVER.
В примере выше (названия компании вымышленные) я подключаюсь к серверу ооо-рога-и-копыта.рф не просто так, а с целью получить доступ к windows-серверу. Безопасность microsoft при работе в сети мы все хорошо знаем, так что выставлять наружу голый RDP неуютно. Вместо этого мы подключаемся к серверу по ssh, а дальше запускаем там команду rdesktop:
ssh ric
rdesktop -k en-us 192.168.1.1 -g 1900x1200


и чудо, окошко логина в windows на нашем рабочем столе. Заметим, тщательно зашифрованное и неотличимое от обычного ssh-трафика.




Socks-proxy


Когда я оказываюсь в очередной гостинице (кафе, конференции), то местный wifi чаще всего оказывается ужасным — закрытые порты, неизвестно какой уровень безопасности. Да и доверия к чужим точкам доступа не особо много (это не паранойя, я вполне наблюдал как уводят пароли и куки с помощью банального ноутбука, раздающего 3G всем желающим с названием близлежащей кафешки (и пишущего интересное в процессе)).

Особые проблемы доставляют закрытые порты. То джаббер прикроют, то IMAP, то ещё что-нибудь.

Обычный VPN (pptp, l2tp, openvpn) в таких ситуациях не работает — его просто не пропускают. Экспериментально известно, что 443ий порт чаще всего оставляют, причём в режиме CONNECT, то есть пропускают «как есть» (обычный http могут ещё прозрачно на сквид завернуть).

Решением служит socks-proxy режим работы ssh. Его принцип: ssh-клиент подключается к серверу и слушает локально. Получив запрос, он отправляет его (через открытое соединение) на сервер, сервер устанавливает соединение согласно запросу и все данные передаёт обратно ssh-клиенту. А тот отвечает обратившемуся. Для работы нужно сказать приложениям «использовать socks-proxy». И указать IP-адрес прокси. В случае с ssh это чаще всего localhost (так вы не отдадите свой канал чужим людям).

Подключение в режиме sock-proxy выглядит так:
ssh -D 8080 user@server


В силу того, что чужие wifi чаще всего не только фиговые, но и лагливые, то бывает неплохо включить опцию -C (сжимать трафик). Получается почти что opera turbo (только картинки не жмёт). В реальном сёрфинге по http жмёт примерно в 2-3 раза (читай — если вам выпало несчастье в 64кбит, то вы будете мегабайтные страницы открывать не по две минуты, а секунд за 40. Фигово, но всё ж лучше). Но главное: никаких украденных кук и подслушанных сессий.

Я не зря сказал про закрытые порты. 22ой порт закрывают ровно так же, как «не нужный» порт джаббера. Решение — повесить сервер на 443-й порт. Снимать с 22 не стоит, иногда бывают системы с DPI (deep packet inspection), которые ваш «псевдо-ssl» не пустят.

Вот так выглядит мой конфиг:

/etc/ssh/sshd_config:
(фрагмент)
Port 22
Port 443

А вот кусок ~/.ssh/config с ноутбука, который описывает vpn

Host vpn
    Hostname desunote.ru
    User vasya
    Compression yes
    DynamicForward 127.1:8080
    Port 443


(обратите внимание на «ленивую» форму записи localhost — 127.1, это вполне себе законный метод написать 127.0.0.1)



Проброс портов


Мы переходим к крайне сложной для понимания части функционала SSH, позволяющей осуществлять головоломные операции по туннелированию TCP «из сервера» и «на сервер».

Для понимания ситуации все примеры ниже будут ссылаться на вот эту схему:



Комментарии: Две серые сети. Первая сеть напоминает типичную офисную сеть (NAT), вторая — «гейтвей», то есть сервер с белым интерфейсом и серым, смотрящим в свою собственную приватную сеть. В дальнейших рассуждениях мы полагаем, что «наш» ноутбук — А, а «сервер» — Б.

Задача: у нас локально запущено приложение, нам нужно дать возможность другому пользователю (за пределами нашей сети) посмотреть на него.

Решение: проброс локального порта (127.0.0.1:80) на публично доступный адрес. Допустим, наш «публично доступный» Б занял 80ый порт чем-то полезным, так что пробрасывать мы будем на нестандартный порт (8080).

Итоговая конфигурация: запросы на 8.8.8.8:8080 будут попадать на localhost ноутбука А.

ssh -R 127.1:80:8.8.8.8:8080 user@8.8.8.8

Опция -R позволяет перенаправлять с удалённого (Remote) сервера порт на свой (локальный).
Важно: если мы хотим использовать адрес 8.8.8.8, то нам нужно разрешить GatewayPorts в настройках сервера Б.
Задача. На сервере «Б» слушает некий демон (допустим, sql-сервер). Наше приложение не совместимо с сервером (другая битность, ОС, злой админ, запрещающий и накладывающий лимиты и т.д.). Мы хотим локально получить доступ к удалённому localhost'у.

Итоговая конфигурация: запросы на localhost:3333 на 'A' должны обслуживаться демоном на localhost:3128 'Б'.

ssh -L 127.1:3333:127.1:3128 user@8.8.8.8

Опция -L позволяет локальные обращения (Local) направлять на удалённый сервер.

Задача: На сервере «Б» на сером интерфейсе слушает некий сервис и мы хотим дать возможность коллеге (192.168.0.3) посмотреть на это приложение.

Итоговая конфигурация: запросы на наш серый IP-адрес (192.168.0.2) попадают на серый интерфейс сервера Б.

ssh -L 192.168.0.2:8080:10.1.1.1:80 user@8.8.8.8

Вложенные туннели


Разумеется, туннели можно перенаправлять.

Усложним задачу: теперь нам хочется показать коллеге приложение, запущенное на localhost на сервере с адресом 10.1.1.2 (на 80ом порту).

Решение сложно:
ssh -L 192.168.0.2:8080:127.1:9999 user@8.8.8.8 ssh -L 127.1:9999:127.1:80 user2@10.1.1.2

Что происходит? Мы говорим ssh перенаправлять локальные запросы с нашего адреса на localhost сервера Б и сразу после подключения запустить ssh (то есть клиента ssh) на сервере Б с опцией слушать на localhost и передавать запросы на сервер 10.1.1.2 (куда клиент и должен подключиться). Порт 9999 выбран произвольно, главное, чтобы совпадал в первом вызове и во втором.

Реверс-сокс-прокси



Если предыдущий пример вам показался простым и очевидным, то попробуйте догадаться, что сделает этот пример:
ssh -D 8080 -R 127.1:8080:127.1:8080 user@8.8.8.8 ssh -R 127.1:8080:127.1:8080 user@10.1.1.2
Если вы офицер безопасности, задача которого запретить использование интернета на сервере 10.1.1.2, то можете начинать выдёргивать волосы на попе, ибо эта команда организует доступ в интернет для сервера 10.1.1.2 посредством сокс-прокси, запущенного на компьютере «А». Трафик полностью зашифрован и неотличим от любого другого трафика SSH. А исходящий трафик с компьютера с точки зрения сети «192.168.0/24» не отличим от обычного трафика компьютера А.


Туннелирование


Если к этому моменту попа отдела безопасности не сияет лысиной, а ssh всё ещё не внесён в список врагов безопасности номер один, вот вам окончательный убийца всего и вся: туннелирование IP или даже ethernet. В самых радикальных случаях это позволяет туннелировать dhcp, заниматься удалённым arp-спуфингом, делать wake up on lan и прочие безобразия второго уровня.

Подробнее описано тут: www.khanh.net/blog/archives/51-using-openSSH-as-a-layer-2-ethernet-bridge-VPN.html

(сам я увы, таким не пользовался).

Легко понять, что в таких условиях невозможно никаким DPI (deep packet inspection) отловить подобные туннели — либо ssh разрешён (читай — делай что хочешь), либо ssh запрещён (и можно смело из такой компании идиотов увольняться не ощущая ни малейшего сожаления).

Проброс авторизации


Если вы думаете, что на этом всё, то…… впрочем, в отличие от автора, у которого «снизу» ещё не написано, читатель заранее видит, что там снизу много букв и интриги не получается.

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

Для начала о простом пробросе авторизации.

Повторю картинку:



Допустим, мы хотим подключиться к серверу 10.1.1.2, который готов принять наш ключ. Но копировать его на 8.8.8.8 мы не хотим, ибо там проходной двор и половина людей имеет sudo и может шариться по чужим каталогам. Компромиссным вариантом было бы иметь «другой» ssh-ключ, который бы авторизовывал user@8.8.8.8 на 10.1.1.2, но если мы не хотим пускать кого попало с 8.8.8.8 на 10.1.1.2, то это не вариант (тем паче, что ключ могут не только поюзать, но и скопировать себе «на чёрный день»).

ssh предлагает возможность форварда ssh-агента (это такой сервис, который запрашивает пароль к ключу). Опция ssh -A пробрасывает авторизацию на удалённый сервер.

Вызов выглядит так:

ssh -A user@8.8.8.8 ssh user2@10.1.1.2

Удалённый ssh-клиент (на 8.8.8.8) может доказать 10.1.1.2, что мы это мы только если мы к этому серверу подключены и дали ssh-клиенту доступ к своему агенту авторизации (но не ключу!).

В большинстве случаев это прокатывает.

Однако, если сервер совсем дурной, то root сервера может использовать сокет для имперсонализации, когда мы подключены.

Есть ещё более могучий метод — он превращает ssh в простой pipe (в смысле, «трубу») через которую насквозь мы осуществляем работу с удалённым сервером.

Главным достоинством этого метода является полная независимость от доверенности промежуточного сервера. Он может использовать поддельный ssh-сервер, логгировать все байты и все действия, перехватывать любые данные и подделывать их как хочет — взаимодействие идёт между «итоговым» сервером и клиентом. Если данные оконечного сервера подделаны, то подпись не сойдётся. Если данные не подделаны, то сессия устанавливается в защищённом режиме, так что перехватывать нечего.

Эту клёвую настройку я не знал, и раскопал её redrampage.

Настройка завязана на две возможности ssh: опцию -W (превращающую ssh в «трубу») и опцию конфига ProxyCommand (опции командной строки, вроде бы нет), которая говорит «запустить программу и присосаться к её stdin/out». Опции эти появились недавно, так что пользователи centos в пролёте.

Выглядит это так (циферки для картинки выше):

.ssh/config:
Host raep
     HostName 10.1.1.2
     User user2
     ProxyCommand ssh -W %h:%p user@8.8.8.8


Ну а подключение тривиально: ssh raep.

Повторю важную мысль: сервер 8.8.8.8 не может перехватить или подделать трафик, воспользоваться агентом авторизации пользователя или иным образом изменить трафик. Запретить — да, может. Но если разрешил — пропустит через себя без расшифровки или модификации. Для работы конфигурации нужно иметь свой открытый ключ в authorized_keys как для user@8.8.8.8, так и в user2@10.1.1.2

Разумеется, подключение можно оснащать всеми прочими фенечками — прокидыванием портов, копированием файлов, сокс-прокси, L2-туннелями, туннелированием X-сервера и т.д.

Финал


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

суббота, 26 ноября 2016 г.

Запись CD и DVD дисков в Linux: Как записать CD/DVD диск под Linux

Задача: нужно записывать CD и DVD диски с данными в Linux без графических утилит. Чем прожигать диски в Linux?

Решение: все программы записи дисков под Linux есть просто графические оболочки к базовым утилитам cdrecord/wodim и growisofs. В некоторых случаях эти оболочки вносят свои дополнительные проблемы в процесс записи дисков, так что я их никогда не использовал. Чтобы не забыть самому и если кому интересно - ниже описание процесса.
В этом посте приводятся только основные команды и параметры утилит, которыми я пользуюсь постоянно - пост ни в коем случае не отменяет чтение man mkisofs cdrecord growisofs и других.

Как узнать адрес привода
Запись на привод проводится через ATAPI, а не эмуляцию SCSI, как когда-то делали. Для этого пишем в консольке:
sudo cdrecord -scanbus dev=ATAPI
Выдаст он нам что-то вроде:

Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling 
'@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').

scsibus0: 
0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM
 
0,1,0 1) *
 
0,2,0 2) *
 
0,3,0 3) *
 
0,4,0 4) *
 
0,5,0 5) *
 
0,6,0 6) *
 
0,7,0 7) *

Выделенная полужирным строка - это и есть наш привод, а цифры 0,0,0 - его адрес, который и подставляем в качестве цели для записи диска через ATAPI. Но об этом ниже.

Запись CD-R/RW дисковДля этого нужно установить либо сторонние пакеты cdrtools, либо пакты из Etch, которые называются cdrkit (свободная версия cdrtools). Тогда в вашем распоряжении окажутся утилиты cdrecordдля записи/очистки дисков, mkisofs для создания ISO-образов из файлов, cdda2wav для сдирания с образа аудиотреков. Всё это нам понадобится для создания и пропаливания дисков.

Создание ISO-образа
Если нужно создать сперва ISO-образ для пропаливания, пользуемся утилитой mkisofs. Тут есть некоторые тонкости, например, под Windows XP и другими версиями Windows не воспринимаются права файлов, что принято в *nix-системах. Так же, если требуется пропалить диск для юниксоида с правами доступа, то нужно использовать опцию -r, которая включает расширение RockRidge стандартной iso9660. Если нужны длинные имена файлов и русские их названия, то включаем расширение Joliet. Короче говоря, чтобы из каталога /home/vasya/stuff сделать iso-образ под названием disk.iso, пишем в консольке следующее:
mkisofs -joliet-long -r -o disk.iso /home/vasya/stuff
После этого в каталоге, из которого вызывалась программа, появится disk.iso, который теперь можно пропаливать на болванку.

Запись CD-R дисков
Если уже есть ISO-образ и его надо просто пропалить, то надо вызвать cdrecord и указать ему скорость пропаливания, адрес устройства и непосредственно сам образ. Делается это так:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
То есть записать с подробным выводом сообщений на скорости 40 на устройство ATAPI:0,0,0, (Primary Master 1-ого IDE-канала) образ my.iso - всё логично и понятно. Пока пропаливается диск - сворачиваем окошко консоли и занимаемся другими делами.

Можно поступить и так: чтобы не задавать руками скорость и завернуть команду в полностью автоматический скрипт, укажите speed=0, тогда программа сама выберет подходящую скорость, на которой болванка будет гарантированно читаться и привод её не запортит. Чтобы вообще не вспоминать потом про параметры, можно их прописать в /etc/cdrecord/cdrecord, в котором можно "определить" устройство, на которое будет производиться запись - то есть, прописать его ATAPI адрес, размер буфера FIFO, назначить имя этому устройству, и в дальнейшем обращаться к этому устройству по имени, при записи.

Всё это очень легко заворачивается в башевские/перловые (по вкусу) скрипты и выполняется через некоторое время на полном автомате, что однозначно быстрее всяких приблуд типа k3b с их GUIёвым интерфейсом.

Запись CD-RW дисков в Linux
Здесь немного поинтереснее, так как если на диске что-то есть, то вариантов становится больше: дописать информацию или снести оттуда всё и записать снова. Для того, чтобы очистить болванку, есть несколько методов, реализованных в cdrecord: быстрая очистка, только указанная сессия, полная очистка и другие. Например, для быстрой очистки пишем:
cdrecord -v blank=fast dev=ATAPI:0,0,0
и через пару секунд на него уже можно писать новые данные.
Запись CD-RW дисков ничем не отличается от записи обычных однократных болванок, и команда:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
пропаливает диск точно так же. Только следите за указанием скорости пропаливания - для перезаписываемых болванок она ниже, чем для однократных.

Кстати, о скоростях. Утилита cdrecord поступает очень грамотно, на мой взгляд, что начинает запись с маленькой скорости, и постепенно подбирается к указанной максимальной, если это возможно. А не как некоторые безмозглые проприетарные громилы, которые сразу пытаются писать на большой скорости, а если не удаётся - скидывают скорость вдвое и на ней пишут весь диск. Скорость записи болванки может варьироваться в зависимости от производителя и нагруженности системы в данный момент. Для CD болванок 1х = 150 Кб/сек, при записи Audio-CD 1х = 172 Кб/сек, для DVD 1х = 1385 Кб/сек.

Запись DVD-R/RW дисков
Для этого нужно поставить утилиты dvd+rw-tools, которые входят в дистрибутив и включают в себя программы для записи и форматирования DVD-дисков. После этого, помимо других утилит, в нашем распоряжении будет growisofs для создания и записи образов на DVD, а так же dvd+rw-format для предварительного форматирования перезаписываемых DVD+RW. Запись DVD немного отличается от записи простых CD-болванок, так что ниже приведу команды для этого.

Запись DVD-/+R дисков в Linux

Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-tools, и объединяющая в себе mkisofs и cdrecord в одном флаконе. Для того, чтобы пропалить на DVD-болванку (без разницы - это DVD+R или DVD-R) файлы из каталога /home/vasya/something, пишем в консольке:
growisofs -Z /dev/cdrom -R -J /home/vasya/something
где после -Z идёт устройство, которое является резаком. Даже если оно называет /dev/cdrom, не надо удивляться: утилите всё равно. Скорость утилита подберёт сама, ту, на которой болванка гарантированно пропалится без ошибок, так что форсировать процесс не стоит.

Если уж так хочется прожечь болванку побыстрее, можно рекомендовать growispfs скорость ключом -speed=N так:
growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something
Помним, что для DVD скорость 1х = 1385 Кб/сек.
Если нужно пропалить уже готовый ISO-образ, команда изменится так:
growisofs -Z /dev/cdrom=image.iso
В процессе записи будет постоянно выводиться информация о текущей скорости записи, прогрессе и оставшемся до конца пропаливания времени.


Запись DVD-/+RW дисков
Для начала болванку нужно отформатировать, это делается так:
dvd+rw-format -f /dev/cdrom
Если у вас другое устройство для записи, отличное от /dev/cdrom, замените его на своё. После этого запись на диск идёт так же, как и для обычных DVD-болванок:
growisofs -Z /dev/cdrom=image.iso
После этого начнётся запись, а мы можем заняться чем-то более полезным, чем созерцание процентов записываемого образа.

Возможность использования DVD-/+RW как дискетыЕсть возможность использования пакетной записи и файловой системы udf (должна быть скомпилирована поддержка ядре), чтобы работать с перезаписываемым DVD-диском как с большой дискетой. Как мне любезно написал в комментариях ув.тов. Anonymous, выглядит это так:
dvd+rw-format -f /dev/cdrom
mkudffs /dev/cdrom

После чего работаем как с простым RW сменным носителем типа дискетки или флешки:
mount -t udf /dev/cdrom /mnt/cdrom
cp /etc/* /mnt/cdrom/
rm /mnt/cdrom/shadow
eject
Просто и удобно.

Как проверить правильность записи на диск - проверка дисков в LinuxДля того, чтобы убедиться в правильности записи данных на диск, есть замечательная утилита dd, которая входит в любой дистрибутив Linux. О том, как проверить диск после записи, есть подробные инструкции на этом же блоге.


Ссылки
Помимо мануалов к утилитам, которые написаны очень толково, можно почитать о записи на разных ресурсах, перечисленных ниже.
CD:
Замечательная статья по записи через ATAPI здесь. На английском хорошая есть статья, в которой почти обо всём и толково. Теоретический, но уже немного устаревший, обзор тут, а здесь совсем зубодробильный обзор возможностей CD-приводов.
DVD:
Очень хорошая и информативная статья по записи болванок DVD здесь. На английском, но довольно просто и толково про это же есть тут. Много интересного можно почерпнуть отсюда.

воскресенье, 6 ноября 2016 г.

15 неприятных фактов о религии, православии и...


1. 99 % православных даже не подозревают, что христиане, евреи и мусульмане верят в одного бога. Зовут его Элохим (Аллах).

Несмотря на то, что у этого бога есть название, имени собственного у него нет. То есть, слово Элохим (Аллах) -– просто означает «бог».

2. Некоторые православные даже не догадываются, что к христианам относятся все люди, которые верят, что Иисус существовал. И католики, и протестанты, и православные.
Но на сегодняшний день нет ни одного достоверного подтверждения существования Иисуса, однако Магомет был исторической личностью.

3. Мифический Иисус был иудеем по вере и евреем по национальности. Умные евреи, которым не давало покоя, что еврейской паствой рулят только кланы коганов и левитов, решили отпочковаться и создать свою контору, которую впоследствии назвали "христианством."

4.Любая религия имеет целью своего существования всего две вещи. Их следует помнить, кто бы вам какой лапши на уши не вешал.

Первая – это обогащение.
Вторая – обыдление 

Обогащаются священнослужители того или иного культа. Обыдляется народ. Любое государство поддерживает основную религию, потому что церковь помогает превращать людей в стадо.

В христианстве так и говорится – паства, то есть стадо. Стадо, которое пасёт пастух или пастырь. Пастырь стрижет с барашка шерсть и увещевает перед тем, как сделать из него люля-кебаб.

5. Как только человек при помощи религии загнан в стадо, у него появляются стадные чувства и стадные мысли. Он перестает думать логически и перестает использовать органы восприятия. Все, что он видит, слышит и говорит – есть набор штампов, используемых в стаде.

6. В 1054 году произошло разделение христианской Церкви на Римско-католическую церковь на Западе с центром в Риме и Православную — на Востоке с центром в Константинополе.

Все теории и обоснования почему это случилось не стоят и выеденного яйца (мы позже к этому вернемся), главная проблема заключалась в первенстве. Кто должен верховодить – папа римский или патриарх.
В итоге каждый стал считать себя главным.
Ребята рассудили так: дружба дружбой, а табачок врозь. Деньги счет любят.

7. В 988 году киевский князь Владимир принимает решение креститься от Константинопольской Церкви. На протяжение многих веков, церковь огнем и мечом выжигает на Руси инакомыслие и многобожие.
Почти подчистую были уничтожены все документы, относящиеся к дохристианскому периоду.

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

8. Считается, что ведуны (от санскритского слова «ведать», «знать») были своего рода совестью племени, его нравственным и духовным ориентиром: "со-" + "-весть", т.е. "совместная весть", "совместное знание". Совесть - это способ общения человека с Богом с помощью сравнения своих нравственных стандартов со стандартами окружающих людей и с опытом предков.

Народ, обладающий совестью, не нуждалось в таких инструментах, как государство, религия, пропаганда, смертная казнь.
Есть мнение, что ввиду огромной территории евразийского континента, остатки совести сохранились где-то в глубинке России.
Поэтому генетическая память русских свято хранит веру в существование справедливости (корень «вед», кстати) совести и правды.

За злобный нрав, алчность и черные рясы поповство на Руси прозвали «вороньём».

9. Уничтожение христианством «совести» на Западе происходило много позже, было более тотально и технологично.
Лагеря смерти начались именно с европейской инквизиции, когда колдуны и ведьмы на всей территории Европы были выявлены, зафиксированы, приговорены и сожжены. Все, без остатка.
Правду и совесть на Западе заменили «правом». Западный человек не верит ни в какую гипотетическую справедливость, зато верит законам, да еще и придерживается их.

10. Первый крестовый поход начался в 1096, а последний закончился в 1444. 350 лет миролюбивое христианство, именем Иисуса, уничтожало страны, города и целые народы. И этим занималось, как вы наверное понимаете, не только католичество или какой-нибудь тевтонский орден. Десятки племен существовавших на территории Московии, так же были насильно обращены в православие или стерты с лица земли.

11.В зарубежных источниках «православная» церковь пишется, как «ортодоксальная». Мы с вами ортодоксы, ребята.

12. В 1650-х — 1660-х в Московии происходит так называемый «раскол». Не будем сильно углубляться в детали, скажем лишь, что причиной церковных реформ, проведенных патриархом Никоном было всего две вещи – резкое отличие церковных порядков в Московии и в греческой церкви.

По сути, московская церковь превратилась в самочинную религиозную организацию, поражавших своей дикостью заезжих греческих священников. Особенно это стало явно видно ввиду присоединения Малороссии. Малороссия отделилась от Польши, признала своим царем Алексея Михайловича и вошла в состав Московского государства как его нераздельная часть, но церковно-обрядовая практика южноруссов сходилась с тогдашнею греческою и разнилась от московской.
Нужно было срочно все это унифицировать.

И второе. Главный политический аспект реформы заключался в «византийской прелести», то есть завоевании Константинополя и возрождении Византийской империи с помощью и за счёт России. В этой связи, царь Алексей хотел наследовать со временем престол византийских императоров, а патриарх Никон хотел стать Вселенским патриархом.
Вот так. Жажда власти. Жажда первенства.
Благодаря этому православная паства (помните, что означает паства, #necro_tv?) во главе с пастырями еще триста лет охотилась на раскольников, которые не хотели перестраиваться.
Так что, перестройка, это не только подрывная деятельность херра Питера и Михаила Горбачева.

13. Если кто не знает, сообщу. Единственной вещью, которая отличает католическую церковь от православной, называется «филиокве» (лат. filioque — «и Сына») добавление к латинскому переводу Никео-Константинопольского символа веры, принятое Западной (Римской) церковью в XI веке в догмате о Троице: об исхождении Святого Духа не только от Бога-Отца, но «от Отца и Сына».
То есть, иудейский Элохим в православии является единственным источником святого духа. А вот католики полагают, что святой дух исходит еще и от иудея Иисуса из Назарета.
Это конечно формальности, всё всегда упирается в деньги и власть.

14. Но вот в чем проблема.
В 1438—1445 проходит XVII Вселенский собор, названный Ферраро-Флорентийским собором. Вселенскими такие соборы называются потому что на них присутствуют представители всех христианских церквей.
Решения вселенских соборов обязательны для всех (как решения Гаагского суда) и для католиков, и для православных.
На этом соборе долго обсуждались разногласия между западной и восточной церковью, а в итоге было принято решение об объединении. Собор закончился подписанием унии.
Отгадайте, кто через несколько лет открестился от решения собора?
Правильно, Московия.

15. А какой смысл отдавать первенство? Так мы сами своё стадо пасём, сами себе начальники, а тут Папа римский будет рулить.

Итого.

К двум главным целям любой религии – обогащению церковников, обыдлению (оболваниванию) масс, мы добавляем третью, выявленную эмпирическим путем – жажда власти.

В христианстве самым главным из смертных грехов является «гордыня».

Жажда власти – это и есть гордыня.