четверг, сентября 04, 2008

Жизнь на флэшке

Intro


Давно была мысль написать одну большую статью, про секурность во всяких разных её видах. Но пока я собирался с силами на её написание, вдруг срочно понадобилось одному моему хорошему знакомому начать жить на флэшке. Просто потому, что периодически он ходит с компа на комп и хотел бы видеть всё своё с собой. Про всё речь я вести пока не готов, поэтому начнём с самого простого - Psi с шифрованием GPG.

Постановка задачи


Есть программа, клиент джаббер-сетей - Psi. Надо, что бы она работала с флэшки на любом компе. Дело осложняется тем, что к псайке очень надо шифрование, которое обеспечивается утилитой GPG. (Надо не в смысле, что psi без него не работает, а в смысле, что шифрование - ето секурно). Естесвенно, надо что бы не было лишних телодвижений на новом компе, никаких настроек, и ничего не должно оставаться, всё только на флэшке. Особенно логи psi и в обязательном порядке ключи GPG.

Начало


Для начала пойдём посмотреть доки на предмет домашних папок обоих программ.
Покопавшись в доках к psi, находим
PSIDATADIR is an envrionment variable pointing to the location of the Psi data files (configuration, profiles, history etc.).
по дефолту оно показывает в
%UserProfile%\PsiData\ (usually C:\Documents and Settings\username\PsiData )
в винде, разумеется.
Про GPG в доках написано следующее:
The default home directory is a directory named "gnupg" below the application data directory of the user.
и
Being only a default, it may be changed by setting the name of the home directory into the Registry under the key HKEY_CURRENT_USER\Software\GNU\GnuPG using the name "HomeDir". If an environment variable "GNUPGHOME" exists, this even overrides the registry setting.

В этот момент все продвинутые юзеры умчались галопом ваять скрипты запуска :). Оставшаяся часть аудитории сидит и внемлет далее.

Действуем


Если вкратце, то в теории всё выглядит следующим образом:
1. Создаём на флэшке нужную нам структуру папок;
2. Копируем нужные программы и файлы в соответствующие места;
3. Создаём скрипт, который инициализирует нужные нам переменные окружения и запускает Psi;
4. Проверяем работоспособность всего получившегося;
5. Донастраиваем скрипты;
6. Проверяем работоспособность всего получившегося;
7. Если не работает, то п.5;
8. Пьём шампанское и радуемся жизни.

Начнём выполнять всё по шагам.

Создаём структуру папок


Я выбрал следующую структуру:

.
.\gpg
.\gpg\keys
.\psi
.\psi\data

Остальные папки в psi показывать не стал, бо неважно для нашего дела.
Тут "." - выбранная папка, у меня в данный момент это C:\Temp, сути дела это не меняет. Вы можете сразу создавать её на флэшке или же создать и проверить на жёстком диске, а потом скопировать на флэшку. Заверяю, что у нас всё будет работать независимо от местоположения этой папки, ради этого, собственно, всё и затевалось :) .
Почему именно такая структура - так мне захотелось... И ещё почувствовалось, что так будет правильно.

Копируем файлы


Все операции проводим из нашей папки, то есть из .
GPG
От GPG нам надо только два файла - собственно gpg.exe и iconv.dll, но можно скопировать и всю папку. Откуда у меня в компе живёт iconv.dll - я уже не в курсе :), поэтому вам надо или найти его самим, или спросить у меня, или жить без него - gpg только предупреждает, но работает и без него.
Ключи gpg живут по адресу %userprofile%\Application Data\gnupg, почти всегда это "C:\Documents and Settings\user\Application Data\gnupg". Надо всё содержимое этой папки скопировать в .\gpg\keys:
copy "%userprofile%\Application Data\gnupg\*" .\gpg\keys

Psi
Папку Psi копируем целиком в .\psi . Профиль (все настройки, аккаунты и логи) лежит в %UserProfile%\PsiData\, как было сказано выше. Точно так же копируем всё оттуда в нашу папку:
xcopy /e "%userprofile%\psidata" .\psi\Data


Создаём скрипт


Тут всё просто - нам надо задать две переменные окружения, для Psi и GPG, задать пути для GPG, иначе Psi не сможет найти его и запустить Psi:

@echo off
set GNUPGHOME=%CD%\gpg\keys
set path=%path%;%CD%\gpg;%CD%\psi
set PSIDATADIR=%CD%\psi\data
start psi.exe

Всё это надо вставить в bat-файл, например start_psi.bat.

Так как я всё это протестил, прежде чем запостить, то пункты 4-7 опускаю и сразу приступаю к п.8 :) .

Заключение


Цели своей мы добились, теперь наша Psi всегда с нами и, что примечательно, все наши ключи и всё шифрование теперь тоже ходит с нами вместе. Достигнуто это минут за 10-20 времени, небольшой работой рук и чуть поболе - работой мозга. В дальшейшем я планирую перевезти на флэшку свой почтовик (Sylpheed) и всё, что попадётся под руку :).

Дальше...

среда, июля 09, 2008

Взбодриться

Случилось тут вчера фигня, и спать я лёг в третьем часу. Естественно, днём хочется спать, а не работать. Дошло до того, что я чуть не уснул с закрытыми глазами часов в 11, хотя обычно меня прибивает только после обеда - часа в 2-3 дня. Зная такую привычку своего организма, я понял, что после обеда я точно усну на клаве мордой вниз :). А, хоть начальство и в отъезде, за такое по головке не погладят. Или погладят, но чем-нибудь тяжёлым :). Так вот, к чему я веду - решил-таки попробовать народное средство от сна - кока-кола с кофем.
Предварительно решил пошарить в инете - поискать ещё аналоги. Мозг отказался формировать запрос к гуглу - чуял подставу :). Кроме "кока-кола+кофе" ничего не смог запросить. Нашёл рецепт - 300 грамм кокаколы и 3-5 ложек растворимого кофе. Запросил жену по поводу наличия дома кофе и кокаколы (ничего не оказалось) и в обед проехал мимо магазина, закупив необходимые ингридиенты. Дома насыпал в чашку кофе (2 ложки с горкой + одна полная), начал заливать колой. Как и ожидалось - было много пены. Но лил я аккуратно, поэтому ничего не запачкал. Налить 300 грамм не получилось. Грамм 50 дали полную чашку густой и устойчивой пены, которая не желала оседать. Подумав, решил попробовать, что за гадость получилась. Гадость оказалась не гадостью, а вполне приятным... не напитком, бо напиток - это жидкость, а тут - пена, вобщем, приятным нечто, которое вполне спокойно пьётся (на удивление, бо пивная пена пьётся плохо). Вкус напоминает и кофе, и колу одновременно (вот ведь удивление-то :) ). Пил я ето дело, тихонько подливая колы. Потом надоело, и просто оставил отстаиваться. Минут через 20 оно всё-таки отстоялось и стало жидкостью. Выпил.
Скажу сразу - сейчас время между 2 и 3 часами дня, а спать не хочется. Значит, рецепт действует :) . Буду пользоваться при необходимости. Ну из минусов должен отметить, что несколько неприятное ощущение в желудке (скорее всего из-за пены) и ясности и светлости в голове не прибавилось - только не хочется спать. Хотя иного и не обещали. Ну и подсказали, что этот коктейль на сердце давит, так что часто пользоваться не стоит.
Вот так.
Дальше...

вторник, апреля 01, 2008

Psi, Jabber.ru и сертификат

Intro


В Psi есть такая вещь, как подключение к серверу по протоколу SSL.

-А что такое SSL и на кой оно надо?

SSL (Secure Socket Layer) служит для того, чтобы передавать данные по открытым каналам (таким как интернет), но так, чтобы никто не смог их прочесть даже в случае перехвата трафика каким-набудь третьим лицом. Технически представляет собой прослойку (layer) между протоколом высокого уровня и протоколом TCP, для шифрования использует асимметричные алгоритмы.

Обычно применяется между сервером и клиентом, например, протокол https представляет именно SSL-трафик, в который завёрнут обычный http-протокол. Наш любимый жабер тоже поддерживает работу по етому протоколу. Привет любопытным админам ;) .

Как использовать


Влючается в настройках аккаунта, вкладка Connection, комбобокс Encrypt connection (рис.1). Выбрать надо или Always, или When available. Что есть что - думаю, сами поймёте.



Но тут есть одна фича - на стандартной виньХП Псайка плачет при подключении к jabber.ru, говорит,что сертификат какой-то левый (рис.2).

Мы не ленимся, тыкаем батончик Details и видим что да, Certificate is not valid, потому что Self-signed (рис.3).

Тут я мог бы рассказать о сертификатах, как они распространяются, что такое корневые сертификаты, как они попадают в комп... Но это - в другой раз, и то при условии что кому-то ето любопытно. Полюбовавшись на мессагу, тычем Close и на предыдущем вопросе Continue. Дальше всё работает нормально.

Можно терпеть ето окошко, тыкая каждый раз Continue, но настоящий ленивый компьютерщик так делать не станет. Тем более что тыкать придётся на каждом реконнекте. А станет он искать пути избавления от етого надоедливого окошка.

Лечение


Есть два варианта убрать ету надоедливую мессагу:

1. Подавить предупреждение;

2. Заставить Psi доверять сертификату.

1. Давим предупреждение

Порядок действий следующий:

Лезем в настройки аккаунта, вкладка Connection, ставим галочку Ignore SSL warnings (рис.4). Метод действенный, но не совсем кошерный (на мой взгляд).



2. Заставляем Psi доверять сертификату.

Снова обратим внимание на рис.3. Приглядевшись, видим строку: Organizational unit: http://www.cacert.org. Не ленимся, идём на етот сайт, и сразу на главной странице видим линк Root Certificate. Переходим на него, и качаем Root Certificate либо в PEM-формате, либо в DER-формате.

Далее нам надо установить ети сертификаты в ось. Идём к нашему скачанному сертификату, тычем его два раза, выходит окошко с информацией про сертификат (рис.5).

Тычем батон "Установить сертификат", далее нас приветствует мастер импорта сертификатов, Далее, Далее, Готово.

Тут замечу, что у меня он установился как доверенный корневой центр сертификации, как он встанет у вас - не могу сказать. И что будет, если он встанет не сюда - тожу не скажу, могу предположить, что псайка по прежнему будет задавать вопрос, но не уверен. Если будет так, то надо удалить сертификат, и поставить его по-новой, но уже указав на втором шаге импорта путь сертификации вручную ("Поместить все сертификаты в следующее хранилище").

После етой операции, наша ось начинает доверять сертификатам, выданным Сacert, а Псайка как раз проверяет через ось, стало быть, она тоже доверяет сертификату от Jabber.ru, который как-раз-таки получен от Cacert :).

Мораль


Что тут скажешь... Надо быть достаточно ленивым, что бы запариться каждый раз выполнять одни и те же действия, и при етом достаточно любопытным, что бы найти решение, которое избавит вас от етой рутины. Заодно по пути знаний наберётесь и получите через некоторе время левелап :).

+P.S. Да, весь етот SSL даёт шифрование от клиента до сервера, то есть кроме сервера никто не сможет прочесть сообщения. Но настоящим параноикам и етого мало - им надо, чтобы и сервер не мог читать нашу переписку :) . И это тоже можно сделать, используя Псайку и GnuPG-шифрование. Об етом я буду писать позже.

Дальше...

Экономия трафика

Тема, конечно не актуальная нынче, с приходом во многие места безлимитного интеренета, но есть ещё места, где это актуально. Например, у меня дома инет - только по жопарезу, на работе - тоже желательно экономить, что бы не получить по шапке :).
Так вот, есть очень простое решение - поставить программу toonel (http://www.toonel.net/generic/005050/toonel.jar). Странное расширение для запускаемого файла, правда :) ?. Дело в том, что программа написана на Java, так что запускать надо хитрым методом :). Зато плюс в том, что безразлично, какая платформа, хоть линукс, хоть виндовс, главное, чтобы была установлена java-машина.

Далее я буду описывать, как запустить toonel под виндой, так как вариант для линукса у меня не отточен, да и линуксоиды обычно подкованные, и должны справиться сами :). У меня не получилось поставить джаву нормально, и в итоге я сделал просто вызов java с указанием пути. Возможно позже расскажу, как ставить нормально, если не лень будет, или придётся джаву ставить нормально :).

Скачать джава-машину можно с интернета, некоторые программы тащат её с собой, так что может и не понадобиться качать отдельно. Проверить просто - Пуск, Выполнить, cmd, в появившемся чёрном окошке набрать "java -version" (без кавычек, разумеется) и посмотреть, то скажут. Если что-то вроде:

C:\>java -version
java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)

то, всё в порядке, джава-машина установлена. Если скажут

"java" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

то идём и качаем джава-машину. (http://www.java.com/en/download/manual.jsp)
Качаем, ставим, снова проверяем командой java -version.

Теперь идёт в папку, куда мы положили toonel.jar: Пуск - Выполнить, cmd, Enter, далее
cd c:\path\to\toonel. Запускается он командой java -jar toonel.jar. появляется окошко с четырьмя вкладками.


Настроек там минимум, родительский прокси и качество картинок. У меня качество jpeg стоит 30%, качество gif - medium. Родительский прокси - соответсвенно ваш прокси, если его нет - оставляем пустым. Настройки маппинга можно не трогать, а можно настроить на ваши почтовики, чтобы и почтовый трафик тоже сжимался. Далее, идём в ваш любимый браузер, ищем там настройки прокси, и настраиваем прокси на localhost и порт 8080. После этого можно серфить со спокойной душой :). Если решили пустить через toonel и почту, то делайте так: создавайте маппинг, в хостнейм пишете адрез вашего pop-сервера, локалпорт - любой свободный в вашей системе, ремотепорт - порт вашего pop-сервера. Галочку Use ssl - по желанию, рекомендуют ставить, если почтовик не поддерживает шифрование пароля. Пример для майла:



После этого в почтовике указываем вместо адреса вашего поп-сервера localhost, и указываем порт, который указали в маппинге как локалпорт (из примера это 1110).

Настройки для smtp аналогичны.

О степени сжатия
У меня в Опере отключен показ картинок (точнее, стоит "Отображать кэшированные"), так что трафик через toonel идёт практически только текстовый. Сжатие при этом достигает 65%-75%. Статистику с работы можете видеть на картинке выше. Тут сжатие несколько меньше, так как периодически картинки погружаю, и качаю что-нибудь в архивах, которые, как известно, уже дальше не жмутся.
Статистику можно глянуть или через браузер (http://localhost:7999), для етого мне пришлось Опере объяснить, что на localhost ходить через прокси не надо, или на окошке самой программы.

Итог
Вот так, нехитрым путём, за короткое время (если не считать скачку или нахождение java-машины где-нибудь) мы добились экономии траффика в два-три раза. Есть ещё побочный эффект - несколько ускоряется открытие страничек, что не может не радовать :)

Дальше...

Смена пароля рута

На этой неделе случилось вот что: сбойнула ФС на пром.компе, который работает под соляркой (Solaris 5.10). Ось перестала грузиться, ссылаясь на ошибку, вываливалась в сингл-мод и просила рутовский пасс. Пасса никто не знал. Комп ставили подрядчики, пасс рута не сказали, просто завели пользователя для нас. Возможно, даже прописали его в sudoers, но в текущей ситуации это не помогало. Начали действовать в обход.
В первую очередь сняли жёсткий диск. Чтобы нам жизнь малиной не казалась, он оказался формата 2.5 дюйма. Ничего критического, но переходника usb - mini-ide найти не удалось. Пришлось вставлять этот винт в ноутбук, что радости нам не прибавило. Кто разбирал ноутбуки, поймёт :).
Дальше грузимся с Кноппикса 4го, он винт видит, но как-то совсем генериком. Подумавши, нарезали 5ый Кноппикс, благо образ под ругой был и болванка нашлась. Он уже определил винт нормально. Далее - cfdisk нам рассказывает, что там раздел, а перед ним немного свободного места. Раздел формата - bf, UFS от Соляриса. fdisk говорит тоже самое. Пробуем монтировать:

mount /dev/hda1 /mnt/hda1

и обламываемся. Указание -t ufs не помогает. Слава богу, товарищ Aixrein подсказал:
Все слайсы доступны под следующими свободными именами девайсов. Покажу на примере.
/dev/hda1 ... WIN95
/dev/hda2 ... BSD44
/dev/hda3 ... BSD44
/dev/hda4 ... EXT2FS
Пусть в hda2 несколько слайсов и указанной командой они не монтируются. Линух присваивает им имена начиная от hda5. Т.е.:
mount -t ufs -o ufstype=44bsd /dev/hda5 /mnt/disk

Так и оказалось: покопавшись в /dev/hda* нашли разделы hda5,hda6,hda7. Монтируем снова:
mount /dev/hda1 /mnt/hda1 -t ufs -o sunx86

Опция -o sunx86 нашлась в процессе самостоятельного гуглежа - оказывается, UFS бывает разных типов.
Теперь всё смонтировалось. Видим файлы, всё хорошо. Сейчас нас интересуют файлы /etc/passwd и /etc/shadow. Смотрим в passwd, видим, что надо смотреть в shadow - на месте пароля в passwd стоит "x". Идём в shadow, видим пользователей, в том числе рута и нашего. Дальше - дело техники: меняем хеш пароля рута на хеш пароля нашего пользователя и - вуаля! Пароль рута поменялся на пароль нашего пользователя, а его мы уже знаем. Разумеется, предварительно оба файла скопировали на флешку, ибо бэкапы рулили, рулят и будут рулить.
Скоро сказка сказывается... При попытке записи файла нас обламывают: filesystem is read-only. Тваю мать! Отмонтируем раздел, монтируем с опцией rw, проверяем командой mount - пишут, что раздел rw-таки. Повторяем фокус с заменой хеша - результат тот же. Расстраиваемся и идём пить пиво чай (на работе всё-таки).
После чаепития решили слазить в dmesg:
dmesg | tail.

Кстати, очень полезная вещь, много раз выручала.
Так вот, в выводе dmesg'а написано, что ФС с ошибками и надо бы fsck прогнать. По всей видимости из-за этого и не давали нам писать в эту ФС. Ладно, фигня делов, достаём fsck:
umount /dev/hda5
fsck /dev/hda5 -t ufs

И опять засада - нету у нас fsck.ufs. Что в переводе на русский значит - нечем прочекать. Вот теперь расстраиваемся ещё больше и идём пить пиво, так как день кончился.
К началу следующего дня родился ещё один вариант решения: если мы не можем изменить файл в файловой системе, то кто нам сможет помешать просто изменить несколько байт в секторе жёсткого диска? Некоторое время потратили на поиск соответствующих утилит - хекс-редакторов. Остановились на lde - он специализируется на работе с жёстким диском и есть в Кноппиксе.
Достали ноутбук с нашей соляркой, но, прежде чем продолжить эксперименты, решили проверить сам винж на предмет сбойных секторов, ибо солярка при загрузке упоминал что не может прочесть сектор такой-то с винта. Проверяем:
dd if=/dev/hda of=/dev/zero bs=16K

Копирует... Винт лампочками моргает не переставая... А вот сколько он уже скопировал, и сколько нам ещё ждать по времени - неизвестно. К счастью, в man dd написано, что если послать процессу dd сигнал USR1, то dd выдаст нам статистику, не прерывая работы. Ищем pid dd, создаём ещё одну консоль и там пишем:
ps aux | grep dd

Запоминаем pid (ну, к примеру, 5508), пишем:
kill -USR1 5508

В консоли dd признаётся, сколько он считал записей, сколько записал, сколько это в гигабайтах, сколько времени прошло и какова средняя скорость. Отсюда, путём простых подсчётов, находим оставшееся время. Вышло что-то около 15 минут, при прошедших пяти. Можно было просто подождать, попивая чай, но программисткая мысль пошла дальше, и родила следующюю конструкцию: пишем в консоли с kill'ом
while true ; do { date ; kill - USR1 5508 ; sleep 10 ; } ; done

Результат - каждые 10 секунд dd выводит статистику. Намного приятней распивать чаи, созерцая статистику, чем просто пялится на пустой экран...
В общем итоге, образ 40кагигового винта ушёл в /dev/zero примерно за 20 минут, показав среднюю скорость около 30-35 мбайт/сек, без единой ошибки. Уже легче - винт сам живой, значит, сбой был только на уровне ФС. А это лечить проще, чем искать новый винт и вживлять туда солярку.
Продолжаем лечение:
lde /dev/hda

Там выбираем блочный режим (b), делаем поиск строки (/). Мы искали сначала хеш рута, но с первой попытки попали в какой-то другой файл, поэтому повторили поиск по хешу пароля нашего пользователя. Нашли, разрешили запись на винт (f,w), перешли в режим редактирования (e), переправили хеш рута на хеш нашего пользователя.
Чтобы не перегружаться, решили проверить результат через qemu:
qemu -hda /dev/hda

В Кноппикс не включён ускоряющий модуль kqemu, поэтому процесс идёт неторопливо. Но в итоге проверку пароля мы прошли :). Ура, массы ликуют, дамы бросают в воздух чепчики, суровые админы утирают украдкой скупую слезу - всеобщее счастье :).
Проверку ФС под эмулятором решили не делать: во-первых, железо эмулятора отличается от железа, на котором жила солярка, что может вызвать дополнительные проблемы; во-вторых - будет слишком долго.
Поставили винчестер на его родное место, запустились оттуда, вышли в сингл-мод, ввели пароль,прогнали fsck. Проверка прошла, что-то там исправила. Потом мы перезагрузились и у нас всё забегало.
+P.S. Опус писался постфактум, поэтому вышел немного сумбурным и нет выводов команд.
Все низкоуровневые операции с винчестером надо производить при отмонтированных разделах.
Дальше...

суббота, марта 29, 2008

Сим- и хардлинки

Давно уже обещал знакомым написать про симлинки - что такое и зачем оно обычному человеку. Но как-то всё не находилось времени, а когда было время - не было желания. Но наконец-то я дозрел и добрался до етой темы :).
Что такое симлинки и хардлинки (они же символические ссылки и жёсткие ссылки) линуксоиды (более-менее опытные) знают. А виндузятники - нет (по большей части) и соответственно не пользуются ими. Восполнить етот пробел и подарить всем ещё кусочек щастья и призвана ета статья :)
Есть два вида линков - симлинки и хардлинки. Но начну я с файлов вообще.

Что такое файл.


Прежде всего надо различать содержимое файла, и указатель на него. Под указатели на файл отведена специальная таблица в файловой системе (дальше - ФС). Ето, к примеру, FAT в FAT12, FAT16, FAT32 и $MSFT в NTFS. В Ext2/Ext3 ето называется суперблок (кажется, утверждать не буду). В любом типе ФС есть ета таблица. При форматировании создаётся именно она. Кстати, папка - ето тоже файл, но специальный - он может содержать в себе только другие файлы.
Помимо информации о местоположении содержимого файла, указатель на файл содержит ещё много всякого: атрибуты, права, информацию о владельце и прочее. Что именно - зависит от ФС. Бывает, что в указателе лежит и само содержимое файла (только в NTFS и ReiserFS) - ето в случае, если файл короткий и вмещается в кластер после информации о файле.

Хардлинк


Так вот, хардлинк - ето и есть файл, в смысле указателя. За исключением одной хитрой особенности - на одно и тоже место на винте (читай: на одно и тоже содержимое) можно сделать несколько ссылок. То есть в разных каталогах (к примеру), лежат разные файлы, с разными именами, которые сылаются на один и тот же физический файл. И изменив один из них, увидим такие же изменения во втором. Более того, после создания второго (третьего и какого угодно по счёту) хардлинка невозможно выяснить, какой из хардлинков был первым, главным. Они все равноправны. При удалении одного из хардлинков, файл остаётся жить на винте до тех пор, пока число хардлинков (есть специальный счётчик для каждого файла) не станет равно нулю.

Симлинк


Симлинки очень похожи на ярлыки. Ето файл, со спецатрибутом, а в содержимом у него - то, на что он указывает. В отличие от хардлинков, тут есть чётко выраженный "главный" файл или каталог, и одна или несколько ссылок, которые на него указывают. Если этот файл/каталог переименовать, переместить или удалить, то все символические ссылки, указывавшие на него, станут нерабочими. При удалении "главного" файла данные уничтожаются сразу (если, конечно, у него нет ещё и жёстких ссылок!), никакого учёта символических ссылок в файловой системе нет.

Особенности


Симлинки можно создавать куда угодно. Харлинки - только на файл в пределах раздела. Под линуксом можно создавать и симлинки и хардлинки на файлы и папки. Под виндой - хардлинки только на файлы, симлинки - только на папки.

Для чего ето нужно


Вообще говоря, так сходу и не могу сказать, для чего ето нужно... Можно прекрасно обходиться без етих премудростей. Но с ними иногда бывает легче жить.
Хардлинки
С хардлинками просто - економия места. Самый яркий пример - инсталляционный компакт-диск с несколькими виндами, объём данных на котором составляет около 1.5 ГБ. На обычный компакт, при удачном стечении обстоятельств можно впихнуть около 800 МБ, а тут 1.5 ГБ, что в два раза больше. Как так? А вот так - одинаковые файлы (а в инсталляшке WinXP Home и WinXP Pro их очень много) не пишутся по несколько раз, а просто создаются хардлинки. ФС на компашках ISO9660 позволяет ето сделать, то есть она поддерживает хардлинки. Хотя возможно ето поддерживает расширение Joilet, а не сама ISO9660, но тут ето неважно.
Также на линуксах часто встречается такая фишка: файлы gzip и gunzip - ето физически один файл, хотя и вполняет разные действия. Вместо двух файлов мы имеем только один, економя таким образом место.
Опять же, можно завести папочку для бакупа каких-то важных файлов, но кидать туда не сам файл, а только хардлинк на него. Плюс - економия места в два раза. Кого ето нынче волнует? У мня винт - почти терабайт! Какая економия, зачем она мне? Да, вот же люди :). А если у тебя важный файлик - не документ полмегабайтный, а киношка в HDTV-формате весом 1.5 ГБ? Или ещё что поболее весом? Да ещё в количестве пицот штук? То-то же ;)
Так же мне один раз ето помогло при написании программы на Дельфи, когда в проекте участвовало много дллок, и перед запуском программы приходилось свежеоткомпиленные дллки ручками копировать в папку с программой. Я долго париться не стал, создал хардлинки на все нужные дллки в нужную папку и - вуаля! Не надо больше копировать, в папке с программой лежат самые свежие версии.
Симлинки
Тут с теорией посложней, поетому просто приведу примеры из своей практики:

1. Есть у мня программа - клиент жабера Psi. Всем хороша, кроме одного - папку с конфигами и логами создаёт в домашней папке пользователя. Под линуксом ето хорошо, удобно и привычно, но под виндой - нет. Под виндой я привык, чтобы все программы свои конфиги хранили при себе - мне так проще их потом копировать на другую машину при переезде. И программы себе подбираю соответственно (об етом наверно будет отдельный пост). Так вот, под виндой она хранит свои конфиги в папке "C:\Documents and Settings\username\PsiData", или, если быть точнее, в %USERPROFILE%\PsiData. А я при переезде постоянно забываю копировать её, через что каждый раз настраиваю Psi заново. Как-то раз мен ето надоело, и я просто создал в %USERPROFILE% симлинк на папку C:\Ok\Sys\psi11\PsiData. Понятно, что тут (C:\Ok\Sys\psi11) у мня живёт сам Псай. Теперь, после переезда мно просто нужно снова создать етот симлинк и все мои настройки работатют на новом месте. Согласитесь, ето удобнее, чем каждый раз настраивать Псай, не говоря уже о потере истории.
2. На работе наконец-то выделили мне мой комп. Ну я разбил винт по типу (10/10/остатки) на (винь/линь/хранилище). И при переезде с временного ноута обнаружилась одна фигня - в 10 ГБ я не влезаю своей папкой C:\Ok. Перенести её на другой винт - тяжело, многие программы привязаны именно к етой папке, и придётся их перенастраивать, а мне ето лишний гемморой нафиг не сдался, да и вообще - лень :). Сделал так - пихнул содержимое самых толстых папок (dnl и tmp) на хранилище, а в папке c:\ok создал симлинки на них. Была мысль сделать так со всей папкой Ok, но к тому времени оттуда уже был запущен TC, так что возиться не стал.

Как ето делать


Да, всё ето клёво, мы прониклись твоими идеями, но как создавать ети самые... Линки?
И на етот вопрос есть у мня ответ :). Даже три:
1. Плагин к TotalCommander'у NTFS Links. Как инсталлить и работать с ним - подробно описано в ридми.
2. Утилка для командной строки от Sysinternals. Лежит тут (прямой линк), пользоваться просто.
3. Примочка к Проводнику aka Explorer'у. Сначала льём и ставим либы (прямой линк). После льём и ставим саму программу (прямой линк).

Всё


Вот собственно и всё, что я хотел написать по етому поводу и так долго рожал.

При написании статьи использовались материалы из хелпа к плагину для TotalCommander'а NTFS Links от Власова Константина

Дальше...