Terlepas dari bahasa Windows, bagaimana saya bisa membuat perintah ICACLS mengatur folder untuk memiliki akses penuh ke semua orang?

9

Latar Belakang

Katakanlah saya punya perintah ini

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

Ini berfungsi baik di Windows versi bahasa Inggris, tetapi tampaknya tidak berfungsi dalam versi Perancis, memberikan kesalahan berikut, mungkin karena Usersberbeda dalam bahasa Prancis. Everyonediterjemahkan seperti Tout le mondedi Windows, jadi itu bukan solusi juga.

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Yang diterjemahkan oleh Google

Users: The mapping between account names and security IDs was not performed.

Pertanyaan

Apakah ada perintah yang bisa saya gunakan untuk mengatur folder dan secara rekursif semua isinya untuk memiliki izin penuh untuk semua pengguna dengan cara yang akan bekerja di berbagai versi bahasa Windows?

Konten dari seluruh web

Halaman ini dengan masalah yang hampir sama berbicara tentang bagaimana Everyonemenjadi Jederdi Jerman dan Tout le mondedi Perancis.

Geesh_SO
sumber
2
Cukup gunakan SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F Bekerja di mana-mana.
Ben
2
@ Ben, itu seharusnya icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, Anda meninggalkan tanda bintang.
Harry Johnston

Jawaban:

10

Tidak berfungsi dalam versi Prancis, mungkin karena Usersberbeda

Anda memiliki tiga opsi, dirinci di bawah:

  1. Gunakan Gunakan Portal Bahasa untuk mendapatkan nama yang diterjemahkan

  2. Ambil nama yang dilokalkan dari UsersSID

  3. Gunakan UsersSID denganicacls


Opsi 1: Gunakan Portal Bahasa (sumber kanonik untuk Microsoft Terminology)

Pencarian untuk Pengguna kembali:

Terjemahan di Produk Microsoft Lokal

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

Ini menunjukkan bahwa perintah berikut ini dapat berfungsi:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

Opsi 2: Ambil nama yang dilokalkan dari UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Nama: Pengguna

Deskripsi: Grup bawaan. Setelah instalasi awal sistem operasi, satu-satunya anggota adalah grup Pengguna yang Diotentikasi. Saat komputer bergabung dengan domain, grup Pengguna Domain ditambahkan ke grup Pengguna di komputer.

Sumber Pengidentifikasi keamanan terkenal di sistem operasi Windows

Untuk mengambil Usersnama grup yang dilokalkan :

Skrip sederhana ini akan memberi Anda nama aktual (S-1-5-32-545)grup 'Pengguna' pada PC yang diberikan:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

Masukkan ke dalam file dengan ekstensi vbs (Mari kita asumsikan usersName.vbs).

Sekarang jalankan:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

Source Cacls, Windows 7, izin penuh, nama lokal oleh wmz


Opsi 3: Gunakan UsersSID denganicacls

Gunakan perintah berikut:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

Sumber komentar oleh Harry Johnston

DavidPostill
sumber
Saya telah menerima jawaban dari DavidPostill karena ia melakukannya dengan cara baris perintah yang benar, yang sangat bagus ketika menggunakan skrip batch atau PS. Pada akhirnya saya benar-benar membuat executable kecil di C # yang hanya mengambil jalan dan melakukan apa yang saya butuhkan. Ini tidak dapat dikustomisasi seperti jawaban di sini, dan itu membutuhkan NET Framework., Tapi itu sesuai dengan tujuan khusus saya dengan sangat baik. Jika ada yang tertarik, inilah dasar dari kode C # yang akhirnya saya pakai. stackoverflow.com/a/35461832/1639615
Geesh_SO
xcaclstampaknya merupakan skrip yang dapat Anda unduh. Tidak perlu; icaclsdibangun ke dalam Windows dan dapat melakukan pekerjaan yang sama.
Harry Johnston
@ HarryJohnston Benar, tapi jawaban saya menunjukkan bagaimana cara mengambil versi lokal dari Users... Saya sudah mengklarifikasi jawabannya karena kita tidak memerlukan xaclsbagian dari solusi yang dikutip.
DavidPostill
@ HarryJohnston Saya juga telah menambahkan penggunaan icaclslangsung dengan kredit kepada Anda.
DavidPostill
7

Anda perlu menentukan grup AD bukan dengan namanya, tetapi dengan nomor SID.
Untuk grup standar seperti "EveryOne", "Pengguna Domain", dll. Ada nomor SID standar, yang dapat ditemukan di halaman MSDN Pengidentifikasi keamanan terkenal (SID) .

Berikut ini adalah pengidentifikasi relatif yang paling umum.

masukkan deskripsi gambar di sini

Struktur SID digambarkan sebagai berikut:

Komponen SID lebih mudah divisualisasikan ketika SID dikonversi dari format biner ke string dengan menggunakan notasi standar:

SRX-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

Misalnya, SID untuk grup Administrator bawaan diwakili dalam notasi SID standar sebagai string berikut:

S-1-5-32-544

SID ini memiliki empat komponen:

  • Tingkat revisi (1)

  • Nilai otoritas pengidentifikasi (5, NT Authority)

  • Pengidentifikasi domain (32, Builtin)

  • Pengidentifikasi relatif (544, Administrator)

Bagaimana Pengidentifikasi Keamanan Bekerja

Tonny
sumber
Patut ditunjukkan bahwa semua pengguna adalah bagian dari grup Pengguna secara default. Jadi jika Anda ingin memberikan "akses penuh: ke semua akun pengguna, cukup gunakan SID S-1-5-32-544, dan kemudian modifikasi ACL untuk memberikan semua izin ke grup untuk file atau folder yang dimaksud
Ramhound
@Ramhound 544adalah Administrator, 545adalah Pengguna.
DavidPostill
@DavidPostill - Ya; Salin dan tempel kesalahan.
Ramhound
@Ramhound Jauh lebih baik. Itu yang terbaik yang bisa saya lakukan ketika sedang berbicara di telepon. Terima kasih atas hasil editnya.
Tonny
3

Jika Anda menyukai skrip PowerShell tetapi kesulitan mengingat angka untuk SID:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

Saya tahu itu terlihat seperti satu ton pengetikan, tetapi pengidentifikasi panjang ini dilengkapi tab:

  • System.Security.Principal.SecurityIdentifier dari securityi
  • System.Security.Principal.WellKnownSidType dari wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule dari filesystem

Semua string ini adalah pengidentifikasi .NET, sehingga tidak terlokalisasi.

Jika Anda menginginkan EveryoneSID sebagai gantinya, gunakan WorldSidsebagai ganti BuiltinUsersSid. Untuk mendapatkan daftar semua WellKnownSidTypeopsi, lihat MSDN atau jalankan perintah ini:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N
sumber
FileSystemAccessRule tanpa Sid dan menggunakan group names?
Kiquenet
@Kiquenet Saya tidak sepenuhnya yakin dengan apa yang Anda minta, tetapi jika Anda lebih suka menentukan nama grup yang dapat dibaca manusia, itu tidak lagi tergantung pada bahasa. Jika Anda sedang OK dengan itu, Anda dapat menghapus $sid =garis dan mengganti $siddalam $rule =sejalan dengan string mengidentifikasi kelompok.
Ben N