sudo apt-get install mariadb-server
#sudo apt-get install apache2 libapache2-mod-php
sudo apt-get install php php-mysql php-ldap php-curl php-xml
sudo apt-get install memcached php-memcached
sudo apt-get install nginx php-fpm
Only when using Kerberos:
sudo apt-get install ldap-utils libsasl2-modules-gssapi-mit libsasl2-2 gss-ntlmssp krb5 krb5-clients krb5-user
#sudo apt-get install libapache2-mod-auth-kerb libapache2-mod-auth-gssapi
If you want to use pretty links, then mod_rewrite
is required.
By default, the .htaccess file is not enabled. Enable it in Apache config (AllowOverride All
):
<Directory /var/www/html/websco>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Next, you need to run the script http://localhost/websco/install.php through the browser and fill in the parameters.
Pros over the standard console:
Minuses:
To improve the responsiveness of the console, lists of folders, runbooks and their parameters are loaded into the local database. And to reduce the number of LDAP requests when checking access rights, you can use memcached.
Access to runbooks is regulated less conveniently by folders, but also through AD groups. When configuring, you need to specify the DN of the groups. There is no inheritance, but it is possible to copy the rights to all subfolders.
In order to hide the service account password in the config, you can configure Kerberos authentication using the keytab file.
In order for the fields to be displayed as a drop-down list, check-box or calendar for entering a date, you need to add flags to the field names to the end after / slash:
You can also use * (asterisk) before the slash to indicate a required parameter.
For a list and check-boxes, in addition, before the slash in brackets, you need to list the parameters separated by commas. For example:
This field will turn into a drop-down list with two values admin and guest and will be required.
In this case, two HTTP and HTTPS checkboxes will be displayed, and at least one must be checked. The flag r is specified (analogous to the asterisk from the example above). The selected HTTP will correspond to set bit 1, and HTTPS, respectively, to bit 2. Check-boxes will be difficult to reproduce in the standard console if, for some reason, you have to run the runbook from it.
After completing the configuration, you need to load the list of runbooks into the database by running Sync. And download every time after adding new and changing existing runbooks (do not forget about the Orchestrator glitch, when the user does not immediately see the new runbook and needs to clear the cache). Loading Jobs is not necessary and takes a long time (I have ~ 20,000 jobs loaded for about 30 minutes), if they have already started, then you need to wait for the download to finish without interrupting or restarting it.
Local users are administrators and have access to all sections, can run all runbooks and manage access rights.
Domain users who have access to the Root level with Execute rights are administrators of access rights.
Local Administrators and Users with access to Root Level with Execute rights see hidden folders.
Плюсы по сравнению со стандартной консолью:
Минусы:
Для повышения отзывчивости консоли, списки папок, ранбуков и их параметров загружаются в локальную БД. А для уменьшения количества LDAP запросов при проверке прав доступа можно подключить memcached.
Доступ к ранбукам регулируется менее удобно по папкам, но так же через группы AD. При настройке нужно указывать DN групп. Нет наследования, но есть возможность скопировать права на все вложенные папки.
Чтобы не “светить” пароль от сервисной учетной записи в конфиге, можете настроить аутентификацию по Kerberos с использованием keytab файла.
Для того, чтобы поля отображались как выпадающий список, чек-бокс или календарь для ввода даты, к названиям полей в конце через / слэш нужно добавить ключи:
Еще можно использовать * (звёздочку) перед слэшем для обозначения обязательного параметра.
Для списка и чек-боксов дополнительно перед слэшем в скобках нужно перечислить параметры через запятую. Например:
Такое поле превратится в выпадающий список с двумя значениями admin и guest и будет обязательным для заполнения.
В данном случае будет отображено два чек-бокса HTTP и HTTPS и хотя бы один должен будет отмечен т.к. указан флаг r (аналог звездочки из примера выше). Выбранный HTTP будет соответствовать взведенному биту 1, а HTTPS соответственно биту 2. Чек-боксы будет сложно воспроизвести в стандартной консоли, если по каким-либо причинам придется запускать ранбук из неё.
После завершения настройки нужно загрузить список ранбуков в БД выполнив Sync. И выполнять загрузку каждый раз после добавления новых и изменения существующих ранбуков (не забываем про глюк Оркестратора, когда пользователь не сразу видит новый ранбук и нужно очищать кэш). Загрузка Job’ов не обязательна и занимает продолжительное время (~20 000 джобов загружаются около 30 минут), если уж запустили, то надо дождаться окончания загрузки не прерывая и не перезапуская её.
Локальные пользователи являются администраторами и имеют доступ во все разделы, могут запускать все ранбуки и управлять правами доступа.
Пользователи домена имеющие доступ к Корневому уровню с правами Выполнения являются администраторами прав доступ.
Локальные администраторы и пользователи имеющие доступ к Корневому уровню с правами Выполнения видят скрытые папки.
Bit flags
in table runbooks
Bits | Name | Description |
---|---|---|
0x0001 | RBF_DELETED | Deleted |
0x0002 | RBF_HIDED | Hide from list |
0x0004 | RBF_TYPE_CUSTOM | Custom script |
Clearing Kerberos authorization tickets after adding a WebSCO service account to an AD group:
kdestroy -A -c /tmp/krb5cc_<user_id>
Sometime required clear AuthorizationCache after creating new Runbook:
USE Orchestrator
TRUNCATE TABLE [Microsoft.SystemCenter.Orchestrator.Internal].AuthorizationCache
Query all ACL:
SELECT
f.`id`,
f.`name`,
a.`dn`,
HEX(a.`allow_bits`)
FROM w_access AS a
LEFT JOIN w_runbooks_folders AS f
ON f.`id` = a.`oid`
ORDER BY
a.`dn`,
f.`name`
;
Clear logs:
TRUNCATE w_logs;
Clear jobs:
TRUNCATE w_runbooks_jobs;
TRUNCATE w_runbooks_jobs_params;
Add custom script:
INSERT INTO w_runbooks (`folder_id`, `guid`, `name`, `description`, `flags`)
VALUES (50, 'myscript', 'My custom script', 'This is just a script', 0x0004);
where 50
- is a folder ID
myscript
- is a directory name in a custom
folder (custom/myscript/main.php
)
Jobs run history:
SELECT *
FROM websco.w_logs AS l
LEFT JOIN websco.w_users AS u
ON u.id = l.uid
WHERE l.operation LIKE 'Run:%'
ORDER BY l.`date` DESC;
Top runbooks:
SELECT r.`name`, COUNT(rj.`id`) AS `run_count`
FROM websco.w_runbooks AS r
LEFT JOIN websco.w_runbooks_jobs AS rj
ON rj.`pid` = r.`id`
GROUP BY r.`id`
ORDER BY `run_count` DESC;
Top users:
SELECT u.`login`, COUNT(l.`id`) `run_count`
FROM websco.w_users AS u
LEFT JOIN websco.w_logs AS l
ON l.uid = u.id AND l.operation LIKE 'Run:%'
GROUP BY u.`id`
ORDER BY `run_count` DESC;
Example Apache config:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html/websco>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/websco.cer
SSLCertificateKeyFile /etc/ssl/private/websco.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Example Nginx config:
location /websco/ {
index index.php index.html index.htm;
if (!-e $request_filename){
rewrite ^/websco/(.*)$ /websco/websco.php?path=$1 last;
}
}
Convert PFX certificate:
openssl pkcs12 -in websco.pfx -clcerts -nokeys -out /etc/ssl/certs/websco.cer
openssl pkcs12 -in websco.pfx -nocerts -nodes -out /etc/ssl/private/websco.key
Generate self-signed certificate:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/websco.key -out /etc/ssl/certs/websco.cer
What’s the Maximum Size of Parameters?
Increase IIS request limit (HTTP error 413): system.webServer/serverRuntime/uploadReadAheadSize = 10485760
C:\Program Files (x86)\Microsoft System Center\Orchestrator\Web Service\web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<httpRuntime maxRequestLength="10485760" />
</system.web>
<location path="Orchestrator2012">
<system.web>
<httpRuntime maxRequestLength="10485760" />
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" />
</system.webServer>
</location>
</configuration>
C:\Program Files (x86)\Microsoft System Center\Orchestrator\Web Service\Orchestrator2012\web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<httpRuntime maxRequestLength="10485760" maxQueryStringLength="5000" />
...
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding
maxReceivedMessageSize="10485760" >
</binding>
</webHttpBinding>
</bindings>
...
</system.serviceModel>
...
In version 2016 and below of SC Orchestrartor: Runbooks are executed in 32bit environment and with Powershell Version 2.0 per default. You can force to use the latest Version in registry with with OnlyUseLatestCLR in path HKLM\SOFTWARE\Wow6432Node\Microsoft.NETFramework.
reg add "HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework" /f /v OnlyUseLatestCLR /t REG_DWORD /d 1
Apache config example
Nginx config example
Backup script example
logrotate config example
crontab config example
inc.config.php and krb5.conf example
Best Practice Template
Runbook template