Kullanıcının klasör erişim izinlerini listele


14

Bir etki alanında birden çok klasördeki birden çok alt klasöre erişimi olan bir kullanıcı var. Hakları oldukça ayrıntılı bir şekilde tanımlandı. Şimdi şirketten ayrılıyor, ancak bir firma için sözleşmeli kaynak olarak çalışmaya devam edecek.

Erişime sahip olduğu tüm klasörleri bulup izinlerini iptal etmeliyim, sonra onu farklı bir erişim izinleriyle ayarlamam gerekiyor.

Belirli bir kullanıcı için tüm NTFS izinlerini listeleyen herhangi bir araç (tercihen ücretsiz) var mı? Sysinternals AccessEnum ile denedim, ancak liste kullanıcı adı ile filtrelenemez ve benim için işe yaramaz. Ben de CACLS baktım, ama ben söyleyebildiğim kadarıyla kullanıcı tarafından değil, dosya tarafından sipariş izinleri görüntüler.

Herhangi bir fikir?


1
Bu nedenle, grupta yalnızca bir kullanıcı olsa bile, her zaman gruplara dayalı üyelik vermelisiniz. Onu gruptan yeni çıkarmış olabilirdin. Bu arada bir cevap beklerken, hesabını AD'de devre dışı bırakabilirsiniz.
MDMarra

Bu aracı denediniz mi: AccessChk v5.0? Güvenli bir ortam oluşturmalarını sağlamanın bir parçası olarak, Windows yöneticilerinin genellikle belirli kullanıcılar veya grupların dosyalar, dizinler, Kayıt defteri anahtarları, genel nesneler ve Windows hizmetleri de dahil olmak üzere kaynaklara ne tür erişimleri olduğunu bilmesi gerekir. AccessChk bu soruları sezgisel bir arayüz ve çıktı ile hızlı bir şekilde cevaplar. Burada Bulunan: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99

@MarkM: Çok doğru ... Sadece kullanıcının tek bir klasöre erişmesi gerektiğinde onu eklersiniz. Sonra birkaç ay içinde tamamen farklı bir hisse için başka bir erişime ihtiyacı var. Ve birkaç ay içinde yine 2 veya 3 klasörde. Böyle bir kullanıcı için anlamlı ada sahip bir grup nasıl oluşturulur? "Username_granular_access_group"? Bu muhtemelen işe yarayacaktır. @ Luke99: Sysinternals'ın ilginç aracı. Nasıl özleyebilirim. Her neyse, kullanıcının doğrudan veya dolaylı erişimi olan tüm klasörleri görüntülediğini görüyorum. Yalnızca kullanıcının ACL'de açıkça listelendiği klasörleri görüntülemenin bir yolu var mı (gruplar aracılığıyla erişim hariç)?
imagodei

Yanıtlar:


13

Bu, "bazı kullanıcının" kullanıcının C sürücüsünde yerleşik Windows icacls komutunu kullanarak erişebildiği tüm klasörleri bulmak için hile yapıyor olabilir (belki de bir uyarı ile):

icacls c:\*. /findsid someuser /t /c /l

/ T'nin dizinleri yinelemesini söylemek için gereklidir. / C, hatalarla karşılaşsa bile devam etmesini söylemek için gereklidir. / L sembolik bağlarla (varsa) çalışmasını sağlar. (Bu sonuncusu bir L'dir ve bu bayraklar büyük veya küçük harf olabilir.)

*."Dizinler için, dosyaları değil bak" demek için bir yol olarak DOS eski sayaçlarını tarafından tanınacaktır. Tabii ki, klasörleri değil dosyaları bulmak istiyorsanız, bunu olarak değiştirin *.*ve tabii ki herhangi bir sürücüye yönlendirebilir veya herhangi bir klasörden çalıştırabilir ve sürücü / klasör yolunu bırakıp buna göre arama yapmasını sağlayabilirsiniz. yalnızca klasör.

OP ile aynı cevabı aradım ve bu girişi buldum, ancak sadece indirilebilir bir araca dayalı bir teklif görmek için yanıldım. Diğerleri gibi, bu icacls aracında yerleşik bir şey kullanmayı tercih ettim ve buldum.

Ve Windows Server 2012, 2008 ve Windows 7'de çalıştığını onayladım, bu yüzden Server 2003, Windows 8 ve benzerlerinde de çalışacağından şüpheleniyorum.

Sonuçta ortaya çıkan liste, satır satır gösterilen klasörler olacaktır, örneğin:

SID Bulundu: c: \ somedir \ somesubdir.

Bunu, bazı dizinler için kendi izinleri olmayan bir kullanıcı olarak çalıştırırsanız, aşağıdaki gibi sonuçlarda araya eklenmiş hatalar alacağınızı unutmayın:

c: \ Sistem Birimi Bilgisi: Erişim reddedildi.

Ve tüm bir sürücüyü arıyor olsanız, bu yüzlerce hataya neden olabilir, bu da onların içinde sonuçları bulmayı zorlaştırabilir.

Bazıları cevabın komut satırını yönetici olarak çalıştırmak olduğunu düşünebilir, ancak bu, daha önce gizlenmiş klasörleri dolaşacağınız için bu tür hataların ortaya çıkmasına neden olacaktır.

Şimdi, bu hataları gizlemekle ilgileniyorsanız, yalnızca başarılı olan sonuçları ("SID bulundu" ifadesine atıfta bulunanları) iletmek için bir find komutu kullanamazsınız, çünkü hatalar filtrelenmeyecektir boru tarafından find komutuna. Bunun yerine, tüm hataları kaldırmak istiyorsanız, hata akışını (stderr) kullanarak "bit kepçesine" yeniden yönlendirmenin oldukça belirsiz bir hilesini kullanmanız gerekir 2>nul:. Yani yukarıdaki örnek şöyle olacaktır:

icacls c:\*. /findsid someuser /t /c /l 2>nul:

Sadece bu tür hatalar üreten, bu hatalar artık gizlenmiş olan bazı klasörlerin, "someuser" adlı klasörlerin erişebildiği ancak SİZİN sahip olmadığı klasörler olabileceğine dikkat edin. Bu yüzden, sadece bu hataları görmezden gelmeyi düşünmek isteyebilirsiniz. ama eğer istersen, bunu böyle yapabilirsin.

Bu olasılığın potansiyel olarak bu cevabın değerini sınırladığını anlıyorum. Bir şeylere daha fazla aşina olan biri cevabımı genişletmek veya düzeltmek isterse hoş geldiniz.


Açıkça görülmesi gerekiyor gibi görünüyor, ancak işaret ediyor: * için arama. yalnızca arama dizinlerine veya tüm dizinlere eşit DEĞİLDİR. Dizin adlarının uzantıları olabilir ve dosyaların uzantıları olması gerekmez. Eğer kapsamlı olmak istiyorsanız, her şeyi aramasına izin verin.
Scott E

6

PowerShell'i başka bir şey indirmenize gerek kalmadan kullanabilirsiniz. Bu sürüm v2.0 ve üstü ile çalışacaktır:

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

PowerShell v3 ve üstünde mevcut olan kadar temiz değil, ama işe yarayacak. Bu, dize biçiminde bulunan dizinlerin bir listesini çıkarır.

Bunları kolayca nesne olarak çıktılayabilir ve onlarla çalışmaya devam edebilirsiniz (bir CSV dosyasına aktarın, girişleri bulduğunuzda kaldırın, bilgilerle bir bilet güncelleyin ... vb.) Çıktı çağrıları.


Devralınan İzinleri "hariç tutmak" da mümkün müdür? (örneğin, "DOMAIN \ Username" (Açık
Alan adı) ifadesinin

1
Evet, şunları yapabilirsiniz:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
dognose

3

Kendi soruma bir çözüm buldum. İnanıyorum ki, çok basit ve temiz. Yalnızca subinacl'i yüklemeniz ve komut isteminden bir satır çalıştırmanız gerekir.

Subinacl'i buradan indirebilirsiniz . Resmi olarak yalnızca Windows 2000, Windows XP ve Windows Server 2003'te desteklenmesine rağmen, Windows Vista, Windows Server 2008 ve Windows 7'de de çalışmalıdır.

Ardından, komut isteminden aşağıdakileri çalıştırın:

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

Burada X: taradığınız sürücü ve kullanıcı adı izinlerini listelemek istediğiniz kullanıcıdır. Tarama biraz zaman alabilir ve sonuçları TEXTFILENAME.TXT ile alabilirsiniz.

Anahtar / noverbose kullanırsanız, erişim izinlerinin kompakt bir listesini alırsınız - temel olarak kullanıcının hangi dizinlere erişebildiğini görürsünüz (erişim maskeleri ve bazen kullanışlı olabilecek diğer şeyler ile).

Listeyi almak için OpenOffice Calc kullandım ve sonra bir Özel Filtre uyguladım ve yalnızca + FILE ile başlayan satırlar için filtreledim . Bu satırlar, kullanıcının erişebileceği dizinleri içerir. Basit araçları kullanarak yalnızca ilgili bilgileri elde edersiniz.

Üst dizinlerde devralma genellikle etkinleştirildiğinden, izinleri ayarlamak için ziyaret etmeniz gereken gerçek dizin sayısı genellikle listenin kendisinden önemli ölçüde düşüktür.

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.