Маленькая заметка о редиректе средствами PHP.

Редтрект в PHP осуществляется с помощью функции header(), и в ее использовании есть небольшая проблема. Она должна быть вызвана ДО любого вывода текста, т.е. до вывода любых тегов, текста, и т.д.
Можно не бояться за то, что текст, выведенный после функции header() пользователь вообще не увидит. Увидит, если установить нужный параметр — время до редиректа, например, так вот:

header( 'Refresh: 5; url=http://natribu.org' );

Цифра 5 указывает на время в секундах, которое пройдет перед тем, как пользователь будет перенаправлен на далее указанный адрес (в данном случае http://natribu.org, хехе).

Следующий код вызовет ошибку:

<?php
	echo "Вы будете посланы нахуй через 5 секунд";
	header( 'Refresh: 5; url=http://natribu.org' );
?>

Warning: Cannot modify header information — headers already sent by […]

Смотреть скриншот

А следующий код сработает правильно:

<?php
	header( 'Refresh: 5; url=http://natribu.org' );
	echo "Вы будете посланы нахуй через 5 секунд";	
?>

Через 5 секунд:

Две и более кнопки submit в форме HTML. Обработка на PHP.

Случилась тут небольшая задачка, как обработать две и более кнопок submit в HTML-форме, причем желательно без помощи JS и иных ухищрений, т.е. есть, например, такая форма:

Надо выяснить (на сервере), какую кнопку нажал пользователь.

На самом деле (ну если никто не поизвращался над браузером, т.е. клиентом) в отправленном серверу запросе POST будут только параметры нажатой кнопки. Если задать каждой кнопке уникальное имя, то можно будет отследить, какая кнопка была нажата, и, соответственно, обработать это.

Создадим тестовую форму multibutton.html:

<html>
	<head>
		<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
		<title>Multibutton 'Send' Test</title>
	</head>
	<body>
		<center>
			<form action='multibutton.go.php' method='POST'>
				<b>Press a button</b></br>
				<input type='text' name='testtext' value='Test Text'></br>
				<input type='submit' name='button1' value='Button #1'>
				<input type='submit' name='button2' value='Button #2'>
				<input type='submit' name='button3' value='Button #3'>
			</form>
		</center>
	</body>
</html>

На PasteBin

И напишем скрипт-обработчик multibutton.go.php:

<?php
$buttonmessage="<center><b>Perssed button:</br>#";
				
		//Проверка кнопок
		if (isset($_POST['button1']))
		{
			$buttonmessage.="1";
		}
		
		if (isset($_POST['button2']))
		{
			$buttonmessage.="2";
		}
		
		if (isset($_POST['button3']))
		{
			$buttonmessage.="3";
		}
				
		echo $buttonmessage."</br>";
		echo "Test text value: '".$_POST['testtext']."'</b></br></br>";
		echo "<b>----- Output $_POST array: ----</b></br><code><pre>";
		print_r ($_POST); echo "</br></pre></code>";
		echo "<b>-------------------------------</b></center>";
?>

Если в массиве $_POST будет найден элемент button1 — обрабатываем нажатие кнопки #1 (if (isset($_POST['button1']))), аналогично поступаем с другими кнопками. Текстовое поле — исключительно для теста, можно вписывать любое значение, оно будет показано пользователю.
Для наглядности выводится содержимое массива $_POST:

print_r ($_POST);

Код на PasteBin

Получим следующее:
Нажата кнопка #1:


Нажата кнопка #2:

Нажата кнопка #3:

Можно объединить создание формы и вывод результата в единый скрипт: см. код на PasteBin

Источник

Две и более submit кнопки в форме

Скачать пример

«Хроники пьяного панка. Часть I Город-ге(мор)рой.»

От редактора:
Панкарь решил обнародовать свой старый дневник, говорит, чтоб не пропало, ибо у него какую-то дрянь в организме обнаружили.
Материалы датируются 2005-2009 г.г., опубликованы с разрешения автора, моя редактура минимальная — вырезаны в стиле SCP имена, фамилии и клички. Предоставляем слово автору:

Когда произошли события я находился в… естественно в компьютерном клубе в интенете на форуме, откудаво об етном и узнал, весть со скоростью черт-знает-чего разнеслась по интенету и попала на скиновские сайты и ессно форум наполнился вагоном провокаторов, да и у народа накипело…. Собсно активные события начались с сообщения, что народ планирует «Сделать Чайку и рынок непригодными к дальнейшему использованию». Хачеги не стали особо ничего ждать и на следующую же ночь после драки съебали с рынка. Первая ночь прошла более менее спокойно, из активных действий была только разгромлена палатка с арбузами в районе вокзала, да спизжено неимоверное количество оных, оставленными хачегами на рынке. В этом даже поучаствовал гитарист нашей панк-группы ███████. Арбуз мы с удовольствием сожрали на тусовке. На следующий день я съебал к ██████ на дачу, где мылся в бане, ездил на рыбалку, в общем настроение было буддистски-спокойное. На форуме узнал перед отъездом, что в воскресенье будет сход жителей у рынка. По сотовому было сообщено от одного знакомого мента, что в город едет ОМОН, а в воскресенье позвонил Агент ████ и спросил, не знаю ли я чего-нить интересного. Я ессно подорвался в город, надеясь и узнать что-нить, и нарезать видео на клип, а возможно и исполнить тайную мечту — попасть на телеканал НТВ. Как выяснилось позже — попал, но не на телеканал… Приехал, к тому времени сход уже закончился, старшие разошлись по домам, а более молодые и более подогретые пивом решили пойти разносить Чайку. Когда я приехал, то увидел как кидают камни в 4 магазин, позвонил своим, они уже были практически в эпицентре событий, я ессно пошел к Чайке. Ее уже громили, оттудаво потихоньку выносили пиво, если честно говорить, наша тусовка тоже, бля, постаралась, вынесли ящик Охоты Крепкой. Расположился я с ребятами у часов напротив Чайки и стал смотреть «кино» и пить пиво (трофейное), потом подпил, пошли с ███████ во дворы песни орать, сходили, посмотрели как громят Фламинго и вернулись к Чайке, и тут на толпу пошли отряды ОМОНА, меня где-то за банком они настигли, я получил немного «демократизаторов» и эти суки спиздели у меня неделю назад купленный NOKIA 3310 вместе с симкартой, посему номер у меня изменился… Я — на оставшуюся трубу и ██████ звонить, товарисч пришел, забрал меня, мы к какой-то бабе пошли на хату, но не дошли, где-то по дороге еще пива попили, потом пошел ОМОН, мы опять где-то во дворы спрятались, я ██████ на всякий случай трубу отдал, а потом ОМОН нас все-таки настиг, гитариста ████ и ██████ взяли, а я второй раз получил демократизаторов, потом я из-за своего подпития плохо помню…. вписался в тачку к каким-то бандитоподобным личностям, которые, правда поделились со мной водкой, а потом нас опять (уже последний раз) настиг ОМОН, после чего мы, наконец, объезжая кордоны и прочую жопу отправились на ███████.
Итог: потеряные мобильные телефоны (один правда нашел Агент ████), 3000 р (я в Чайке был сисадмином и должен был в понедельник идти делать там комп), у ██████ 5 суток+потерянный коммуникатор (КПК с функцией телефона) стоимостью 20 000 р. =( И просто непередаваааемые очучения. В настоящее время битва за Кондпогу перенеслась в интернет и окончилась флудом великим и первыми местами в рейтингах mail.ru для кондопожского форума…
Далее все было спокойно, относительно…. Дописал гитару и бас на своем диске, апгрейдил между делом комп (1.7 GHz Seleron/512Mb/HDD 80GB/Video 128 Radeon 9600) и занимался пиением пива, но тут пришла…. СЕССИЯ.

Сентябрь 2006 года (прим. ред.)
Агент ████ — польско-украинский журналист, фигурирующий в некоторых записях, как Агент Оранж (дада, намек на этого цвета революции) или Лука Розенбург.

ASCII-каптча, каптча псевдографикой. Часть III. Примеры использования.

Сразу оговорюсь, это учебные примеры. В ближайшее время я вернусь к теме и покажу, как использовать каптчу «на местности», т.е. встроить ее в работающий движок сайта или его часть. А тут пока примеры относительно скорее умозрительные, что называется, из учебника.

Каптча и механизм сессий.

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

Код тестового скрипта вполне неплохо обкомментирован, поэтому особых пояснений не требует. Если уж возникнут вопросы — задавайте, постараюсь ответить.

Код на PasteBin

Использование cookie для проверки каптчи

Механизм сессий на самом деле не всегда удобно использовать, например, если не хочется возиться с уже продуманными умными людьми сессиями готового сайтового движка, а свою каптчу встроить хочется. В таком случае просто перекладываем всю работу на cookie, создаваемые и удаляемые по нашему хотению:

Код на PasteBin

Тут поясню лишь один момент, установку самих cookie. Делается это встроенной функцией PHP setcookie, полное описание которой вы можете найти в разделе источников в конце заметки.
Мне же понадобились только три параметра:
setcookie($name,$value,$expiredtime);
где:
$name — имя cookie
$value — передаваемое в cookie значение, сохраняемое на компьютере пользователя
$expiredtime — срок действия cookie, после его окончания cookie не будет обрабатываться сервером. Таким образом устанавливается максимальное время, данное пользователю на ввод кода каптчи.

В данном случае:

setcookie('mycaptchamd5',md5($captchacode),time()+300);

т.е. имя cookie 'mycaptchamd5', в качестве значения передается md5-хэш кода каптчи, а время действия устанавливается в 300 секунд (т.е. 5 минут).

Смотреть код или скачать готовый вариант

Код модуля ASCII каптчи на PasteBin
Пример с сессией
Пример с cookie
Цифры псевдографикой. Вариант 1
Цифры псевдографикой. Вариант 2

Скачать все с Mega.nz в одном архиве

Источники

Функция setcookie()
Разработка CAPTCHA своими руками
Копии

Предыдущие части

Часть I
Часть II

ASCII-каптча, каптча псевдографикой. Часть II. В которой генерируется каптча.

Итак, закончили мы на том, что нарисовали все цифры, создали массивы php с псевдографическими изображениями цифр и написали отладочную функцию, которая выводит конкретную цифру. Продолжаем!

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

$pgstring="#$%@!?0"; //символы, из которых будут составлены цифры

Аналогично и для «пустых» символов:

$spstring="- "; //пробельные символы

Тут все зависит от вкуса, цвета и лично ваших глазок. Главное, чтобы в строке с возможными «пустыми» символами и в строке с возможными символами, изображающими цифру, не встретилось одинаковых символов, иначе при определенных условиях, пользователь вполне может получить вот такую вот гадость, вместо каптчи:

###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######

Заведем еще две переменные, которые будут хранить выбранные символы для «пробельных» и символов изображения:

$pgchar="";
$spchar="";

Пока просто оставим их пустыми, потом к ним еще вернемся.

Далее подробное описание скрипта с картинками и видео

Итого

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

Код каптчи

Смотреть на PasteBin

Начало здесь
Продолжение

ASCII-каптча, каптча псевдографикой. Часть I.

Сегодня будем рисовать каптчу. Причем не с помощью стандартных библиотек вывода графики (таких мануалов в сети более чем достаточно), а каптчу, отображаемую пользователю в виде псевдографики, т.е. изображения символов каптчи будут созданы из обычных числовых и буквенных символов. Для упрощения задачи примем следующее:

— В качестве символов, из которых будет создаваться изображение, будем использовать латинские буквы, цифры и знаки препинания. Можно, конечно, и китайскими иероглифами пользоваться, но не факт что пользователь сможет каптчу распознать и она у него не «поплывет».
— Сам код каптчи будет состоять только из цифр (ну вот лень мне было заморачиваться с буквами в ASCII-арт).

Плюсы:
+ Скрипт легко встраивается как медведевский будильник, в разные места в любое место, где нужна каптча.
+ Не требует библиотек обработки изображений, дополнительных ранее нарисованных картинок и т.д., соответственно, будет работать даже на самом плохом хостинге, где библиотек типа ImageMagick может вообще не быть
+ Отображается даже в консольном (текстовом) редакторе типа lynx.
+ Почти не тратит трафик (текст же) и ресурсы сервера.

Минусы:

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

В части первой займемся рисованием цифр. Конечно, человеку увлекающемуся ASCII-артом это нафиг не надо, можно сразу пропускать и переходить ко второй части. Кто не знает, что такое ASCII-арт вообще, тот может сходить в Википедию или Гугль, и ознакомиться с темой.

Я сам не великий ASCII-сенсей, так что использовал достаточно стандартную методу:

1. В любом простом текстовом редакторе (Блокноте, Notepad++, mcedit или редакторе FAR-а) нарисуем поле размером в X символов и Y строк каким-либо одним символом, например *, -, # или любым другим. Должно получиться что-то типа этого (я взял поле размером 6 x 5 символов):

------
------
------
------
------

2. Далее, нажимаем клавишу Insert, включаем режим замены и заменяем в этом поле символы - на какие-нибудь другие, так, чтобы получилось изображение определенной цифры, например:

-0000-
00--00
00--00
00--00
-0000-

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

Итак, у нас есть готовые изображения цифр, осталось лишь записать их в виде, доступном PHP.

Создаем массивы, содержащие псевдографические изображения цифр. Здесь и далее условимся, что в качестве «пустого» символа я использовал *, а в качестве символа для изображения цифры, знак $.
Код и некоторые пояснения
В следующей части создадим генератор кода каптчи и генератор ее ASCII-изображения.

Форма обратной связи для WordPress, возвращаясь к напечатанному.

Или как я избавился от слишком назойливой опеки антиспама на сервере.

Не так давно поднимал вопрос о форме обратной связи для сайта на WordPress [Копия].

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

Ситуация такая: антиспам финского сервера (вполне оправданно, кстати) отправляет в спам письма с доменов .ru (mail.ru и yandex.ru точно), .kz, .by и некоторых не связанных с ГОРФ, типа .tk

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

Находим в скрипте mail.php строчку:

$mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n";

И меняем ее на:

$mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n"."E-mail to answer: $email\n\n";

Ниже меняем в строке

$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");

$email на $address. Должно получиться:

$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$address");

Что этот код делает. Да все просто. Строка с сообщением ($mes) изменяется так, что адрес, который ввел пользователь в контактной форме, добавляется к тексту сообщения как простой текст. Параметры функции php mail изменяются так, что в заголовок письма вместо адреса пользователя, добавляется наш собственный адрес для приема сообщений из контактной формы. В результате мы получим сообщение, отправленное с нашего же адреса. Примерно как на скриншоте ниже:

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

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

Заметка в PDF

C#. Генерация строки из случайных символов.

Задача

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

Решение

Делается это довольно просто. Поручим формирование строки отдельной функции.
Во входных параметрах передадим ей строку, содержащую набор символов, из которых будет сформирована выходная случайная строка (параметр Alphabet) и длину генерируемой строки (параметр Length)

string GenRandomString(string Alphabet, int Length)
{
	...
}

Внутри функции.

//создаем объект Random, генерирующий случайные числа
Random rnd = new Random();
//объект StringBuilder с заранее заданным размером буфера под результирующую строку
StringBuilder sb = new StringBuilder(Length-1);
//переменную для хранения случайной позиции символа из строки Alphabet
int Position = 0;

Далее в цикле генерируем случайную строку:

for (int i = 0; i < Length; i++)
            {
                //получаем случайное число от 0 до последнего
                //символа в строке Alphabet
                Position = rnd.Next(0, Alphabet.Length-1);
                //добавляем выбранный символ в объект
                //StringBuilder
                sb.Append(Alphabet[Position]);                
            }

Возвращаем сгенерированную строку:

return sb.ToString();

Код функции на PasteBin

Пример использования функции

txtReturn.Text = GenRandomString("QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm", 10);

возвращает строку случайных символов длиной 10 знаков, состоящую из заглавных и строчных букв английского алфавита.

Немного об оптимизации

День метеоролога

История к недавно состоявшемуся дню метеоролога. Автор ███████, редактура моя.

Посвящается брату и маме.

На момент истории мне было лет 5-6, в школу я не ходил, а в садик я не пошел, потому что заболел. В детстве я вообще был болезненным ребенком, и любой простудифилис лип ко мне, как банный лист. Сестра, обычно остававшаяся со мной в таких случаях тоже заболела. И мама взяла меня на работу. На самом деле я был в восторге, ведь моя мама работала не скучной чиновницей в ОГА, не продавщицей в магазине, и даже не трактористкой в колхозе. Моя мама была Метеорологом. Именно так, с большой буквы М. Если вы никогда не были на метеостанции, напроситесь и посетите это место. Метеостанция — ужасно атмосферна. Непонятного назначения приборы возвышаются на рабочих столах, скрипят, пищат, тикают, выполняя свою такую нужную, но абсолютно непонятную «гражданскому» не посвященному в таинства метеорологии работу. В дальнем углу обязательно найдется ртутный столб, и тут он будет не метафорой, а всамделишней метровой колбой, заполненной ртутью. Загляните с разрешения метеоролога в ИВО, прибор, определяющий высоту облаков. Старые советские, но надежные его версии напоминают гибрид осциллографа и игрового автомата «морской бой». Резиновая туба обнимет ваше лицо, когда вы прижметесь к ней, и, вдохнув неповторимый запах нагретого, живого прибора, вы погрузитесь в небо, а невидимый луч будет вашим проводником. В другом углу мерно тикают барографы (суточные и недельные), под столом покоится радиометр, способный предупредить город о надвигающемся апокалипсисе.

Читать далее

Впервые опубликовано на Мракопедии

Более сложный способ мониторинга состояния сервера на Linux в реальном времени.

Продолжаю тему, начатую в предыдущей заметке [КОПИЯ]. В ней описывал получение данных от определенных скриптов и процессов запущенных на сервере под управлением Linux с помощью SSH, псевдотерминала и отдельного пользователя, создаваемого специально для целей мониторинга.

Будем посмотреть другой способ, с одной стороны, более сложный и требующий владения каким-нибудь языком программирования, кроме Bash-скриптов. Хотя, можно обойтись и исключительно одним Bash’ем, если клиент и сервер под Linux, или Bash прикрутили к Windows (cygwin(?), не пробовал, не знаю). А с другой стороны, наоборот, способ простой безопасный, требующий минимум вмешательства в настройки сервера.

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

Примечание: Термины «клиент» и «сервер» могут по ходу статьи быть неоднозначно истолкованными.
Серверное приложение будет наоборот, работать на «клиентском», «операторском» рабочем месте, а «сервер», в смысле компьютер с Linux, на котором я запускаю свои скрипты, и который управляет нужной мне железякой, станет вполне себе клиентом.
В общем, чтобы не вносить путаницы я условлюсь называть рабочее место оператора «локальным компьютером», а тот, который «сервер в привычном понимании» — «удаленным».

Задача

Такая же, как и в предыдущей заметке. Имеется удаленный компьютер под управлением Linux, рулящий системой контроля температуры и давления.
На самом деле, рулить он может чем угодно: от домашнего FTP с котиками или соединения с Интернетом, до управления СКД, открытием ворот, дверей, врат в Ад, личным концлагерем и т.д.
Суть в том, что нужно, чтобы удаленная система сигнализировала оператору об изменении своего состояния (изменении температуры, разрыва соединения с Интернетом, пришествии Сатаны). Оператор, как обычно, сидит под Windows (как в большинстве организаций в СНГ).

Некоторые соглашения

Для простоты условимся, что локальный и удаленный компьютер находятся в одной локальной сети (и одной подсети) 10.10.0.0/24, IP-адрес локального компьютера 10.10.0.30, прием данных производится через сетевой порт 11000 локального компьютера. Локальный и удаленный компьютеры обмениваются данными по протоколу TCP, данные представляют собой Unicode-строки.

Как это организовано на локальном и удаленном компьютере

Код

Сервера приема сообщений:
Смотреть на PasteBin
Скачать с Mega.nz

Скрипта отправки сообщений:
Смотреть на PasteBin
Скачать с Mega.nz

Источники

1. Клиент-серверное приложение на потоковом сокете TCP [Копия]
2. Как открыть TCP-/UDP-сокет средствами командной оболочки bash [Копия]

Видеоиллюстрация

Прямая ссылка

Простой способ мониторинга состояния сервера.

Введение

Понадобилось мониторить состояние сервера, точнее не всего сервера, а определенного демона, на сервере запускаемого. Понятно, что самым простым способом мониторинга чего-то работающего в фоне, является просмотр соответствующих логов. Но такой способ на самом деле дает весьма мало интерактивности, надо постоянно заходить по SSH, ковыряться в этих самых логах. Хочется, чтоб при изменении состояния, или же по определенной команде от определенного пользователя, сервер нам все рассказывал сам.
Хорошо, если демон умеет при изменении состояния запускать некие пользовательские скрипты. Так умеет, например, демон OpenVPN или, например, демон небольшой промышленной системы метеоконтроля, который я использовал в данном примере.
Вкратце, имеется плата на Arduino, обрабатывающая показания с нескольких датчиков и передающая их в удобоваримом формате через COM-порт демону, запущенному на сервере. Демон умеет исполнять пользовательские скрипты, но вот беда (та же беда и с OpenVPN), если в скрипте написать что-то типа echo "У нас изменились параметры, шеф, все пропало" это сообщение в лучшем случае уйдет неведомо куда. В худшем — вылезет пользователю, из под которого стартует демон, посреди рабочего сеанса в консоль.

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

Не так давно я делал похожего пользователя для отключения/перезагрузки сервера [КОПИЯ] . Фактически, пользователю была установлена псевдооболочка (на самом деле просто скрипт), выполняющий единственную команду перезагрузки/отключения системы. И идея создания псевдооболочек меня зацепила. Таким образом можно дать пользователю выполнять только ограниченный набор команд, да еще и обрабатывать параметры в скрипте по-своему, так что никакой злоумышленник, даже получив доступ по ssh ничего сделать не сможет, т.к. команды псевдооболочки ему неизвестны.

Почему бы не использовать такой способ и для целей мониторинга?

Создание пользователя

Первым делом создаем отдельную группу:
groupadd monusers
где monusers — любое название группы на ваш вкус, ранее в системе не существующее

Создаем пользователя:
useradd -g monusers -d /home/meteomon -s /home/meteomon/monitor.sh meteomon

где:
-g monusers группа пользователя (ранее созданная monusers)
-d /home/meteomon домашний каталог пользователя
-s /home/meteomon/monitor.sh — псевдооболочка для пользователя, скрипт, обрабатывающий команды.
meteomon — имя пользователя

Задаем пользователю пароль (иначе не сможем залогиниться по ssh):
passwd meteomon

Создаем домашний каталог:
mkdir /home/meteomon

Меняем владельца каталога на пользователя meteomon:
chown meteomon:monusers /home/meteomon

Меняем права доступа на каталог:
chmod 500 /home/meteomon

Создаем в домашнем каталоге скрипт monitor.sh о содержимом скрипта ниже.

Меняем владельца и права доступа для скрипта monitor.sh
chown meteomon:monusers /home/meteomon/monitor.sh
chmod 500 /home/meteomon/monitor.sh

Скрипт-псевдооболочка

Поскольку пользователь предполагается исключительно для мониторинга, разрешим ему всего одну команду — выход из системы. Соответственно, скрипт будет такой:

#!/bin/bash

echo "Hi, monitor operator"
echo "To exit enter byebye"

while [ "$KEYINPUT" != "byebye" ]; do
    read KEYINPUT
done

Все просто — ввод с клавиатуры попадает в переменную KEYINPUT и пока она не равна byebye скрипт выполняется. Как только пользователь введет byebye, так прервется цикл, скрипт завершит работу, и пользователь автоматически выйдет из системы.

Отправка сообщений пользователю

Для отправки сообщений пользователю используем связку команд echo и write
Можно создать отдельный скрипт со следующим содержимым:

#!/bin/bash

USERNAME="meteomon"

echo -e $1|write $USERNAME 2>/dev/null

положить его в каталог с доступными пользователям скриптами (например в /usr/sbin) и установить права доступа, например в 755, чтобы пользователь для мониторинга мог получать сообщения от всех пользователей системы.

Примечание: параметр -e команды echo позволяет использовать специальные символы, такие, как перенос строки \n, а конструкция 2>/dev/null отправляет в нуль-устройство сообщение об ошибке, которое может возникнуть, если пользователь meteomon не вошел в систему.

Использование

Осталось прописать соответствующую команду в пользовательском скрипте, вызываемом демоном, или исполняемом по cron’у:

...
DATA=`meteosrv checksystem`
/usr/sbin/techo $DATA
...

Внимание! Читайте документацию по демону, можно случайно нарваться на подводный камень, например, OpenVPN в некоторых случаях болезненно относится к ошибкам, случающимся в пользовательских скриптах.

Настройка рабочего места оператора

Для Windows понадобится утилита plink, обычно она идет вместе с ssh-клиентом PuTTY. В каталоге с ней создаем bat-файл следующего содержания.

testmon.bat:
plink -ssh -P 22 -l meteomon -pw meteomonpass 192.168.0.40

где вместо meteomon надо подставить имя пользователя для мониторинга, вместо meteomonpass — заданный пароль, а вместо 192.168.0.40 настоящий адрес удаленного компьютера.

Вот что получилось

Источники

1. Bash, команда write

Форма обратной связи для WordPress, без плагина.

Пост из серии «кратенькая инструкция от склероза», описываю больше для себя, как форма сделана на моем сайте. Мопед не мой, но найти, откуда взята сия метода, не смог.

0. Создаем новую страницу, озаглавливаем ее согласно случаю, например Обратная связь, устанавливаем простое и понятное название постоянной ссылки, например contact-form, вставляем в редакторе в режиме Текст вот этот вот html-код. Не забудьте заменить beach на название директории с вашей темой. Пока ничего работать не будет, но «болванка» странички с формой обратной связи готова, осталось лишь научить сайт обрабатывать запрос, отправленный из формы.
1. Нам понадобится php-скрипт, отправляющий почту. Создаем файл mail.php, вставляем код, который откроется по ссылке, и копируем файл по FTP в директорию темы (wp-content/themes/ваша-тема).
В исходнике mail.php надо заменить admin-vnc@uaitc.fi на тот e-mail, на который вы хотите получать сообщения, отправленные из этой формы и указать в строке
header( 'Refresh: 3; url=http://tolik-punkoff.com/obratnaya-svyaz/' ); нужный адрес, куда пользователь будет перенаправлен после отправки сообщения. Число (в данном случае 3) — время перед перенаправлением. Фактически время, которое пользователю будет отображаться сообщение об успехе, либо об ошибке при отправке сообщения.
2. Сохраняем два изображения, valid.png:


и invalid.png:

в директорию images темы (wp-content/themes/ваша-тема/images).
3. Добавляем в файл style.css темы вот этот вот код css
4. Осталось проверить, все ли работает и добавить ссылку на страницу в соответствующее меню.

Вот что должно получиться

ФАНФАРЫ!

Все необходимое в одном архиве (на mega.nz)
Нашел оригинальный архив (скачать с mega.nz)

Про ментовские погадки.


В провинциях ГОРФ, оказывается, менты мелко серут в карман околополитическим активистам.
Не, это и так понятно, но тут настолько мелко, что мне даже смешно.
Пишет мне чел, анарх, хороший друг. Не так давно было. В общем, выходит он в интернеты (через VPN, естественно), а интернетов нету. И VPN’а тоже нету, он давай звонить провайдеру (есличо, мелкий местный провайдер, а не гигант типа Ростелекома), техподдержка отвечает, что мол все должно работать. И правда, пока звонил — связь восстановилась. Но VPN так и не поднялся. Парень личность уже пропаленная у всяких там центров «Э» и т.д., но найти на него ничего толком не могут, ибо шифруется хорошо. Ну, местные эшники может и знают, что вот это Вася Пупкин оставил коммент на форуме автономов, но фактически доказательств нет и в суд, даже такой хуевый суд, как в ГОРФ с этим говном не пойдешь.
Так вот, гады взяли и ему походу мелко напакостили. Я так понимаю, админ провайдера по звонку сверху просто перекрыл ему GRE, благо эта гадость делается одной командой. Договор с провайдером, естественно, зарегистрирован не на него, а на бабушку, у которой он квартиру снимает. И в данной ситуации разборки с провайдером ему нахуй не вперлись. Пришлось учить чела пользоваться OpenVPN. Заодно и сам разобрался, таки есть польза и от мелких пакостей.

Полезные плагины для WordPress

Akismet (идет в комплекте) — офигенная защита от спама. Достаточно только регнуться на их сайте (через конрсоль wp), получить ключик (бесплатный) и пользоваться. Из 400 спамерских комментариев проворонил 2. Классный результат.
BackUpWordPress — лучший плагин для бэкапа.
Better Tag Cloud — добавляет годное красивое облако тегов


Categories to Tags Converter Importer (официальный плагин WordPress) — конвертирует теги в категории и обратно.
Cyr to Lat enhanced — транслителирует ссылки образуемые WordPress’ом из названий статей.
Google Sitemap by BestWebSoft — делает XML-sitemap для Google
Jeba Limit Login Attempts — вспоминал этот плагин в маленькой заметке по безопасности. Плагин ограничивает количество попыток входа, если кто-то неправильно вводил пароли.
LJ and LJR users shortcodes (самописный) — вставляет ссылки на блоги ЖЖ и LJR с «головастиками» и т.д.
LJ-cut style cut — добавляет возможность использовать кат в стиле ЖЖ в блоге WordPress
LJR-pollDisplay — отображает опросы из LJR
Maintenance Mode — плагин для закрытия сайта на техобслуживание. В бесплатной версии доступны не все опции, но хватает.
Mobile Smart — добавляет возможность переключать тему для мобильных устройств (детектит устройства по идентификатору браузера и переключает тему), есть возможность переключать тему вручную, тему надо устанавливать отдельно.
raw-formatter — добавляет возможность отключать форматирование, автоматически добавляемое WordPress’ом в пост.
Shortcodes personal library — библиотечка с моими шорткодами. Дам только по личной просьбе. Упомянута от склероза и для бэкапа.
SI Captcha Anti-Spam — Хорошая капча на все (форма входа, восстановления пароля, регистрации, добавления комментария и пр.)
TinyBR — меняет местами комбинации Enter и Shift+Enter в визуальном редакторе. По-умолчанию в WP почему-то сделано добавление по Enter абзаца (<p></p>) вместо православного <br>
WordPress Importer (официальный) — позволяет импортировать контент из файла экспорта WordPress
WP Security Audit Log — ведет логи подозрительной активности на сайте. Бесплатная версия довольно сильно урезана.
WP User Avatar — отключает (нахрен!) дурацкий Gravatar и позволяет загружать свои аватарки.

Изменение логотипа в окне логина GDM

Спрашивают, как у нас сделан украинский флаг при входе на сервер. Да проще пареной репы, товарищи!

1. В любимом графическом редакторе готовим картинку. Должна быть PNG, разрешением 210×210 px и глубиной цвета 32 бита.
2. Идем в файл /usr/share/gdm/defaults.conf и ищем там параметр Logo= (секция [greeter]) и меняем путь на путь к своему файлу или заменяем сам файл.
Можно настроить приветствие:
Параметры
DefaultWelcome=false
DefaultRemoteWelcome=false

устанавливаем в false (иначе, ЕМНИС, будет использовано имя компьютера) и меняем параметры (вместо нашего названия подставьте свое):
Welcome=Welcome to UAITC
RemoteWelcome=Welcome to UAITC

Флаг (по клику можно скачать с mega.nz):

Права доступа и владельцы файлов в Linux.

Шпаргалка на стену студенту.




По клику доступны полноразмерные изображения

Скачать архив с копиями источников, файлами большого разрешения и svg.

По материалам:
1. http://downloads.naulinux.ru/pub/NauLinux/school_server/Docs/Docs/Nau/nau-server-sbs-ru/s1-navigating-ownership.html
2. http://www.k-max.name/linux/prava-dostupa-v-linux-eshhe-odna-malenkaya-shpargalka/