Windows'ta komut satırını kullanarak bir dizin için kullanıcılara nasıl izin verilir?


Yanıtlar:


420

Vista itibarıyla caclskullanımdan kaldırılmıştır. İşte ilk yardım hatları:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Bunun icaclsyerine kullanmalısınız . John'a D:\testklasör ve tüm alt klasörleri üzerinde tam kontrol sağlamanız için:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

MS belgelerine göre:

  • F = Tam Kontrol
  • CI = Kapsayıcı Devral - Bu işaret, bağımlı kapların bu ACE'yi devralacağını gösterir.
  • OI = Nesne Devral - Bu işaret, bağımlı dosyaların ACE'yi devralacağını gösterir.
  • /T= Varolan dosyalara ve alt klasörlere yinelemeli olarak uygulanır. ( OIve CIyalnızca yeni dosyalara ve alt klasörlere uygulanır). Kredi: @AlexSpence tarafından yapılan yorum.

Belgelerin tamamı için " icacls" parametresini bağımsız değişken olmadan çalıştırabilir veya burada ve burada bulunan Microsoft belgelerine bakabilirsiniz.


4
Felipe: (OI) ve (CI) parametreleri bunu tekrarlıyor
Chris Miller

22
Windows Gezgini kullanıcı arayüzünde izinleri değiştirmeye çalışırken erişim reddedildi. / T bayrağını sonuna eklemek mevcut nesnelerin yerini aldı ve sorunu benim için çözebildi. C:> icacls "D: \ test" / hibe John: (OI) (CI) F / T
Alex Spence

9
@AlexSpence Harika bir nokta! / T izinlerini güncelleştirmek için gerekli olan mevcut dosya ve klasörleri . (OI) ve (CI) yalnızca ileride oluşturulacak dosya ve klasörler için geçerlidir.
Jesse

5
* Nix dünyasından geliyor ve CLI aracılığıyla erişim ve ayar izinleri vermek için 'chown / chmod' için kullanılan bu konu çok yardımcı oldu.
bgarlock

5
Bunu Windows 10'da Powershell'de çalıştırırsanız, "OI tanınmadı" hatası alırsınız. Çözüm: user + perms bağımsız değişkenini tırnak içine alın. Örneğin:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

ICACLS'yi de kullanabilirsiniz.

Vermek için Kullanıcılar grubu Tam Denetim bir klasöre:

>icacls "C:\MyFolder" /grant Users:F

İçin IIS kullanıcılarına Değiştirme izni vermek için C:\MyFolder(IIS'nizin dosyaları belirli bir klasöre R / W yapabilmesi gerekiyorsa):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

ICACLS / yaparsanız ? mevcut tüm seçenekleri görebileceksiniz.


Ve caclsgittiği göz önüne alındığında , icacls kullanmak için daha fazla neden var .
Ian Boyd

2
Tam kontrol eklemek, /grant Users:(OI)(CI)Fkullanılana kadar benim için işe yaramadı
Jan Zahradník

UsersBaşka bir şeyle değiştirmem gerekiyor mu yoksa HAYIR? Göreicacls "C:\MyFolder" /grant Users:F
iori

Geçerli kullanıcı "Kullanıcılar" adlı kullanıcı grubunun bir üyesiyse (Windows 7'de normalde durum budur), bu gruba izin vermek geçerli kullanıcının erişim haklarını etkiler. Başka bir durumda, Users adını geçerli kullanıcının gerçek adıyla değiştirin (örn. John), böylece: / grant John: (OI) (CI) F
Ed999 6:18

24

Bir Komut İstemi açın, ardından şu komutu yürütün:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F Tam Erişim sağlar.

/q /c /t izinleri alt klasörlere uygular.

Not: Bazen "Yönetici Olarak Çalıştır" yardımcı olabilir.


"Yönetici olarak çalıştır" gereklidir, sadece en iyi cevap!
Jeb50

20

caclsKomutu kullan . Buradaki bilgilere bakın .

CACLS dosyaları / e / p {USERNAME}: {PERMISSION}

Nerede,

/ p: Yeni izin ayarla

/ e: İzni düzenleyin ve eski iznini olduğu gibi saklayın.

{USERNAME}: Kullanıcının adı

{İZİN}: İzin şu olabilir:

R - Oku

W - Yaz

C - Değiştir (yazma)

F - Tam kontrol

Örneğin, aşağıdaki komutla Rocky Full (F) denetimi verin (Windows komut istemine yazın):

C:> CACLS dosyaları / e / p rocky: f

Aşağıdaki komutu yazarak tam yardımı okuyun:

C:> cacls /?


Mükemmel cevap! Dikkat edilmesi gereken tek şey, dosyaların izinleri değiştirmek istediğiniz gerçek dosyalar olmasıdır. Belki [files] veya {files} daha iyi bir açıklama olabilir.
Connor Ross

14
Cacls kullanımdan kaldırıldı!
Hardik Thaker

caclskonuyla ilgilidir; hala kullanılabilir Windows 10; Microsoft cmd.exe, Powershell lehine de kullanımdan kaldırılacaktı .

1
@ Chinggis6 "Hala kullanılabilir" olmak, bir şeyin kullanılması veya başkalarının kullanmasını önermesi için iyi bir fikir olduğu anlamına gelmez. Ayrıca, cmd.exeonaylanmadı ve olması muhtemel değil, bu yüzden bu icaclstamamen lehine bir nokta değil , tam tersi.
underscore_d

1
Biliyorum. Kullanmak veya tavsiye etmek için iyi bir fikir olup olmadığını belirtmedim cacls.exe. Ben de cmd.exezaten kullanımdan kaldırılmış olduğunu söylemedim . İnsanların en azından yüksek sürümlerdeki kullanılabilirliğinin yalnızca geriye dönük uyumluluk veya başka herhangi bir sebeple bile farkında olmaları gerektiğini düşünüyorum.

12

Aşağıdaki şekilde deniyorum ve benim için çalışıyor:
1. açık cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Böylece dosyaları kendi erişimim olabilir ve "Sil" atar ve sonra dosyaları ve klasörleri silebilirim.


7

Bozuk İzinler: Bir klasöre ve alt nesnelerine yeniden erişim

Her ne kadar soruya cevap olarak gönderilen cevapların çoğunun bir değeri olsa da, IMHO'nun hiçbiri tam bir çözüm sunmuyor. Aşağıdakiler , bozuk izin ayarlarıyla bir klasörü kilitli tuttuysanız Windows 7 için mükemmel bir çözüm olabilir :

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

İçin , Windows 10 kullanıcı / SID sonra belirtilmelidir /remove:dseçeneği:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Notlar :

  1. Komut belirtilen dizine uygulanır.

  2. Kullanıcının "Herkes" belirtilmesi, mümkün olan her kullanıcıyı içerdiğinden mümkün olan en geniş izni ayarlar .

  3. "/ Remove: d" seçeneği, varolan açık DENY ayarlarını siler, çünkü bunlar açık ALLOW ayarlarını geçersiz kılar: yeni bir ALLOW ayarı oluşturmak için gerekli bir ön hazırlık. Bu genellikle bir önlemdir, çünkü genellikle DENY ayarı yoktur, ancak üzgünümden daha güvenlidir.

  4. "/ Grant" seçeneği, varolan tüm açık ALLOW ayarlarının yerini alan (": r") açık bir izin olan yeni bir ALLOW ayarı oluşturur.

  5. "F" parametresi (yani oluşturulan izin) bunu FULL kontrolüne izin verir.

  6. "/ T" parametresi özyineleme ekler ve bu değişiklikleri belirtilen dizindeki tüm geçerli alt nesnelere (yani dosyalar ve alt klasörler) ve klasörün kendisine uygular .

  7. "(OI)" ve "(CI)" parametreleri de özyineleme ekleyerek bu değişiklikleri daha sonra oluşturulan alt nesnelere uygular.
    .

EK (2019/02/10) -

Windows 10 komut satırı yukarıdaki nazikçe bugün bana önerildi, bu yüzden burada. Test etmek için Windows 10'um yok, ancak varsa lütfen deneyin (ve lütfen aşağıda bir yorum gönderirsiniz ).

Değişiklik sadece ilk adım olarak DENY ayarının kaldırılmasıyla ilgilidir. Herhangi bir DENY ayarı olmayabilir, bu nedenle bu seçenek bir fark yaratmayabilir. Anladığım kadarıyla, Windows 7'de / d: d'den sonra bir kullanıcı belirtmeniz gerekmiyor, ancak bu konuda yanlış olabilirim!

.

EK (2019/11/21) -

Kullanıcı astark , komutun dilden bağımsız olması için Herkesin * S-1-1-0 terimiyle değiştirilmesini önerir . Yalnızca İngilizce Windows yüklemem var, bu yüzden bu teklifi test edemiyorum, ancak makul görünüyor.


EXHERICIT izinleri geçersiz kıldığından, INHERITED izinleri için herhangi bir hüküm gerekmez. Bu nedenle, yeni açık ayarın oluşturulması, var olabilecek tüm ayarları geçersiz kılar (çünkü yeni açık ayar özyinelemeyi içerir).
Ed999

Invalid parameter "/remove:d"
DFSFOT

Windows 7'de icacls.exe'yi çalıştırıyorum (yalnızca çalıştırabilirim) Windows 8 veya 10'da olabilecek herhangi bir değişiklik hakkında yorum yapamıyorum veya test edemiyorum. seçeneği, DENY ayarlarını kaldırmak için etkilidir. YOK reddetme ayarları yoksa kullanımı bir hata mesajıyla sonuçlanabilir, ancak böyle bir ayar yoksa, bunları yine de kaldıramaz.
Ed999

Orijinal yanıtımda (dizin yolu için kaydet) komut satırının tam olarak yeniden üretilmemesi , komutun başarısız olmasına neden olur. Özellikle, cevabımda bulunmayan tırnak işaretleri EKLEMEYİN. / Remove: d seçeneğini tırnak işaretleri içine alırsanız (örneğin), komut elbette başarısız olur.
Ed999

1
@DFSFOT Peki, sempati duyuyorum. Ama Windows 7 kullanıyorum. Tanrı'nın lütfu ile asla Windows 10 kullanmam. Ubuntu'ya göç etmeyi tercih ederim! Ben şüpheli gr muhtemelen tüm haklarını kaldırır, hem İZİN ve (bu bağlamda aracı sadece İZİN ve onu işlemez böylece herhangi bir girdi DENY içinde 'verilmiş' bir olasılığı ile gerçi) girişleri DENY;: O / kaldırmayı oysa / akıtma: d muhtemelen olacaktır , sadece bir giriş değişmeden İZİN bırakarak girişleri DENY çıkarın. Ama elbette emin olamıyorum.
Ed999

5

Bir süre bu mücadele ve sadece bu konuya cevapları birleştirerek (Windows'da 10) benim için çalıştı:
Açık cmd veya PowerShell ve dosyalarla klasörüne gidin 1.
2. takeown / R / F .
3. icacls * / T / hibe dan: F

İyi şanslar!


3

Tek bir komutta çeşitli izinleri birlikte dizmek istiyorsanız, bu sayfada tökezleyen başka biri varsa, bunu kullandım:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Çeşitli izinler için csv dizesini not edin.


Çok teşekkürler. RX & RD için izin ayarlamama yardımcı oldu. İnternette verilen örneklerin çoğunda / F tam izni ile açıklanmıştır, Olmaması gereken durum.
Mani

2

Hesap oluşturmak ve oluşturmak için bir Excel vba komut dosyası ile. Yeni kullanıcılarımıza yöneticilerimizin x hesabını kullanarak araç tarafından oluşturulan klasör ve alt klasörlere tam haklar izni vermem gerekiyordu.

cacls şöyle görünüyordu: cacls \ FileServer \ Users \ Kullanıcı Adı / e / g Etki Alanı \ Kullanıcı Adı: C

Bu kodu Windows 7 ve ötesine taşımam gerekiyordu. Benim çözümüm şu şekilde ortaya çıktı:

icacls \ FileServer \ Users \ Kullanıcı adı / hibe: r Etki Alanı \ Kullanıcı Adı: (OI) (CI) F / t

/ grant: r - Belirtilen kullanıcı erişim haklarını verir. İzinler, daha önce verilen açık izinlerin yerine geçer. Olmadan: r, izinler daha önce verilen açık izinlere eklenir

(OI) (CI) - Bu klasör, alt klasörler ve dosyalar.

F - Tam Erişim

/ t - Dosyaları / dizinleri eşleştirmek için tüm alt klasörlerde gezinin.

Bunun bana verdiği şey, bu sunucuda kullanıcının yalnızca o klasörü görebildiği ve alt klasörler oluşturduğu, dosyaları okuyabildiği ve yazabildiği bir klasördü. Yanı sıra yeni klasörler oluşturun.


1

XCACLS.VBS, ACL bilgilerini değiştirecek / düzenleyecek çok güçlü bir komut dosyasıdır. c: \ windows \ system32 \ cscript.exe xcacls.vbs tüm anahtarları ve seçenekleri döndürür.

Microsoft Destek Sayfasından resmi dağıtım alabilirsiniz


3
Bulunduğunuz yerde bir referans XCACLS.VBSverebilir misiniz?
Jeremy J Starcher

1

Toplu klasör oluşturma ve izin verme bana aşağıdaki powershell betiğini kullanarak çalışır.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

Not: csv dosyasında aynı alan adı kullanıcı adını oluşturmanız gerekir, aksi takdirde izin sorunları alırsınız


0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

2
Bunlar, kullanıcı hesaplarına bağlı izinlerin değil, dosyanın (salt okunur, arşiv, sistem, gizli) öznitelikleridir.
Robin Bennett

0

mükemmel nokta Călin Darie

Ben cacls kullanmak için çok sayıda komut dosyası vardı Ben nasıl icacls için kök bağlama birimlerini değiştirmek için bir komut dosyası bulamadım: d: \ datafolder. Sonunda, geçici bir sürücü olarak birimi bağlar sonra sn uygular aşağıdaki komut dosyası sandık. sonra bağlantısını keser. Root mount güvenliğini güncelleyebilmenin tek yolu bu.

1, klasör bağlama GUID'ini geçici bir dosyaya alır, ardından birimi geçici sürücü X olarak bağlamak için GUID'i okur: sn uygular ve değişiklikleri günlüğe kaydeder, ardından yalnızca X: sürücüsünden birimin bağlantısını keser, böylece bağlı klasör değiştirilmez veya kesilmez. sonra uygulanan sn.

İşte benim komut dosyası örneği:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

0

Ben Yönetici ve bazı komut dizindeki tüm dosya ve alt klasörlerde adımı "Reddet" izni yerleştirilir. icacls "D:\test" /grant John:(OI)(CI)F /TKomutun yürütülmesi işe yaramadı, çünkü "Reddet" i bu listeden adımdan kaldırmadı.

Benim için çalışan tek şey icacls "D:\test" /reset /Tkomutla tüm izinleri sıfırlamak .


Var olabilecek herhangi bir açık DENY ayarını silmek için '' / remove: d '' belirterek reset komutunu kullanmadan sorunun üstesinden gelmek mümkündür - mükemmel çözümüme bakın (yukarıda).
Ed999

-1

Windows 10'da "c:>" ve ">" olmadan çalışma

Örneğin:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "dosya veya klasör yolu" / e / p KullanıcıAdı: F

(ayrıca bu 2502 ve 2503 hatasını düzeltir)

cacls "C: \ Windows \ Temp" / e / p Kullanıcı Adı: F


-5

Benim için işe yarayan buydu:

  1. Erişimin reddedildiği klasörü el ile açın.

  2. Bu klasördeki Yürütülebilir / uygulama dosyasını seçin.

  3. Üzerine sağ tıklayın ve Properties->Compatibility

  4. Şimdi bakın Privilege Levelve kontrol edinRun As Administrator

  5. Tıklayın Change Settings for all users.

Sorun şimdi çözüldü.


Soru, yukarıdaki komut satırı üzerinden yapmaktır. Öneriniz iyi çalışıyor olsa da, yalnızca ayarlanması gereken bir sunucuya terminal erişiminiz (ssh) varsa geçerli değildir, bu nedenle bir cmd komut dosyası kullanmanız gerekecektir
Ivaylo Slavov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.