2

У меня есть скрипт, в котором я использовал runas /savecred . Первый раз он спросил у меня пароль. Позже он не спрашивал меня, и он работал нормально. Но если другой пользователь входит в систему на том же сервере и запускает тот же скрипт, он просит его ввести пароль.

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

Я проверил Пуск> Выполнить> control userpasswords2> Дополнительно> Управление паролями. Это показывает сохраненное имя пользователя, только когда я вошел в систему. Как мы можем хранить одно и то же имя пользователя и пароль для всех на одном компьютере?

5 ответов5

10

Краткий ответ: НЕ ДЕЛАЙТЕ ЭТОГО. Вы только собираетесь открыть свою систему ОГРОМНО, и я имею в виду ОГРОМНУЮ уязвимость системы безопасности: как только вы /savecred, вы сохраняете пароль администратора в профиле пользователей, НЕОБХОДИМО, чтобы они могли использовать его в любое время, в любом случае им нравится. Это означает, что после сохранения они могут запустить окно консоли (приглашение CMD), ввести « runas /savecred /user: administrator cmd.exe » и немедленно запустить новую командную консоль с полными правами администратора, чтобы делать все, что они захотят. Вы, вероятно, не хотите, чтобы они могли это сделать!

Я думаю, что вы действительно хотите, чтобы любой пользователь мог запускать определенную команду, не запрашивая повышенные (администраторские) разрешения и не вводя пароль администратора. Для этого в современных операционных системах Microsoft (tm) Windows есть безопасное и работающее решение: настройте программу на запуск по расписанию с конкретными правами доступа, которые необходимы программе. Вы можете создать учетную запись пользователя специально для этой программы, или вы можете просто использовать учетные данные администратора / системы для этой и только для этой программы. Вот как..

Во-первых, вам нужно настроить запланированное задание, как и любое другое запланированное задание. Вы должны назначить ей определенную командную строку (поэтому, если вам нужно передать параметры задаче, вам придется использовать скриптовые или пакетные файлы, чтобы создать "файл параметров" для передачи параметров в программу, или использовать другой метод сделать это .. Это решение не идеально!). Затем вы можете назначить ему все необходимые вам права безопасности. Назовите это как-нибудь подходящее - и избегайте использования пробелов в имени, чтобы сделать его простым; Мы собираемся использовать это имя для запуска программы, когда ваш пользователь должен ее запустить. Кроме того, не планируйте фактическое время для запуска задачи, так как мы будем вызывать ее для запуска по требованию через мгновение, а не всегда в определенное время.

Как только задача будет создана, следующий вопрос будет «Как мне ее запустить ?«Ну, вы либо создаете ярлык, либо файл пакета / сценария, который будет вызывать запланированное задание для запуска:« schtasks / run / tn name-you-дали-the-task-выше ». Таким образом, если вы создали задачу с именем "AutoAddLocalPrinters" (например, обычную задачу администратора), вы должны создать командный файл или ярлык для запуска команды « schtasks / run / tn AutoAddLocalPrinters » (если вы назвали ее чем-то с помощью пробелы, вы должны будете поместить все имя в кавычки - вот почему я избегаю пробелов в именах).

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

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

Наконец, еще одно преимущество (или недостаток ...) в том, чтобы делать это таким образом: он работает практически во всех выпусках Windows, где вы можете планировать задачи и запускать команду "schtasks". Например, я понимаю, что выпуски Windows Home в любом случае игнорируют параметр /savecred "runas", поэтому вам всегда нужно будет указывать пароль. Запланированное задание будет выполняться с учетными данными, с которыми вы его настроили, даже в домашних выпусках.

Сноска. Я упоминаю об этом, потому что обычно удаляю много путей к программам из системной переменной PATH и добавляю «C:\sys\admin; C:\sys\bat; C:\sys\bin» к системному пути. Затем в папках «C:\sys *» (очевидно, вам нужно их создать), я создаю отдельные пакетные / сценарии / ярлыки, которые вызывают реальные программы или запланированные задачи. Таким образом, я полностью контролирую, кому, что, когда, где и как разрешено / запрещено запускать различные программы. Это также помогает предотвратить глупые ошибки. Одна ошибка, с которой я действительно столкнулся, была, когда один из моих конечных пользователей пытался преобразовать файл и выполнил команду "convert", не зная, что они делали. Поскольку в Windows уже есть команда convert, которая преобразует FAT в NTFS, все, что им удалось сделать, - это преобразовать свою файловую систему. Им повезло, и это все еще работало, так как их компьютеру было все равно, была ли файловая система FAT или NTFS. Но теперь у меня всегда есть файл C:\sys\bat\convert.bat, который шлепает их по руке и говорит им поговорить со мной, прежде чем пытаться выполнить эту команду. ;-) Я делаю то же самое со многими другими потенциально опасными или опытными командами, которые могут серьезно вызвать проблемы при неправильном использовании / неправильном наборе.

Удачи!

1

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

1

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

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

Единственный способ, который я нашел для своих целей, - это создать небольшую vb-программу, которая запускает команду runas (без параметра /savecred), а затем отправляет пароль в окно Dos через Windows API SendMessage.

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

Затем я просто запускаю эту программу, когда она мне нужна (в моем случае при входе в систему).

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

Декларация:

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal 
lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetSystemDirectory Lib "kernel32" Alias 
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As 
Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" 
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As 
Any) As Long

Private Const WM_CHAR = &H102
Private WshShell 

Тело:

' Used in a Subroutine
If Not IsRunning("runas.exe") Then

                        Set WshShell = CreateObject("WScript.Shell")
                        Set WshEnv = WshShell.Environment("Process")

                        rc = WshShell.Run("runas /user:" & sUser & " notepad.exe", 2, False)
                        Sleep 400

           End If
                       SendPass    

Функция isRunning проверяет, есть ли уже активное окно runas:

Private Function IsRunning(ByVal proc As String) As Boolean

Dim oProcs As Object
Set oProcs = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process 
WHERE Name='" & proc & "'")
IsRunning = (oProcs.Count > 0)
Set oProcs = Nothing
End Function    

А функция SendPass отправляет пароль команде runas:

Public Function SendPass()
Dim winHwnd As Long
Dim sSave As String, Ret As Long
Dim intConta As Integer
Dim bytBuffer() As Byte
sSave = Space(255)
Ret = GetSystemDirectory(sSave, 255)

sSave = Left$(sSave, Ret)
winHwnd = FindWindow(vbNullString, sSave & "\runas.exe")

If winHwnd <> 0 Then

    bytBuffer = StrConv(sPass & vbNullChar, vbFromUnicode)


    For intConta = 0 To UBound(bytBuffer, 1) - 2
       Call SendMessage(winHwnd, WM_CHAR, bytBuffer(intConta), ByVal 0&)
    Next intConta
End If
End Function
0

Если вы не против иметь пароль в открытом тексте в скрипте, вы можете использовать

runas /user:DOMAIN\youradminuser C:\somepath\somefile.exe

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

-1

Файл хранится в папке:% appdata%\Microsoft\Credentials. Там будет создан скрытый системный файл, который можно правильно открыть в шестнадцатеричном редакторе для чтения содержимого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .