синхронизация времени серверов windows server 2012 r2

w32tm /config /syncfromflags:manual
w32tm /config /manualpeerlist:»0.ru.pool.ntp.org,0x1 1.ru.pool.ntp.org,0x1 2.ru.pool.ntp.org,0x1″
w32tm /config /update
w32tm /resync /rediscover

w32tm Настройка синхронизации времени через cmd

В Windows есть средство управления синхронизацией времени — w32tm.

Основные команды конфигурации w32tm

  • w32tm /register — Регистрация и включение службы со стандартными параметрами.
  • w32tm /unregister — Отключение службы и удаление параметров конфигурации.
  • w32tm /monitor — Просмотр информации по домену.
  • w32tm /resync — Команда принудительной синхронизации с заданным в конфигурации источником.
  • w32tm /config /update — Применить и сохранить конфигурацию.
  • w32tm /config /syncfromflags:domhier /update – Задаем настройку синхронизации с контроллером домена.
  • w32tm /config /syncfromflags:manual /manualpeerlist:time.windows.com – задать конкретные источники синхронизации времени по протоколу NTP.

Просмотр параметров (/query)

  • w32tm /query /computer:<target>  — Информация о стутусе синхронизации определенной станции (если имя не указано — используется локальный компьютер).
  • w32tm /query /Source – Показать источник времени.
  • w32tm /query /Configuration — Вывод всех настроек службы времени Windows.
  • w32tm /query /Peers – Показать источники времени и их состояние.
  • w32tm /query /Status – Статус службы времени.
  • w32tm /query /Verbose – Подробный вывод всей информации о работе службы.

Синхронизация через Net time

Так же можно воспользоватся вспомогательной службой net time для синхронизации времени.

  • net time /setsntp:time.itmake.org — Задаем источник синхронизации.
  • net time /querysntp — просмотр информации о заданном источнике времени.
  • net time \\server.lan.local /set /y – Принудительная синхронизация с указанного источника.

SRINK SQL LOG

Рассмотрены пожалуй все варианты проблем из за которых журнал транзакций может не сокращаться и все варианты решений. От простейших, до «не рекомендуемых».

Для MS SQL 2008/2012 рекомендации ИТС уже устарели, кроме того и раньше они не всегда помогали. В статье попытался собрать наиболее полный комплект информации по данному вопросу.
В своё время в одном месте всего этого не нашел, поэтому думаю будет полезно.


Популярная статья ИТС http://its.1c.ru/db/metod81#content:2373:1 устарела — теперь уменьшение размера журнала транзакций стало не самой простой операцией.

Собственно там рекомендуется следующий скрипт:


BACKUP LOG Имя_Базы_Данных WITH TRUNCATE_ONLY

go

DBCC SHRINKFILE(Имя_Файла_Журнала_Транзакций) 

go


Если выполнить его в MS SQL 2008/2012 получите ошибку: 

‘truncate_only’ is not a recognized BACKUP option

Подробно:
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/9997e75e-f126-4901-9379-de540a708ec9/backup-log-with-truncateonly


Что теперь делать?
Решения, собственно два:

1) 
USE [Database] 
ALTER DATABASE [Database] SET RECOVERY SIMPLE
go
 
DBCC SHRINKFILE ([Database]_log, 1); 
ALTER DATABASE [Database] SET RECOVERY FULL
go
 

2) 
USE [Database] 
BACKUP LOG [Database]  TO DISK=’NUL:’  
go
DBCC SHRINKFILE ([Database]_log, 1)
go
 

Если «Урезанием лога» не злоупотреблять (т.е. сокрашать лог вместе с полной копией) то по большому счету не принципиально каким методом пользоваться.
Второй вроде как правильнее, зато первый «надежнее». 

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

Итак, если все действия, описанные выше не помогли — лог файл по-прежнему занимает N гигабайт. Переходим к плану B:

select log_reuse_wait_desc from sys.databases

В результате можете получить 3 варианта:

а. Пусто — Обычно это означает что у БД лог можно хоть сейчас полностью сократить, могу предложить только попробовать ещё раз Shrink, а если не поможет — переходить к плану C
b. Log_Backup — Нормальный варинат. В данном случае говорит о том, что Backup Log не выполнено, или выполнено некорректно
b. Replication — значит что ваш лог не обрезается из за репликации — скорее всего ошибки.
с. Active transactions —  Самая частая ситуация — в базе есть подвисшие транзакции, с ними нужно разобраться.

Replication  — Репликация для систем на платформе 1С, пожалуй, бессмысленное дело. Потому как Read only баз MS SQL не бывает, средства создания распределенных систем в 1С есть собственне (да, я про РИБ). Для обеспечения отказоустойчивости гораздо лучше подходят кластерные технологии. Собственно рекоммендация простая:

sp_removedbreplication ‘[Database]’

Собственно после этого бэкап и Shrink помогут. Если же вопреки здравому смыслу вы всё-таки хотите сохранить репликацию БД то конечно выполнять эту команду нельзя, а нужно разбираться с ошибками репликации. Но это уже тема отдельной статьи.

Active transactions — наиболее популярная история. В базе есть транзакции, которые не завершены, и чего то ожидают. Чащи всего такие транзакции получаются при потере сетевого соединения или «вылете» клиента 1С в момент записи в БД. В этом случае нужно собственно узнать какая транзакция «повисла»:

DBCC OPENTRAN

После выполнения этой команды вы получите примерно следующий результат:

Transaction information for database ‘master’.
Oldest active transaction:
SPID (server process ID) : 52
UID (user ID) : -1
Name          : user_transaction
LSN           : (518:1576:1)
Start time    : May 5 2014 3:30:07:197PM
SID           : 0x010500000000000515000000a065cf7e784b9b5fe77c87709e611500
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


Из этого обилия информации ключевым является Start Time и SPID. Если транзакция в базе 1С выполняется боле нескольких секунд это уже означает что что-то не так. А если start Time будет минут 10 или более от текущего времени — такие транзакции (сеансы) нужно завершать. Но предварительно я бы рекоммендовал узнать что эта транзакция делала.

Для завершения процесса можно ввести команду

KILL [Process ID]

Где Process ID — это тот самый SPID полученный на предыдущем шаге. При этом незавершенные транзакции откатятся средствами MS SQL Server. Возможно при «убийстве» процесса будут завершены и несколько сеансов 1С, но  вряд ли много. Сервер 1С поддерживает собственный пул соединений с MS SQL, соответственно соединения из этого пула используются только тогда, когда серверу что-то нужно от СУБД. При этом если соединение занято (а оно как видим занято) вряд ли оно будет использоваться для других процессов. 

Но предварительно (!) если хотите всё-таки разобраться в проблеме рекомендую выполнить скрипт вроде:

DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = [Process ID]
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
GO

В результате вы получите текст команды SQL Server, на которой, собственно, всё и «зависло». Из неё вам нужна будет таблица в которую производилась запись, далее используя функцию «ПолучитьСтруктуруХраненияБазыДанных()» вы определите таблицу в терминах объектов метаданных в которую производилась запись и смотрите код. Как правило такие неприятные последствия происходят:

1) Ошибки в сетевых подключениях (для толстого клиента в т.ч. в сетевых подключениях клиентов, для тонкого — только в проблемах сети между сервером 1С и MS SQL). 
2) Каких то неправильных действиях (отправка почты, запись в файл, запуск внешних обработок, чтения из файла) производимых в транзакциях (при записи, при проведении)

Собственно от них надо избавляться.


Если ничего не помогло (или план B)

ВНИМАНИЕ! Перед выполнением процедур, описанных ниже, сделать полную резервную копию файлов БД MS SQL нужно обязательно!!!!

Есть ещё один — более радикальный способ решения вопроса роста журнала транзакций MS SQL. Но я лично его бы не рекомендовал к использованию. Тем не менее, специалисты Microsoft тоже могут ошибаться, 
и SQL Server может содержать ошибки, о которых мы регулярно читаем в BugFix, или же наблюдаем сами, поэтому приведу и этот способ. 

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

Конечно при этом, особенно если в базе были всё-таки не зафиксированные может быть нарушена логическая целостность, но для этого запускается CheckDB которая в общем и целом приводит базу в порядок. Для аналогии это то же самое что в 1С проврять ссылочную целостность с опцией «Удалять если не найден». Если транзакция полностью не зафиксирована, но от неё остались частично данные, что противоречит принципу атомарности транзакций — эти данные будут удалены.

Итак приступим:

1) Detach БД из списка

2) Фал *.ldf удаляем (вы же его сохранили уж, да?)

3) Файл *.mdf переименовываем (в любое имя какое нравится)

4) В MS SQL создаём новую (!!!) БД с тем же именем, с каким была «больная» БД

5) Останавливаем MS SQL Server

6) Новый *.mdf файл удаляем, а старый переименовываем под «старое имя», подменяя тем самым файл новой БД

7) Запускаем MS SQL Server. При этом будет «битая БД», далее мы её исправляем

8) ALTER DATABASE [Database] SET EMERGENCY 

9) exec sp_dboption [Database], ‘single user’, ‘TRUE’
Монопольный режим работы с БД

10) DBCC CHECKDB ([Database], REPAIRALLOWDATA_LOSS)
Ключевая операция — «возвращает БД к жизни». Может выполняться достаточно долго — до получаса на больших БД. Ни в коем случае не прерывайте эту операцию. Результат, где будут собраны исправленные ошибки
на всякий случай сохраните

11) exec sp_dboption [Database], ‘single user’, ‘FALSE’
Сбрасываем монопольный режим

12) ALTER DATABASE [Database] SET ONLINE
Делаем базу доступной.

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

Несколько RDP сессий в Windows 7

Профессиональная и Максимальная версии Windows 7 поставляются с функцией удаленного рабочего стола (RDP) , которая позволяет получить доступ к вашей машине удаленно, находясь вдали от дома или офиса. К сожалению, по умолчанию, она ограничена одной сессией одного пользователя. Это означает, что если кто-то удаленно подключается к вашему компьютеру, а кто-то уже находится в своей сессии, то он будет автоматически отключен, даже если у этого пользователя права администратора.

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

Для того, что бы позволить нескольким пользователям работать с одним компьютером одновременно, необходимо снять лицензионное ограничение. Для этого командаDeepXW создала универсальный патч. Патч вносит изменения в файл termsrv.dll, который расположен в %SystemRoot%\System32\.

Icon of Zip Archives UniversalTermsrvPatch (66.3 KB)

Патч поддерживает: Windows XP SP2 SP3; Vista SP1 SP2; Windows 7 [32bit(x86)/64bit(x64)], Windows Server 2008 SP1/SP2

Скачайте и распакуйте архив, затем запустите соответствующий файл с правами администратора (кликните правой кнопкой мыши на исполняемом файле, выберите “Запуск от имени администратора”). Для 32-разрядных систем используется UniversalTermsrvPatch-x86.exe, для 64-разрядных используется UniversalTermsrvPatch-x64.exe.

Появится окно, как на картинке выше, где можно патчить termsrv.dll для снятия ограничения сеансов удаленного рабочего стола, или восстановить исходный файл в любое время (путь к резервному файлу: \Windows\System32\termsrv.dll.backup). После применения патча, перезагрузите компьютер и можно приступать к работе .

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

идеальный htaccess

Попытка номер раз создать почти идеальный htaccess

  • Tutorial
    - Google выше ранжирует сайты, которые загружаются быстрее.
    - Если на eBay или Amazone увеличить время загрузки страниц на 9% они теряют 1% прибыли.
    - Сделать свой сайт быстрее, чтобы сэкономить на клиентском трафике и на числе обращений к серверу.

.htaccess — наш герой

Профессионалы знают, что такое htaccess.
Тем кто собираются уйти с народ.ру на php-хостинг только предстоит узнать, что это такое.
Те кто только что установил свои первые jooml’у или wordpress срочно должны узнать о нашем герое — htaccess

Зачем нам .htaccess ?

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

Или другой пример. Скажем ваш ресурс начинает набирать популярность, но переезжать на выделенный сервер ещё рано, а мощностей VPS уже не хватает. Вас очень может выручить htaccess.

А ещё htaccess может решить некоторые вопросы с безопасностью вашего сайта.

А ещё…

Хочу идеальный .htaccess !

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

1. Первой строкой задаем основные опции:

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

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

Опция -ExecCGI запрещает запуск CGI скриптов. Лучше разрешить только для конкретных папок. Повысит безопасность.
Опция -Indexes запрещает показывать содержимое каталогов, если в них нет индексного файла. На виртуальном хостинге обычно включена по умолчанию. Изменив минус на плюс +Indexes можете наоборот разрешить просмотр содержимого каталога (или каталогов).
Опция -Includes запрещает SSI. Если не знаете, что это — запрещайте (Можно поЯндексировать(!) по запросу Server Side Include если хотите узнать об этом побольше). Можно использовать опцию IncludesNOEXEC, которая разрешит использовать SSI без запуска скриптов.
Опция +FollowSymLinks позволяет использовать символические ссылки на файлы или каталоги, не находящиеся в пределах корня вашего сайта.

Примечание
Пример

2. Немного SEO (куда же без него)

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^black-web
	RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
	RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
	RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

Обязательно не забыть про условие <IfModule mod_rewrite.c>. Не окажись у хостера данного модуля и ваш сайт станет выдавать 500-ую ошибку. Данный конкретный модуль входить в сборку Апача по-умолчанию. Ну а вдруг… Хостеры и их админы бывают всякие.

В данной части пользы больше для SEO. Модуль rewrite как следует из его названия занимается перенаправлениями (привет Кэпу).

В этой части файла мы указали две склейки: мы склеили ваш_сайт и www.ваш_сайт Даже если пользователь наберет ваш сайт без WWW его перебросить 301 редериктом на www.ваш_сайт.
А также мы избавились /index.php в строке запроса. Если пользователь наберет www.ваш_сайт/index.phpего перебросит (снова 301 редериктом) на www.ваш_сайт.
Теперь поисковики не будут путаться между www и не будут дублировать главную страницу в результатах индексирования вашего сайта. Гуглим СЕО склейки домена, если не понимаете зачем это нужно.

3. Кто в папке главный?

Если у вас папке есть файлы index.html и index.php (не знаю, зачем и кому такое было нужно, но не раз видел такое) то как указать серверу кто их них более индексный?

DirectoryIndex index.php

А ещё можно там указать скажем roosso.php и тогда набрав в строке запроса адрес сайт.бла/бла/бла/ вы увидете не index, а roosso

4. Ещё настройки…

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
AddDefaultCharset UTF-8

Первая строчка устанавливает часовой пояс. Например в Apache 2.22.22 был баг связанный с этой опцией. Функции времени в php не работали, пока не установишь часовой пояс.

Вторая строка это подпись сервера. Вы их не раз видели на всяких системных страницах типа 500ой ошибки или 403ей. Обычно там какая-нибудь техническая информация и почта вебмастера. Я предпочитаю даже в таких мелочах скрывать данные о софте на сервере. Коллеги параноики меня поддержат.

Угадайте, что делает третья строка?

5. Когда нет доступа к php.ini

С помощью .htaccess мы также можем управлять рядом настроек PHP. На виртуальном хостинге, как правило, нет возможности изменять настройки php.ini. Чаще всего этого и не требуется. Но все же есть ряд опций контроль над которыми может нам быть полезен. Например, увеличить лимит на загрузку файлов, или лимит передачи данным методом POST.

<ifModule mod_php.c>
  php_value	upload_max_filesize	32M
  php_value	post_max_size		10M
  php_value	default_charset utf-8
  php_value	max_execution_time 200
</ifModule>

Первая строчка разрешить загружать файлы размером до 32 Мегабайт. По умолчанию в php обычно это значение 8 или 16 мегабайт.
Второй строкой разрешаем постинг объемом до 10 мегабайт. По умолчанию это значение обычно 2 Мегабайта.
Третья строка устанавливает кодировку по используемую вашими скриптами. По своей сути она дублирует строку: «AddDefaultCharset UTF-8». Но я чаще прибегаю к установке кодировки именно через php.
Четвертой строкой изменяем лимит времени выделенный на выполнение скрипта. По умолчанию он обычно равен 30 секундам. Но иногда для выполнения каких нибудь сложных обработок требуется больше времени.

6. Типы файлов. Ловкость рук и ни какого мошенничества.

В моей практике случалось пару раз, что после какого либо обновления провайдером софта, слетали типы файлов. Хотя такое редко. За 10 лет, всего два случая. Но иногда мне нужно было заставить html работать как php. А иногда требуется научить апач различать типы файлов, которые ему неизвестно. (Как оказалось Апачу вообще мало что известно из редких типов файлов.) В такой ситуации нас спасет следующий код:

AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

Первая строчка позволит нашим php файлам иметь расширение html, но выполняться как php. Полезно бывает во многих случаях. А в старые добрые когда поисковики индексировали ЧПУ лучше, такая строчка всегда приходила на выручку.
Мы можем переназначить, добавить или подменить любые типы файлов под удобные нам разрешения.

Интересный трюк

Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.

Третья, четвертая и пятая строки, на всякий случай уточняют мим-тип файлов с разрешением css, js, xml. Не путайте с присвоением заголовка в ответе сервера на запрос, как это сделано в первых двух строках.

Шестая строчка это участка, нужна если на вашем сайте есть скачиваемый для пользователей контент. Если добавить эту строку, то при обращении к данным файлам им будет предлагаться скачать их на компьютер, а не как это сейчас в современным браузерах куча плагинов, которые даже word открывают в браузере.

Седьмую строку я закомментировал. Это строчка в принудительно-добровольном порядке, будет все файлы с вашего сервера запустить как php. Её лучше использовать лишь в отдельных папках, при необходимости.

7. Знают взрослые и дети, что архивы меньше весят…

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

У Апача есть два модуля сжатия. Оба не являются модулями по умолчанию, поэтому необязательно могут присутствовать у вашего провайдера. Но как показала практика у 99% провайдеров один из них стоит. Наиболее распространен mod_deflate. Чтобы его с помощью сжимать весь контент на вашем сайте добавьте в .htaccess следующие строки:

<ifModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

Как видите мы должны перечислить mime type файлов, которые следует подвергать сжатию. Сюда можно добавить и видео и картинки, но толку это даст мало. Потому что jpeg или gif уже сами по себе являются сжатыми форматами. Также как avi или flv. Вы фактически нечего не выиграете указав их.

Второй менее популярный модуль это mod_gzip, Чтобы включить сжатие с его помощью добавьте вот такие строчки:

<IfModule mod_gzip.c>
	mod_gzip_on         Yes
	mod_gzip_dechunk    Yes
	mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
	mod_gzip_item_include mime		^text\.*
	mod_gzip_item_include mime		^application/x-javascript.*
	mod_gzip_item_exclude mime		^image\.*
	mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

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

8. А ещё быстрее можно?

Можно. Если применить кеширование страниц. У кеширования есть и плюсы и минусы, поэтому подходить к этому вопросу надо подготовившись. Для динамически обновляющегося сайт каждый 2-3 минуты, например популярного форума, нужно учесть, что пользователь должен видеть актуальную информацию. Но у любого сайт есть контент, который более или менее статичен. Например те же картинки, или файлы стилей. Поэтому нам потребуется по разному использовать кеширование различного содержимого на сайте. В html разметки мы всегда можем использовать meta теги. И через php мы может устанавливать заголовки ответа сервера. Остается вопрос, как быть с css, js, image и т.д. и т.п.

Помочь нам в этом могут два модуля: mod_headers и mod_expires которые могут установить заголовки в ответ сервера и подсказать вашему браузеру, что и как нужно кешировать. Один из модулей обычно стоит у провайдера, но как и в случае с любым модулем, который не входит в стандартную сборку Апача, 100% гарантии никто вам не даст. Поэтому снова во избежание 500й ошибки указывает условия для каждого из модулей.

<ifModule mod_headers.c>
	#кэшировать html и htm файлы на один день
	<FilesMatch "\.(html|htm)$">
		Header set Cache-Control "max-age=43200"
	</FilesMatch>
	#кэшировать css, javascript и текстовые файлы на одну неделю
	<FilesMatch "\.(js|css|txt)$">
		Header set Cache-Control "max-age=604800"
	</FilesMatch>
	#кэшировать флэш и изображения на месяц
	<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
		Header set Cache-Control "max-age=2592000"
	</FilesMatch>
	#отключить кэширование
	<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
		Header unset Cache-Control
	</FilesMatch>
</IfModule>

Вот такой синтаксис у mod_headers. Думаю по комментариям ясно что к чему.
В данной секции я отключил кеширование php файлов. Хотя по моему мнению небольшой временной интервал кеширования им не повредит. 5-30 секунд, это интервал времени, за который мало что меняется. А многие пользователи любят пользоваться клавишей back (вернуться назад). Чтобы не загружать им страницу второй раз, а подхватить её из кеша, разумный интервал кеширования все же уместен.

Во второй секции где идут условия для mod_expires я именно так и делаю — для php ставлю небольшой интервал кеширования.

<ifModule mod_expires.c>
	ExpiresActive On
	#по умолчанию кеш в 5 секунд
	ExpiresDefault "access plus 5 seconds"
	#кэшировать флэш и изображения на месяц
	ExpiresByType image/x-icon "access plus 2592000 seconds"
	ExpiresByType image/jpeg "access plus 2592000 seconds"
	ExpiresByType image/png "access plus 2592000 seconds"
	ExpiresByType image/gif "access plus 2592000 seconds"
	ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
	#кэшировать css, javascript и текстовые файлы на одну неделю
	ExpiresByType text/css "access plus 604800 seconds"
	ExpiresByType text/javascript "access plus 604800 seconds"
	ExpiresByType application/javascript "access plus 604800 seconds"
	ExpiresByType application/x-javascript "access plus 604800 seconds"
	#кэшировать html и htm файлы на один день
	ExpiresByType text/html "access plus 43200 seconds"
	#кэшировать xml файлы на десять минут
	ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

9. Правила вежливого тона…

В процессе модернизации своего сайта, мы часто оставляем хвосты ввиде ссылок, которые ведут на страницы, которые мы удалили. Иногда такие ссылки идут с других сайтов или из поисковых систем. Чтобы не терять пользователей вежливым тоном считается иметь собственные страницы для различного типа ошибок. Включая даже ошибки сервера. Например стандартное сообщение о 500й ошибки очень скучное и мрачное, и вряд ли вызовет у пользователя желание посетить вашу страницу ещё раз. Но в htaccess есть приемы, которые могут сделать даже эту страницу приветливей.

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

Для 400-х ошибок можно использовать и динамические страницы на php. А вот для 500 лучше сделать на html и js. Это часть ошибок обычно связана с ошибками сервера (в большинстве случаев) и php или cgi как правило в такой ситуации не работают.

Если вам лень делать столько страниц устанавливайте страницей ошибок главную страницу своего сайта или карту сайта.

Все это вы делаете исключительно для людей. Поисковым роботам плевать на то есть у вас страницы ошибок или нет. Они видят ответ сервера с кодом ошибки и блокируют вашу страницу в поиск. Так что имейте ввиду, это не панацея. Это лишь вежливость к вашей аудитории и имидж вашего сайта.

10. Подведем итог

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

В результате всех манипуляций у нас должен был получить файл следующего содержания:

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^black-web
    RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

DirectoryIndex index.php

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
#AddDefaultCharset UTF-8
<ifModule mod_php.c>
	php_value	upload_max_filesize	32M
	php_value	post_max_size		10M
	php_value	default_charset utf-8
	php_value	max_execution_time 200
</ifModule>
AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

<ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

<IfModule mod_gzip.c>
    mod_gzip_on         Yes
    mod_gzip_dechunk    Yes
    mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include mime		^text\.*
    mod_gzip_item_include mime		^application/x-javascript.*
    mod_gzip_item_exclude mime		^image\.*
    mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

<ifModule mod_headers.c>
    #кэшировать html и htm файлы на один день
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #отключить кэширование
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>

<ifModule mod_expires.c>
    ExpiresActive On
    #по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    #кэшировать css, javascript и текстовые файлы на одну неделю
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    #кэшировать html и htm файлы на один день
    ExpiresByType text/html "access plus 43200 seconds"
    #кэшировать xml файлы на десять минут
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

11. Послесловие.

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

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

Разные интересные примеры

# SECURE ____________________
<IfModule mod_ssl.c>
	SSLOptions +StrictRequire
	SSLRequireSSL
	SSLRequire %{HTTP_HOST} eq "black-web.ru"
</IfModule>
<IfModule mod_rewrite.c>
	RewriteCond %{HTTPS} !on
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

# HOTLINKING ________________
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_REFERER} !^$
	RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9]  \.)?black-web\.ru [NC]
	RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]
</IfModule>

# REDIRICT __________________
Redirect 301 /index.html /index.php
<IfModule mod_rewrite.c>
	RewriteRule ^news/([^/\.]+)/?$ news.php?news=$1 [L]
	RewriteRule ^(.*\.((js)|(css)))$ plugin/GzipFile.php?file=$1
	RewriteRule \.css$ plugin/GzipFile.php?file=$1
	RewriteRule \.js$ plugin/GzipFile.php?file=$1
</IfModule>
RedirectMatch 301 /blog(.*) http://www.black-web.ru/$1

Настройка .htaccess

Настройка .htaccess. Полное руководство

08.06.2011

настройка htaccess

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

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

Для начала — пару слов, что такое htaccess? Процитирую официальный сайт веб-сервера Apache:

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

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


Директивы htaccess. Перенаправление

Блокируем хотлинки с других сайтов

Есть нехорошие товарищи, которые могут использовать картинки с вашего ресурса для использования в своих проектах. Они используют ваши изображения на своих сайтах, другими словами, используют вашу пропускную способность в своих целях, по аналогии с перемещением изображений на поддомен. Будем с ними бороться… Заменим любую картинку, на которую ведет хотлинк с другого сайта, на какое-нибудь предупреждающее изображение или на что хватит фантазии. В коде не забывайте менять адреса на ваши URL.

1
2
3
4
5
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ваш-урл\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Замените путь к картинке
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/noHL.jpg [L]

Перенаправим RSS фиды WordPress на Feedburner

Я не думаю, что кто-то пользуется чем-то другим, отличным от Feedburner. Удобно для пользователя, удобно для владельца блога, статистика, опять же. Если вы еще не используете — крайне рекомендую. Код ниже перенаправит все ваши RSS потоки на ваш аккаунт, не забывайте только вставить нужный адрес.

1
2
RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$
RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/yourfeed/

В этом примере идет перенаправление двух потоков: основного RSS и обновление комментариев, если посетитель подписан на обновления.

Изменим страницы ошибок

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

1
2
3
4
5
6
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 /errors/authreqd.html
ErrorDocument 403 /errors/forbid.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/serverr.html
#Замените /errors/*.html на путь к вашим страницам ошибок

В этом примере идет перенаправление в случае основных ошибок. 404 я тоже добавил, хотя CMS обычно отрабатывают такие моменты, но бывали случаи.

301 и 302 редирект или перенаправление

301 редирект или, так называемое постоянное перенаправление — говорит о том, что страница поменяла адрес или URL и перенаправляет на новую страницу. Если у вас на сайте была проиндексированная ПС страница, а вы поменяли ее адрес — в обязательном порядке сделайте 301 редирект на новую страницу. При 301 редиректе старая страница не индексируется, а вместо нее «подставляется» новая.

1
2
RewriteEngine on
Redirect 301 /old-page http://ваш-урл.ру/new-page

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

1
2
3
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)  [R=301,L]

Есть интересная методика «скрытия» внешних ссылок путем 301 редиректа. Допустим, у вас есть «сквозная» ссылка в сайдбаре, которая ведет на ваш профиль в Google+, она внешняя, то есть ведет на внешний ресурс. Для SEO очень хорошо, когда таких ссылок как можно меньше. Можно спрятать их и сделать внутренними.

Технология производства внутренних ссылок из внешних:

  • ставим ссылку на мнимую страницу, допустим gering111.com/google-plus
  • настраиваем 301 редирект в htaccess с этой страницы на реальную страницу вашего профиля
  • посетитель ничего не чувствует, ПС довольны

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

1
2
RewriteEngine on
Redirect 302 /old-page http://ваш-урл.ру/new-page

Код абсолютно такой же, как в случае с постоянным перенаправлением.
302 редирект удобно использовать, когда проводятся какие-либо долгосрочные работы на сайте и не нужно показывать посетителям «поломанные» страницы. В таком случае вам поможет этот код:

1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_URI} !/inside.html$
RewriteCond %{REMOTE_ADDR} !^123.123.123.123
RewriteRule $ /inside.html [R=302,L]

Склеиваем сайты с www и без него

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

1
2
3
4
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.ваш-урл\.com$ [NC]
RewriteRule ^(.*)$ http://ваш-урл.com/$1 [R=301,L]

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

Показ страниц в зависимости от IP

1
2
3
SetEnvIf REMOTE_ADDR 192.168.0.1 REDIR=&amp;quot;redir&amp;quot;
RewriteCond %{REDIR} redir
RewriteRule ^/$ /about.html

Добавлять адреса можно дублированием первой строки, в последней — меняется страница для перенаправления.

Перенаправляем на главную

Перенаправление со страниц site.com/index.php и site.com/index.html на страницу site.com/. За код спасибо Василию Красноженову.

1
2
3
4
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://site.com [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.com [R=301,L]

Директивы htaccess. Разделяем доступы

Запрет доступа к сайту

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

1
2
3
Order Allow,Deny
Allow from all
Deny from 192.168.0.1

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

1
2
3
Order Deny,Allow
Deny from all
Allow from 192.168.0.1

Добавлять адреса аналогично предыдущему примеру.

Запрещаем просмотр нежелательным User-Agent

Каждый браузер или приложение, которое запрашивает страницу, так или иначе имеет идентификатор — User-Agent. Можно запретить просмотр нежелательным товарищам. Это могут быть как программы, сканирующие сайты, так и старые браузеры, от поддержки которых вы целиком отказались. Ситуации бывают разные.

1
2
3
4
5
6
7
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
Order Allow,Deny
Allow from all
Deny from env=bad_bot

Полный список известных User-Agent вы можете найти на сайте http://www.user-agents.org/

Запрещаем доступ к определенному файлу

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

01
02
03
04
05
06
07
08
09
10
# защищаем wpconfig.php
&amp;lt;Files wp-config.php&amp;gt;
order allow,deny
deny from all
&amp;lt;/Files&amp;gt;
#защищаем htaccess
&amp;lt;Files .htaccess&amp;gt;
order allow,deny
deny from all
&amp;lt;/Files&amp;gt;

Аналогично можно защитить css и js файлы, которые используются плагинами:

1
2
3
4
&amp;lt;Files ~ &amp;quot;\.(js|css)$&amp;quot;&amp;gt;
order allow,deny
allow from all
&amp;lt;/Files&amp;gt;

Скачивание определенных типов файлов

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

1
2
3
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .avi

Ограничение на доступ к админке WordPress

Если у вас постоянный IP адрес, можно только ему давать доступ к админ-панели WordPress

1
2
3
4
5
6
7
8
9
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName &amp;quot;Example Access Control&amp;quot;
AuthType Basic
&amp;lt;LIMIT GET&amp;gt;
order allow, deny
deny from all
allow from Ваш IP
&amp;lt;/LIMIT&amp;gt;

Директивы htaccess. Техническая оптимизация и ускорение

Запрещаем автоматическое индексирование файлов

В каждой папке на сайте Apache создает, по умолчанию, индексные файлы, в которых перечисляется, какие файлы в папке находятся. Если вы не хотите давать дополнительную лазейку для злоумышленников — запретите индексирование.

1
Options -Indexes

Включаем gzip сжатие

Вы знаете о том, что данные на сервере можно сжать, а клиент их распакует у себя? Код ниже как раз включает такую штуку. Нужно только убедиться, что gzip разрешен на вашем хостинге, но обычно он есть.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
&amp;lt;FilesMatch &amp;quot;\.js.gz$&amp;quot;&amp;gt;
ForceType text/javascript
Header set Content-Encoding: gzip
&amp;lt;/FilesMatch&amp;gt;
&amp;lt;FilesMatch &amp;quot;\.css.gz$&amp;quot;&amp;gt;
ForceType text/css
Header set Content-Encoding: gzip
&amp;lt;/FilesMatch&amp;gt;
&amp;lt;FilesMatch &amp;quot;\.js$&amp;quot;&amp;gt;
ForceType text/javascript
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !&amp;quot;.*Safari.*&amp;quot;
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)\.js$ $1\.js.gz [L]
ForceType text/javascript
&amp;lt;/FilesMatch&amp;gt;
&amp;lt;FilesMatch &amp;quot;\.css$&amp;quot;&amp;gt;
ForceType text/css
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !&amp;quot;.*Safari.*&amp;quot;
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)\.css$ $1\.css.gz [L]
ForceType text/css
&amp;lt;/FilesMatch&amp;gt;

Код не работает для изображений, но к ним применять gzip не рекомендуется. Именно такой код установлен у меня.

Сжатие с применением mod_deflate

Ходят слухи, что с помощью этого мода сжимать данные лучше и сайт работает быстрее. Я не могу протестировать, да и не встречал в Интернете подобных тестов. Если у кого есть такая информация — буду благодарен. А код выложу, мало ли

1
2
3
4
5
&amp;lt;ifmodule mod_deflate.c=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;filesmatch &amp;quot;.(js|css)$&amp;quot;=&amp;quot;&amp;quot;&amp;gt;
SetOutputFilter DEFLATE
&amp;lt;/filesmatch&amp;gt;
&amp;lt;/ifmodule&amp;gt;

Включаем кэширование браузера клиента

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

01
02
03
04
05
06
07
08
09
10
11
12
Header append Cache-Control &amp;quot;private&amp;quot;
FileETag MTime Size
ExpiresActive On
ExpiresDefault &amp;quot;access plus 0 minutes&amp;quot;
ExpiresByType image/ico &amp;quot;access plus 1 years&amp;quot;
ExpiresByType text/css &amp;quot;access plus 1 years&amp;quot;
ExpiresByType text/javascript &amp;quot;access plus 1 years&amp;quot;
ExpiresByType image/gif &amp;quot;access plus 1 years&amp;quot;
ExpiresByType image/jpg &amp;quot;access plus 1 years&amp;quot;
ExpiresByType image/jpeg &amp;quot;access plus 1 years&amp;quot;
ExpiresByType image/bmp &amp;quot;access plus 1 years&amp;quot;
ExpiresByType image/png &amp;quot;access plus 1 years&amp;quot;

Указываем кодировку по умолчанию

WordPress работает с кодировкой UTF8 и делает это хорошо, но чтобы гарантированно избежать проблем с кодировкой — укажите ее принудительно, хуже не будет точно.

1
AddDefaultCharset UTF-8

Ограничиваем число подключений к сайту

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

1
MaxClients &amp;lt;количество подключений&amp;gt;

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

Разрешаем выполнение php внутри JavaScript

Иногда необходимо выполнить некоторый код внутри скрипта. Этот код поможет включить эту функцию

1
2
3
4
5
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
&amp;lt;filesmatch &amp;quot;\.(js|php)$&amp;quot;&amp;gt;
SetHandler application/x-httpd-php
&amp;lt;/filesmatch&amp;gt;

Вот и все, что касается htaccess и его стандартного использования. Я не стал упоминать о защите папок паролями, потому что не считаю это правильным, о «защите» от спама, путем блокировки запросов запросов без передачи Referer, потому что все современные спам-машины давно умеют это делать. Ну и прочие вещи, которые не считаю грамотно реализованными.

Напоследок хочу представить вам сервис тестирования вашего htaccess файла — http://htaccess.madewithlove.be/. Там все просто, удачного дня

Базовая настройка коммутатора Dell PowerConnect M8024-k через командную строку

Базовая настройка коммутатора Dell PowerConnect M8024-k через командную строку

Коммутатором PowerConnect M8024-k комплектуются шасси Dell PowerEdge M1000e —

http://www.dell.com/us/business/p/powerconnect-m8024-k/pd

Настройка VLAN в командной строке

user: bla bla
password: bla bla
en — режим конфигурирования
show vlan — смотрим что есть из VLAN, решаем что создаем
configure — заходим в режим конфигурирования
vlan database — заходим в режим конфигурирования VLAN
vlan 101 — создаем VLAN101
exit — выходим из конфигурирования VLAN
interface ethernet 1/xg1 — заходим в конфигурирование 1 интерфейса наименования портов надо посмотреть — может быть gi или te (десятка)
switchport access vlan 101 — делаем его обычным портом и переводим в 101 VLAN
exit — вышли из конфигурирования интерфейсов
end

Настройка внешнего порта в транковый режим

заходим в конфигуриационный режим как выше
interface ethernet 1/xg20 —  заходим в конфигурирование 20 внешнего интерфейса
switchport mode general — делаем его транковым
switchport general allowed vlan add 101-102 — разрешаем в нем ходить VLAN 101 и 102
exit
end

Удаление VLAN из транка

в конфигурации интерфейса команда
swithcport general allowed vlan remove 101-102 — удалили из разрешенных 101 и 102 VLAN

Удаление VLAN из конфигурации

configure — заходим в режим конфигурирования
vlan database — заходим в режим конфигурирования VLAN
no vlan 101 — удаляем VLAN 101
1 vlan — VLAN по умолчанию, он удаляет порт из других виланов если поместить в него порт
write — записывает конфигурацию в постоянную память

Обращение в службу технической поддержки Делл

Найти и записать сервисный тэг коммутатора — 7 букв и цифр, в конце j или 1 (заодно шасси и блейда). Находится через веб-интерфейс.

Звонить в поддержку и заводить инцидент.
Телефон техподдержки — 8 (499) 500-8391 далее последовательно набрать с небольшими паузами 1 2 3 1 — проход через автосекретаря на службу поддержки серверов.

Доступ к командной строке коммутатора получается через последовательный кабель или SSH.

Настройка перехвата звонков LDK 300

СообщениеДобавлено: Ср 12 Мар, 2008 15:56    Заголовок сообщения: Помогите с LDK-100 (LDK-300) Ответить с цитатой

Нужно сгруппировать номера, но это я вроде бы понял как сделать через PGM 190… нужно настроить перехват вызова, т.е., допустим в группе *620 находятся 3 номера: 121, 127 и 130. нужно чтобы, если звонок поступает на номер 121, его могли принять и абоненты 127 и 130.

СообщениеДобавлено: Чт 13 Мар, 2008 6:43    Заголовок сообщения: Ответить с цитатой

В PGM190/191 для Group 620 установи тип Ring и в нее включи 3 станции.
Соответственно все 3 станции звонят на входящие звонки.
Если тебе надо сделать так чтобы 2 станции звонили на входящие звонки сразу одновременно без задержки, а третья начинала звонить после трех гудков, если на двух первых никто не снял трубку, укажи по overflow timer этот номер.

СообщениеДобавлено: Чт 13 Мар, 2008 7:08    Заголовок сообщения: Ответить с цитатой

если говорить про перехват то:
в 107-2 — поменять 566 на ** (для удобства абонентов)
в 190 — создать группу абонентов для перехвата вызовов
второй момент:
в 110 поменяй SLT(PULSE) на SLT(DTMF)
ну и на самом телефоне смени тип набора на тоновый.
третье:
можно добавлять в пгм190 мем не группу станций, которая идет одна за другой, а по одиночке, т.е. выборочно то можно
с системника, нажимаешь flexkey 3. а дальше flexkey 1-№ абонента,flexkey 2-№ абонента и т.д. ну и hold

 

CSS — Позиционирование блочных элементов

CSS — Позиционирование блочных элементов

Автор: Александр Мальцев

Блочный элемент в HTML –это такой элемент, который занимает по умолчанию всю ширину родительского элемента. Родительским элементом может быть другой блочный элемент, или окно браузера. Блочному элементу с помощью свойств CSS можно задать ширину (width) и высоту (height). Позиционированием блочных элементов называется процесс их расположения внутри окна браузера и относительного друга с помощью CSS свойств position, left, top, right и bottom. Свойство CSS position предназначено для задания одного из четырёх доступных видов позиционирования: static (по умолчанию), absolute (абсолютное), fixed (фиксированное) и relative (относительное). Остальные CSS свойства, а именно left, top, right и bottom предназначены для задания расстояний относительно левого, верхнего, правого и нижнего края родительского элемента. Также блочные элементы при задании определенных свойств могут накладываться друг друга, и данную возможность то же можно использовать на сайтах.

Позиционирование по умолчанию (static)

Если вы не указали position у блочного элемента или указали static, что одно и то же, то в таком случае блочные элементы располагаются по порядку. Причем следующий блок (например: красный) располагается с новой строки. Так же на данное позиционирование не действует задание расстояний left, top, right и bottom.

<body>
  <div style="width: 200px; height: 100px; border: 1px solid black; background: green;"></div>
  <div style="width: 300px; height: 150px; border: 1px solid black; background: red;"></div>
</body>

Статичное позиционирование блоков

Абсолютное позиционирование (absolute)

При абсолютном позиционировании положения элемента задаётся относительно краёв окна браузера с помощью расстояний, задаваемых свойствами left, top, right и bottom. Если указать расстояния left и right одновременно, и они будут противоречить между собой, то предпочтение отдаётся left, то же самое касается top и bottom, в которых больший приоритет имеет расстояние top. Абсолютное позиционирование применяется очень часто совместно с относительным позиционированием в дизайнерских целях, когда необходимо разместить различные элементы относительного друг друга, так же может применяться для создания выпадающих меню, разметки сайта и т.д.

<body>
  <div style="width: 200px; height: 100px; border: 1px solid black; background: green;"></div>
  <div style="width: 300px; height: 200px; position: absolute; top: 50px; left: 100px; border: 1px solid black; background:red;"></div>
</body>

Блок с абсолютным позиционированием

Фиксированное позиционирование (fixed)

Фиксированное позиционирование отличается от других видов позиционирования и не перемещается вместе с контентом при скроллинге страницы. Блочные элементы с фиксированным позиционированием привязываются с помощью свойств left, top, right и bottom к краям окна браузера. Фиксированное позиционирование применяется для создания фреймовых интерфейсов (окно браузера делится на несколько областей), фиксированного меню, фиксированного подвала сайта и «постоянных» блоков (перечень ссылок, социальные кнопки и т.д.).

<body>
  <div style="width: 200px; height: 2000px; border: 1px solid black; background: green;"></div>
  <div style="width: 600px; height: 200px; position: fixed; top: 100px; left: 100px; border: 1px solid black; background:red;"></div>
</body>

Блок с фиксированным позиционированием

Относительное позиционирование (relative)

Относительное позиционирование задаётся с помощью задания расстояний left, top, right и bottom относительно его текущего положения.

<body>
  <div style="width: 200px; height: 100px; border: 1px solid black; background: green;"></div>
  <div style="width: 300px; height: 200px; position: relative; top: 50px; left: 100px; border: 1px solid black; background: red;"></div>
</body>

Блок с относительным позиционированиемОднако такое положение блока можно создать и с помощью свойства margin (отступы).

<body>
  <div style="width: 200px; height: 100px; border: 1px solid black; background:green;"></div>
  <div style="width: 300px; height: 200px; margin-top: 50px; margin-left: 100px; border: 1px solid black; background: red;"></div>
</body>

Относительное позиционирование не интересно использовать само по себе, оно в основном применяется вместе с абсолютным позиционированием.

Рассмотрим варианты:

    1. Если расположить блоки с абсолютным позиционированием в блок с относительным, то расстояния будут уже задаваться не от края окна браузера, а от границ относительного блока.
      <body>
      <!-- Зелёный блок с относительным позиционированием -->
      <div style="width: 400px; height:400px; position:relative; top:50px; left:50px; border: 1px solid black; background:green;">
        <!-- Красный блок с абсолютным позиционированием -->
        <div style="width: 100px; height:100px; position:absolute; top:50px; left:50px; border: 1px solid black; background:red;"></div>
        <!-- Синий блок с абсолютным позиционированием -->
        <div style="width: 100px; height:100px; position:absolute; bottom:50px; right:50px; border: 1px solid black; background:blue;"></div>
      </div>
      </body>

      Расположение блоков с абсолютным позиционированием в относительном блоке

    2. Например: для создания фиксированных макетов состоящих из 3 блоков, выровненных по верхнему краю. Установим высоту «400px» относительному блоку для наглядности .
<body>
<div style="width: 800px; height:400px; position:relative; border: 1px solid black; background:green;">
  <div style="width: 200px; height:200px; position:absolute; left:0px; border: 1px solid black; background:red;">Левый блок</div>
  <div style="width: 400px; height:200px; position:absolute; left:200px; border: 1px solid black; background:blue;">Основной блок</div>
  <div style="width: 200px; height:200px; position:absolute; left:600px; border: 1px solid black; background:red;">Правый блок</div>
</div>
</body>

Макет, состоящий из 3 блок с абсолютным позиционированием

  1. Дополнительно к блокам можно применять свойство z-index, которое предназначено для позиционирования элементов по оси Z. Чем больше значение свойства z-index, тем ближе элемент расположен к нам, и наоборот, чем меньше значение, тем дальше расположен элемент от нас.
    <body>
    <body>
    <div style="width: 300px; height:300px; position:relative; border: 1px solid black; background:green;">
      <div style="width: 100px; height:100px; position: absolute; z-index: 1; left: 50px; top: 50px; border: 1px solid black; background: red;"></div>
      <div style="width: 100px; height: 100px; position: absolute; z-index: 2; left: 100px; top: 100px; border: 1px solid black; background: blue;"></div>
      <div style="width: 100px; height: 100px; position: absolute; z-index: 3; left: 150px; top: 150px; border: 1px solid black; background: yellow;"></div>
    </div>
    </body>

    Расположение блоков с абсолютным позиционированием, к которым применено свойство z-index

Заплатки для wannacry

Новый вирус wannacry

Проверить установлена ли заплатка для защиты от данного вируса можно скриптом скачать

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

https://technet.microsoft.com/ru-ru/library/security/ms17-010.aspx

Заплатки для некоторых ОС:
Windows XP SP3
Windows XP SP2 x64
Windows Server 2003 x86
Windows Server 2003 x64
Windows Vista x86 Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows 8 32-bit
Windows 8 x64
Windows Server 2008 x86
Windows Server 2008 x64
Windows Server 2008 R2 x64
Windows Server 2008 R2 for Itanium
Windows 7 32-bit Service Pack 1
Windows 7 x64 Service Pack 1
Windows 8.1 32-bit
Windows 8.1 x64
Windows 10 32-bit
Windows 10 x64
Windows 10 Version 1511 32-bit
Windows 10 Version 1511 x64
Windows 10 Version 1607 32-bit
Windows 10 Version 1607 x64

Пароли Kyocera

Command Center Username & Password Machine Username & Password

Model Username Password Model Username Password

Monochrome Monochrome
FS-2100DN Admin Admin FS-2100DN Admin Admin
FS-4100DN Admin Admin FS-4100DN Admin Admin
FS-4200DN Admin Admin FS-4200DN Admin Admin
FS-4300DN Admin Admin FS-4300DN Admin Admin
FS-1028MFP admin00 FS-1028MFP 2800 2800
FS-1030MFP admin00 FS-1030MFP 3000 3000
FS-1035MFP admin00 FS-1035MFP 3500 3500
FS-1128MFP admin00 FS-1128MFP 2800 2800
FS-1130MFP admin00 FS-1130MFP 3000 3000
FS-1135MFP admin00 FS-1135MFP 3500 3500
FS-3040MFP admin00 FS-3040MFP 4000 4000
FS-3140MFP admin00 FS-3140MFP 4000 4000
FS-3140MFP+ admin00 FS-3140MFP+ 4000 4000
FS-3540MFP admin00 FS-3540MFP Admin Admin
FS-3640MFP admin00 FS-3640MFP Admin Admin
FS-6525MFP Admin Admin FS-6525MFP 2500 2500
FS-6530MFP Admin Admin FS-6530MFP 3000 3000
KM-2560 Nothing

when

default Nothing when default KM-2560 2500 2500
KM-3060 KM-3060 3000 3000
620 620 6200
820 820 8200
181 181 1800
221 221 2200
255 admin00 255 Admin Admin
305 admin00 305 Admin Admin
300i admin00 300i 3000 3000
420i admin00 420i 4200 4200
520i No Default admin00 520i 5200 5200
3500i Admin Admin 3500i 3500 3500
4500i Admin Admin 4500i 4500 4500
5500i Admin Admin 5500i 5500 5500
6500i Admin Admin 6500i 6500 6500
8000i Admin Admin 8000i 8000 8000

Command Center Username & Password Machine Username & Password

Color Color
FS-C2526MFP admin00 FS-C2526MFP Admin Admin
FS-C2626MFP admin00 FS-C2626MFP Admin Admin
205c Nothing when default admin00 205c Admin Admin
255c admin00 255c Admin Admin
250ci admin00 250ci 2500 2500
300ci admin00 300ci 3000 3000
400ci admin00 400ci 4000 4000
500ci admin00 500ci 5000 5000
552ci admin00 552ci 5500 5500
2550ci Admin Admin 2550ci 2500 2500
3050ci Admin Admin 3050ci 3000 3000
3550ci Admin Admin 3550ci 3500 3500
4550ci Admin Admin 4550ci 4500 4500
5550ci Admin Admin 5550ci 5500 5500
6550ci Admin Admin 6550ci 6500 6500
7550ci Admin Admin 7550ci 8000 8000

Вход с временным профилем

Вы вошли в систему с временным профилем в Windows


Вы вошли в систему с временным профилем в Windows

27.06.2016 windows

Это тоже может быть Вам интересно:

Стоит ли устанавливать Windows 10
Лучшие средства удаления вредоносных программ
Секреты Windows 10
Вы вошли с временным профилемОдна из проблем, с которой часто сталкиваются пользователи — сообщение о том, что вы вошли в систему с временным профилем в Windows 10, 8 и Windows 7 с дополнительным текстом «Вы не можете получить доступ к своим файлам, и файлы, созданные в этом профиле, будут удалены при выходе из системы». В этой инструкции подробно о том, как исправить эту ошибку и войти с обычным профилем.

В большинстве случаев, проблема возникает после изменения (переименования) или удаления папки профиля пользователя, однако это не единственная причина. Важно: если у вас проблема возникла именно из-за переименования папки пользователя (в проводнике), то верните ей первоначальное имя, а затем прочтите: Как переименовать папку пользователя Windows 10 (для предыдущих версия ОС то же самое).

Примечание: в этой инструкции приведены решения для рядового пользователя и домашнего компьютера с Windows 10 — Windows 7, не находящегося в домене. Если вы управляете учетными записями AD (Active Directory) в Windows Sever, то тут я деталей не знаю и экспериментировать не доводилось, но обратите внимание на сценарии входа в систему или просто удалите профиль на компьютере и снова зайдите в домен.

Как исправить временный профиль в Windows 10

Сначала об исправлении «Вы вошли в систему с временным профилем» в Windows 10 и 8, а в следующем разделе инструкции — отдельно по Windows 7 (хотя и описываемый здесь способ тоже должен работать). Также, при входе с временным профилем в Windows 10 вы можете видеть уведомления «Стандартное приложение сброшено. Приложение вызвало проблему с настройкой стандартного приложения для файлов, поэтому оно сброшено».

Вы вошли в систему с временным профилем в Windows 10

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

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

Запустите редактор реестра (нажмите клавиши Win+R, введите regedit и нажмите Enter)
Раскройте раздел (слева) HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ ProfileList и обратите внимание на наличие в нем подраздела с .bak в конце, выберите его.
В правой части посмотрите на значение ProfileImagePath и проверьте, совпадает ли имя папки пользователя, указанное там с именем папки пользователя в C:\Пользователи (C:\Users). Резервная копия профиля в реестре
Далее действия будут зависеть от того, что у вас получилось в пункте 3. Если имя папки не совпадает:

Дважды кликните по значению ProfileImagePath и измените его так, чтобы в нем был правильный путь к папке.
Если в разделах слева есть раздел точно с таким же именем, как текущий, но без .bak, кликните по нему правой кнопкой мыши и выберите «Удалить».
Кликните правой кнопкой мыши по разделу с .bak на конце, выберите пункт «Переименовать» и уберите .bak.
Закройте редактор реестра, перезагрузите компьютер и попробуйте зайти под тем профилем, где была ошибка.
Если путь к папке в ProfileImagePath верный:

Автор рекомендует прочесть:

Компьютер тормозит — что делать и почему это происходит?
Лучшие бесплатные программы на каждый день
Как подключить ноутбук к телевизору (для просмотра видео и игр)
Как раздавать Интернет по Wi-Fi с ноутбука
Как смотреть ТВ онлайн бесплатно
Если в левой части редактора реестра присутствует раздел с тем же именем (все цифры совпадают), что и раздел с .bak на конце, кликните по нему правой кнопкой мыши и выберите «Удалить». Подтвердите удаление.
Кликните правой кнопкой мыши по разделу с .bak и также его удалите.
Перезагрузите компьютер и попробуйте снова войти в поврежденную учетную запись — данные для нее в реестре должны будут создаться автоматически.
Далее способы, являющиеся удобными и быстрыми для исправления ошибки в 7-ке.

Исправление входа с временным профилем в Windows 7

Временный профиль в Windows 7 и 8
По сути, это вариация способов, описанных выше, и, более того данный вариант должен сработать и для 10-ки, но опишу его отдельно:

Войдите в систему под учетной записью администратора, отличающейся от той учетной записи, в которой есть проблема (например, под учеткой «Администратор» без пароля)
Сохраните все данные из папки проблемного пользователя в другую папку (или переименуйте ее). Эта папка находится в C:\Пользователи (Users)\ Имя_пользователя
Запустите редактор реестра и перейдите к разделу HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ ProfileList
Удалите в нем подраздел, заканчивающийся на .bak
Закройте редактор реестра, перезагрузите компьютер и зайдите под учетной записью, с которой была проблема.
В описанном способе снова будет создана папка пользователя и соответствующая запись в реестре Windows 7. Из папки, в которую вы ранее копировали данные пользователя, вы можете вернуть их во вновь созданную папку, чтобы они оказались на своих местах.

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

Создание ярлыков через GPO

Ярлык на компьютере пользователей с помощью GPO в домене

 

Категория: Windows 8 / Windows XP / Windows 7 / Windows Server 2008 / Windows Server 2012 Просмотров: 8105

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

Решение: 

Конечно можно обойти всех пользователей и создать им ярлык, но можно сделать это и через Групповые политики (GPO).

Итак:
1. Открываем оснастка «Group Policy Management», допустим у нас есть подразделение «IT», выбираем его, по правой кнопки мыши выбираем пункт «создания групповой политики» или «Create a GPO in this domain, and Link it here…»

2. Даем имя новой политике

3. Далее делаем так, чтобы политика распространялась на конкретных пользователей или группы. Так же ВНИМАНИЕ — На вкладке «Delegation» проверяем, чтобы напротив пользователя или группы стояли права для чтения политики:

4. Теперь нажимаем правой кнопкой мыши на политику и выбираем пунк Edit. Дальнейшие действия для различный ОС будут различаться.

4.1 Для Windows 7 и выше.

Так как начиная с Windows 7 и соответственно Windows Server 2008 в групповых политиках появился пункт Ярлык, то действия следующие:

«User Configuration» – «Preferences» – «Windows Settings» – «Shortcuts», создаем ярлык New – Shortcut, нужно указать следующие пункты:

Тип ярлыка – Create (Создание)

Tип объекта — File System Object (Объект файловой системы)

Месторасположение – Desktop (создавать ярлык на рабочем столе пользователя)

Target path — \\dc1\shara — путь до расшаренного ресурса.

Name: dc1 (на скриншоте не указан)

4.2 Для Windows XP

Для XP придется делать скрипт и указываеть его при старте системе в политике logon

Скрипт WHS:

Set objWSHShell = WScript.CreateObject(«Wscript.Shell»)

strDesktop = objWSHShell.SpecialFolders(«Desktop»)

strShortcutName = «dc1»;

strShortcutPath = “\\dc1\shara”

Set objShortcut = objWSHShell.CreateShortcut(strDesktop & «\» + strShortcutName & «.lnk»)

objShortcut.TargetPath=strShortcutPath

objShortcut.Save

Cкрипт помещаем в политику «User Configuration» – «Policies» – «Windows Settings» – «Scripts (Logon/Logoff)» – «Logon»

5. После всех действий перезайдите в учетную запись, политика должна сработать и ярлык появится

Как перенести файлы загрузки Windows 7,8 на другой жесткий диск

Как перенести файлы загрузки Windows 7 на другой жесткий диск
   Шрифт:

Аннотация

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

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

  • раздел, с которого выполняется загрузка, должен быть активным;
  • загрузочный сектор раздела должна быть совместим с bootmgr;
  • на активном разделе должны находиться файлы загрузки операционной системы. Для Windows 7 это файл bootmgrи хранилище данных конфигурации загрузки (BCD), находящееся в скрытой и системной папке Boot.

Рассмотрим решение проблемы на примере конфигурации, представленной на рисунке


Увеличить рисунок

На скриншоте «Управления дисками» видно, что диск С:, на котором установлена Windows 7, не активен. Активным является диск D:. Файлов загрузки Windows 7 (они скрытые и системные) на диске С: так же не обнаружится. Задача: перенести загрузчик с диска D: на диск С:, то есть обеспечить соблюдение вышеназванных условий.

Использование установочного диска или диска восстановления Windows 7

При наличии этих дисков перенос загрузочных файлов не составляет труда. Физически отключите «ненужный» жесткий диск, загрузитесь с диска, установив в BIOS привод CD-DVD первым загрузочным устройством, войдите в среду восстановления. После того, как закончится сканирование ипоиск установленных операционных систем, выполните «Восстановление запуска». Программа восстановления подготовит нужным образом жесткий диск и скопирует на него необходимые файлы. После перезагрузки возможность загрузки будет восстановлена.

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

Перенесение файлов загрузки с использованием утилиты bcdboot.exe

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

Первый: войдите в оснастку «Управление дисками» (Win + R, в строке «Выполнить» наберите diskmgmt.msc и нажмите OK) и посмотрите, какая буква присвоена первому слева разделу диска, который планируется оставить. Именно этот раздел мы сделаем загрузочным и активным: щелкните правой кнопкой мыши по выбранному разделу и выберите пункт контекстного меню «Сделать раздел активным». Учтите, что этот раздел должен иметь атрибут «основной».

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

DISKPART

list disk

sel disk X

list partition

sel part 1

active

exit

где X — номер диска, который предполагается оставить, в списке дисков (команда list disk).

Для этого понадобится утилита bootsect.exe, которую, при отсутствии установочного диска, можно взять здесь. Заранее скачайте и распакуйте ее, например, в корневой каталог раздела С:.

c:\bootsect /nt60 All /force

примечание: опыт показывает, при наличии в конфигурации 2-х и более HDD ключ /force необходим.

bcdboot %Windir% /l ru-Ru /s С:

— ключ /l — выбор языковых параметров менеджера загрузки. Если ваша система не русскоязычная, используйте другие значения этого ключа, например, для английского языка — en-Us, для немецкого — de-DE, и т.д.

— ключ /s — определяет букву тома, назначенную целевому системному разделу, в который копируются файлы среды загрузки. Это раздел, который мы сделали активным. Так как микропрограмма команды по умолчанию использует текущий системный раздел (до извлечения жесткого диска — это раздел D:), применение этого ключа с буквой предполагаемого загрузочного раздела — обязательно!

  1. Делаем диск активным. Есть два способа сделать нужный раздел активным.
  2. Перезаписываем загрузочный сектор (делаем его совместимым с bootmgr):
  3. Переносим BCD и файл bootmgr на новый активный раздел:

Проверяем и редактируем BCD

Выполните команду

bcdedit /store C:\boot\bcd


Увеличить рисунок

По результатам выполнения команды проверьте параметры (подчеркнуты на скриншоте):

  • в секции «Диспетчер загрузки Windows» параметр deviceдолжен быть равен букве нового активного раздела, в нашем случае — С:.
  • в секции «Загрузка Windows» параметры deviceи osdevice должны быть равны букве раздела, на котором сейчас расположены каталоги Windows. В нашем случае, это тоже С:.
  • в случае несоответствия внесите необходимые изменения с помощью команд:

bcdedit /store C:\boot\bcd /set {bootmgr} device partition=С:

bcdedit /store C:\boot\bcd /set {current} device partition=С:

bcdedit /store C:\boot\bcd /set {current} osdevice partition=С:

Обычно выполнение команд не требуется, но проверить не помешает. Вместо идентификатора {current} может быть {default}, или вообще буквенно-цифровой. Тогда в командах нужно использовать тот, который используется для загрузки.

Таким образом, перенесение файлов загрузки на другой диск — не такая сложная задача.

Вместо заключения, или «Русскоязычное меню мультизагрузки»

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

bcdboot %Windir% /l ru-Ru

Выполнить ее нужно уже после перенесения файлов загрузки в новый раздел.

Создание ярлыков через GPO

Ярлык на компьютере пользователей с помощью GPO в домене

 

Категория: Windows 8 / Windows XP / Windows 7 / Windows Server 2008 / Windows Server 2012 Просмотров: 8105

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

Решение: 

Конечно можно обойти всех пользователей и создать им ярлык, но можно сделать это и через Групповые политики (GPO).

Итак:
1. Открываем оснастка «Group Policy Management», допустим у нас есть подразделение «IT», выбираем его, по правой кнопки мыши выбираем пункт «создания групповой политики» или «Create a GPO in this domain, and Link it here…»

2. Даем имя новой политике

3. Далее делаем так, чтобы политика распространялась на конкретных пользователей или группы. Так же ВНИМАНИЕ — На вкладке «Delegation» проверяем, чтобы напротив пользователя или группы стояли права для чтения политики:

4. Теперь нажимаем правой кнопкой мыши на политику и выбираем пунк Edit. Дальнейшие действия для различный ОС будут различаться.

4.1 Для Windows 7 и выше.

Так как начиная с Windows 7 и соответственно Windows Server 2008 в групповых политиках появился пункт Ярлык, то действия следующие:

«User Configuration» – «Preferences» – «Windows Settings» – «Shortcuts», создаем ярлык New – Shortcut, нужно указать следующие пункты:

Тип ярлыка – Create (Создание)

Tип объекта — File System Object (Объект файловой системы)

Месторасположение – Desktop (создавать ярлык на рабочем столе пользователя)

Target path — \\dc1\shara — путь до расшаренного ресурса.

Name: dc1 (на скриншоте не указан)

4.2 Для Windows XP

Для XP придется делать скрипт и указываеть его при старте системе в политике logon

Скрипт WHS:

Set objWSHShell = WScript.CreateObject(«Wscript.Shell»)

strDesktop = objWSHShell.SpecialFolders(«Desktop»)

strShortcutName = «dc1»;

strShortcutPath = “\\dc1\shara”

Set objShortcut = objWSHShell.CreateShortcut(strDesktop & «\» + strShortcutName & «.lnk»)

objShortcut.TargetPath=strShortcutPath

objShortcut.Save

Cкрипт помещаем в политику «User Configuration» – «Policies» – «Windows Settings» – «Scripts (Logon/Logoff)» – «Logon»

5. После всех действий перезайдите в учетную запись, политика должна сработать и ярлык появится

Служебные поlсети по RFC3330

. Summary Table

Address Block             Present Use                       Reference
———————————————————————
0.0.0.0/8            «This» Network                 [RFC1700, page 4]
10.0.0.0/8           Private-Use Networks                   [RFC1918]
14.0.0.0/8           Public-Data Networks         [RFC1700, page 181]
24.0.0.0/8           Cable Television Networks                    —
39.0.0.0/8           Reserved but subject
to allocation                       [RFC1797]
127.0.0.0/8          Loopback                       [RFC1700, page 5]
128.0.0.0/16         Reserved but subject
to allocation                             —
169.254.0.0/16       Link Local                                   —
172.16.0.0/12        Private-Use Networks                   [RFC1918]
191.255.0.0/16       Reserved but subject
to allocation                             —
192.0.0.0/24         Reserved but subject
to allocation                             —
192.0.2.0/24         Test-Net
192.88.99.0/24       6to4 Relay Anycast                     [RFC3068]
192.168.0.0/16       Private-Use Networks                   [RFC1918]
198.18.0.0/15        Network Interconnect
Device Benchmark Testing            [RFC2544]
223.255.255.0/24     Reserved but subject
to allocation                             —
224.0.0.0/4          Multicast                              [RFC3171]
240.0.0.0/4          Reserved for Future Use        [RFC1700, page 4]

Работа с AD

11 незаменимых средств управления Active Directory Те, кому приходилось иметь дело с такими вещами, как таблица Excel, перечисляющая 200 новых сотрудников, начинающих работать со следующей недели, или учетные записи пользователей, настроенные неверно, потому что кто-то в службе поддержки щелкнул то, чего щелкать не следовало, а также те, кому интересен более простой способ управления Active Directory®, помимо открытия папок «Пользователи» и «Компьютеры» каждый раз, могут воспользоваться одним из бесплатных средств администрирования.Некоторые из них встроены прямо в операционную систему Windows®, некоторые поставляются в пакете Resource Kit или в наборе средств поддержки Windows, а некоторые являются бесплатной продукцией сторонних производителей. Что это за удобные средства и где их можно достать? Давайте выясним. Начнем со встроенных средств командной строки в Windows Server® 2003, позволяющих создавать, удалять, модифицировать и искать объекты в Active Directory. CSVDE Средство CSVDE позволяет импортировать новые объекты в Active Directory, используя исходный CSV-файл; оно также дает возможность экспортировать существующие объекты в файл CSV. CSVDE нельзя использовать для изменения существующих объектов; при использовании этого средства в режиме импорта можно лишь создавать новые объекты. Экспорт списка существующих объектов с помощью CSVDE довольно прост. Ниже показано, как экспортировать объекты Active Directory в файл под названием ad.csv: csvde –f ad.csv Параметр –f указывает, что за ним следует имя выходного файла. Но следует понимать, что, в зависимости от среды, этот базовый синтаксис может привести к выводу огромного и неудобного файла. Чтобы ограничить средство экспортом лишь объектов внутри определенного структурного подразделения (OU), команду можно изменить следующим образом: csvde –f UsersOU.csv –d ou=Users,dc=contoso,dc=com Предположим далее, что мне необходимо экспортировать лишь объекты пользователя в мой файл CSV. В таком случае можно добавить параметр –r, позволяющий указать фильтр протокола LDAP для данного поиска, который ограничит число экспортируемых атрибутов (заметьте, что все нижеследующее является одной строкой): csvde –f UsersOnly.csv –d ou=Users,dc=contoso,dc=com –r “(&(objectcategory=person)(objectclass=user))” –l DN,objectClass,description Параметр –i позволяет импортировать объекты в Active Directory из исходного файла CSV. Однако создание объектов пользователя с помощью CSVDE имеет один важный недостаток: с помощью этого средства нельзя устанавливать пароли пользователей, поэтому я бы не стала использовать CSVDE для создания объектов пользователей. LDIFDE Active Directory предоставляет второе встроенное средство для пакетных операций пользователей, именуемое LDIFDE и обладающее более широкими и гибкими возможностями, чем CSVDE. Помимо создания новых объектов, LDIFDE позволяет модифицировать и удалять существующие объекты и даже расширять схему Active Directory. Платой за гибкость LDIFDE является то, что необходимый входной файл (файл LDIF) с расширением .ldf использует более сложный формат, чем простой файл CSV. (Немного поработав, можно также настраивать пароли пользователей, но об этом чуть позже.) Начнем с простого примера — экспорта пользователей в структурном подразделении в файл LDF (отметьте, что все нижеследующее является одной строкой ): ldifde -f users.ldf -s DC1.contoso.com -d “ou=UsersOU,dc=contoso,dc=com” –r “(&(objectcategory=person)(objectclass=user))” Как и в случае большинства средств командной строки, полное описание параметров LDIFDE можно получить, запустив команду LDIFDE /? . На Рис. 1 показаны те, что я использовала здесь. (Заметьте, что параметры для команд CSVDE и LDIFDE одинаковы.) По-настоящему возможности LDIFDE раскрываются при создании объектов и управлении ими. Однако перед этим необходимо создать входной файл. Нижеследующий код создает две новых учетных записи пользователя — afuller и rking; для создания входного файла введите текст в блокноте (или другом редакторе открытого текста) и сохраните его как NewUsers.ldf: dn: CN=afuller, OU=UsersOU, DC=contoso, DC=com changetype: add cn: afuller objectClass: user samAccountName: afuller dn: CN=rking, OU=UsersOU, DC=contoso, DC=com changetype: add cn: rking objectClass: user samAccountName: rking После того как создание файла завершено, запустите следующую команду: ldifde –i –f NewUsers.ldf –s DC1.contoso.com Единственный новый параметр здесь — это -i, который, как несложно догадаться, указывает, что выполняется операция импорта, а не экспорта. При модификации или удалении существующих объектов синтаксис команды LDIFDE не меняется; вместо этого изменяется содержимое файла LDF. Для изменения поля описания учетных записей пользователей создайте текстовый файл, именуемый ModifyUsers.ldf, такой как показано на Рис. 2. Рис. 2 Файл LDF ModifyUsers Изменения импортируются путем запуска того же синтаксиса команды LDIFDE, что и раньше, с указанием нового файла LDF после параметры -f. Формат LDF для удаления объектов еще проще; для удаления пользователей, с которыми вы работали, создайте файл, именуемый DeleteUsers.ldf, и введите следующее: dn: CN=afuller OU=UsersOU, DC=contoso, DC=com changetype: delete dn: CN=rking, OU=UsersOU, DC=contoso, DC=com changetype: delete Отметьте, что, в отличие от CSVDE, LDIFDE может настраивать пароли пользователей. Однако перед настройкой атрибута unicodePWD для учетной записи пользователя необходимо настроить шифрование SSL/TLS на контроллерах домена. Вдобавок, LDIFDE может создавать и модифицировать любые объекты Active Directory, а не только учетные записи пользователей. Например, нижеследующий файл LDF создаст новое расширение схемы, именуемое EmployeeID-example, в схеме леса contoso.com: dn: cn=EmployeeID-example,cn=Schema, cn=Configuration,dc=contoso,dc=com changetype: add adminDisplayName: EmployeeID-Example attributeID: 1.2.3.4.5.6.6.6.7 attributeSyntax: 2.5.5.6 cn: Employee-ID instanceType: 4 isSingleValued: True lDAPDisplayName: employeeID-example Поскольку в файлах LDIFDE используется стандартный отраслевой формат файла LDAP, приложения от сторонних производителей, которым необходимо модифицировать схему Active Directory, часто поставляют файлы LDF, с помощью которых можно изучить и одобрить изменения, прежде чем применять их к производственной среде. Помимо средств для операций пакетного импорта и экспорта, в состав Windows Server 2003 входит встроенный набор средств, позволяющий создавать, удалять и изменять различные объекты Active Directory, а также выполнять запросы к объектам, отвечающим определенным критериям. (Следует отметить, что данные средства, dsadd, dsrm, dsget, and dsquery, не поддерживаются Active Directory в Windows 2000.) Dsadd Dsadd используется для создания экземпляра класса объектов Active Directory в определенном разделе каталога. В число данных классов входят «пользователи», «компьютеры», «контакты», «группы», «структурные подразделения» и «квоты». У dsadd имеется общий синтаксис следующего вида: dsadd attributes Замечу, что каждый создаваемый тип объектов требует особого набора параметров, соотносящихся с атрибутами, доступными для этого типа. Эта команда создает один объект пользователя с различными заполненными атрибутами (отметьте, что все нижеследующее является одной строкой): dsadd user cn=afuller,ou=IT,dc=contoso,dc=com –samID afuller –fn Andrew –ln Fuller –pwd * -memberOf cn=IT,ou=Groups,dc=contoso,dc=com “cn=Help Desk,ou=Groups, dc=contoso,dc=com” –desc “Marketing Director” Параметр -memberOf требует полного различающегося имени (DN) каждой группы, к которой следует добавить пользователя, если его нужно добавить в несколько групп, можно добавить несколько DN, разделенных пробелами. Если элемент, скажем DN группы «Служба поддержки», содержит пробел, этот элемент надо поместить в двойные кавычки. Если элемент, скажем структурное подразделение IT\EMEA, содержит обратную косую черту, эту черту нужно ввести дважды: IT\\EMEA. (Эти требования относятся ко всем средствам ds*.) При использовании параметра -pwd * последует запрос на ввод пароля для пользователя в командной строке. Пароль можно указать внутри самой команды (-pwd P@ssword1), но тогда он будет отображен открытым текстом на экране или в любом текстовом файле либо файле сценария, в который вставлена команда. Аналогично, можно создать объект группы и структурное подразделение при помощи следующих двух команд: dsadd computer cn=WKS1,ou=Workstations,dc=contoso,dc=com dsadd ou “ou=Training OU,dc=contoso,dc=com” Dsmod Dsmod используется для изменения существующих объектов, а работают с ним почти так же, как с dsadd, используя различные подменю и синтаксис, зависящие от типа изменяемого объекта. Нижеследующая команда dsmod изменяет пароль пользователя и модифицирует его учетную запись так, чтобы при следующем входе в систему ему был выдан запрос на смену пароля: dsmod user “cn=afuller,ou=IT,dc=contoso,dc=com” –pwd P@ssw0rd1 –mustchpwd yes Чтобы увидеть, насколько похожи эти параметры, взгляните на синтаксис dsadd, используемый для создания пользователя с теми же настроенными атрибутами: dsadd user “cn=afuller,ou=IT,dc=contoso,dc=com” –pwd P@ssw0rd1 –mustchpwd yes Очевидно, что, зная параметры для создания объектов при помощи dsadd, можно использовать их же для изменения пользователей при помощи dsmod. Dsrm Противоположностью dsadd является dsrm; как несложно вообразить, это средство используется для удаления объектов из командной строки. Базовый синтаксис dsrm достаточно прямолинеен: просто введите dsrm, а за ним — различающееся имя объекта, который следует удалить, примерно так: dsrm cn=WKS1,ou=Workstations,dc=contoso,dc=com По умолчанию dsrm выдаст запрос «Вы действительно хотите удалить этот объект?». Введите Y и нажмите кнопку Enter. Этот запрос можно отключить с помощью параметра –noprompt, но, очевидно, что в таком случае исчезнет шанс подтвердить перед удалением, что объект выбран верно,. Два дополнительных параметра могут быть полезны при удалении объекта-контейнера, то есть структурного подразделения, которое потенциально может содержать другие объекты. Следующая команда удаляет структурное подразделение TrainingOU и все содержащиеся в нем объекты: dsrm ou=TrainingOU,dc=contoso,dc=com –subtree А эта удаляет все дочерние объекты в TrainingOU, но не трогает само структурное подразделение: dsrm ou=TrainingOU,dc=contoso,dc=com –subtree –exclude Dsmove Для перемещения или переименования объекта в Active Directory используется средство dsmove, но следует отметить, что его можно использовать лишь для перемещения объектов внутри домена. Для переноса объектов между доменами или лесами используйте средство переноса Active Directory Migration Tool (ADMT), бесплатно загружаемое с веб-узла Майкрософт. Dsmove полагается на два параметра, которые можно использовать отдельно или вместе. Даная команда изменяет фамилию в учетной записи пользователя Steve Conn: dsmove “cn=Conn, Steve,ou=IT,dc=contoso,dc=com” –newname “Steve Conn” Данная команда перемещает учетную запись Steve из структурного подразделения IT в подразделение Training: dsmove “cn=Conn, Steve,ou=IT,dc=contoso,dc=com” –newparent ou=Training,dc=contoso,dc=com Переименование и перенос можно произвести в рамках одной операции, указав оба параметра разом: dsmove “cn=Conn, Steve,ou=IT,dc=contoso,dc=com” –newname “Steve Conn” –newparent ou=Training,dc=contoso,dc=com Dsget и Dsquery В состав набора средств командной строки ds* также входят два средства, используемые для запросов информации Active Directory, а не для создания или изменения объектов. Dsget получает на входе различающееся имя (DN) объекта и выдает значение указанного атрибута или атрибутов. Dsget использует те же подменю, что dsadd и dsmod — «пользователь», «компьютер», «контакт», «группа», «структурное подразделение» и «квота». Чтобы получить имя учетной записи SAM и код безопасности (SID) учетной записи пользователя, введите следующую команду (отметьте, что все нижеследующее является одной строкой): dsget user cn=afuller,ou=IT,dc=contoso,dc=com –samAccountName –sid Результаты будут подобны показанным на Рис. 3. Рис. 3 Работа dsget Dsquery возвращает список объектов Active Directory, отвечающих указанным критериям. Следующие параметры можно указать вне зависимости от используемого подменю: dsquery -s -o Dsquery может использовать следующие подменю, каждое со своим синтаксисом, для ObjectType: «компьютер», «контакт», «подсеть», «группа», «структурное подразделение», «веб-узел», «сервер» (следует отметить, что подменю сервера извлекает данные о контроллерах домена, а не о серверах в вашей среде), «пользователь», «квота» и «раздел». А если один из данных типов запросов не является тем, чем нужно, можно использовать подменю *, позволяющее ввести запрос LDAP свободной формы. StartNode указывает местонахождение дерева Active Directory, в котором начнется поиск. Можно использовать конкретное DN, такое как ou=IT,dc=contoso,dc=com, или один из следующих описателей краткого пути: domainroot, начинающийся с корня определенного домена, или forestroot, начинающийся с корня корневого домена леса, используя сервер глобального каталога для выполнения поиска. Наконец, параметр области поиска указывает, как средство dsquery должно производить поиск в дереве Active Directory. Опросы поддерева (вариант по умолчанию) обращаются к указанному StartNode и всем его дочерним объектам, одноуровневые опросы обращаются только к непосредственным дочерним объектам StartNode, и базовые опросы обращаются только к объекту StartNode. Для лучшего понимания областей поиска представьте структурное подразделение (OU), содержащее как объекты пользователя, так и дочернее OU, которое также содержит дополнительные объекты. При использовании поддерева в качестве ообласти будет запрошено OU, все пользовательские объекты внутри него, дочернее OU и его содержимое. При одноуровневой области будет запрошены только пользователи, содержащие в OU, но не дочернее OU и его содержимое. При базовом запросе будет запрошено только само OU без запроса содержащихся в ней объектов. Наконец, можно использовать выходной формат, чтобы контролировать форматирование результатов dsquery. По умолчанию dsquery возвращает различающиеся имена всех объектов, совпадающих с запросом, примерно так: “cn=afuller,ou=Training,dc=contoso,dc=com” “cn=rking,ou=ITTraining,ou=Training,dc=contoso,dc=com” Чтобы запросить все объекты пользователей, содержащиеся в структурном подразделении IT и его дочерних OU, используйте следующее: dsquery user ou=IT,dc=contoso,dc=com Запрос можно сделать еще более точным, добавляя дополнительные параметры, такие как -disabled, возвращающий только отключенные учетные записи пользователей; -inactive x, возвращающий только пользователей, не подключавшихся в течении x или более недель; или -stalepwd x, возвращающий только пользователей, которые не меняли свои пароли в течении x или более дней. В зависимости от числа объектов в каталоге может возникнуть необходимость указать параметр -limit x при запуске запроса. По умолчанию dsquery возвращает до 100 объектов, совпадающих с параметрами запроса; но можно указать и большее число, такое как -limit 500, или использовать -limit 0, чтобы dsquery возвратило все совпадающие объекты. Можно также использовать другие подменю для выполнения полезных запросов других типов объектов. Рассмотрим следующий запрос, возвращающий каждую подсеть, определенную в «Active Directory — узлы и службы», и входящую в пространство адресов 10.1.x.x: dsquery subnet –name 10.1.* А следующую команду можно использовать для возвращения каждой подсети, находящейся на веб-узле Corp: dsquery subnet –site Corp С помощью очередного подменю можно быстро определить, сколько контроллеров домена в лесу настроено для работы серверами глобального каталога: dsquery server –forest –isgc Можно также использовать данный синтаксис, чтобы упростить определение контроллера домена в определенном домене, содержащего роль FSMO эмулятора основного контроллера домена (PDC): dsquery server –hasfsmo pdc Как и в случае с другими командами ds*, включающими подменю, все параметры, доступные в конкретном подменю dsquery, можно просмотреть, войдя в командную строку и введя dsquery user /?, dsquery computer /?, dsquery subnet /?, и так далее. Дополнительным хитрым приемом является передача исходящих данных dsquery по конвейеру в другое средство, такое как dsmod, при помощи знака | (SHIFT+обратная косая черта при английской раскладке клавиатуры). К примеру, компания переименовала отдел из «Подготовка» во «Внутреннее развитие», и теперь нужно обновить поле описания каждого относящегося к этому отделу пользователя. Одной командной строкой можно запросить все объекты пользователей, имеющие поле описания «Подготовка», и затем заменить это поле описания для всего пакета следующим образом: dsquery user –description “Training” | dsmod -description “Internal Development” Некоторые находки от сторонних производителей Поскольку Active Directory основана на стандартах LDAP, в ней можно создавать запросы и вносить изменения при помощи любого инструмента, понимающего LDAP. Многие сторонние поставщики выпустили платные средства для помощи в администрировании Active Directory, но порой можно найти и настоящие сокровища, которые распространяются бесплатно. Это, в частности, можно сказать про коллекцию, созданную обладателем звания MVP по службам каталогов Джо Ричардсом (Joe Richards) и доступной для загрузки на joeware.net/freetools. В ней можно найти многочисленные средства, служащие для решения различных задач. К трем из них я возвращаюсь постоянно — это adfind, admod и oldcmp. Adfind и Admod Adfind и admod подобны dsquery и dsmod; adfind является средством запроса с помощью командной строки для Active Directory, а admod может создавать, удалять или изменять объекты Active Directory. В отличие от средств ds*, имеющих несколько подменю и различные параметры в зависимости от типа объекта, adfind и admod пользуются единым синтаксисом вне зависимости от типа выполняемого запроса или изменения. Базовый синтаксис для adfind: adfind –b -s -f attributesDesired Запрос различающегося имени и описания всех объектов компьютеров в домене будет выглядеть как: adfind –b dc=contoso,dc=com –s subtree –f (objectclass=computer) dn description Запрос всех объектов пользователей будет выглядеть как: adfind –b dc=contoso,dc=com –s subtree –f “(&(objectcategory=person) (objectclass=user))” dn description Отметьте, что за исключением запроса содержимого LDAP, синтаксис не менялся. Работая с adfind, можно найти несколько сокращенных вариантов записи параметров, которые избавляют от лишней работы по вводу. Например, параметр -default может заменить -b dc=contoso,dc=com в предыдущем примере и провести поиск по всему домену; -gc ищет, основываясь на сборке мусора (GC), и возвращает всех пользователей в вашем лесу Active Directory. Параметр -rb также можно использовать для установки относительной базы для поиска; если, скажем, необходимо найти структурное подразделение «Подготовка» в домене phl.east.us.contoso.com, то можно заметно сэкономить время, просто указав –default –rb ou=Training, вместо –b ou=Training, dc=phl,dc=east,dc=us,dc=contoso,dc=com. Adfind может выполнять ряд функций расширенного поиска, которыми сложно управлять из командной строки без него, включая показанные на Рис. 4. Пример, использующий параметр -asq, будет запрашивать «Покажи мне членство в группах членов HelpDesk» следующим образом: adfind –default –rb cn=HelpDesk,ou=IT –asq member memberOf Admod, как следует из названия программы, используется для изменения объектов в Active Directory. Как и в случае adfind, в нем нет специализированных подменю со своими синтаксисами, которые надо запоминать; admod использует один и тот же синтаксис вне зависимости от типа обрабатываемого объекта. Admod также можно использовать для добавления, перемещения, переименования удаления и даже восстановления объектов путем простого добавления соответствующего параметра, скажем -add, -rm, -move, -undel. И точно так же, как в dsquery и dsmod, знак | можно использовать для передачи данных запроса adfind по конвейеру в admod. Обратите внимание, что выполнение восстановления с помощью admod заключается в простой операции восстановления объекта-захоронения, в котором большинство атрибутов объекта уже удалено. Для полного восстановления объекта со всеми атрибутами потребуется провести принудительное восстановление объекта. Oldcmp Есть еще одно средство из коллекции программ Джо, которое я считаю незаменимой частью своего набора средств автоматизации: oldcmp, ищущее в базе данных Active Directory учетные данные компьютеров, которые не использовались в течение указанного числа недель, и способное проводить следующие действия: • создавать отчеты об учетных записях без каких-либо действий в их отношении; • отключать неиспользуемые учетные записи компьютеров; • перемещать учетные записи компьютеров в иное, заранее указанное, структурное подразделение; • полностью удалять учетные записи компьютеров. Отмечу, что поскольку oldcmp может устроить серьезный разгром в каталоге, он снабжен несколькими встроенными функциями безопасности. Он не удаляет учетные записи, которые не были отключены ранее (если в командной строке вы не сказали: «Нет, я действительно хочу это сделать!»). Он не изменяет более 10 объектов за раз (если, опять же, обратное не указано особо), и он никогда не будет ничего делать с учетной записью компьютера контроллера домена. К настоящему моменту Джо обновил oldcmp, так что он может выполнять подобные функции также и на учетных записях пользователей, которые не использовались в течение указанного отрезка времени. Для небольшой среды Active Directory или среды, где работа идет лишь с одним-двумя дополнениями или изменениями за раз, средств с графическим интерфейсом, таких как «Active Directory — пользователи и компьютеры», может быть достаточно для повседневного администрирования, но при необходимости каждодневно добавлять или изменять большое количество объектов или простом желании найти более рациональное решение для задач администрирования переход на командную строку может намного ускорить процесс создания, изменения и удаления объектов в Active Directory. Как было показано выше, существует набор гибких и мощных бесплатных средств — как встроенных в Windows, так и распространяемых членами сообщества Active Directory. Любое из них способно намного повысить производительность работы администратора Active Directory, вместе же они становятся еще более важными для его повседневной работы

Настойка DNS сервера BIND 9

Bog BOS: DNS сервер BIND

Требуется предварительное знакомство с материалом по архитектуре DNS.

BIND является самой распространенной реализацией сервера DNS. Разработка ведется Internet Software Consortium (ISC). Текущие версии (на 28 марта 2007) — BIND 9.4.0, BIND 9.3.4 (FC6 — 9.3.2/9.3.4), BIND 9.2.8 (поддержка до 1 августа 2007, RHEL4 — 9.2.4), BIND 8.4.7, BIND 4.9.11. Лицензия собственная, позволяет использовать продукт бесплатно или за плату (контракт на поддержку).

В комплекте с сервером BIND 9 поставляются утилиты DNS, клиентская библиотека DNS resolver, облегченная клиентская библиотека lightweight resolver и соответствующий ей демон lwresd, UDP/921 (по-моему, это очень вредная идея консорциума ISC, нарушающая принцип совместимости ПО).

В статье описываются:
Формат файла настройки

Файл настройки BIND 9 обычно называется /etc/named.conf (можно изменить при установке). Формат файла зоны стандартен и приведен в описании архитектуры DNS. Утилита named-checkzone проверяет синтаксис файла зоны. В качестве параметра указываются имя зоны и имя файла. Утилита named-checkconf проверяет синтаксис файла настройки. В качестве параметра можно указать имя файла.

Комментарии в файле настройки могут записываться в стиле C, C++ или sh. Строки и идентификаторы, не являющиеся доменными именами, например, имена файлов, обязательно заключать в кавычки.

Во многих местах файла настройки используется такая синтаксическая конструкция, как список-шаблонов-адресов: список через точку с запятой шаблонов адресов, завершающийся точкой с запятой. Шаблон адреса — это либо IP-адрес, либо IP-адрес с указанием числа бит в маске адреса (например, 192.168.0.0/28), либо имя ACL (т.е. ссылка на ранее определенный утверждением acl список-шаблонов-адресов, либо список-шаблонов-адресов в фигурных скобках, либо ключевое слово key с последующим именем ключа (определяется утверждением key). Имена рекомендуется заключать в кавычки. Перед шаблоном адреса может стоять символ отрицания (восклицательный знак). Ключи попали в эту конструкцию, потому что они тоже определяют права доступа, хотя и не имеют отношения к адресам хостов. Исходный адрес сравнивается последовательно с элементами списка до первого успешного соответствия. Если перед этим элементом списка стоит символ отрицания, то процесс завершается и сравнение со всем списком-шаблонов-адресов считается неудачным. Предопределены следующие имена ACL:

any (соответствует любой хост)
none (не соответствует никакой хост)
localhost (соответствует IPv4 адрес любого интерфейса хоста)
localnets (соответствует любой IPv4 адрес сети, к которой принадлежит любой интерфейс хоста)
Список-ключей — это список ключей через точку с запятой, завершающийся точкой с запятой.

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

acl имя-acl { список-шаблонов-адресов }; (определяет именованный список-шаблонов-адресов)
controls { inet ip-адрес [port порт-TCP ] allow { список-шаблонов-адресов } keys { список-ключей }; … }; (каждое предложение inet определяет права доступа (адреса и ключи) к управляющему каналу rndc, открываемому по указанному адресу и номеру порта; номер порта по умолчанию — 953; вместо адреса можно указать символ «*» — IPv4 адрес любого интерфейса хоста)
include имя-файла; (содержимое указанного файла включается в текст файла настройки; очень удобно для включения текста ключей из файла, защищенного от чтения посторонними; может использоваться внутри view)
key идентификатор-ключа { algorithm hmac-md5; secret «секретная-строка-в-base-64»; }; (определяет ключ для аутентификации и авторизации: rndc и TSIG; определение ключа для TSIG можно описывать внутри утверждения view; использовать ключ можно в утверждениях server, controls и в списке-шаблонов-адресов)
logging (настройка журнализации; возможно только одно утверждение данного типа)
lwres (настройка сервера для выполнения функций демона lwresd)
options (глобальные опции и опции по умолчанию; возможно только одно утверждение данного типа)
server ip-адрес-удаленного-сервера { опция; … }; (позволяет конкретизировать значения некоторых опций для конкретного сервера)
trusted-keys — определение ключей DNSSEC
view — описание вида (точки зрения) на доменное пространство, различным клиентам может быть представлено различное видение на пространство доменных имен
zone — описание зоны
Утверждение options может содержать следующие предложения (не пугайтесь их количеству — большинство либо уже устарело, либо еще не реализовано :):

version «строка»; (по умолчанию — реальный номер версии; для отключения обработки надо использовать строку none, а лучше закрыть класс CHAOS из вида совсем, т.к. неизвестно о чем он ябедничает еще; сервер позволяет узнать номер версии с помощью запроса к встроенной псевдозоне bind класса CHAOS:
host -t txt -c CHAOS version.bind адрес-сервера
hostname hostname_string; (по умолчанию — gethostname(); для отключения обработки надо использовать строку none, а лучше закрыть класс CHAOS из вида совсем, т.к. неизвестно о чем он ябедничает еще; сервер позволяет узнать имя конкретного хоста из группы anycast с помощью запроса к встроенной псевдозоне bind класса CHAOS (на моем сервере не заработало, попытка указать hostname приводит к сообщению о неизвестной опции):
host -t txt -c CHAOS hostname.bind адрес-сервера
directory имя-каталога; (абсолютное имя рабочего каталога, все упоминаемые относительные имена файлов лежат в нем)
key-directory имя-каталога; (абсолютное имя каталога, в котором лежат публичные и частные ключи для безопасного изменения зон; отдельный каталог может потребоваться для увеличения безопасности)
named-xfer имя-файла; (устарело)
tkey-domain доменное-имя;
tkey-dhkey имя-ключа этикетка-ключа;
dump-file имя-файла; (named_dump.db; имя файла, в который сбрасывается текущее состояние кеша доменных имен по команде rndc dumpdb)
memstatistics-file path_name; (не реализовано)
pid-file имя-файла; (/var/run/named.pid; в этот файл записывается номер процесса; можно указать none)
statistics-file имя-файла; (named.stats; к этому файлу добавляется статистика по команде rndc stats)
zone-statistics yes_or_no; (no; собирать статистику отдельно для каждой «своей» зоны)
auth-nxdomain yes_or_no; (no; всегда устанавливать бит AA в ответах NXDOMAIN, даже если сервер не является уполномоченным для данного домена; может потребоваться для совместимости)
deallocate-on-exit yes_or_no; (устарело)
dialup dialup_option; (позволяет уменьшить число дозвонов, если сервер находится на клиентском конце dialup-on-demand линии)
fake-iquery yes_or_no; (устарело)
fetch-glue yes_or_no; (устарело)
has-old-clients yes_or_no; (устарело; используйте auth-nxdomain yes и rfc2308-type1 no)
host-statistics yes_or_no; (не реализовано)
minimal-responses yes_or_no; (no; заполнять дополнительные секции в ответах только при крайней необходимости — отрицательный результат, делегирование; уменьшает нагрузку на сервер)
multiple-cnames yes_or_no; (устарело; позволял использовать множественные CNAME в нарушение стандарта)
notify yes_or_no_or_explicit; (yes; посылать DNS NOTIFY при изменении зоны, для которой сервер уполномочен, серверам из NS и also-notify; explicit — посылать только серверам из списка also-notify)
recursion yes_or_no; (yes; обслуживать рекурсивные запросы)
rfc2308-type1 yes_or_no; (не реализовано)
use-id-pool yes_or_no; (устарело)
maintain-ixfr-base yes_or_no; (устарело)
forward ( only | first ) ; (first; действует только при непустом списке forwarders; перенаправлять запросы, не имеющие ответов в кеше или своих зонах, серверам, указанным в списке forwarders; позволяет организовать общий кеш для нескольких серверов или доступ в Интернет через прокси; first — сначала делается запрос к серверам из списка, при неудаче производится собственный поиск; only — собственный поиск не производится; можно настраивать отдельно для каждой зоны — см. утверждение zone)
forwarders { ip_addr [port ip_port] ; … }; (пусто; список IP-адресов и, возможно, номера портов серверов, которые будут обслуживать перенаправленные запросы; смотри forward)
check-names ( master | slave | response )( warn | fail | ignore ); (не реализовано, т.е. ignore?)
allow-notify { список-шаблонов-адресов }; (первичный сервер зоны; от кого наш сервер как вторичный уполномоченный сервер будет принимать извещения об изменениях зоны; можно настраивать отдельно для каждой зоны — см. утверждение zone)
allow-query { список-шаблонов-адресов }; (any; от кого принимать обычные запросы; можно настраивать отдельно для каждой зоны — см. утверждение zone)
allow-transfer { список-шаблонов-адресов };(any; от кого принимать запросы на передачу зоны; можно настраивать отдельно для каждой зоны — см. утверждение zone)
allow-recursion { список-шаблонов-адресов }; (any; от кого принимать рекурсивные запросы; данные из кеша под запрет не попадают)
allow-update-forwarding { список-шаблонов-адресов }; (none; от каких хостов вторичный сервер будет принимать динамические изменения зоны для передачи их первичному уполномоченному серверу; авторы не советуют)
allow-v6-synthesis { список-шаблонов-адресов }; (none; заморочки со «старыми» реализациями IPv6)
blackhole { список-шаблонов-адресов }; (none; с этих адресов запросы не принимаются и к ним запросы не посылаются)
listen-on [ port ip_port ] { список-шаблонов-адресов }; (по умолчанию — все интерфейсы, порт 53; адрес и порт для приема запросов; может быть несколько таких предложений)
listen-on-v6 [ port ip_port ] { список-шаблонов-адресов }; (none; для IPv6)
query-source [ address ( ip_addr | * ) ] [ port ( ip_port | * ) ]; (обратный адрес и номер порта для запросов к другим серверам; по умолчанию или * в качестве адреса — INADDR_ANY; по умолчанию или * в качестве номера порта — случайный непривилегированный порт; в TCP запросах всегда используется случайный непривилегированный порт)
query-source-v6 … (для IPv6)
also-notify { ip_addr [port ip_port] ; … ] }; (по умолчанию — пустая строка; список адресов серверов, которым посылается DNS NOTIFY при изменении зоны, для которой сервер уполномочен, в дополнение к серверам из списка NS; см. предложение notify и утверждение zone)
max-transfer-time-in число-минут; (120; максимальное время приема зоны)
max-transfer-time-out число-минут; (120; максимальное время передачи зоны)
max-transfer-idle-in число-минут; (60; максимальное время отсутствия прогресса при приеме зоны)
max-transfer-idle-out число-минут; (60; максимальное время отсутствия прогресса при передаче зоны)
serial-query-rate раз-в-секунду; (20; максимальное число запросов SOA в секунду со стороны нашего сервера как вторичного уполномоченного сервера к соответствующим первичным серверам для определения необходимости приема зоны)
serial-queries number; (устарело)
transfer-format ( one-answer | many-answers ); (many-answers; при выборе формата one-answer при передаче зоны используется отдельный пакет для каждой RR, many-answers — в каждый пакет упаковывается столько RR, сколько в него может поместиться; many-answers эффективнее, но не поддерживается BIND 4; см. утверждение server)
transfers-in число; (10; максимальное число одновременно принимаемых зон)
transfers-out число; (10; максимальное число одновременно передаваемых зон)
transfers-per-ns число; (2; максимальное число одновременно принимаемых зон с одного сервера; см. утверждение server)
transfer-source ( ip4_addr | * ) [port ip_port] ; (по умолчанию — адрес интерфейса, «ближайшего» по мнению ОС к удаленному серверу; определяет локальный адрес при запросе передачи зоны от удаленного сервера; также определяет адрес и UDP порт для перенаправляемых динамических изменений и проверок изменения зоны на первичном сервере (запрос SOA); именно этот адрес должен быть разрешен для передачи на удаленном сервере, так что рекомендуется задавать его явно; см. утверждения server и view)
transfer-source-v6 … (передача зоны осуществляется с помощью IPv6)
notify-source ( ip4_addr | * ) [port ip_port] ; (?; определяет локальный адрес и UDP порт при посылке DNS NOTIFY вторичным серверам; именно этот адрес должен быть указан при настройке вторичного сервера в предложении master или allow-notify; см. утверждения zone и view)
notify-source-v6 … (посылка DNS NOTIFY осуществляется с помощью IPv6)
max-ixfr-log-size number; (устарело)
max-journal-size размер; (unlimited; максимальный размер журнального файла — хранит динамические изменения (RFC 2136, RFC 3007) описания зоны на первичном сервере или результат обновлений зоны в формате IXFR (RFC 1995) на вторичном сервере; имя файла образуется из имени зоны добавлением суффикса .jnl; файл имеет двоичный формат; изменения отображаются на файл зоны с некоторым интервалом с целью уменьшения нагрузки на компьютер, поэтому файл зоны нельзя редактировать вручную; используется для восстановлении файла зоны при перезапуске)
coresize размер; (default, т.е. значение заданное при запуске процесса, см. setrlimit(2) и ulimit -c; размер coredump; можно использовать масштабирующие коэффициенты K, M и G)
datasize размер; (default, т.е. значение заданное при запуске процесса, см. setrlimit(2) и ulimit -d; максимальный размер сегмента данных, который ОС выделит процессу; рекомендуется использовать только для увеличения недостаточного значения по умолчанию; можно использовать масштабирующие коэффициенты K, M и G)
files число; (unlimited; максимальное число одновременно открытых файлов)
stacksize размер; (default, т.е. значение заданное при запуске процесса, см. setrlimit(2) и ulimit -s; максимальный размер сегмента стека, который ОС выделит процессу; можно использовать масштабирующие коэффициенты K, M и G
cleaning-interval число-минут; (60; период очистки кеша от RR с истекшим TTL)
heartbeat-interval number; (для dialup-ных зон)
interface-interval число-минут; (60; интервал сканирования списка активных интерфейсов; 0 — сканировать только при запуске; сервер перестает прослушивать опущенные интерфейсы и начинает прослушивать вновь появившиеся при условии, что они подходят под шаблон listen-on)
statistics-interval number; (не реализовано)
topology { список-шаблонов-адресов }; (не реализовано)
sortlist { список-шаблонов-адресов }; (предложение позволяет организовать сортировку RR по адресу в ответе клиенту в зависимости от адреса клиента; правильно настроенный клиент должен делать это сам, настраивать это на сервере — утомительно)
rrset-order { [ class класс-записи ] [ type тип-записи ] [ name «доменное-имя» ] order ( fixed | random | cyclic ) ; … }; (по умолчанию: class — ANY, type — ANY, name — *; предложение позволяет отсортировать RR в ответе клиенту в зависимости от класса, типа и значения доменного имени; fixed — не менять порядок записей; random — перемешивать записи в случайном порядке; cyclic — при каждом запросе первой ставится очередная запись; действует только последнее предложение rrset-order в списке; не реализовано; сервер возвращает RR в случайном порядке?)
lame-ttl число-секунд; (600; кешировать информацию о неверном делегировании зон (lame-server), чтобы уменьшить нагрузку на журнал; не более 1800; похоже, что кеширование не реализовано?)
max-ncache-ttl число-секунд; (10800; максимальное время хранения в кеше отрицательных ответов; не более 7 дней — 604800 секунд)
max-cache-ttl число-секунд; (604800; максимальное время хранения в кеше положительных ответов)
sig-validity-interval число-дней; (30; время окончания действия цифровых подписей, автоматически генерируемых при динамическом обновлении DNSSEC зоны; время начала действия подписи — за час до текущего времени; не более 3660 дней)
min-roots number; (не реализовано)
use-ixfr yes_or_no; (устарело)
provide-ixfr yes_or_no; (yes; отвечает как первичный сервер на запросы на передачу обновленной зоны в формате изменений — IXFR; данная опция нужна только для борьбы с ошибочной реализацией IXFR на удаленном сервере; см. утверждение server)
request-ixfr yes_or_no; (yes; запрашивает как вторичный сервер передачу обновлений зоны в формате изменений — IXFR; если удаленный сервер не поддерживает IXFR, то автоматически происходит откат к протоколу AXFR, данная опция нужна только для борьбы с ошибочной реализацией IXFR на удаленном сервере; см. утверждение server)
ixfr-from-differences yes_or_no; (no; вычисление и запись в журнал разницы между старым и новым содержимым зоны для последующей передачи ее в формате IXFR)
treat-cr-as-space yes_or_no; (устарело; NL и CRLF обрабатываются всегда)
min-refresh-time число-секунд; (ограничивает интервал обновления зоны, указанный в SOA; см. утверждения view и zone)
max-refresh-time число-секунд; (ограничивает интервал обновления зоны, указанный в SOA; см. утверждения view и zone)
min-retry-time число-секунд; (ограничивает интервал повтора попыток обновления зоны, указанный в SOA; см. утверждения view и zone)
max-retry-time число-секунд; (ограничивает интервал повтора попыток обновления зоны, указанный в SOA; см. утверждения view и zone)
port ip_port; (53; номер TCP и UDP портов, который сервер будет использовать для приема и передачи пакетов; применимо только для отладки)
additional-from-auth yes_or_no; (yes; можно отключать только при отключении обслуживания рекурсивных запросов; заполнять дополнительную секцию ответа, если эта информация есть в «своих» зонах)
additional-from-cache yes_or_no; (yes; можно отключать только при отключении обслуживания рекурсивных запросов; заполнять дополнительную секцию ответа, если эта информация есть кеше)
random-device path_name; (/dev/random; устройство или файл в качестве источника случайных чисел)
max-cache-size размер; (unlimited; максимальный размер памяти, выделяемой под кеш; можно использовать масштабирующие коэффициенты K, M и G)
tcp-clients число; (100; максимальное число одновременно обслуживаемых TCP соединений)
recursive-clients число; (1000; максимальное число одновременно обслуживаемых запросов; каждый запрос требует 20 КБ памяти)
match-mapped-addresses yes_or_no; (для IPv6)
root-delegation-only [exclude { «имя»; … } ]; (корневые зоны и зоны первого уровня, кроме списка исключений («DE», «LV», «US», «MUSEUM»), должны только делегировать подзоны)
Утверждение server может использоваться на верхнем уровне файла настройки или быть вложено в утверждение view. Если утверждение view содержит хотя бы одно утвержение server, то для данного вида используются только они (глобальные утверждения server игнорируются), иначе глобальные утверждения server действуют и на данный вид. Утвержение server может содержать следующие предложения:

bogus yes_or_no; (no; не отправлять запросы данному серверу)
provide-ixfr yes_or_no; (позволяет изменить значение опции, заданной глобально или для данного вида)
request-ixfr yes_or_no; (позволяет изменить значение опции, заданной глобально или для данного вида)
edns yes_or_no; (yes; пытаться ли использовать EDNS; ?)
transfers число; (позволяет изменить значение опции transfers-per-ns, заданной глобально)
transfer-format ( one-answer | many-answers ) ; (позволяет изменить значение опции, заданной глобально)
keys { string; … } ; (задает идентификатор ключа для подписи сообщения TSIG для данного сервера; ответ не обязан быть подписан этим ключом; реализован только один ключ на сервер)
Утверждение zone устанавливает опции, специфические для указанной зоны. Формат утверждения следующий:

zone имя-зоны [ класс ] {
type тип-зоны;
[ опция; … ]
};
Имя зоны — это доменное имя корневого узла зоны. Тип зоны определяет роль, которую сервер будет исполнять для этой зоны:

master — сервер является первичным уполномоченным сервером для данной зоны, т.е. загружает содержимое зоны из файла зоны, указанного опцией file
slave — сервер является вторичным уполномоченным сервером для данной зоны; содержимое зоны считывается от одного из серверов, указанных в опции masters; указание имени файла в опции file позволяет сохранять резервную копию зоны в файле
hint — позволяет задать с помощью опции file имя файла, содержащего описание корневой зоны; этот файл можно взять в Internic; сервер при загрузке обращается к одному из корневых серверов, перечисленных в этом файле, для получения текущего списка корневых серверов; полученный список используется в течении указанного TTL; для класса IN имеется встроенный список предполагаемых корневых серверов
stub — использовался в предыдущих версиях BIND для упрощения настройки; использовать не рекомендуется
forward — позволяет задавать список серверов, к которым будут перенаправляться запросы, не имеющие ответа в кеше, отдельно для данной зоны (см. предложения forward и forwarders в утверждении options)
delegation-only — эта зона может содержать только записи о делегировании подзон
Опции зоны (большинство опций позволяют заменить глобальные значения, заданные в утверждении options или взятые по умолчанию; они имеют тот же самый синтаксис и семантику):

masters [port ip_port] { ip_addr [port ip_port] [key ключ]; […] }; (адреса и номера портов серверов, с которых брать содержимое зоны; порт 53 по умолчанию; номер порта перед списком задает общий номер порта для всех серверов; если указано несколько серверов, то они опрашиваются все, а зона запрашивается с того из них, у кого она имеет наибольший серийный номер; указание ключа позволяет проверять правильность передачи с помощью цифровой подписи TSIG)
file «имя-файла»; (имя файла, в котором хранится содержимое зоны)
allow-update { список-шаблонов-адресов }; (none; каким хостам разрешено посылать динамические изменения зоны первичному серверу; права доступа на основе IP адресов опасны! используйте только списки шаблонов на основе ключей)
update-policy { update_policy_rule […] } ; (позволяет задать правила доступа на изменение отдельных записей при динамическом изменении зоны на основе авторства (identity) сообщений; имя автора извлекается из подписи TSIG или SIG(0); применим только для первичного сервера; несовместим с allow-update; правила рассматриваются по очереди до первого совпадения автора, имени и типа; каждое правило состоит из ключевого слова grant или deny, имени автора, способа сравнения имен, полного доменного имени и списка типов (м.б. опущен); в качестве автора можно указывать имя ключа, используемого для создания TSIG или SIG(0) или разделяемого секрета TKEY, а также шаблон (?); опущенный список типов соответствует любому типу, кроме SIG, NS, SOA и NXT; тип ANY соответствует любому типу, кроме NXT); допустимы следующие способы сравнения:
name (посимвольное сравнение)
subdomain (изменяемое имя должно быть поддоменом или совпадать с указанным в правиле)
wildcard (?)
self (изменяемое имя должно соответствовать имени автора, имеет смысл если для каждого изменяемого доменного имени создается ключ с таким же именем, а в качестве имени автора указывается шаблон *)
database «string»; (тип БД для хранения содержимого зоны во время работы; по умолчанию — «rbt»; другие типы БД необходимо явно указывать при сборке)
delegation-only yes_or_no (эта зона может содержать только записи о делегировании подзон; только для зон типа stub или hint)
allow-notify — описание см. в утверждении options
allow-query — описание см. в утверждении options
allow-transfer — описание см. в утверждении options
allow-update-forwarding — описание см. в утверждении options
also-notify — описание см. в утверждении options
check-names (warn|fail|ignore); (не реализовано)
dialup — описание см. в утверждении options
forward — описание см. в утверждении options
forwarders — описание см. в утверждении options, только для зоны типа forward
ixfr-base — устарело
ixfr-tmp-file — устарело
max-ixfr-log-size — устарело
max-transfer-idle-in — описание см. в утверждении options
max-transfer-idle-out — описание см. в утверждении options
max-transfer-time-in — описание см. в утверждении options
max-transfer-time-out — описание см. в утверждении options
notify — описание см. в утверждении options
pubkey number number number string ; (не реализовано)
transfer-source — описание см. в утверждении options
transfer-source-v6 — описание см. в утверждении options
notify-source — описание см. в утверждении options
notify-source-v6 — описание см. в утверждении options
zone-statistics — описание см. в утверждении options
sig-validity-interval — описание см. в утверждении options
min-refresh-time — описание см. в утверждении options
max-refresh-time — описание см. в утверждении options
min-retry-time — описание см. в утверждении options
max-retry-time — описание см. в утверждении options
ixfr-from-differences — описание см. в утверждении options
key-directory — описание см. в утверждении options

Критические even id для мониторинга.

10 критически важных event ID для мониторинга recovery mode

Системное администрирование*, Блог компании Netwrix
Рэнди Франклин Смит (CISA, SSCP, Security MVP) имеет в своем арсенале очень полезный документ, рассказывающий о том, какие события (event IDs) обязательно должны отслеживаться в рамках обеспечения информационной безопасности Windows. В этом документе изложена крайне полезная информация, которая позволит Вам “выжать” максимум из штатной системы аудита. Мы подготовили перевод этого материала. Заинтересованных приглашаем под кат.

О том, как настроить аудит, мы уже обстоятельно писали в одном из наших постов. Но из всех event id, которые встречаются в журналах событий, необходимо остановить свое внимание на нескольких критических важных. На каких именно – решать каждому. Однако Рэнди Франклин Смит предлагает сосредоточить внимание на 10 важных событиях безопасности в Windows.
Контроллеры доменов
Event ID — (Категория) — Описание

1) 675 или 4771 
(Аудит событий входа в систему)
Событие 675/4771 на контроллере домена указывает на неудачную попытку войти через Kerberos на рабочей станции с доменной учетной записью. Обычно причиной этого является несоответствующий пароль, но код ошибки указывает, почему именно аутентификация была неудачной. Таблица кодов ошибок Kerberos приведена ниже.

2) 676, или Failed 672 или 4768
(Аудит событий входа в систему) 
Событие 676/4768 логгируется для других типов неудачной аутентификации. Таблица кодов Kerberos приведена ниже.
ВНИМАНИЕ: В Windows 2003 Server событие отказа записывается как 672 вместо 676.

3) 681 или Failed 680 или 4776
(Аудит событий входа в систему) 
Событие 681/4776 на контроллере домена указывает на неудачную попытку входа в систему через
NTLM с доменной учетной записью. Код ошибки указывает, почему именно аутентификация была неудачной.
Коды ошибок NTLM приведены ниже.
ВНИМАНИЕ: В Windows 2003 Server событие отказа записывается как 680 вместо 681.

4) 642 или 4738 
(Аудит управления учетными записями)
Событие 642/4738 указывает на изменения в указанной учетной записи, такие как сброс пароля или активация деактивированной до этого учетной записи. Описание события уточняется в соответствие с типом изменения.

5) 632 или 4728; 636 или 4732; 660 или 4756
(Аудит управления учетными записями)
Все три события указывают на то, что указанный пользователь был добавлен в определенную группу. Обозначены Глобальная (Global), Локальная (Local) и Общая (Universal) соответственно для каждого ID.

6) 624 или 4720 
(Аудит управления учетными записями)
Была создана новая учетная запись пользователя

7) 644 или 4740
(Аудит управления учетными записями)
Учетная запись указанного пользователя была заблокирована после нескольких попыток входа

8) 517 или 1102
(Аудит системных событий)
Указанный пользователь очистил журнал безопасности
Вход и выход из системы (Logon/Logoff)
Event Id — Описание

528 или 4624 — Успешный вход в систему
529 или 4625 — Отказ входа в систему – Неизвестное имя пользователя или неверный пароль
530 или 4625 Отказ входа в систему – Вход в систему не был осуществлен в течение обозначенного периода времени
531 или 4625 — Отказ входа в систему – Учетная запись временно деактивирована
532 или 4625 — Отказ входа в систему – Срок использования указанной учетной записи истек
533 или 4625 — Отказ входа в систему – Пользователю не разрешается осуществлять вход в систему на данном компьютере
534 или 4625 или 5461 — Отказ входа в систему – Пользователь не был разрешен запрашиваемый тип входа на данном компьютере
535 или 4625 — Отказ входа в систему – Срок действия пароля указанной учетной записи истек
539 или 4625 — Отказ входа в систему – Учетная запись заблокирована
540 или 4624 — Успешный сетевой вход в систему (Только Windows 2000, XP, 2003)
Типы входов в систему (Logon Types)
Тип входа в систему — Описание

2 — Интерактивный (вход с клавиатуры или экрана системы)
3 — Сетевой (например, подключение к общей папке на этом компьютере из любого места в сети или IIS вход — Никогда не заходил 528 на Windows Server 2000 и выше. См. событие 540)
4 — Пакет (batch) (например, запланированная задача)
5 — Служба (Запуск службы)
7 — Разблокировка (например, необслуживаемая рабочая станция с защищенным паролем скринсейвером)
8 — NetworkCleartext (Вход с полномочиями (credentials), отправленными в виде простого текст. Часто обозначает вход в IIS с “базовой аутентификацией”)
9 — NewCredentials
10 — RemoteInteractive (Терминальные службы, Удаленный рабочий стол или удаленный помощник)
11 — CachedInteractive (вход с кешированными доменными полномочиями, например, вход на рабочую станцию, которая находится не в сети)
Коды отказов Kerberos
Код ошибки — Причина

6 — Имя пользователя не существует
12 — Ограничение рабочей машины; ограничение времени входа в систему
18 — Учетная запись деактивирована, заблокирована или истек срок ее действия
23 — Истек срок действия пароля пользователя
24 — Предварительная аутентификация не удалась; обычно причиной является неверный пароль
32 — Истек срок действия заявки. Это нормальное событие, которое логгируется учетными записями компьютеров
37 — Время на рабочей машины давно не синхронизировалось со временем на контроллере домена
Коды ошибок NTLM
Код ошибки (десятичная система) — Код ошибки (16-ричная система) — Описание

3221225572 — C0000064 — Такого имени пользователя не существует
3221225578 — C000006A — Верное имя пользователя, но неверный пароль
3221226036 — C0000234 — Учетная запись пользователя заблокирована
3221225586 — C0000072 — Учетная запись деактивирована
3221225583 — C000006F — Пользователь пытается войти в систему вне обозначенного периода времени (рабочего времени)
3221225584 — C0000070 — Ограничение рабочей станции
3221225875 — C0000193 — Истек срок действия учетной записи
3221225585 — C0000071 — Истек срок действия пароля
3221226020 — C0000224 — Пользователь должен поменять пароль при следующем входе в систему

Сброс пароля в mysql

Если Вы забыли пароль Mysql (сброс пароля)

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

Для смены пароля на БД MySQL Вам необходимо выполнить следующие действия:

1) Соединяемся с сервером по протоколу ssh. (Инструкция по соединению)

2) Останавливаем MySQL:

/etc/init.d/mysqld stop

3) Запускаем MySQL с особыми параметрами:

/usr/bin/mysqld_safe —skip-grant-tables —user=root &

4) Запускаем клиента MySQL:

mysql -u root

5) Выполняем запрос SQL:

UPDATE mysql.user SET Password=PASSWORD(`newpassword`) WHERE User=`root`;

где newpassword — новый пароль

6) Применяем изменения:

FLUSH PRIVILEGES;

7) Выходим из клиента MySQL:

exit

8) Перезапускаем MySQL сервер:

/etc/init.d/mysqld restart

На этом всё — пароль MySQL изменён на newpassword.

Более мягкий способ

Ищем файл

configuration.php

»

$mosConfig_host = ‘xyz’; // сервер базы данных, в большинстве случаев ‘localhost’

$mosConfig_user = ‘adminsql’; // пользователь БД

$mosConfig_password = ‘xyz’; // пароль БД

$mosConfig_db = ‘xyzdb’; // название БД

$mosConfig_absolute_path = ‘/xyz’; // абсолютный путь к сайту без слеша (/) в конце

$mosConfig_live_site = ‘http://www.domain.ru’; // URL сайта без слеша в конце

$mosConfig_cachepath = ‘/xyz/cache’; // абсолютный путь к каталогу cache без слеша в концеharhр

»

Далее заходим по ssh

mysql -uadminsql -p

вводим пароль

show databases;

use xyzdb;

show tables;

ищем таблицу

*****_users

смотрим структуру базы

DESCRIBE *****_users;

Изменяем пароль админа

UPDATE `jos_users`

SET `password` = MD5(‘new_password’)

WHERE `username` = ‘admin’

Изучаем команды linux: awk

Изучаем команды linux: awk

Оригинал: Learning Linux Commands: awk
Автор: Rares Aioanei
Дата публикации: 24 ноября 2011 года
Перевод: А. Кривошей
Дата перевода: 22 сентября 2012 г.

  1. Введение

В данном случае название статьи слегка вводит нас в заблуждение, потому что awk — это больше, чем команда. Это язык программирования со своими собственными правилами. Вы можете писать на нем скрипты для выполнения сложных операций, либо можете просто использовать из командной строки. Его название составлено из заглавных букв Aho, Weinberger и Kernighan (да, тот самый Brian Kernighan), авторов языка, история которого началась в 1977 году. Если вы учитесь или учились программированию на C, то увидите многие похожие концепции в awk. Вам понадобятся определенные знания командной оболочки Linux и, возможно, базовые навыки написания скриптов, что, впрочем, необязательно, так как мы постараемся изложить материал как можно проще. Большое спасибо Arnold Robbins за его работу над awk.

  1. Для чего нужен awk?

awk — это утилита/язык для извлечения данных. Именно awk являлся источником вдохновения для Larry Wall, когда он создавал Perl. Для выполнения различных практических задач по обработке текста awk часто используется совместно с sed. В зависимости от поставленной задачи вы можете использовать либо awk, либо Perl, хотя это в большей степени зависит от личных предпочтений. Как и sed, awk читает за один раз одну строку, выполняет определенные действия в зависимости от заданных опций, и выводит результат. Одним из самых простых и популярных способов использования awk является выбор столбца из текстового файла или из вывода другой команды. Когда я устанавливал Debian на свою вторую рабочую станцию, я использовал awk для того, чтобы получить список установленных на первой машине, и скормить его aptitude. Я делал это с помощью команды вида:

$ dpkg -l | awk ‘ {print $2} ‘ > installed

В настоящее время большинство менеджеров пакетов предоставляют такую возможность, например это можно сделать с помощью команды rpm’s -qa, но вывод содержит больше информации, чем мне нужно. Я вижу, что второй столбец вывода dpkg -l содержит названия установленных пакетов, поэтому я использовал вышеприведенную команду, чтобы извлечь только второй столбец.

  1. Базовые концепции

Как уже говорилось, действия, выполняемые awk, заключаются в фигурные скобки, а вся команда — в одинарные кавычки: awk ‘condition { action }‘. В нашем примере условий нет, но если мы захотим, например, выбрать только установленные пакеты, относящиеся к vim, (да, есть grep, но ведь это пример, кроме того, зачем использовать две утилиты, если можно использовать одну), мы могли мы набрать:

$ dpkg -l | awk ‘ /’vim’/ {print $2} ‘

Эта команда выведет все установленные пакеты, содержащие «vim» в названиях. Одна из причин, по которой рекомендуется использовать awk — он быстр. Если заменить «vim» на «lib», в моей системе получится список из более чем 1300 пакетов. Встречаются ситуации, где данных намного больше, и в этих случаях awk показывает все свои преимущества. В любом случае, давайте рассмотрим примеры, которые помогут понять многие аспекты использования программы. Но перед этим будет полезно узнать, что существует несколько диалектов и реализаций awk. Примеры, приведенные в данной статье, относятся к GNU awk (так к реализации, так и к диалекту). Из-за различий в интерпретации кавычек, мы можем использовать bash, ksh или sh, но не можем использовать (t)csh.

  1. Примеры
Синтаксис команды Описание
awk ‘ {print $1,$3} ‘ Печатает только первый и третий столбцы, используя stdin
awk ‘ {print $0} ‘ Печатает все столбцы, используя stdin
awk ‘ /’pattern’/ {print $2} ‘ Печатает только элементы второго столбца, соответствующие шаблону «pattern», используя stdin
awk -f script.awk inputfile Как и sed, awk использует ключ -f для получения инструкций из файла, что полезно, когда их большое количество и вводить их вручную в терминале непрактично.
awk ‘ program ‘ inputfile Исполняет program, используя данные из inputfile
awk «BEGIN { print \»Hello, world!!\» }» Классическое «Hello, world» на awk
awk ‘{ print }’ Печатает все, что вводится из командной строки, пока не встретится EOF
#! /bin/awk -f

BEGIN { print «Hello, world!» }

Скрипт awk для классического «Hello, world!» (сделайте его исполняемым с помощью chmod и запустите)
# This is a program that prints \

«Hello, world!»

# and exits

Комментарии в скриптах awk
awk -F «» ‘program’ files Определяет разделитель полей как null, в отличие от пробела по умолчанию
awk -F «regex» ‘program’ files Разделитель полей также может быть регулярным выражением
awk ‘{ if (length($0) > max) max = \

length($0) }

END { print max }’ inputfile

Печатает длину самой длинной строки
awk ‘length($0) > 80’ inputfile Печатает все строки длиннее 80 символов
awk ‘NF > 0’ data Печатает каждую строку, содержащую хотя бы одно поле (NF означает Number of Fields)
awk ‘BEGIN { for (i = 1; i <= 7; i++)

print int(101 * rand()) }’

Печатает семь случайных чисел в диапазоне от 0 до 100
ls -l . | awk ‘{ x += $5 } ; END \

{ print «total bytes: » x }’

total bytes: 7449362

Печатает общее количество байтов, используемое файлами в текущей директории
ls -l . | awk ‘{ x += $5 } ; END \

{ print «total kilobytes: » (x + \

1023)/1024 }’

total kilobytes: 7275.85

Печатает общее количество килобайтов, используемое файлами в текущей директории
awk -F: ‘{ print $1 }’ /etc/passwd | sort Печатает отсортированный список имен пользователей
awk ‘END { print NR }’ inputfile Печатает количество строк в файле, NR означает Number of Rows
awk ‘NR % 2 == 0’ data Печатает четные строки файла.
ls -l | awk ‘$6 == «Nov» { sum += $5 }

END { print sum }’

Печатает общее количество байтов файла, который последний раз редактировался в ноябре.
awk ‘$1 ~/J/’ inputfile Регулярное выражение для всех записей в первом поле, которые начинаются с большой буквы j.
awk ‘$1 ~!/J/’ inputfile Регулярное выражение для всех записей в первом поле, которые не начинаются с большой буквы j.
awk ‘BEGIN { print «He said \»hi!\» \to her.» }’ Экранирование двойных кавычек в awk.
echo aaaabcd | awk ‘{ sub(/a+/, \»<A>»); print }’ Печатает «<A>bcd»
awk ‘{ $2 = $2 — 10; print $0 }’ inventory Модифицирует inventory и печатает его с той разницей, что значение второго поля будет уменьшено на 10.
awk ‘{ $6 = ($5 + $4 + $3 + $2); print \ $6’ inventory Даже если поле шесть не существует в inventory, вы можете создать его и присвоить значение, затем вывести его.
echo a b c d | awk ‘{ OFS = «:»; $2 = «»

> print $0; print NF }’

OFS — это Output Field Separator (разделитель выходных полей) и команда выведет «a::c:d» и «4», так как хотя второе поле аннулировано, оно все еще существует, поэтому может быть подсчитано.
echo a b c d | awk ‘{ OFS = «:»; \

$2 = «»; $6 = «new»

> print $0; print NF }’

Еще один пример создания поля; как вы можете видеть, поле между $4 (существующее) и $6 (создаваемое) также будет создано (как пустое $5), поэтому вывод будет выглядеть как «a::c:d::new» «6».
echo a b c d e f | awk ‘\

{ print «NF =», NF;

> NF = 3; print $0 }’

Отбрасывание трех полей (последних) путем изменения количества полей.
FS=[ ] Это регулярное выражения для установки пробела в качестве разделителя полей.
echo ‘ a b c d ‘ | awk ‘BEGIN { FS = \

«[ \t\n]+» }

> { print $2 }’

Печатает только «a».
awk -n ‘/RE/{p;q;}’ file.txt Печатает только первое совпадение с регулярным выражением.
awk -F\\\\ ‘…’ inputfiles … Устанавливает в качестве разделителя полей \\
BEGIN { RS = «» ; FS = «\n» }

{

print «Name is:», $1

print «Address is:», $2

print «City and State are:», $3

print «»

}

Если у нас есть запись вида
«John Doe
1234 Unknown Ave.
Doeville, MA»,
этот скрипт устанавливает в качестве разделителя полей новую строку, так что он легко может работать со строками.
awk ‘BEGIN { OFS = «;»; ORS = «\n\n» }

> { print $1, $2 }’ inputfile

Если файл содержит два поля, записи будут напечатаны в виде:

«field1:field2
field3;field4

…;…»
так как разделитель выходных полей — две новые строки, а разделитель полей — «;».

awk ‘BEGIN {

> OFMT = «%.0f» # print numbers as \

integers (rounds)

> print 17.23, 17.54 }’

Будет напечатано 17 и 18 , так как в качестве выходного формата (Output ForMaT) указано округление чисел с плавающей точкой до ближайших целых значений.
awk ‘BEGIN {

> msg = «Dont Panic!»

> printf «%s\n», msg

>} ‘

Вы можете использовать printf практически так же, как и в C.
awk ‘{ printf «%-10s %s\n», $1, \

$2 }’ inputfile

Печатает первое поле в виде строки длиной 10 символов, выровненной по левому краю, а затем второе поле в обычном виде.
awk ‘{ print $2 > «phone-list» }’ \inputfile Простой пример извлечения данных, где второе поле записывается под именем «phone-list».
awk ‘{ print $1 > «names.unsorted»

command = «sort -r > names.sorted»

print $1 | command }’ inputfile

Записывает имена, содержащиеся в $1, в файл, затем сортируем и выводим результат в другой файл.
awk ‘BEGIN { printf «%d, %d, %d\n», 011, 11, \

0x11 }’

Will print 9, 11, 17

if (/foo/ || /bar/)

print «Found!»

Простой поиск для foo или bar.
awk ‘{ sum = $2 + $3 + $4 ; avg = sum / 3

> print $1, avg }’ grades

Простые арифметические операции (в большинстве похожи на C)
awk ‘{ print «The square root of», \

$1, «is», sqrt($1) }’

2

The square root of 2 is 1.41421

7

The square root of 7 is 2.64575

Простой расширяемый калькулятор
awk ‘$1 == «start», $1 == «stop»‘ inputfile Печатает каждую запись между start и stop.
awk ‘

> BEGIN { print «Analysis of \»foo\»» }

> /foo/ { ++n }

> END { print «\»foo\» appears», n,\

«times.» }’ inputfile

Правила BEGIN и END исполняются только один раз, до и после каждой обработки записи.
echo -n «Enter search pattern: »

read pattern

awk «/$pattern/ «‘{ nmatches++ }

END { print nmatches, «found» }’ inputfile

Search using shell

if (x % 2 == 0)

print «x is even»

else

print «x is odd»

Простое условие. awk, как и C, также поддерживает операторы ?:.
awk ‘{ i = 1

while (i <= 3) {

print $i

i++

}

}’ inputfile

Печатает первые три поля каждой записи, по одной в строке.
awk ‘{ for (i = 1; i <= 3; i++)

print $i

}’

Печатает первые три поля каждой записи, по одной в строке.
BEGIN {

if ((«date» | getline date_now) <= 0) {

print «Can’t get system date» > \

«/dev/stderr»

exit 1

}

print «current date is», date_now

close(«date»)

}

Выход с кодом ошибки, отличным от 0, означает, что что-то идет не так. Пример:
awk ‘BEGIN {

> for (i = 0; i < ARGC; i++)

> print ARGV[i]

> }’ file1 file2

Печатает awk file1 file2
for (i in frequencies)

delete frequencies[i]

Удаляет элементы в массиве
foo[4] = «»

if (4 in foo)

print «This is printed, even though foo[4] \

is empty»

Проверяют элементы массива
function ctime(ts, format)

{

format = «%a %b %d %H:%M:%S %Z %Y»

if (ts == 0)

ts = systime()

# use current time as default

return strftime(format, ts)

}

awk-вариант функции ctime() в C. Так вы можете определять свои собственные функции в awk.
BEGIN { _cliff_seed = 0.1 }

function cliff_rand()

{

_cliff_seed = (100 * log(_cliff_seed)) % 1

if (_cliff_seed < 0)

_cliff_seed = — _cliff_seed

return _cliff_seed

}

Генератор случайных чисел Cliff.
cat apache-anon-noadmin.log | \

awk ‘function ri(n) \

{ return int(n*rand()); } \

BEGIN { srand(); } { if (! \

($1 in randip)) { \

randip[$1] = sprintf(«%d.%d.%d.%d», \

ri(255), ri(255)\

, ri(255), ri(255)); } \

$1 = randip[$1]; print $0 }’

Анонимный лог Apache (IP случайные)
  1. Заключение

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

Средняя оценка 2 при 1 голосовавших

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

Шпаргалка по firewall-cmd

Шпаргалка по параметрам fierwalld-cmd или опять настройка firewalld

Вот достаточно полное, хоть и краткое описание параметров утилиты firewalld-cmd которые позволяют управлять межсетевым экраном firewalld. По традиции большинство опций начинаются с символов —.

Получение справки:

  • -h, —help — Возвращает описание опций firewall-cmd.
  • -V, —version — Возвращает версию firewalld.

Проверка статуса:

  • —state Проверяет активен ли демон firewalld. Возвращает код 0 если демон активен или NOT_RUNNING если демон не запущен. Так же выводит информацию в стандартный поток STDOUT

Перезагрузка:

  • —reload — Перезагружает правила межсетевого экрана с сохранением информации о состоянии.
  • —complete-reload — Полностью перезагружает межсетевой экран, в том числе перезагружает модули ядра (netfilter)/ Очевидно что все соединения будут сброшены и временные правила потеряны. Эта перезагрузка для особо неприятных случаев.

Паника (внештатный режим):

  • —panic-on — Включае режим паники. Все входящие и исходящие пакеты без исключения отбрасываются, все соединения со временем разрываются. Идеально подходит на случай обнаружения взлома или иных серьёзных проблем.
  • —panic-off — Отключить режим паники. Брэндмауер начинает работать в штатном режиме, некоторые соединения могут быть восстановлены, если режим паники длился меньше время смерти для этих соединений.
  • —query-panic — Возвращает 0 если режим паники включен и 1 если выключен.

Опции обработки зон:

  • —get-default-zone — Возвращает зону по умолчанию для соединений и интерфейсов (Изначально по умолчанию public).
  • —set-default-zone=<zone> — Устанавливает зону по умолчанию для соединений и интерфейсов (Для которых зона не была установлена). Это постоянные изменения.
  • —get-zones — Возвращает предопределенных зон служб используя пробелы в качестве разделителя.
  • —get-services — Возвращает список стандартных служб используя пробелы в качестве разделителя.
  • —get-icmptypes — Возвращает список предопределенных типов ICMP используя пробелы в качестве разделителя
  • —get-active-zones — Возвращает список активных в настоящее время зон вместе с интерфейсами в этих зонах в формате:
    <zone1>: <interface1> <interface2> ..
    <zone2>: <interface3> ..
  • —get-zone-of-interface=<interface> — Возвращает зону которой пренадлежит интерфейс <interface> или ничего, если интерфейсу не назначена зона.
  • —list-all-zones — Возвращает список всех действий во всех зонах в формате:
    <zone>
    interfaces: <interface1> ..
    services: <service1> ..
    ports: <port1> ..
    forward-ports: <forward port1> ..
    icmp-blocks: <icmp type1> ..

Опции обработки интерфейсов:

Эти опции относятся только к одной конкретной зоне. Если используется —zone=<zone>, то они влияют на зону <zone>. Если —zone=<zone> опущен, то опции влияют на зону «по умолчанию» (смотрите —get-default-zone). Получить список предопределенных зон можно используя —get-zones. Имя интерфейса это строка длинной не более 16 символов, оно не может содержать », ‘/’, ‘!’ и ‘*’. [—zone=<zone>]

  • -list-interfaces — Возвращает список интерфейсов которые пренадлежат к зоне <zone>. Если параметр —zone опущен, то используется зона «по умолчанию». [—zone=<zone>]
  • —add-interface=<interface> — Добавляет интерфейс <interface> в зону <zone>. Если параметр —zone опущен, то используется зона «по умолчанию».
  • [—zone=<zone>] { —change-interface=<interface> | —change —zone=<interface> } — Изменить зону интерфейса<interface> принадлежащего зоне <zone>. Если параметр —zone опущен, то используется зона «по умолчанию». Если старая и новая зона совпадают то команда ничего не делает и не возвращает ошибки. Если интерфейс не принадлежал ранее к этой зоне то он будет в неё добавлен, как при использовании параметра —add-interface.
  • [—zone=<zone>]—query-interface=<interface> — Возвращает 0 если интерфейс <interface> принадлежит к зоне <zone> и 1 если не пренадлежит.
  • [—zone=<zone>]—remove-interface=<interface> — Удаляет интерфейс<interface> из зоны <zone>.Если параметр —zone опущен, то используется зона «по умолчанию»

.Опции настройки и запроса зон:

Чтобы использовать эти параметры следует знать какие действия и когда можно использовать. Об этом написано ниже.

  • [—zone=<zone>] —add-ACTION [—timeout=<seconds>] — Добавить действиеACTION для зоны <zone>. Эта опция может быть указана несколько раз. Если параметр —zone опущен, то используется зона «по умолчанию».Чтобы получить зону по умолчанию используется —get-default-zone. Если указан тайм-аут то действие ACTION будет активно указанное количество секунд и затем удалено.
  • [—zone=<zone>] —remove-ACTION — Удалить действие ACTION из зоны<zone>. Эта опция может быть указан несколько раз. Если параметр —zone опущен, то используется зона «по умолчанию». Если действие было добавлено с указанием тайм-аута, оно всё равно будет удалено.
  • [—zone=<zone>] —query-ACTION — Возвращает 0 если действие ACTION было добавлено для зоны <zone> и 1 в противном случае. Если параметр —zone опущен, то используется зона «по умолчанию».
  • [—zone=<zone>] —add-masquerade [—timeout=<seconds>] — Включить маскарад для зоны<zone>. Если параметр —zone опущен, то используется зона «по умолчанию». Если указан тайм-аут, маскарадинг будет активным в течение указанного количества секунд.
  • [—zone=<zone>] —remove-masquerade — Отключить маскарад для зоны <zone>. Если параметр —zone опущен, то используется зона «по умолчанию». Если маскарадинг был включен с тайм-аут, он всё равно будет отключен.
  • [—zone=<zone>] —query-masquerade — Возвращает 0 если маскарадинг включен для зоны <zone> и 1 в противном случае.Если параметр —zone опущен, то используется зона «по умолчанию».
  • [—zone=<zone>] —list-services — Возвращает список сервисов добавлены в зону <zone> разделенный пробелами. Если параметр —zone опущен, то используется зона «по умолчанию». Чтобы получить список всех предустановленных сервисов используйте —get-services.
  • [—zone=<zone>] —list-ports— Возвращает список портов добавленных в зону <zone> разделённый пробелами.Списрок имеет формат: <port>[-<port>]/<protocol>, где в качестве порта может быть указан диапазон портов.Если параметр —zone опущен, то используется зона «по умолчанию».
  • [—zone=<zone>]—list-icmp-blocks — Список типов ICMP пакетов добавлнных в зону <zone> разделенный пробелами. Если параметр —zone опущен, то используется зона «по умолчанию». Для получения списка всех предопределенных типов ICMP используйте —get-icmptypes.
  • [—zone=<zone>] —list-forward-ports — Возвращает список всех «проброшенных» портов добавленных в зону<zone>.Если параметр —zone опущен, то используется зона «по умолчанию».
  • [—zone=<zone>] —list-all — Возвращает список всех действий добавленных или включенных в зону <zone>. Если параметр —zone опущен, то используется зона «по умолчанию».

Варианты действий для использования с опциями настройки и запроса зон:

Эти действия (ACTION) используются в —add-ACTION, —remove-ACTION и —query-ACTION предыдущего раздела.

  • service=<service> — Использовать одну из стандартных служб. Для получения списка всех стандартных служб используйте —get-services.
  • port=<port>[-<port>]/<protocol> — Использовать порт <port> или диапазон портов <port>-<port> для работы протоколы. Порт — это номер порта от 1 до 65535. Протокол может быть TCP или UDP.
  • icmp-block=<icmptype> — .Использовать предопределенные типы ICMP пакетов. Для получения списка всех предопределенных типов ICMP используйте —get-icmptypes.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toport=<port>[-<port>] — Использовать порт при переадресации пакетов. Указываются исходный и целевой порты или диапазоны портов для протокола. Протоколом может быть UDP или TCP. Проброс осуществляется с локального порта port на локальный toport.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toaddr=<address> — Проброс локального порта port в тот же порт на хосте toaddr.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toport=<port>[-<port>]:toaddr=<address> — Проброс локального порта port в порт toport на хосте

Постоянные параметры:

Постоянные параметры будут хранится в настройках и не исчезнут после перезагрузки. Так же их изменение вступят в силу только после перезагрузки или перезапуска системы.(Ключевое слово тут —permanent) Можно использовать:

  • —permanent { —get-zones | —get-services | —get-icmptypes }
  • —permanent [—zone=<zone>] { —list-services | —list-ports | —list-icmp-blocks | —list-forward-ports }
  • —permanent [—zone=<zone>] { —add-ACTION | —remove-ACTION | —query-ACTION }
  • —permanent [—zone=<zone>] { —add-masquerade | —remove-masquerade |—query-masquerade }

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

Ещё опции:

Эти опции служат для управления правилами на более низком уровне.

  • —direct—passthrough { ipv4 | ipv6 | eb } <args> — Передача команд через фаервол. Аргументом <args> могут быть любые агрументы командной строки допрустимые в iptables, ip6tables и ebtables.
  • —direct—add-chain { ipv4 | ipv6 | eb } <table> <chain> — Добавить новую цепочку <chain> в таблицу <table>.
  • —direct—remove-chain { ipv4 | ipv6 | eb } <table> <chain> — Удалить цепочку <chain> из таблицы <table>.
  • —direct—query-chain { ipv4 | ipv6 | eb } <table> <chain> — Возвращает 0 если цепочка с именем <chain> присутствует в таблице <table> и 1 в противном случае.
  • —direct—get-chains { ipv4 | ipv6 | eb } <table> — Возвращает все цепочки содержащиеся в таблице <table> в виде списка разделенного пробелами.
  • —direct—add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args> — Добавить правило <args> в цепочку <chain> таблицы <table>.Приоритет используется для задания позиции правила в цепи. Правило с приоритетом 0 добавляется на самый верх цепи. Чем больше приоритет, тем ниже правило расположено в цепочке. Порядок расположения правил с одинаковым приоритетом может менятся и поэтому не предсказуем. Не стоит назначать одинаковый приоритет правилам.
  • —direct—remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args> -Удалить правило <args> из цепочки <chain> в таблице <table>.
  • —direct—query-rule { ipv4 | ipv6 | eb } <table> <chain> <args> — Возвращает 0 если правило <args> существует в цепочке <chain> таблицы <table> и 1 в противном случае.
  • —direct—get-rules { ipv4 | ipv6 | eb } <table> <chain> — Возвращает все правила цепочки <chain> в таблице <table> в виде строк.

Шпаргалка по Asterisk

Остановка и перезапуск Asterisk
Asterisk
Для остановки и перезагрузки Asterisk, есть несколько команд:
 core stop now — Эта команда останавливает Asterisk немедленно, заканчивая все текущие вызовы.
 core stop gracefully — Эта команда предотвращает новые вызовы, но позволяет закончить текущие звонки. Когда все звонки закончились, Asterisk останавливается.
 core stop when convenient — Эта команда ждет, пока в Asterisk будет вызовов, а затем останавливает службу. Это не мешает новым вызовам.

Для перезапуска аналогично:

 core restart now, — Эта команда перегружает Asterisk немедленно, заканчивая все текущие вызовы.
 core restart gracefully — Эта команда предотвращает новые вызовы, но позволяет закончить текущие звонки. Когда все звонки закончились, Asterisk перегружается.
 core restart when convenient — Эта команда ждет, пока в Asterisk будет вызовов, а затем перегружает службу. Это не мешает новым вызовам.

Существует также команда, если вы измените свое мнение.
core abort shutdown — Эта команда отменяет выключения или перезагрузки, которые вы ранее запустили

MYSQLDUMP — и работа с ним

Дамп и восстановление базы данных MySQL

Дамп и восстановление базы данных MySQL довольно просто и удобно делать удаленно через SSH или прямо через консоль сервера. Удаленно, это можно делать используя программы Putty/Kitty. Также указанные ниже примеры Вы можете выполнять и на Windows запустив командную строку ‘cmd‘. Ниже приведены примеры о том, как создавать дампы базы данных MySQL и затем восстанавливать их при необходимости, например для Вашего сайта, интернет-магазина или какого либо другого проекта.

Создание дампа базы данных MySQL

Для того, чтоб выполнять данные команды, подключитесь удаленно к Вашему серверу через SSH используя одну из перечисленных выше программ. После подключения и авторизации к серверу/хостингу, Вы можете вводить приведенные ниже команды.

# Бекап одной базы данных в файл dump_file.sql
mysqldump -uroot -p your_base > dump_file.sql
 
 

# На windows дамп лучше всего создавать немного другой командой, которая предотвращает

# случайное затирание строк дампа из за конвертации символов перевода строки ‘\r\n’ в ‘\n’
mysqldump -uroot -p your_base -r dump_file_utf8.sql
 
 

# Если Вам нужен бекап только отдельных таблиц, а не всей базы данных

# (указываем наименования таблиц через пробел после названия базы данных)
mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql
 
 

# Если нужно создать бекап только структуры базы данных без самих данных

mysqldump -uroot -p —no-data your_base > dump_file.sql
 
 

# Бекап всех баз данных в файл текущая_дата.gz

mysqldump -uroot -p —all_databases | gzip -c > ‘date «+%Y-%m-%d»‘.gz
 
 

# Бекап, где для каждой записи создается отдельный INSERT

# и с явным указанием кодировки базы данных UTF-8
mysqldump -uroot -p —default-character-set=utf8 your_base —extended-insert=FAL

 

 

В приведенном выше примере, для создания бекапа используется утилита mysqldump, которая входит в состав mysql. Далее указываются параметры для создания бекапа базы данных, которые разберем подробнее:

  • -u– параметр указывает логин, который будет использоваться для подключения к базе данных. В примере мы используем логин root, который нужно указать в этом параметре без пробела! В результате у нас это выглядит как -uroot
  • -p– параметр указывает что нужно ввести пароль для указанного логина. Мы его оставили пустым, в результате чего пароль нужно будет ввести после нажатия “Enter” при выполнении команды. Тем не менее, можно указать пароль сразу же здесь, как и в параметре логина, без пробела после -p, однако этот способ не является безопасным, так как консоль сохраняет Ваши команды в лог файл и если Вы его регулярно не очищаете, то он может быть просмотрен злоумышленником.
  • your_base– вместо этой строки в примере, вам необходимо указать реальное имя Вашей базы данных, для которой Вы создаете бекап.
  • >– оператор который показывает направление действия, т.е. как бы указывает, что вы собираетесь сделать запись из базы в файл.
  • sql– это название Вашего файла .slq в которую нужно сохранить Вашу базу данных. Он указывается через пробел после оператора ‘>’. Вы можете задать любое другое имя. Например, чтобы в имени система автоматически вставила текущее время, достаточно указать строку вида:
1  

 

‘date «+%Y-%m-%d»‘

 

 

после этой строки в примере указывается расширение файла ‘.gz‘. В результате будет создан файл вида ‘2014-11-15.gz‘.

 

  • Во втором примере, вместо оператора ‘>‘ используется оператор ‘|‘, который указывает на необходимость выполнения дополнительной команды gzip c параметром ‘-c‘ которая позволяет сразу же запаковать дамп в архив, а только затем сохранить его в файл вида ‘2014-11-15.gz‘, о чем сообщает оператор ‘>‘.
  • Параметр –no-dataпозволяет создать дамп только структуры базы данных без самих данных. В некоторых случаях довольно полезно, когда данные не нужны.
  • Параметры–default-character-set=utf8 и –extended-insert=FALSE. Первый позволяет Вам явно указать кодировку, которая используется этой базой данных, тем самым избежать сохранение базы в неверной кодировке Вместо utf8 можно указать любую другую кодировку, например cp1251. Второй параметр позволяет указать, что при экспорте для каждой записи необходимо создать отдельную команду INSERT. В некоторых случаях это может потребоваться при частичном восстановлении данных из дампа.

Восстановление базы данных из файла дампа MySQL

Теперь рассмотрим с Вами обратный процесс восстановления базы данных из файла дампа. Данное действие выполняется при помощи программы mysql. Рассмотрим сразу же пример.

1

2

 

 

# Восстанавливаем базу данных your_base из файла дампа dump_file

 

 

 

mysql -uroot -p your_base < dump_file.sql

 

 

Здесь также используются параметры ‘-u‘ и ‘-p‘, которые указывают на логин и пароль для подключения к базе данных аналогично утилите mysqldump, рассмотренной в предыдущем примере. После этого идет название базы данных, а также файла, из которого необходимо восстановить данные. Между ними ставится оператор ‘<‘ который указывает направление, что мы хотим импортировать данные в базу из файла.

Шпаргалка по Cenos 7

Шпаргалка по управлению сервисами CentOS 7 с systemd

Блог компании Infobox

Systemd – менеджер системы и сервисов в операционной системе Linux. При разработке eго стремились спроектировать обратно совместимым со скриптами инициализации SysV init и предоставить полезные функции, такие, как параллельный запуск системных сервисов во время загрузки, активацию демонов по требованию, поддержку снепшотов состояния системы и логику управления сервисами, основанную на зависимостях. В CentOS 7 systemd заменяет Upstart как систему инициализации по умолчанию.

В этой статье мы рассмотрим процесс управления сервисами в systemd для пользователя CentOS 7. Эти знания будут полезны и в других дистрибутивах, ведь systemd уже давно используется в Fedora и планируется в Ubuntu 14.10 и Debian 8. Хорошо это или нет — оставим за кадром.

В процессе чтения статьи вы можете попробовать systemd на классических VPS и облачных VPS от Infobox. Мы стремимся своевременно добавлять поддержку современных ОС, чтобы вы могли использовать последние технологии для более эффективной работы. Сама идея написания статьи родилась после очередного вопроса пользователей об использовании сервисов в CentOS 7.

Введение
Systemd приносит концепцию юнитов systemd. Юниты представлены конфигурационными файлами, размещенными в одной из директорий:

  • /usr/lib/systemd/system/– юниты из установленных пакетов RPM.
  • /run/systemd/system/— юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
  • /etc/systemd/system/— юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.

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

Типы юнитов systemd:

  • .service– системный сервис
  • .target— группа юнитов systemd
  • .automount – точка автомонтирования файловой системы
  • .device– файл устройства, распознанного ядром
  • .mount– точка монтирования файловой системы
  • .path– файл или директория в файловой системе
  • .scope– процесс, созданный извне
  • .slice– группа иерархически организованных юнитов, управляющая системными процессами
  • .snapshot– сохраненное состояние менеджера systemd
  • .socket– сокет межпроцессного взаимодействия
  • .swap– Свап-устройство или свап-файл (файл подкачки)
  • .timer– таймер systemd

 

Основные функции systemd в CentOS 7

 

  • Активация, основанная на сокетах. Во время загрузки systemd прослушивает сокеты для всех системных сервисов, поддерживает этот тип активации и передает сокеты этим сервисам сразу после старта сервисов. Это позволяет systemd не только запускать сервисы параллельно, но также дает возможность перезапускать сервисы без потери любых отправленных им сообщений, пока сервисы были недоступны. Соответствующий сокет остается доступным и все сообщения выстраиваются в очередь.
  • Активация, основанная на D-Bus. Системные сервисы, использующие D–Bus для межпроцессного взаимодействия, могут быть запущены по требованию, когда клиентское приложение пытается связаться с ними.
  • Активация, основанная на девайсах. Системные сервисы, поддерживающие активацию, основанную на девайсах, могут быть запущены, когда определенный тип оборудования подключается или становится доступным.
  • Активация, основанная на путях. Системные сервисы могут поддерживать этот вид активации, если изменяется состояние папки или директории.
  • Снепшоты системных состояний. Система может сохранять состояние всех юнитов и восстанавливать предыдущее состояние системы.
  • Управление точками монтирования и автомонтирования. Systemd отслеживает и управляет точками монтирования и автомонтирования.
  • Агрессивная параллелизацияSystemd запускает системные сервисы параллельно из-за использования активации, основанной на сокетах. В комбинации с сервисами, поддерживающими активацию по требованию, параллельная активация значительно уменьшает время загрузки системы.
  • Транзакционная логика активации юнитов. До активации и деактивации юнитов systemd вычисляет их зависимости, создает временную транзакцию и проверяет целостность этой транзакции. Если транзакция нецелостная, systemd автоматически пытается исправить ее и удалить не требующиеся задания из нее до формирования сообщения об ошибке.
  • Обратная совместимость с инициализацией SysV. SystemD полностью поддерживает скрипты инициализации SysV, как описано в спецификации Linux Standard Base (LSB), что упрощает переход на systemd.

 

Управление сервисами
В предыдущих версиях CentOS использовалась SysV или Upstart. Скрипты инициализации располагались в директории /etc/rc.d/init.d/. Такие скрипты обычно писались на Bash и позволяли администратору управлять состоянием сервисов и демонов. В CentOS 7 скрипты инициализации были заменены сервисными юнитами.

По способу использования сервисные юниты .service напоминают скрипты инициализации. Для просмотра, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда systemctl. Команды service и chkconfig по-прежнему включены в систему, но только по соображениям совместимости.

При использовании systemctl указывать расширение файла не обязательно.

Ниже представлены основные команды systemctl:

  • systemctl start name.service– запуск сервиса.
  • systemctl stop name.service— остановка сервиса
  • systemctl restart name.service— перезапуск сервиса
  • systemctl try-restart name.service— перезапуск сервиса только, если он запущен
  • systemctl reload name.service— перезагрузка конфигурации сервиса
  • systemctl status name.service— проверка, запущен ли сервис с детальным выводом состояния сервиса
  • systemctl is-active name.service— проверка, запущен ли сервис с простым ответом: active или inactive
  • systemctl list-units —type service —all– отображение статуса всех сервисов
  • systemctl enable name.service– активирует сервис (позволяет стартовать во время запуска системы)
  • systemctl disable name.service– деактивирует сервис
  • systemctl reenable name.service– деактивирует сервис и сразу активирует его
  • systemctl is–enabled name.service– проверяет, активирован ли сервис
  • systemctl list-unit-files —type service– отображает все сервисы и проверяет, какие из них активированы
  • systemctl mask name.service– заменяет файл сервиса симлинком на /dev/null, делая юнит недоступным для systemd
  • systemctl unmask name.service– возвращает файл сервиса, делая юнит доступным для systemd

 

Работаем с целями (targets) Systemd
Предыдущие версии CentOS с SysV init или Upstart включали предопределенный набор уровней запуска (runlevels), которые представляли специфичные режимы для операций, пронумерованные от 0 до 6. В CentOS 7 концепция уровней запуска была заменена целями systemd.

Файлы целей systemd .target предназначены для группировки вместе других юнитов systemd через цепочку зависимостей. Например юнит graphical.target, использующийся для старта графической сессии, запускает системные сервисы GNOME Display Manager (gdm.service) и Accounts Service (accounts–daemon.service) и активирует multi–user.target. В свою очередь multi–user.target запускает другие системные сервисы, такие как Network Manager (NetworkManager.service) или D-Bus (dbus.service) и активирует другие целевые юниты basic.target.

В CentOS 7 присутствуют предопределенные цели, похожие на стандартный набор уровней запуска. По соображениям совместимости они также имеют алиасы на эти цели, которые напрямую отображаются в уровнях запуска SysV.

  • target (runlevel0.target)– завершение работы и отключение системы
  • target (runlevel1.target)– настройка оболочки восстановления
  • multi–user.target (runlevel2.target, runlevel3.target, runlevel4.target)– настройка неграфической многопользовательской системы
  • target (runlevel5.target)– настройка графической многопользовательской системы
  • target (runlevel6.target)– выключение и перезагрузка системы

Команды runlevel и telinit по-прежнему доступны, но оставлены в системе по соображениям совместимости. Рекомендуется использовать systemctl для изменения или настройки системных целей.

Для определения, какой целевой юнит используется по умолчанию, полезна следующая команда: systemctl get–default.

Для просмотра всех загруженных целевых юнитов воспользуйтесь командой systemctl list-units —type target, а для просмотра вообще всех целевых юнитов командой: systemctl list-units —type target —all.

Для изменения цели по умолчанию поможет команда systemctl set-default name.target.

Для изменения текущей цели: systemctl isolate name.target. Команда запустит целевой юнит и все его зависимости и немедленно остановит все остальные.
Выключение и перезагрузка системы
В CentOS 7 systemctl заменяет значительное количество команд управления питанием. Прежние команды сохранены для совместимости, но рекомандуется использовать systemctl:
systemctl halt – останавливает систему
systemctl poweroff – выключает систему
systemctl reboot – перезагружает систему
Управление systemd на удаленной машине
Systemd позволяет управлять удаленной машиной по SSH. Для управления используйте команду:
systemctl —host user_name@host_name command, где user_name – имя пользователя, host_name – имя хоста, которым осуществляется удаленное управление, а command – выполняемая команда systemd.
Типичный systemd .service
Этот раздел поможет вам, если вам необходимо быстро сделать поддержку управления сервисом из systemd. Подробная информация о всех параметрах файла .service есть в соответствующем разделе документации по systemd.
[Unit]

Description=Daemon to detect crashing apps

After=syslog.target

 

[Service]

ExecStart=/usr/sbin/abrtd

Type=forking

 

[Install]

WantedBy=multi-user.target
Давайте посмотрим на секцию [Unit]. Она содержит общую информацию о сервисе. Такая секция есть не только в сервис-юнитах, но и в других юнитах (например при управлении устройствами, точками монтирования и т.д.). В нашем примере мы даем описание сервиса и указываем на то, что демон должен быть запущен после Syslog.

В следующей секции [Service] непосредственно содержится информация о нашем сервисе. Используемый параметр ExecStart указывает на исполняемый файл нашего сервиса. В Type мы указываем, как сервис уведомляет systemd об окончании запуска.

Финальная секция [Install] содержит информацию о цели, в которой сервис должен стартовать. В данном случае мы говорим, что сервис должен быть запущен, когда будет активирована цель multi–user.target.

Это минимальный работающий файл сервиса systemd. Написав свой, для тестирования скопируйте его в /etc/systemd/system/имя_сервиса.service. Выполните команды systemctl daemon-reload. Systemd узнает о сервисе и вы сможете его запустить.
Дополнительная информация
Отличное руководство по systemd от RedHat, положенное в основу этой статьи.
Документация по написанию своего сервис-юнита systemd.
«Systemd для администраторов» от разработчика systemd на русском языке.
Заключение
В этой статье мы научились управлять сервисами CentOS 7. Конечно, это далеко не единственная функция systemd и другие ее стороны будут рассмотрены в будущем. Сама ОС практически со времени релиза доступна на классических VPS и облачных VPS от Infobox. Попробуйте systemd прямо сейчас. Эти знания будут полезны в связи с переходом многих дистрибутивов на systemd.

Если вы обнаружили ошибку в статье, автор ее с удовольствием исправит. Пожалуйста напишите в ЛС или на почту о ней.
В случае, если вы не можете оставлять комментарии на Хабре, можно написать их в блоге Сообщества InfoboxCloud или в нашей группе в Facebook.

Успешного использования CentOS 7!

Установка и конфигурация Samba на CentOS 7

Установка и конфигурация Samba на CentOS 7

Автор  Владимир Драч

 

Пятница, 26 Сентябрь 2014 00:00

 

 

Разберёмся, как сконфигурировать samba на CentOS 7 с анонимными и защищёнными samba-серверами. Samba является пакетом программ с открытым исходным кодом, который позволяет уверенно обращаться к файлам и принтерам на ОС, работающих по протоколу SMB/CIFS. Samba находится в свободном доступе, в отличие от других программ SMB/CIFS, и совместим, допускает возможность взаимодействия сетей, включающих сервера под управлением Linux/Unix, так и клиентов, работающими на Windows.

1 Предварительные замечания

В нашем случае установка сервера samba будет производиться на специально установленном сервере CentOS версии 7.0. Также нам понадобится ПК с установленным Windows для проверки доступности samba. В данном случае сервер под CentОS будет иметь имя хоста в виде linux.example.com и 192.168.0.100 в качестве IP-адреса.

Внимание: В Windows домен рабочей станции должен совпадать с доменом в CentOS.

Для проверки значения в Windows введите в командной строке следующее:

net config workstation

В нашем случае домен рабочей станции имеет значение HOME.

Убедитесь, что рабочая группа будет иметь одинаковое имя как под Linux, так и под Windows.

Для того, чтобы сделать доступным компьютер под Windows, необходимо добавить IP-адрес вашего сервера в hosts.

блокнот C:\Windows\System32\drivers\etc\hosts

В нашем случае введем следующее:

[…]

 

192.168.0.100 linux.example.com centos

Затем просто сохраним данное изменение.

2 Анонимный доступ средствами samba

Сначала установим samba с возможностью анонимного доступа. Для установки samba выполните следующую команду:

yum install samba samba-client samba-common

Таким образом вы установите samba актуальной версии.

Для того, чтобы сконфигурировать samba потребуется отредактировать файл /etc/samba/smb.conf, перед редактированием следует сделать резервное копирование оригинального файла /etc/samba/smb.conf.bak

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Открываем для редактирования файл:

mcedit /etc/samba/smb.conf

Вносим изменения:

[global]

 

workgroup = HOME

 

server string = Samba Server %v

 

netbios name = centos

 

security = user

 

map to guest = bad user

 

dns proxy = no

 

#===Share Definitions

 

[Anonymous]

 

path = /samba/anonymous

 

browsable =yes

 

writable = yes

 

guest ok = yes

 

read only = no

Почти всё готово, перезапускаемся:

mkdir -p /samba/anonymous

 

systemctl enable smb.service

 

systemctl enable nmb.service

 

systemctl restart smb.service

 

systemctl restart nmb.service

На данном этапе сетевой экран CentOS 7.0 заблокирует доступ службы samba, чтобы решить эту проблему, выполним следующее:

firewall-cmd —permanent —zone=public —add-service=samba

 

firewall-cmd —reload

Настроить сетевой экран по всем правилам поможет специальная статья.

Теперь вы можете обмениваться файлами Centos 7.0 с windows, для этого в командной строке Win+R необходимо выполнить  \\centos:

Далее в windows откройте папку и попытайтесь создать текстовый документ, но при попытке создания документа появится сообщение об ошибке прав доступа.

Далее необходимо проверить права доступа для общего документа.

ls -l

 

drwxr-xr-x.

2 root root anonymous

Для получения прав доступа для анонимного пользователя введите следующее:

cd /samba

 

chmod -R 755 anonymous/

 

chown -R nobody:nobody anonymous/

 

ls -l anonymous/

 

total 0

 

drwxr-xr-x.

2 nobody nobody anonymous

Далее нам потребуется разрешение selinux для конфигурации samba:

chcon -t samba_share_t anonymous/

Теперь анонимный пользователь может создавать и просматривать cодержимое.

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

ls -l anonymous/

 

total 0

 

-rwxr—r—. 1 nobody nobody 0 anonymous.txt

 

[root samba]#

  1. Защищённый samba-сервер

Создадим группу smbgrp и пользователя dve для доступа к samba-серверу с необходимой аутентификацией:

groupadd smbgrp

 

useradd dve -G smbgrp

 

smbpasswd -a dve

 

[root samba]# smbpasswd -a dve

 

New SMB password:<-вашsambaпароль

 

Retype new SMB password:<—вашsambaпароль

 

Added user dve.

 

[root samba]#

Создадим папку secured в /samba и предоставим соответствующие права доступа:

mkdir -p /samba/secured

 

cd /samba && chmod -R 777 secured/

Теперь нам снова понадобится разрешение Selinux:

cd /samba

 

chcon -t samba_share_t secured/

Снова редактируем файл конфигурации /etc/samba/smb.conf:

[…]

 

[secured]

 

path = /samba/secured

 

valid users = @smbgrp

 

guest ok = no

 

writable = yes

 

browsable = yes

Далее потребуется перезапуск

systemctl restart smb.service

 

systemctl restart nmb.service

Теперь проверяем настройки хитрой командой testparm

[root]# testparm

 

Load smb config files from /etc/samba/smb.conf

 

rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)

 

Processing section «[Anonymous]»

 

Processing section «[secured]»

 

Loaded services file OK.

 

Server role: ROLE_STANDALONE

 

Press enter to see a dump of your service definitions <—нажмитеENTER

 

[global]

 

netbios name = CENTOS

 

server string = Samba Server %v

 

map to guest = Bad User

 

dns proxy = No

 

idmap config * : backend = tdb

 

[Anonymous]

 

path = /samba/anonymous

 

read only = No

 

guest ok = Yes

 

[secured]

 

path = /samba/secured

 

valid users = @smbgrp

 

read only = No

 

[root samba]#

 

browsable = yes.

Вы снова столкнётесь с проблемой прав доступа. Для получения прав доступа пользователя dve выполним:

cd /samba

 

chown -R dve:smbgrp secured//

Теперь пользователь samba имеет права доступа для записи в папку.

Автоматизированная установка Webmin из репозитория

Автоматизированная установка Webmin из репозитория

Что такое Webmin?

Webmin представляет собой веб-интерфейс для администрирования систем Unix. Используя любой современный веб-браузер, вы можете настроить учетные записи пользователей, Apache, DNS, файловый обмен и многое другое. Webmin устраняет необходимость вручную редактировать unix конфигурационные файлы типа: /etc/passwd, и позволяет управлять системой как с консоли, так и удаленно. Просмотрев страницу стандартных модулей, вы получите список всех функций, встроенных в Webmin. Так же просмотрите страницу скриншотов некоторых основных функций.

«установка из RPM» или все-таки «установка из репозитория»

При установке из RPM — «rpm -U webmin-1.470-1.noarch.rpm» вы не сможете обновить Webmin простым yum upgrade. Чтобы обновить при такой инсталляции вам нужно будет перезагрузить и переустановить RPM пакет вручную. Результат — невозможность автоматического обновления.

Когда Webmin установлен из репозитория, установка исправлений и патчей может быть автоматизирована как и другие системные обновления, и управляться при помощи YUM. Кроме того, демон yum-updates предупредит вас об обновлениях и(или) установит их в зависимости от заданных параметров.

Как установить Webmin из репозитория

Стать root-ом.

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

 

(echo «[Webmin]

name=Webmin Distribution Neutral

baseurl=http://download.webmin.com/download/yum

enabled=1″ >/etc/yum.repos.d/webmin.repo

rpm —import http://www.webmin.com/jcameron-key.asc

yum -y install webmin)

 

Нажмите Enter, если команда не выполнится автоматически.

Ok. Репозиторий Webmin и приложение начнут установку.

Готово.

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

Производительность Соус

27 июля 2016 GMT

Дмитрий Попов

К тому же, чтобы быть превосходным открытым исходным кодом приложение для обмена сообщениями, Телеграмма имеет несколько хитрых трюков в рукаве. Это включает в себя поддержку ботов (или счетов , управляемых программным обеспечением) , которые могут быть поставлены в различных практических применений. В телеграмме-sendtool, например, использует бот Push — уведомления и файлы с машины Linux для телеграмм. Для того, чтобы установить телеграмму отправить на Ubuntu, выполните следующие команды:

sudo apt install python3-pip

sudo pip3 install telegram-send

После того, как вы сделали это, запустите sudo telegram-send —configure команду, создать новую телеграмму бот, введите свой маркер, и добавьте сгенерированный пароль.

Теперь вы можете нажать сообщения и файлы с вашего компьютера Linux в телеграмме. Для отправки сообщения, используйте telegram-send «O Hai World» команду. Отправка файлов одинаково легко: telegram-send —file monkey.jpg . телеграмма-отправки удобно интегрируется с браузером по умолчанию, так что вы можете отправить файл , щелкнув правой кнопкой мыши по нему и выбрав Телеграмма из Передать в контекстное меню.

ДАЛЬШЕ ОТ МЕНЯ

Сначала настраиваем безпарольный доступ (по сертификату)

Например по статье

SSH без пароля или аутентификация с использованием шифрованных ключей

 

Потом на удаленной машине даем право в sudoers на конкретный файл /usr/sbin/asterisk

 

User_Alias REMOTE_USER = serdag

serdag   ALL=/usr/sbin/asterisk    NOPASSWD: ALL

 

Вот мои скрипты на локальной машине:

#! /bin/bash
logfile=’/var/log/asterisk.log’
perc=`ssh serdag@192.168.0.5 ‘/usr/sbin/asterisk -rx «sip show peers»‘ | awk ‘ /online/ {print $5}’`
msg=’Telephons_online’
telegram-send $msg $perc
echo $msg $perc >> $logfile
perc=`ssh serdag@192.168.0.5 ‘/usr/sbin/asterisk -rx «sip show registry»‘ | awk ‘ /registrations/ {print $1}’`
msg=’Line_registered’
telegram-send $msg $perc
echo $msg $perc >> $logfile

Создаем задание в cron

echo «* 8 * * 1-5 /home/serdag/.bin/telegram_send» >> /var/spool/cron/serdag

ВСЕ!!!