webForumDet fria alternativet

DOS Prompt

.NETur .NET

36 svar · 1 164 visningar · startad av aleborg · sida 2 av 2

aleborgMedlem sedan jan. 20013 341 inlägg
#21

Den här sätter antingen Read eller Modify rättigheter på mappar/filer

	class FileSecurity
	{
		
		private string strFile,user;
		private bool read,write;
		public string File
		{
			set{strFile=value;}
		}
		public string UserAccount
		{
			set{user=value;}
		}
		public bool ReadAccess
		{
			set
			{
				read=value;
			}
		}
		public bool WriteAccess
		{
			set
			{
					write=value;
			}
		}
		public void SetPermissions()	
		{
			SecurityDescriptor secDesc = SecurityDescriptor.GetFileSecurity (@strFile, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
			Dacl dacl = secDesc.Dacl;
			
			if(write)
				dacl.AddAce (new AceAccessAllowed (new Sid (user), AccessType.GENERIC_EXECUTE | AccessType.GENERIC_READ | AccessType.GENERIC_WRITE | AccessType.DELETE, AceFlags.CONTAINER_INHERIT_ACE | AceFlags.OBJECT_INHERIT_ACE));
			else
				dacl.AddAce (new AceAccessAllowed (new Sid (user), AccessType.GENERIC_READ, AceFlags.CONTAINER_INHERIT_ACE | AceFlags.OBJECT_INHERIT_ACE));

			secDesc.SetDacl(dacl);
			secDesc.SetFileSecurity(@strFile, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
		}
	}

Låt mig veta om du gör förbättringar!

nikoMedlem sedan juni 20022 599 inlägg
#22

Visst. Just nu har jag inga planer på det, men det är bra att veta hur det kan se ut ifall det dyker upp. Tack för koden.

aleborgMedlem sedan jan. 20013 341 inlägg
#23

Tillbaka till DOS-prompten...
Självklart har MS sett till att Frontpage endast kan installeras via en liten exe-fil, så nu måste jag använda DOS-prompt ändå!
Hur ska CreateProcess eller ShellExecute användas?

Sökvägen till katalogen där filen ligger:
exe = @"C:\Program Files\Common Files\Microsoft Shared\web server extensions\50\bin\";
Kommandot som ska köras via cmd:
fp = "owsadm -o install -t msiis -p 80 -m "+website+" -u "+username;

nikoMedlem sedan juni 20022 599 inlägg
#24

Direkt plankat från länken i inlägg 4 utan att veta nåt om hur owsadm fukar:

System.Diagnostics.ProcessStartInfo startinfo;
System.Diagnostics.Process process = null;
string stdoutline;
System.IO.StreamReader     stdoutreader;
            
try
{
	startinfo = new System.Diagnostics.ProcessStartInfo();
	startinfo.FileName = @"C:\Program Files\Common Files\Microsoft Shared\web server extensions\50\bin\owsadm.exe";  
	startinfo.Arguments = "-o install -t msiis -p 80 -m "+website+" -u "+username;
	startinfo.UseShellExecute = false;   
	startinfo.RedirectStandardOutput = true;
	startinfo.CreateNoWindow = true;
	process = System.Diagnostics.Process.Start(startinfo);
	stdoutreader = process.StandardOutput;
	System.Text.StringBuilder stdoudtotal = new System.Text.StringBuilder("");
	while((stdoutline=stdoutreader.ReadLine())!= null)
	{
		stdoudtotal.Append( "> " + stdoutline.ToString() + "\n" );
	}
	stdoutreader.Close();
	stdoutreader = null;
	if ( process.ExitCode == 0 )
	{
		//Allt verkar gått bra? Visa outputen från programmet.
		System.Windows.Forms.MessageBox.Show(stdoudtotal.ToString());
	}
	else
	{
		//Nåt verkar gått fel? Visa outputen från programmet.
		System.Windows.Forms.MessageBox.Show(stdoudtotal.ToString());
	}
}
catch(System.Exception exc)
{
	//Gör nåt smart här.
}

finally
{
	if (process != null)
	{
		process.Close();
	}
	process = null;
	startinfo = null;
}
aleborgMedlem sedan jan. 20013 341 inlägg
#25

Error: You have to be a machine admin to perform this operation.

Kan man på nått sätt beordra att det ska köras under adminkontot?

nikoMedlem sedan juni 20022 599 inlägg
#26

Kan man på nått sätt beordra att det ska köras under adminkontot?

Ja, det kan man. I Win32 skuller man kanske lägga LogonUser och ImpersonateLoggedOnUser före anropet och RevertToSelf direkt efter. I .NET kan man säkert göra samma sak via Interop, antar jag.

Det verkar finnas andra sätt också: http://www.codeproject.com/csharp/cpimpersonation1.asp

aleborgMedlem sedan jan. 20013 341 inlägg
#27

Det jag tyckert är lustigt att det går att köra exakt samma sak från ASP utan att detta fel dyker upp
http://www.nthelp.org/forum/topic.asp?TOPIC_ID=101

nikoMedlem sedan juni 20022 599 inlägg
#28

Jo, att det skulle funka under IUSR-kontot (om du använder det som Anonymous) låter ju lite märkligt. Men det är inte så att du egentligen exekverar koden som Administrator därför att du alltid surfar med IE via Local Intranet Zone? IE loggar ju automatiskt på (som default) i den zonen.

renholmMedlem sedan apr. 20012 266 inlägg
#29

Kan du inte använda någon form av Persmissions, är inte hundra på det men titta under System.Security.Permissions

aleborgMedlem sedan jan. 20013 341 inlägg
#30

Jag har satt Administratörskonto som anonymt konto på den här webbplatsen för tillfället samt att DLL:en som skapas av min kod har full trust

nikoMedlem sedan juni 20022 599 inlägg
#31

Som en lösning? Eller menar du att problemet kvarstår trots det? Isåf: Vilken rad är det som ger felet? Eller är det outputen från owsadm som lyder "You have to be a machine admin to perform this operation."?

aleborgMedlem sedan jan. 20013 341 inlägg
#32

Det är outputen som ger det trots allt!

nikoMedlem sedan juni 20022 599 inlägg
#33

Det är outputen som ger det trots allt!

Jaha? Ja isåf låter det ju som om sidan inte alls exekverar som Administrator trots allt? Vad får du för resultat om du printar ut:

System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()

Det är inte så att det står DATOR\ASPNET?

aleborgMedlem sedan jan. 20013 341 inlägg
#34

Adminstatörskontot skriver den ut, ASPNET kontot finns inte på win2003, det funkar som med gamla ASP, alla kan köra det!

nikoMedlem sedan juni 20022 599 inlägg
#35

I så fall har jag ingen förklaring alls, tyvärr. (Kan för lite om ASP.NET och win2003.)

Du kunde ju prova att köra kodsnutten i en vanlig .NET-exe. Fungerar det då så är ju problemet knutet till IIS.en.

renholmMedlem sedan apr. 20012 266 inlägg
#36

På Windows Server 2003 körs ASPNET processerna under NT AUTHORITY\NETWORK SERVICE som default. Kan du inte försöka köra Impersonate på administratörskontot? Man kan ställa in sådant i web.config samt troligen under System.Security.Principal.WindowsIdentity.Impersonate(System.IntPtr);

aleborgMedlem sedan jan. 20013 341 inlägg
#37

Försöker använde detta för att ta bort en användares rättigheter från en mapp:

	string filename = @strFile; 
	SecurityDescriptor secDesc = SecurityDescriptor.GetFileSecurity(filename, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION); 
                  
	using(secDesc) 
	{ 
		int foo = 0; 
		foreach (Ace ace in secDesc.Dacl) 
		{ 
			if(ace.Sid.CanonicalName.ToString().ToLower() == user.ToLower()) 
		{ 
						//secDesc.Dacl.RemoveAces(ace.Sid); 
	secDesc.Dacl.RemoveAces(secDesc.Dacl.GetAce(foo).Sid); 
	secDesc.SetFileSecurity(filename,SECURITY_INFORMATION.DACL_SECURITY_INFORMATION); 
	} 
	foo++; 
} 
}

men absolut inget händer, vad kan jag tänkas göra fel?

139 ms totalt · 3 externa anrop · v20260731065814-full.c74b5be1
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)