Entwickler-Ecke

Basistechnologien - adminrechte verleihen


Kirschkern_1992 - Do 16.07.09 00:13
Titel: adminrechte verleihen
hi

also ich möchte eine datei nach c:\... kopieren
aber dazu brauche ich adminrechte

ist es möglich, dass ich diese VOR dem kopiervorgang verleihe, und nachher wieder entziehe


ich möchte das programm nicht immer per hand als admin straten...

lg


gfoidl - Do 16.07.09 01:03

Hallo,

keine Ahnung ob es möglich ist. Aber sollte es möglich sein wäre dies wohl ein riesen Sicherheitsloch. Stell dir dann Software vor die sich selbst die Admin-Rechte gibt und ganz böswillige Aktionen ausführt und danach wieder ganz scheinheilig in den "normalen" Benutzerkontext wechselt.

Daher glaube ich dass das nicht möglich sein sollte.


mfG Günther


jaenicke - Do 16.07.09 06:06

Nein, das ist so nicht möglich. Dazu musst du einen zweiten Prozess (oder einen Out-of-process COM-Server in einer DLL) mit Adminrechten starten. Dieser führt das dann durch, gibt dir Bescheid und beendet sich. Und du kannst dann anzeigen, dass es geklappt hat oder so.

Hintergrund: Ein laufender Prozess kann nur beim Start Adminrechte bekommen oder nicht. Danach kann man diese nicht mehr setzen oder entziehen. Gar nicht.


sk197666 - So 04.10.09 03:28

Hallo Leute,

der Beitrag ist zwar schon etwas älter, aber man kann dieses Problem ohne großen Aufwand über einen kleinen Trick lösen - sofern sichergestellt ist, dass sich weder Benutzername noch Kennwort ändern.

Gruß Sk


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
using System;
using System.Security;
using System.Diagnostics;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Prüfen ob Argumente übergeben wurden, bzw. ob es sich um einen
            // "administrativen Start" handelt
            if (args.Length == 0 || args[0] != "/ADMINSTART")
            {
                // Prozessname ermittteln
                string procName = Process.GetCurrentProcess().ProcessName;

                // Benutzername festlegen
                string userName = "Admin_Acc";

                // Passwort festlegen
                SecureString securePassword = new SecureString();

                securePassword.AppendChar('P');
                securePassword.AppendChar('a');
                securePassword.AppendChar('s');
                securePassword.AppendChar('s');
                securePassword.AppendChar('w');
                securePassword.AppendChar('o');
                securePassword.AppendChar('r');
                securePassword.AppendChar('d');

                // Prozess mit Admin-Account starten
                Process.Start(procName, "/ADMINSTART", userName, securePassword, null);

                // Passwortresource freigeben
                securePassword.Dispose();

                // Programm verlassen
                return;
            }

            Console.WriteLine("Anwendung wurde als [{0}] gestartet, bitte Taste druecken ...", Environment.UserName);
            Console.ReadKey();
        }
    }
}


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt