Статьи

OpenNET: стаття - Один UPS на двох - FreeBSD в домені Windows (freebsd windows ups)

Один UPS на двох - FreeBSD в домені Windows (freebsd windows ups)
Ключові слова: freebsd

, windows , ups , ( знайти схожі документи )
From: Рашид Ачилов Date: Mon, 15 Feb 2010 17:02:14 +0000 (UTC) Subject: Один UPS на двох - FreeBSD в домені Windows Матеріал надано редакцією журналу Системний адміністратор. Опубліковано в журналі " Системний адміністратор "N 12 2009 Ситуація, коли до одного UPS підключено кілька серверів, - не виняток, а скоріше правило. Як вчасно відключити сервер, якщо програма для роботи з даними UPS існує тільки для Windows? І вольт 220 - і то навпіл ... На сьогоднішній день існує широкий діапазон пристроїв, здатних забезпечувати резервне живлення серверів в тій мірі, в якій це необхідно. Далеко не до всіх пристроїв (а точніше кажучи тільки до UPS виробництва APC [1]) існують клієнти під FreeBSD, що дозволяють приймати по мережі повідомлення від мережевих UPS і відповідно обр бативает їх. Як поступити в тому випадку, якщо є тільки клієнт під Windows, а необхідно запрограмувати реакцію на повідомлення UPS про те, що необхідно перервати роботу в зв'язку зі зникненням харчування? Моделювати ситуацію будемо в наступних умовах - є UPS Powerware 9120 [2] , до якого підключені комп'ютер під управлінням Windows і комп'ютер під керуванням FreeBSD. Управління UPS здійснюється через поставляється разом з UPS кабель RS-232 з комп'ютера з ОС Windows, на якому встановлено програмне забезпечення LanSafe. LanSafe можна безкоштовно скачати безпосередньо з сайту виробника [2]. Потрібно - при довготривалому пропажі живлення разом з коректним завершенням роботи сервера під керуванням ОС Windows коректно завершувати роботу сервера під керуванням FreeBSD. Завдання це насправді вирішується досить просто в тому випадку, коли програмне забезпечення для управління UPS має можливість по настанню деякого події виконувати певну зовнішню команду. Уже згаданий вище LanSafe має можливість на кожну подію (а їх досить багато) налаштувати три види реакції - оповіщення поштою, оповіщення широкомовним повідомленням і виконання зовнішньої команди, причому всі види реакції можна налаштовувати незалежно один від одного. Таким чином, обробка події Power failure (зникнення напруги живлення), яке виникає в тому випадку, якщо зникає напруга живлення, буде відбуватися згідно з наступною схемою (див. Рис. 1). ,   windows   ,   ups   , (   знайти схожі документи   )   From: Рашид Ачилов Date: Mon, 15 Feb 2010 17:02:14 +0000 (UTC) Subject: Один UPS на двох - FreeBSD в домені Windows Матеріал надано редакцією журналу Системний адміністратор Малюнок 1. Послідовність обробки події UPS для двох серверів Для реалізації даної схеми нам знадобиться, крім самого LanSafe: * Для Windows - програма віддаленого виконання команд по протоколу SSH plink.exe і програма генерації ключів SSH (входять до складу безкоштовного SSH-клієнта PuTTY, скачати можна з [3]). * Для FreeBSD - програма виконання команди від імені іншого користувача sudo (ports / security / sudo) і SSH-сервер для прийому і обробки команди. Можна використовувати стандартний OpenSSH, але я віддаю перевагу сервер від SSH Communication Inc. (Ports / security / ssh2-nox11). Отже, в загальному випадку задача може бути сформульована так: "Як з однієї програми запустити іншу на віддаленому сервері". Сформулювавши ж задачу в загальному вигляді, переходимо до частковостей. Зокрема Подробиці реалізації ми почнемо розглядати з останньої ланки ланцюжка - з сервера FreeBSD. Щоб відправити на нього команду, необхідно, щоб хтось цю команду прийняв. Цей "хтось" буде у нас псевдопользователем (тобто користувачем, які не мають пароля, але мають допустимий шелл) upsadmin. Створюємо обліковий запис користувача: # pw useradd upsadmin -d / usr / home / upsadmin -m -s / bin / sh -c "UPS administrator" -h - У разі успішного завершення команда pw не виводить нічого. Перемикаємося на обліковий запис цього користувача (те, що все це виконується від користувача root, я думаю, згадувати зайве) і налаштовуємо SSH для використання беспарольному авторизації з публічного ключу: # su -l upsadmin # ssh-keygen2 -t dsa Generating 2048-bit dsa key pair 3 o.oOo..oOo.o Key generated. 2048-bit dsa, [email protected], Wed Oct 28 2009 00:37:39 +0600 Passphrase: Again: Key is stored with NULL passphrase. (You can ignore the following warning if you are generating hostkeys.) This is not recommended. Do not do this unless you know what you're doing. If file system protections fail (someone can access the keyfile), or if the super-user is malicious, your key can be used without the deciphering effort. Private key saved to /usr/home/upsadmin/.ssh2/id_dsa_2048_a Public key saved to /usr/home/upsadmin/.ssh2/id_dsa_2048_a.pub Попередження про можливе порушення політики безпеки, при якій кожен особистий ключ з пари ключів повинен бути захищений паролем (а інакше зловмисник, який отримав доступ до нього, зможе ним скористатися), ігноруємо - ми не будемо користуватися власними ключами користувача upsadmin. Переходимо в каталог .ssh2 (він буде створений автоматично) і створюємо два порожніх файлу - identification і authorization. У файл identification прописуємо рядок: IdKey id_dsa_2048_a Файл authorization поки не чіпаємо, він нам знадобиться потім. Далі наділяємо користувача upsadmin правами на вимикання і перезавантаження комп'ютера. Встановлюємо пакет sudo, якщо він не встановлений, і прописуємо в файлі / usr / local / etc / sudoers (він буде автоматично створений і заповнений прикладами) такі рядки: # Cmnd alias specification Cmnd_Alias ​​SHUTDOWN = / sbin / shutdown Cmnd_Alias ​​HALT = / sbin / halt Cmnd_Alias ​​REBOOT = / sbin / reboot Cmnd_Alias ​​IPFW = / sbin / ipfw # UPS remote command executor upsadmin ALL = (root) NOPASSWD: SHUTDOWN, NOPASSWD: HALT, NOPASSWD: REBOOT, NOPASSWD: IPFW Остання команда (IPFW) нам знадобиться тільки для тестування, після того як все буде налагоджено, її можна і потрібно прибрати. Що ми описали даними рядками? Ми описали, що при виконанні через sudo команд shutdown, halt, reboot і ipfw користувач upsadmin за рівнем привілеїв дорівнює адміністратору (root) і при виконанні цих команд йому немає необхідності вводити свій пароль. Перевіряємо. # Su -l upsadmin $ sudo ipfw sh ipfw: DEPRECATED: 'sh' matched 'show' as a sub-string ... (висновок видалено) 65000 0 0 allow ip from any to any 65535 457 45540 deny ip from any to any відмінно. Тепер створимо попередній елемент схеми - скрипт, який буде видавати команду вимкнути живлення. Виконуватися цей скрипт буде від користувача upsadmin. Для того щоб не вказувати розташування скрипта, просто створимо в домашньому каталозі користувача upsadmin каталог bin. Чому саме bin? Ми вказали / bin / sh в якості стартового шелла. При запуску / bin / sh автоматично виконується його стартовий скрипт - файл .profile в домашньому каталозі користувача (докладніше - man sh). Файл .profile, як правило, містить наступний рядок: PATH = / sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / usr / X11R6 / bin: $ HOME / bin; export PATH Цей рядок визначає, де / bin / sh буде шукати програму в тому випадку, якщо вона запускається без вказівки шляху. Перевірте, що PATH містить $ HOME / bin. Зрозуміло, можна створити каталог з іншим ім'ям і вказати його ім'я в PATH або взагалі не створювати нічого і кожен раз вказувати повний шлях. Сам скрипт - це всього лише два рядки: #! / Bin / sh logger -i -p local6.info -t lansafe Shutdown started sudo shutdown -p now Перший рядок додана виключно для зручності - при виконанні скрипта щоразу в файл, який визначається / etc / syslog.conf як local6, будуть записуватися повідомлення про причини виключення. Попередньо необхідно визначити в /etc/syslog.conf facility local6, наприклад, наступним чином: local6. * / Var / log / powerdown При цьому всі повідомлення з facility local6 будуть направлятися в файл / var / log / powerdown. Строго кажучи, приклад не зовсім коректний, тому що в цей файл можуть бути спрямовані повідомлення від будь-якої програми, що привласнила своїх повідомлень facility local6. Для більшої коректності слід було б написати так:! Lansafe local6. * / Var / log / powerdown Ну ось, тепер достатньо запустити скрипт powerdown (так називається файл скрипта) - живлення буде вимкнено. Переходимо ще лівіше за схемою - до скрипту, що виконується на Windows. Ось тут нам і знадобиться заповнити файл authorization в каталозі .ssh2. Прописуємо в нього такий рядок: Key winbox.pub Прописується сюди ім'я файлу публічного ключа, за яким буде виконуватися авторизація. Файл цей, зрозуміло, спочатку повинен бути створений. Причому саме на тому комп'ютері, з якого буде запускатися команда, в нашому випадку на те, до якого підключений UPS. Ось для цього нам і знадобиться програма puttygen.exe, яка в PuTTY грає роль, аналогічну команді ssh2-keygen, Запускаємо і створюємо особистий і загальний ключі (див. Рис. 2). Малюнок 2. Створення пари ключів за допомогою програми puttygen.exe Зберігаємо файли winbox.ppk (приватний ключ) і winbox.pub (публічний ключ). Пароль на приватний ключ не встановлюємо. Ми використовуємо авторизацію по публічному ключу тільки для того, щоб уникнути завдання паролів у відкритому тексті. Який же нам сенс ставити пароль на ключ, який все одно буде потрібно вказувати у відкритому вигляді? Файл winbox.pub поширюємо вільно - зокрема, його потрібно помістити в підкаталог .ssh2 домашнього каталогу користувача upsadmin на сервері FreeBSD. Файл же winbox.ppk оберігайте наскільки можливо - саме він є аналогом пароля. Розкрадання приватного ключа, що не захищеного паролем, автоматично означає, що будь-хто зможе видати себе за особу, яка цим ключем авторизується. Зрозуміло, це недолік даного способу, але ... за зручність треба чимось платити? Після цього ми можемо, запускаючи програму plink.exe, виконувати команди на сервері FreeBSD від імені того користувача, яке вказуємо, в нашому випадку upsadmin (див. Рис. 3): echo "Testing connection on UNIX server ..." plink.exe -ssh -P 22 -2 -i winbox.ppk [email protected] ls -la Детально все ключі до команди plink описані в документації на PuTTY - файлі putty.chm. Створюємо для файлів окремий каталог, наприклад c: \ upsmgmt, і переносимо в нього всі файли, що нам знадобляться: приватний ключ winbox.ppk, програму plink.exe. Сюди ж можна покласти і публічний ключ winbox.pub. І нарешті, пишемо власне сам скрипт: з: cd \ upsmgmt plink.exe -ssh -P 22 -2 -i winbox.ppk [email protected] "powerdown" Щодо цього скрипта слід зробити кілька зауважень. * По-перше, коли ми запускаємо скрипт вручну, він запускається в тому каталозі, в якому ми в даний момент знаходимося. Коли ж скрипт буде запущено програмою LanSafe, то він запуститься в тому каталозі, який Windows вважає "за замовчуванням". Швидше за все, це не буде цікавий для нас каталог, тому перед запуском команди необхідно явно вказати перехід в потрібний нÐ

Як вчасно відключити сервер, якщо програма для роботи з даними UPS існує тільки для Windows?
Як поступити в тому випадку, якщо є тільки клієнт під Windows, а необхідно запрограмувати реакцію на повідомлення UPS про те, що необхідно перервати роботу в зв'язку зі зникненням харчування?
Що ми описали даними рядками?
Чому саме bin?
Який же нам сенс ставити пароль на ключ, який все одно буде потрібно вказувати у відкритому вигляді?
За зручність треба чимось платити?

Новости