Daftar izin akses folder pengguna

14

Saya memiliki pengguna di domain yang memiliki akses ke beberapa subfolder di beberapa folder. Hak-haknya didefinisikan dengan sangat terperinci. Sekarang dia meninggalkan perusahaan tetapi akan terus bekerja untuk sebuah perusahaan sebagai sumber daya yang dikontrak.

Saya perlu menemukan semua folder yang dapat diaksesnya dan mencabut izinnya, lalu mengaturnya dengan serangkaian izin akses yang berbeda.

Apakah ada alat (freeware, lebih disukai) yang mencantumkan semua izin NTFS untuk pengguna tertentu? Saya sudah mencoba dengan AccessEnum dari Sysinternals, tetapi daftar tidak dapat disaring oleh nama pengguna dan tidak berguna bagi saya. Saya telah melihat CACLS juga, tapi sejauh yang saya tahu itu menampilkan izin yang dipesan oleh file, bukan oleh pengguna.

Ada ide?

imagodei
sumber
1
Inilah sebabnya mengapa Anda harus selalu memberikan keanggotaan berdasarkan grup, bahkan jika hanya ada satu pengguna dalam grup. Anda bisa menghapusnya dari grup. Sementara itu saat Anda menunggu jawaban, Anda bisa menonaktifkan akunnya di AD.
MDMarra
Apakah Anda mencoba alat ini: AccessChk v5.0? Sebagai bagian dari memastikan bahwa mereka telah menciptakan lingkungan yang aman, administrator Windows sering kali perlu mengetahui jenis akses yang dimiliki pengguna atau grup tertentu terhadap sumber daya termasuk file, direktori, kunci Registry, objek global, dan layanan Windows. AccessChk dengan cepat menjawab pertanyaan-pertanyaan ini dengan antarmuka dan keluaran yang intuitif. Ditemukan di sini: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99
@MarkM: Benar sekali ... Hanya saja ketika pengguna membutuhkan akses ke satu folder, Anda menambahkannya. Kemudian dalam beberapa bulan dia membutuhkan akses lain untuk bagian yang sama sekali berbeda. Dan dalam beberapa bulan lagi pada 2 atau 3 folder. Bagaimana Anda membuat grup dengan nama yang bermakna untuk pengguna tersebut? "Username_granular_access_group"? Ini mungkin akan melakukan triknya. @ Luke99: Alat menarik dari Sysinternals. Bagaimana saya bisa melewatkannya. Lagi pula, saya melihatnya menampilkan semua folder yang pengguna akses langsung atau tidak langsung. Apakah ada cara untuk menampilkan folder saja di mana pengguna secara eksplisit tercantum dalam ACL (tidak termasuk akses melalui grup)?
imagodei

Jawaban:

13

Ini tampaknya melakukan trik (dengan kemungkinan peringatan), untuk menemukan semua folder yang dapat diakses oleh pengguna "someuser", dalam contoh ini di drive C, menggunakan perintah icacls Windows bawaan:

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

/ T diperlukan untuk memerintahkannya untuk mengembalikan direktori. / C diperlukan untuk memerintahkannya agar tetap berjalan meskipun menemui kesalahan. / L membuatnya bekerja dengan tautan simbolik (jika ada). (Yang terakhir adalah huruf L, dan bendera ini bisa huruf besar atau kecil.)

Itu *.akan dikenali oleh DOS old-timer sebagai cara untuk mengatakan "mencari direktori, bukan file". Tentu saja, jika Anda TIDAK ingin menemukan file dan bukan folder, ubah ke *.*, dan tentu saja Anda dapat mengarahkannya ke drive apa pun, atau menjalankannya dari folder apa saja dan meninggalkan jalur drive / folder dan membiarkannya mencari relatif terhadap itu folder saja.

Saya mencari jawaban yang sama dengan OP, dan menemukan entri ini, tetapi kecewa melihat hanya tawaran berdasarkan alat yang dapat diunduh. Seperti yang lain, saya lebih suka menggunakan sesuatu yang built-in, dan saya menemukannya, di alat icacls ini.

Dan saya telah mengkonfirmasi itu berfungsi pada Windows Server 2012, 2008, dan Windows 7, jadi saya curiga ini akan berfungsi juga di Server 2003, Windows 8, dan seterusnya.

Daftar yang dihasilkan akan berupa folder yang ditunjukkan baris demi baris, seperti:

SID Ditemukan: c: \ somedir \ somesubdir.

Perhatikan bahwa jika Anda menjalankan ini sebagai pengguna yang tidak sendiri memiliki izin untuk beberapa direktori yang dilalui, Anda akan mendapatkan kesalahan yang disisipkan dalam hasil seperti:

c: \ Informasi Volume Sistem: Akses ditolak.

Dan jika Anda mencari seluruh drive, itu bisa mengakibatkan ratusan kesalahan seperti itu, sehingga sulit untuk menemukan hasilnya.

Beberapa orang mungkin berpikir jawabannya adalah menjalankan baris perintah sebagai administrator, tetapi itu hanya akan menyebabkan lebih banyak kesalahan seperti itu muncul, karena Anda sekarang akan melintasi folder yang sebelumnya disembunyikan.

Sekarang, jika Anda tertarik untuk menyembunyikan kesalahan-kesalahan itu, Anda tidak akan dapat menggunakan perintah find untuk mem-pipe hanya hasil yang DO berhasil (yang DO merujuk ke "SID found"), karena kesalahan TIDAK akan disaring oleh pipa ke perintah find. Sebaliknya, jika Anda ingin menghapus semua kesalahan, Anda perlu menggunakan trik yang agak tidak jelas untuk mengarahkan aliran kesalahan (stderr) ke "bit bucket" dengan menggunakan 2>nul:. Jadi contoh di atas akan menjadi:

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

Berhati-hatilah bahwa beberapa folder yang menghasilkan kesalahan seperti itu, yang kesalahannya sekarang disembunyikan, mungkin folder yang diberi nama "someuser" TIDAK memiliki akses tetapi yang ANDA tidak lakukan. Jadi, Anda mungkin ingin berpikir dua kali tentang mengabaikan kesalahan-kesalahan ini. tetapi jika Anda ingin, itulah cara Anda dapat melakukannya.

Kemungkinan itu memang berpotensi membatasi nilai jawaban ini, saya sadar. Jika ada orang yang lebih terbiasa dengan hal-hal yang ingin memperluas atau memperbaiki jawaban saya, saya akan menyambutnya.

charlie arehart
sumber
Sepertinya itu harus jelas, tetapi beruang menunjukkan: Mencari *. TIDAK sama dengan direktori pencarian saja, atau semua direktori. Nama direktori dapat memiliki ekstensi dan file tidak harus memiliki ekstensi. Jika Anda ingin teliti biarkan ia mencari semuanya.
Scott E
6

Anda dapat menggunakan PowerShell tanpa perlu mengunduh apa pun. Ini akan bekerja dengan v2.0 dan yang lebih baru:

$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
            }
        }
    }
}

Ini tidak sebersih apa yang tersedia dengan PowerShell v3 dan aktif, tetapi akan berfungsi. Ini akan menampilkan daftar direktori yang ditemukan dalam format string.

Anda dapat dengan mudah menampilkannya sebagai objek dan terus bekerja dengan mereka (ekspor ke file CSV, hapus entri saat Anda menemukannya, perbarui tiket dengan informasi ... dll) dengan memanipulasi objek input dari Tulis- Panggilan keluaran.

Jon
sumber
Apakah mungkin untuk "mengecualikan" Izin yang diwarisi? (Yaitu mencari setiap Folder, di mana "DOMAIN \ Username" telah ditambahkan secara eksplisit?
dognose
1
Ya, Anda dapat:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
mengenali
3

Saya menemukan solusi untuk pertanyaan saya sendiri. Saya percaya, ini sangat sederhana dan bersih. Anda hanya perlu menginstal subinacl dan menjalankan satu baris dari command prompt.

Anda dapat mengunduh subinacl di sini . Meskipun secara resmi didukung hanya pada Windows 2000, Windows XP, dan Windows Server 2003, itu harus bekerja pada Windows Vista, Windows Server 2008 dan Windows 7 juga.

Selanjutnya, Anda menjalankan yang berikut dari command prompt:

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

Di mana X: adalah drive yang Anda pindai dan nama pengguna adalah pengguna yang izinnya ingin Anda daftarkan. Pemindaian dapat memakan waktu dan Anda mendapatkan hasilnya di TEXTFILENAME.TXT.

Jika Anda menggunakan sakelar / tutup, Anda mendapatkan daftar ringkas izin akses - pada dasarnya Anda melihat direktori mana yang dapat diakses oleh pengguna (dengan masker akses dan beberapa hal lain yang kadang-kadang berguna).

Saya menggunakan OpenOffice Calc untuk mengimpor daftar dan kemudian menerapkan Custom Filter dan memfilter hanya untuk baris-baris yang dimulai dengan + FILE . Baris-baris ini berisi direktori yang dapat diakses pengguna. Beginilah cara menggunakan alat sederhana yang hanya menghasilkan informasi yang relevan.

Karena pewarisan sering diaktifkan pada direktori induk, jumlah direktori aktual yang mungkin perlu Anda kunjungi untuk menyesuaikan izin biasanya jauh lebih rendah daripada daftar itu sendiri.

imagodei
sumber