2017-04-09 3 views
-1

Ich habe eine Menge Zeit von der einfachen, intuitiven chmod 400 Übertragung zu versuchen, das Gleiche in der Windows-Eingabeaufforderung mit ICACLS zu tun. Verglichen mit der schnittigen, oktalen Darstellung von UNIX/LINUX chmod scheint ICACLS ein komplexer Albtraum.Verwenden von ICACLS, um die Dateiberechtigung auf "schreibgeschützt" zu setzen

Ich habe einen SSH .pem-Schlüssel, den ich versuche, schreibgeschützt zu machen. Ich möchte die alten Berechtigungen, die es gerade gibt, durch diese neue, schreibgeschützte Berechtigung ersetzen. Die nächstgelegene ich gekommen bin, eine Antwort zu finden, ist die folgende:

ICACLS "D:\Folder A\Another Folder\File Name Here.ext" /GRANT:R "DOMAIN\USERNAME":R
(gefunden hier: https://www.experts-exchange.com/questions/27624477/What-command-can-give-user-read-only-permission.html)

ich glaube, die :R am Ende ermöglicht es mir, die aktuellen Berechtigungen zu ersetzen, die ist was ich will. Aber ich weiß nicht, was ich für das "DOMAIN\USERNAME" Segment setzen soll. Irgendein Rat?

+0

Wenn Sie nicht in einer Domäne sind, dann sollte es keine Grund, nicht nur '% UserName %' oder den gewählten Benutzernamen ohne die Domain \ part anzugeben. – Compo

Antwort

4

Berechtigungen in Unix und Windows funktionieren auf verschiedene Arten. In Windows haben Sie standardmäßig Vererbung und die Berechtigungen sind granularer, weil Sie ACEs (Berechtigungen pro Identität) haben, nicht nur Eigentümer/Gruppe/Andere. Berechtigungen für den Besitzer werden nur bei der Erstellung erteilt. Wenn Sie den Besitzer später ändern, müssen Sie ACEs manuell aktualisieren, bevor der Besitzer die Datei ändern kann.

Aus diesem Grund müssen Sie wissen, wem Sie Berechtigungen erteilen möchten. Wenn Sie dem Benutzer, mit dem Sie angemeldet sind, Leseberechtigung erteilen möchten, können Sie $env:username in PowerShell oder %USERNAME% in cmd verwenden.

Beispiele Powershell:

$path = ".\test.txt" 
#Reset to remove explict permissions 
icacls.exe $path /reset 
#Give current user explicit read-permission 
icacls.exe $path /GRANT:R "$($env:USERNAME):(R)" 
#Disable inheritance and remove inherited permissions 
icacls.exe $path /inheritance:r 

Wenn Sie festlegen wollen, dass es zu chmod 400 gleich, können Sie überprüfen, wer der Eigentümer ist und auf dieses Konto Berechtigungen zuweisen. Seien Sie sich bewusst, dass dies auch eine Gruppe wie Administratoren können sein:

$path = ".\test.txt" 
icacls.exe $path /reset 
icacls.exe $path /GRANT:R "$((Get-Acl -Path .\test.txt).Owner):(R)" 
icacls.exe $path /inheritance:r 

Oder Sie können die integrierten Cmdlets in Powershell verwenden:

$path = ".\test.txt" 

#Get current ACL to file/folder 
$acl = Get-Acl $path 

#Disable inheritance and remove inherited permissions 
$acl.SetAccessRuleProtection($true,$false) 

#Remove all explict ACEs 
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) } 

#Create ACE for owner with read-access. You can replace $acl.Owner with $env:UserName to give permission to current user 
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList $acl.Owner, "Read", "Allow" 
$acl.AddAccessRule($ace) 

#Save ACL to file/folder 
Set-Acl -Path $path -AclObject $acl 
0

Does

attrib +r "D:\Folder A\Another Folder\File Name Here.ext" 

tun, was Sie wollen?

+0

Ich glaube nicht - ich habe gelesen, dass Sie wirklich 'ICACLS' verwenden sollten, um die Dateiberechtigungen und nicht' attrib' zu ändern - und ich glaube nicht, dass das Hinzufügen des Leseattributs die Schreib- und Ausführungsberechtigungen entfernt schon in der Datei. Danke für den Versuch! –

Verwandte Themen