Programm als anderer User starten mit gleichem Passwort
Hallo,
ich bin angemeldet als UserA und möchte ein Programm (z.B. cmd.exe) starten als UserB.
Geht so:
Jetzt werde ich nach dem Passwort gefragt und cmd startet.
Ich möchte das ganze aber ohne Passwortabfrage. Die Passwörter der beiden User sind gleich.
Gibt's da irgendeine Möglichkeit? Mit runas wohl eher nicht, aber evtl. andere Tools?
Also, ich möchte nicht irgendwo ein Passwort hinterlegen oder fest eintragen, sondern es soll einfach das Passwort von UserA verwendet werden. Da die Passwörter gleich sind, passt das immer für UserB.
Danke
Gruß
Martin
ich bin angemeldet als UserA und möchte ein Programm (z.B. cmd.exe) starten als UserB.
Geht so:
runas /user:MyDomain\UserB cmd.exe
Ich möchte das ganze aber ohne Passwortabfrage. Die Passwörter der beiden User sind gleich.
Gibt's da irgendeine Möglichkeit? Mit runas wohl eher nicht, aber evtl. andere Tools?
Also, ich möchte nicht irgendwo ein Passwort hinterlegen oder fest eintragen, sondern es soll einfach das Passwort von UserA verwendet werden. Da die Passwörter gleich sind, passt das immer für UserB.
Danke
Gruß
Martin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4735406268
Url: https://administrator.de/forum/programm-als-anderer-user-starten-mit-gleichem-passwort-4735406268.html
Ausgedruckt am: 26.12.2024 um 20:12 Uhr
10 Kommentare
Neuester Kommentar
Warum möchtest Du zwei verschiedene Nutzer dafür? Da das Kennwort absichtlich gleich ist, kann "Sicherheit" doch nicht der Grund sein, oder?
Ich würde meinen Ansatz dafür empfehlen: Tipp zur Nutzung von Zweitaccounts unter Windows - so eine PIN einzugeben kostet dich lediglich 2 Sekunden.
Das allerdings programmatisch zu tun (wie Dein runas-Befehl es tut), ist etwas aufwendiger. Hier ein Powershell Skript:
Ich würde meinen Ansatz dafür empfehlen: Tipp zur Nutzung von Zweitaccounts unter Windows - so eine PIN einzugeben kostet dich lediglich 2 Sekunden.
Das allerdings programmatisch zu tun (wie Dein runas-Befehl es tut), ist etwas aufwendiger. Hier ein Powershell Skript:
Function Get-SmartCardCred{
<#
.SYNOPSIS
Get certificate credentials from the user's certificate store.
.DESCRIPTION
Returns a PSCredential object of the user's selected certificate.
.EXAMPLE
Get-SmartCardCred
UserName Password
-------- --------
@@BVkEYkWiqJgd2d9xz3-5BiHs1cAN System.Security.SecureString
.EXAMPLE
$Cred = Get-SmartCardCred
.OUTPUTS
[System.Management.Automation.PSCredential]
.NOTES
Author: Joshua Chase
Last Modified: 01 August 2018
C# code used from https://github.com/bongiovimatthew-microsoft/pscredentialWithCert
#>
[cmdletbinding()]
param()
$SmartCardCode = @"
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using System;
using System.Management.Automation;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Cryptography.X509Certificates;
namespace SmartCardLogon{
static class NativeMethods
{
public enum CRED_MARSHAL_TYPE
{
CertCredential = 1,
UsernameTargetCredential
}
[StructLayout(LayoutKind.Sequential)]
internal struct CERT_CREDENTIAL_INFO
{
public uint cbSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte rgbHashOfCert;
}
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool CredMarshalCredential(
CRED_MARSHAL_TYPE CredType,
IntPtr Credential,
out IntPtr MarshaledCredential
);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool CredFree([In] IntPtr buffer);
}
public class Certificate
{
public static PSCredential MarshalFlow(string thumbprint, SecureString pin)
{
//
// Set up the data struct
//
NativeMethods.CERT_CREDENTIAL_INFO certInfo = new NativeMethods.CERT_CREDENTIAL_INFO();
certInfo.cbSize = (uint)Marshal.SizeOf(typeof(NativeMethods.CERT_CREDENTIAL_INFO));
//
// Locate the certificate in the certificate store
//
X509Certificate2 certCredential = new X509Certificate2();
X509Store userMyStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
userMyStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certsReturned = userMyStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
userMyStore.Close();
if (certsReturned.Count == 0)
{
throw new Exception("Unable to find the specified certificate.");
}
//
// Marshal the certificate
//
certCredential = certsReturned;
certInfo.rgbHashOfCert = certCredential.GetCertHash();
int size = Marshal.SizeOf(certInfo);
IntPtr pCertInfo = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(certInfo, pCertInfo, false);
IntPtr marshaledCredential = IntPtr.Zero;
bool result = NativeMethods.CredMarshalCredential(NativeMethods.CRED_MARSHAL_TYPE.CertCredential, pCertInfo, out marshaledCredential);
string certBlobForUsername = null;
PSCredential psCreds = null;
if (result)
{
certBlobForUsername = Marshal.PtrToStringUni(marshaledCredential);
psCreds = new PSCredential(certBlobForUsername, pin);
}
Marshal.FreeHGlobal(pCertInfo);
if (marshaledCredential != IntPtr.Zero)
{
NativeMethods.CredFree(marshaledCredential);
}
return psCreds;
}
}
}
"@
Add-Type -TypeDefinition $SmartCardCode -Language CSharp
Add-Type -AssemblyName System.Security
$ValidCerts = [System.Security.Cryptography.X509Certificates.X509Certificate2[]](Get-ChildItem 'Cert:\CurrentUser\My')
$Cert = [System.Security.Cryptography.X509Certificates.X509Certificate2UI]::SelectFromCollection($ValidCerts, 'Choose a certificate', 'Choose a certificate', 0)
$Pin = Read-Host "Enter your PIN: " -AsSecureString
Write-Output ([SmartCardLogon.Certificate]::MarshalFlow($Cert.Thumbprint, $Pin))
}
$cred=Get-SmartCardCred
$StartInfo = New-Object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = 'cmd'
$StartInfo.UseShellExecute = $false
$StartInfo.UserName = $Cred.Username
$StartInfo.Password = $Cred.Password
$StartInfo.WorkingDirectory = $env:windir
$StartInfo.LoadUserProfile = $true
$Process = New-Object System.Diagnostics.Process
$Process.StartInfo = $StartInfo
$Process.Start()
$Cred = $null
Moin,
Na der eine ist sein eingeschränkter User und der andere ist der DomAdmin. Sach bloß Du hast da verschiedene Passwörters für? *eg*
Liebe Grüße
Erik
Zitat von @DerWoWusste:
Warum möchtest Du zwei verschiedene Nutzer dafür? Da das Kennwort absichtlich gleich ist, kann "Sicherheit" doch nicht der Grund sein, oder?
Warum möchtest Du zwei verschiedene Nutzer dafür? Da das Kennwort absichtlich gleich ist, kann "Sicherheit" doch nicht der Grund sein, oder?
Na der eine ist sein eingeschränkter User und der andere ist der DomAdmin. Sach bloß Du hast da verschiedene Passwörters für? *eg*
Liebe Grüße
Erik
Dann speicher doch das Kennwort!
Kann man auch mit PowerShell vorfüllen: https://childebrandt42.wordpress.com/2020/07/07/using-windows-credential ...
Über den Schalter ist es aber einfacher. Dann fragt es nie wieder. Via Script könnte man das auf andere Systeme deployen. Sicherheit ist natürlich bei gleichen Kennwörtern u.ä. fraglich.
Kennwort Pipen geht leider nicht. Siehe hier : https://devblogs.microsoft.com/oldnewthing/20041129-00/?p=37183
Kann man auch mit PowerShell vorfüllen: https://childebrandt42.wordpress.com/2020/07/07/using-windows-credential ...
Über den Schalter ist es aber einfacher. Dann fragt es nie wieder. Via Script könnte man das auf andere Systeme deployen. Sicherheit ist natürlich bei gleichen Kennwörtern u.ä. fraglich.
runas /user:Crusher /savecred cmd.exe
Kennwort Pipen geht leider nicht. Siehe hier : https://devblogs.microsoft.com/oldnewthing/20041129-00/?p=37183
Also, ich möchte nicht irgendwo ein Passwort hinterlegen oder fest eintragen, sondern es soll einfach das Passwort von UserA verwendet werden. Da die Passwörter gleich sind, passt das immer für UserB.
Dazu fällt mir noch dies hier ein. Aber das kann man sich nciht merken.
So oder so müsste man ja dann das Kennwort reinnehmen. Mehr fällt mir leider nicht ein......
$username = 'tv'
$password = '1234'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process cmd.exe -Credential $credential
@Crusher79
Dieser Savecred-Tipp ist wie immer mit Vorsicht zu genießen, hat doch so ein jeder Prozess, den Nutzer A startet, freien Zugriff auf die Credentials von Nutzer B. Nicht nur cmd.exe.
Dieser Savecred-Tipp ist wie immer mit Vorsicht zu genießen, hat doch so ein jeder Prozess, den Nutzer A startet, freien Zugriff auf die Credentials von Nutzer B. Nicht nur cmd.exe.
@DerWoWusste ja ist schwierig.
Lansweeper hat dafür auf der Device Page anpasspare Menüpunkte. Nutze das für Enter-PSsession. Man kann Creds hinterlegen und dann beliebige Software aufrufen. Aber meist auch nur im admin Kontext.
Pipen ist halt nich vorgesehen. Zwar nervig - aber nicht zu ändern.
Task-Scheduler wäre noch was. Task unter den User ausführen. Hab so mal bei eingeloggten outlook repariert. Exchange PF Verschiebung schlug wegen Searchbox fehl. Kannst du ja mit outlook.exe /parameter rasch beheben. Wenn der Task unter den User läuft passt das.
In seinen Fall hieße dass nur wieder: Er sieht nichts. Da die CMD unter dem andere User Kontext ausfgeführt wird. Je nach dem was er da startenj will, könnte man nur die Ausgabe pipen und umleiten.
Wenn er eh die Kennwörter hat, wäre also ein eingeloggter User kein Problem. Nur wieder das ganze drum herum.
Ob sich das lohnt.... Und sicherheitstechnisch hat man da auch Fragen....
Lansweeper hat dafür auf der Device Page anpasspare Menüpunkte. Nutze das für Enter-PSsession. Man kann Creds hinterlegen und dann beliebige Software aufrufen. Aber meist auch nur im admin Kontext.
Pipen ist halt nich vorgesehen. Zwar nervig - aber nicht zu ändern.
Task-Scheduler wäre noch was. Task unter den User ausführen. Hab so mal bei eingeloggten outlook repariert. Exchange PF Verschiebung schlug wegen Searchbox fehl. Kannst du ja mit outlook.exe /parameter rasch beheben. Wenn der Task unter den User läuft passt das.
In seinen Fall hieße dass nur wieder: Er sieht nichts. Da die CMD unter dem andere User Kontext ausfgeführt wird. Je nach dem was er da startenj will, könnte man nur die Ausgabe pipen und umleiten.
Wenn er eh die Kennwörter hat, wäre also ein eingeloggter User kein Problem. Nur wieder das ganze drum herum.
Ob sich das lohnt.... Und sicherheitstechnisch hat man da auch Fragen....