[]{lang=“Интро”}
Есть домен CDS, на нем лежат учетки пользователей. Есть терминальный сервер (2k3) с 1С (7.7), который ночью делает всякие регламентные операции с базами. Т.е. вечером всех пользователей выгоняет скриптом и начинает всякие обновления и архивации.
Но - пользователи могут зайти на сервер после отработки скрипта. И зайти в 1с => сорвать проведение работ. Сегодня “очень хорошие” люди зашли на сервер в 5 утра…
В общем помимо администратывных санкций, нужно ввести админские. В свойствах протокола RDP время входа ограничить нельзя. Начиная с NT4 можно ограничить время входа в локальной учетной записи.
[]{lang=“Поехали”}
В Samba за ограничение по времени входа отвечает аттрибут sambaLogonHours. Синтаксис у него простой - там должно быть записано 168 (24*7) бит. Сутки описываются 3 байтами, но порядок бит в байте обратный. Например 1110 0000 1111 1111 0000 1111 - вход разрешен с 8 до 23 часов. ( Нужно учитывать смещение по GMT)
time.php:
<?php
#ini_set( "display_errors", 0);
include 'ldap.php';
#include 'au.php';
//123456789012345678901234
#$at = '000001111111111111110000';
$at = '1111111111111111111111111';
$time = "$at$at$at$at$at$at$at";
function b2h($str) {
$hex = "";
$i = 0;
do {
$bin=substr($str,$i*8,8);
$last = strlen($bin)-1;
for( $j=7; $j>=0; $j=$j-1){
$x += $bin[$last-$j] * pow(2,7-$j);
}
# $x = dechex($x);
$hex=$hex.sprintf('%02X',$x);
# echo $i." bin ".$bin." - ".$hex."\n";
$i=$i+1;
$x="";
} while ($i < strlen($str)/8);
$hex = $hex.strtoupper($x);
return $hex;
}
$sambalogonhour=b2h ($time);
#print $sambalogonhour;
$dn = "uid=testuser,ou=Users,ou=Samba,ou=Services,dc=calculate";
$filter="(uid=*)";
$just_these = array("*");
#$sr=ldap_search($ldapconn, $dn, $filter, $just_these);
$userdata["sambaLogonHours"][0]=$sambalogonhour;
ldap_modify($ldapconn, $dn, $userdata); //change state
?>
cat ldap.php
<?php
$ldaprdn = 'cn=ldapadmin,dc=calculate';
$ldappass = 'сюда Ваш пароль';
$ldapconn = ldap_connect("gw.local")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
if ($ldapbind) {
# echo "LDAP bind ok...";
} else {
# echo "LDAP bind failed...";
exit ();
}
}
$filter="(uid=*)";
$just_these = array("*");
?>
Во вторник если будет время привяжу скелет к свой веб-мордочке редактирования пользователей. Если кому интересно - выложу.