Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования

Автор: SIAL
Дата сообщения: 02.01.2005 13:19
Есть ли возможность в LogOn скрипте использовать привелегированные права относительно возможностей входящего юзера? Суть: нужно создавать файлы в недоступных для пользователя местах по NTFS правам, но с его именем. Н-р - logon%Username%.log
Автор: AlexSSS
Дата сообщения: 03.01.2005 12:40
> Суть: нужно создавать файлы в недоступных для пользователя местах по NTFS правам
если по сути, то это можно решать следующим образом -
На NTFS делается папка с правом (для пользователя) просмотра каталога, созданием файлов (и папок, если надо), возможность записи в файл, но (!!!) без права чтения файла.
В этом случае пользователь легко создает и записывает данные в файл, но просмотреть файлы не может.

у меня вообще логи с логон скриптов пишутся таким образом
1. На сервере загарен ресурс с полным доступом для всех пользователей, \\server\logs (можешь \\server\logs$)
2. На уровне NTFS стоят все права, за исключением удаления файлов и каталогов и просмотра файлов.
3. В результате логонные скрипты при необходимости создают любые папки и файлы, записывают в них даннын, однако посмотреть логи никто из пользователей не может. Максимум, что он может увидеть, это список папок и файлов.

Можно спрятать и их, но это уже лишняя заморочка
Автор: SIAL
Дата сообщения: 07.01.2005 20:28
Проблема как раз в том что эти файлы создаются программами с которыми приходится работать юзерам. И создаются не там где положено - например в %SystemRoot%! Ну не научились еще программировать и вот приходится бороться. Особенно неприятно когда мобильный юзер логинится в первый раз на другой машинке и идет куча ошибок доступа к диску или rutime окошки тысячами вываливаются на рабочий стол. И ведь не подойдут не скажут... пока раз двадцать не перезагузят систему. Ps:Возможности отказаться от этих программ пока нет.
Автор: AlexSSS
Дата сообщения: 18.01.2005 18:00
SIAL
извиняюсь, не заметил твои пояснения по вопросу.

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

PS. Задачи случайно не на фоксе/dbase?

Добавлено:
Можно ли как-то скриптами или через интерфейс сменить владельца у файла на произвольного пользователя (его пароль неизвестен, чтобы зайти под ним и take ownership)?
Стандартными способами нельзя. А нестандартными?


Автор: SIAL
Дата сообщения: 19.01.2005 08:33
RunAs имеет свое окружение переменных и сл-но %Username% тоже свой.
Есть возможность в скрипте получить %Username% пользователя для которого и запускается LogOn?
Как понял, запускается LogOn, потом в скрипте идет вызов привелегий пользователя с дополнительными правами, от его имени и производятся манипуляции с файлами??
Автор: AlexSSS
Дата сообщения: 19.01.2005 09:25
через runas запускается прога под другим аккаунтом, естественно и %Username% тоже другой

> запускается LogOn, потом в скрипте идет вызов привелегий пользователя
> с дополнительными правами, от его имени и производятся манипуляции с файлами??
логон не требуется, runas сразу запускает прогу под другим аккаунтом. При этом используется и профайл и окружение другого пользоаптеля.

> Есть возможность в скрипте получить %Username%
> пользователя для которого и запускается LogOn?
в командную строку для запуска через runas можно передать как параметр и %Username% текущего пользователя. Либо, если таких пользователей не очень много, то можно для каждого сделать дублирующую учетною запись, скажем, ivanov2, которая будет иметь все права ivanov+power user


Для решения проблем с запуском старых програм есть несколько решений
1. Доработка программ. Иногда это не такой сложный путь, как это кажеться вначале.
2. Работа пользователя под локальным администратором или power user
3. Прописывание конкретных прав, которые требуются для работы с программой в реестре и NTFS. Т.е. если проге требуется полный доступ в ветку HKLM\Software\SuperFirma\Prog, то эта ветка открывается для полного доступа конкретному пользователю или группе. Если прога требует полный доступ в SystemDrive, то он устанавливается. Это все хоть и снижает безопасность, но все же не так, как в варианте 2.
4. Запуск программы под другой учетной записью.
5. отказ от данной программы
Автор: Jovanotti
Дата сообщения: 19.01.2005 10:01
AlexSSS
Добавлю ...
6. Многие проги могут использовать TEMP директорию
В ХР имеет смысл создать в корне эту папку дать полные права ВСЕМ на неё
ну и конечно подправить переменные TMP и TEMP
Автор: AlexSSS
Дата сообщения: 19.01.2005 12:53
Отвечаю на собственный вопрос
> Можно ли как-то сменить владельца
> у файла на произвольного пользователя
это позволяет сделать утилита Subinacl.exe из Resource Kit
запущенная под доменадмином она позволяет сменить владельца на любого другого
Автор: AlexSSS
Дата сообщения: 03.02.2005 13:55
Как скриптом максимально быстро проверить, доступен ли компьютер?

обращение к зашаренному ресурсу недоступного компьютера приводит к достаточно длительному подвисанию скрипта. Хочется найти вариант, когда недоступность компа определяется максимально быстро
Автор: merlkerry
Дата сообщения: 03.02.2005 14:00
AlexSSS

Цитата:
Как скриптом максимально быстро проверить, доступен ли компьютер?

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

пинг вызвать из Exec
Автор: Jovanotti
Дата сообщения: 03.02.2005 14:32
AlexSSS
Здесь обсуждалось
http://forum.ru-board.com/topic.cgi?forum=8&topic=1908&start=240#10
и в шапке тоже
Автор: AlexSSS
Дата сообщения: 03.02.2005 14:54
>Как скриптом максимально быстро проверить, доступен ли компьютер?
ответ взят из TechNet Script Center

machine = "compname"
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& machine & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("machine " & machine & " is not reachable")
End If
Next
Автор: GaDiNa
Дата сообщения: 03.02.2005 17:31
igor_andreev

Цитата:
@echo off
echo Size of %~nx1 is %~z1
pause

Подскажи - где можно почитать о вснех параметрах типа %~nx1 и %~z1. Как в них разобраться ?
Автор: distance
Дата сообщения: 03.02.2005 19:09
AlexSSS


Цитата:
Как скриптом максимально быстро проверить, доступен ли компьютер?

попробуй так:


Код:
function alive(strComputer)
{
try
{
var refLocator = new ActiveXObject("WbemScripting.SWbemLocator");
var refService = refLocator.ConnectServer(strComputer, "root\\default");
return (true);
}

catch(e)
{
return (false);
}
}
Автор: igor_andreev
Дата сообщения: 03.02.2005 19:50
GaDiNa

Цитата:
Подскажи - где можно почитать о вснех параметрах типа %~nx1

Да тут в интернете и можно.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx
http://www.windowsitpro.com/Article/ArticleID/13443/13443.html
А если сделаешь у себя на рабочем столе ярлык:
%windir%\hh.exe ms-its:%windir%\Help\ntcmds.chm::/ntcmds.htm
то в описании команды for найдешь тоже самое по русски
Ну или просто в командной строке набери: for /?
Автор: Smitis
Дата сообщения: 05.02.2005 00:37
GaDiNa

Цитата:
Подскажи - где можно почитать о вснех параметрах типа %~nx1 и %~z1. Как в них разобраться ?

В файловом архиве в разделе "операционные системы" есть переделанный из стандартного русский хэлп (с более удобной навигацией). Правда, несколько кривовато скомпиленный
Автор: vworld
Дата сообщения: 09.02.2005 14:59
> например создаем новую учетку в АД, и хотелось бы, чтобы для нового юзера при
> входе в домен все и создавалось, т.е. как мы уже обсуждали - 3 папки (личная, группы, конторы), причем не просто на файл-сервере, но и у юзера тоже они сразу
> подключались....
Мне ответили........
Да, это возможно при помощи логонных скриптов. Более того, можно написать скрипты так, чтобы на какой компьютер пользователь не сел, после входа в систему у него подключались все его ресурсы.
Единственное, что мне не удалось нормально организовать, это чтобы автоматом при этом настроились учетные записи для почты (используются Outlook Express и Outlook без Exchange)
Так вот вопрос....по скриптам....как писать.....точнее просто не знаю тольком вообще ничего про скрипты
Автор: Alxdhere
Дата сообщения: 09.02.2005 15:37
Подскажите пжлс, кто знает, как проще всего в VB скрипте проверить пользователя на обладание привилегий администратора? Т.е. есть имя юзера - с правами админа он или нет?
Автор: Jovanotti
Дата сообщения: 09.02.2005 17:03
Alxdhere
Просто ....
Проверка на содержимое группы Administrators
Автор: AlexSSS
Дата сообщения: 09.02.2005 17:54
> точнее просто не знаю тольком вообще ничего про скрипты
н-да...

Скрипт - это такая программа, которая выполняет какие-то действия ;o)
Логон скрипт - скрипт, который выполняется сразу после идентификации пользователя и входе его в виндовс. В домене очень легко повесить логон скрипт на каждого пользователя через "Active Directory Users and Computers" ("Domain Users and Computers" в NT4 домене). D В этом случае скрипт сработает и на win95 клиентах.
Либо можно повесить логон скрипты через политики. Но тогда клиенты должны быть не ниже win2000.

расмматриваем первый вариант.
Active Directory Users and Computers-->выбираешь конкретного пользователя, напр. себя-->properties-->profile-->logon script
Пишешь туда имя скрипта, напр. LOGON.BAT
Самый простой пример - надо конкретному пользователю при входе в систему подключить зашаренный ресурс. Делаешь файл LOGON.BAT и в него засовываешь пару строк
net use x: /delete
net use x: \\server\resource
На домен контроллере смотришь, какая папка зашарена как Netlogon и забрасываешь туда logon.bat
Если репликация в домене идет нормально, то скоро этот файл появится на всех домен контроллерах.

Теперь, как только пользователь зарегистрируется в домене, у него запустится этот батник и соответственно присоединится диск X.

Это самый простейший пример. даже с помощью BAT файлов можно произвести достаточно много настроек. Более развитые скриптовые языки могут сделать еще больше. Из часто используемых -VBScript, JScript, KIX Script. Кто-то на форуме вообще предлагал писать скрипты на C.

Если хочешь быстро начать писать реально работающие скрипты, я бы посоветовал Kix Script.
Автор: Jovanotti
Дата сообщения: 09.02.2005 18:36
vworld

Цитата:
точнее просто не знаю тольком вообще ничего про скрипты

В шапочке все есть .... (и даже больше )
Потрать пару часов (даже меньше ) что бы вникнуть, а вот потом .....
Окроются врата админовского рая для тебя .....
Я имею в виду что СКРИПТЫ тебе НАСТОЛЬКО облегчат работу,
что сам себе завидовать будешь...

AlexSSS

Цитата:
Кто-то на форуме вообще предлагал писать скрипты на C.

Kibkalo это был .... Парень сам начинал с WSH, затем уровень повысился
и перешел на С, чего и всем желает я думаю.
Автор: AlexSSS
Дата сообщения: 09.02.2005 18:49
> Окроются врата админовского рая для тебя
Для открытия админовского рая лично мне не хватает решения одной задачи ;o)

В 2000-м домене пара сотен пользователей используют для почты Outlook. Версии, начиная от 97-го до 2003-го. Можно ли с помощью скриптов настраивать хотя бы учетные записи для Оутлука, чтобы пользователь получал доступ к своей учетной записи с любого компа?

использовать Exchange только для почты экономически нецелесообразно
использование перемещаемых профилей не подходит из-за большой разницы в софте на разных компьютерах.
Автор: vworld
Дата сообщения: 09.02.2005 19:51
Jovanotti
AlexSSS
просто земной поклон вам, за советы....вот это дельные ответы я называю, когда первую инфу для дальнейшего изучения человек получает от знающих людей, в придачу ссылку на мануалы, ну а дальше в свободное плаванье (пока не утонет)
Кстати Kibkalo в виндовых вещах именно в плане админство не превзайденный гуру
(заочно ему тоже спасибо)
З.Ы. сорри если наоффтопил.....
Автор: Alxdhere
Дата сообщения: 10.02.2005 06:21

Цитата:
Alxdhere
Просто ....
Проверка на содержимое группы Administrators

Я так и делаю, однако если зайти не под локальным админом, а под доменным, то его в группе нет! Там есть только группа Domain Admin
Я предполагаю, что должно быть какое-то аккуратное решение для определения привелегий пользователя без перебора их в группах (локальных и доменных). Типа bool IsAdmin(UserName). Но где ее искать?
Автор: AlexSSS
Дата сообщения: 10.02.2005 09:36
Проверяешь, есть ли пользователь в группе локальных админов и группах, которые входят в группу локальных админов. Использую рекурсию можно проверить любой уровень вложенности.
Можно чуть упростить задачу - просто проверять группы локальных админов и домен
админов, если другие группы в фирме не входят в группу локальных админов.
Можно поискать, какие конкретно права доступны только для админов, напр. запись в конкретные ветки реестра. И просто проверять, можно ли писать в эту ветку или нет. Если получилось - значит админ. И не забыть стереть записанное
Хотя, может быть, есть все же и более красивое решения на VBS.

На KIX все такие проблемы решаются с полпинка
просто членство в группе - InGroup("group")
а для конкретно твоего вопроса - @priv (User's privilege level (GUEST, USER, ADMIN))
Автор: Alxdhere
Дата сообщения: 10.02.2005 10:14
2 AlexSSS
Проверил группы админов локальных и доменных. Мне достаточно. Спасибо за помощь.
Автор: vworld
Дата сообщения: 11.02.2005 15:25
Вот надумал создать вот такой батник
net use f: \\UNC Path (типа папка отдела)
net use g: \\UNC Path (типа папка конторы)
Это в продолжение мой проблемы
теперь вопрос....нормально написал?
И еще один....как подзаменить у юзера папку Мои документы, так чтобы он и не знал об этом, в смысле папка мои документы хранилась на сервере, ну или просто синхронизировалась с папку локальной?
Автор: Alan Mon
Дата сообщения: 11.02.2005 15:46
Вообще-то по хорошему пишут сначала
net use f: /delete
а потом уже
net use f: \\Path
Это на тот случай, если диск F: уже замаплен на какой-то сетевой путь. Тогда вторая команда выдаст ошибку и не сработает.
А насчет папки "Мои документы" проще всего через групповые политики. "Конфигурация пользователя\Перенаправление папки". Хорошо еще включить "Конфигурация пользователя\Административные шаблоны\Рабочий стол\Запретить пользователям менять путь папки "Мои документы". Это все если есть домен.
Если домена нет, то через реестр HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal
Автор: abasov
Дата сообщения: 14.02.2005 07:13
Option Explicit

'Смена пароля с регистрацией факта смены в MSSQL-Server

Const DomainName = "DOMAIN"
Const SQLServerName = "SQL2k"
Const SQLDBName = "AD"
Const UserId = "Vasja"
Const UserPassword = "password"
Const LocalUser = "Administrator"
Const LocalAdminPassword = "password"

Dim WshNetwork
Dim ComputerName
Dim ConnectToSQL

'возвращает True, если пароль менялся ранее
Function IsChangePassword()
Set ConnectToSQL = CreateObject("ADODB.Connection")
ConnectToSQL.Open "Provider=SQLOLEDB.1;" & _
"Password=" & UserPassword & ";" & _
"Persist Security Info=True;" & _
"User ID=" & UserId & ";" & _
"Initial Catalog=" & SQLDBName & ";" & _
"Data Source=" & SQLServerName

Dim cmd
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = "ChangePassword"
cmd.CommandType = 4 'adCmdStoredProc
Set cmd.ActiveConnection = ConnectToSQL

Dim prm
'adVarChar=200, adParamInput=1
Set prm = cmd.CreateParameter("@computer", 200, 1, 20)
cmd.Parameters.Append prm
prm.Value = ComputerName
'adBoolean=11, adParamOutput=2
Set prm = cmd.CreateParameter("@exists", 11, 2)
cmd.Parameters.Append prm
cmd.Execute

IsChangePassword = prm.Value

End Function

'Изменяет пароль первого пользователя в первой локальной группе
'(локальный администратор)
Sub ChangePassword()
Dim comp, grp, usr, objArgs
Set comp = Nothing
Set comp = GetObject("WinNT://" & ComputerName & ",computer")
comp.Filter = Array("Group")
Set usr = Nothing
For Each grp In comp
Exit For
Next
For Each usr In grp.Members
Exit For
Next
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
usr.SetPassword LocalAdminPassword
Else
usr.SetPassword objArgs(0)
End If
usr.SetInfo
End Sub

'точка начала выполнения сценария
Set WshNetwork = CreateObject("WScript.Network")
ComputerName = WshNetwork.ComputerName

On Error Resume Next
If IsChangePassword = False Then ChangePassword

If Err.Number <> 0 Then
Dim cmd
Set cmd = CreateObject("ADODB.Command")
With cmd
Set .ActiveConnection = ConnectToSQL
.CommandText = "INSERT INTO ErrTraccer (ComputerName, ErrNumber, Description) " & _
"VALUES ('" & ComputerName & "'," & Err.Number & ",'" & Err.Description & "')"
.Execute
End With
End IF
Автор: inew
Дата сообщения: 15.02.2005 04:40
Есть сервер Windows 2000 Adv Server, есть клиенты Windows 2000 Prof, всё это в рабочей группе, как организовать смену паролей так, чтоб не пришлось бегать к каждой клиентской тачке и менять локальный пароль.
В общем нужен скрипт меняющий пароли локальных пользователей.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.