Bagaimana cara mengambil kepemilikan file dari baris perintah?

34

Sering kali saya menemukan file yang perlu saya miliki. Saya biasanya menggunakan caclsuntuk mengubah izin ntfs, tetapi tampaknya tidak melakukan kepemilikan. Di bawah * nix saya akan menjalankan sesuatu seperti chown me:me <file>. Apakah ada jendela yang setara dengan chown?

Joe
sumber
setACL terlalu buruk tidak bekerja dengan skrip di atas. errormessages di Win XP, 7 dan 8 dan Anda harus menjadi profesor untuk menemukan apa yang salah dengannya

Jawaban:

25

subinacl adalah alat kekuasaan sysadmin Windows untuk melakukan segala sesuatu yang berkaitan dengan kepemilikan dan ACL. Anda dapat mengubah kepemilikan kepada siapa pun selain dari Anda ( Anda tidak dapat melakukan ini dengan GUI ).

subinacl /file test.txt /setowner=domain\foo

Ini memungkinkan Anda mengatur izin untuk setiap pengguna yang Anda suka, tanpa harus menjadi administrator (seperti yang saya yakini membutuhkan takeown.exe).

crb
sumber
Tidak berlaku untuk windows xp Bisakah saya mengunduh SUBINACL.exe (Windows 2003 Resource kit) dan menggunakannya di Windows XP?
Kiquenet
Tentu kamu bisa! Mungkin dari situlah saya mendapatkannya. Coba di sini .
crb
26

Anda sedang mencari "TAKEOWN.EXE", yang pertama kali di Windows Server 2003 sebagai komponen standar, dan saya percaya item kit sumber daya sebelumnya. Ini tersedia di Windows 7, dan mungkin sistem yang lebih baru.

takeown /f <some-file-or-folder> /r

/rmelakukan operasi secara rekursif pada semua anak dari folder yang ditentukan. Tidak seperti itu subinacl, Anda harus masuk sebagai pengguna yang Anda coba ambil kepemilikan; atau, Anda dapat dengan mudah memberikan kepemilikan kepada grup "Administrator".

Inilah salinan dokumentasinya, seperti dilestarikan pada SS64 :

Sintaks TAKEOWN [/ s Komputer [/ u [Domain] UserName [/ p [Kata sandi]]]] / f Nama File [/ a] [/ r [/ d {Y | N}]]

Key / s Computer Nama atau alamat IP komputer jarak jauh (jangan gunakan garis miring terbalik). default = komputer lokal. Parameter ini berlaku untuk semua file dan folder yang ditentukan dalam perintah.

/ u [Domain] UserName Jalankan skrip dengan izin dari akun pengguna yang ditentukan. default = izin sistem.

/ p [Kata Sandi] Kata sandi akun pengguna yang ditentukan dalam parameter / u.

/ f Nama File Nama file, jalur UNC atau pola nama direktori. Menerima karakter wildcard *

/ a Berikan kepemilikan kepada grup Administrator daripada pengguna saat ini.

/ r Melakukan operasi rekursif pada semua file di direktori dan subdirektori yang ditentukan.

/ d {Y | N} Menekan prompt konfirmasi yang ditampilkan ketika pengguna saat ini tidak memiliki izin "Daftar Folder" pada direktori yang ditentukan, dan alih-alih menggunakan nilai default: Y: Ambil kepemilikan direktori. N: Lewati direktori. Perhatikan bahwa Anda harus menggunakan opsi ini bersamaan dengan opsi / r. Jika / a parameter tidak ditentukan, kepemilikan file diberikan kepada pengguna yang saat ini masuk ke komputer.

Pola campuran menggunakan (? Dan *) tidak didukung oleh perintah takeown.

Setelah mengubah pemilik file / folder, Anda kemudian dapat menetapkan izin penuh untuk file dan kemudian membaca atau menghapusnya.

Evan Anderson
sumber
SS64 Memiliki tautan dokumentasi yang lebih baik: ss64.com/nt/takeown.html
jpaugh
17

Ambil kepemilikan dan hak penuh folder dan semua yang ada di dalamnya:

takeown /F somedir /A /R
icacls somedir /grant:r User:F /T

Pastikan untuk memulai Command Prompt as Administrator!

Saya harus memulai Command Prompt sebagai Administrator, itu berhasil untuk saya di Windows 8.1. Dengan kecanggihan Windows 8.1, saya harus mencari "command", klik kanan pada ikon Command Prompt. Bagi saya untuk melihat opsi "Jalankan sebagai Administrator". Saya memiliki Command Prompt yang disematkan ke Taskbar saya, tetapi mengklik kanan tidak akan menampilkan opsi "run as Administrator".

Di Windows 10, "Jalankan sebagai Administrator" harus tersedia untuk Anda sebagai opsi klik kanan.

Sintaks Takeown :

takeown [/s <Computer> [/u [<Domain>\]<User name> [/p [<Password>]]]] /f <File name> [/a] [/r [/d {Y|N}]]

referensi takeown .

Sintaks Icacls :

icacls <FileName>[/GRANT [: r] <Sid>: <Perm> [...]] [/ Denegar <Sid>: <Perm> [...]] [/Remove [:g|:d]] <Sid> [...]] [/ t] [/ c] [/ l] [/ q] [/ setintegritylevel <Level>: <Policy> [...]]Icacls <Directory>[/ sustituir <SidOld><SidNew>[...]] [/ restore <ACLfile>[/ c] [/ l] [/q]]

Referensi icacls .

chipiik
sumber
1
Ketahuilah bahwa icacl tersedak oleh nama jalur panjang. Pesan kesalahan "file tidak ditemukan" agak menyesatkan, icalcs yang lebih buruk dibatalkan memproses sisa pohon tanpa pesan. Anda dapat menggunakan trik membuat volume SUBST lebih dalam di pohon untuk menyelesaikannya kadang-kadang. Takeown.exe tidak mentolerir nama panjang.
Andrew Dennison
Tidak berlaku untuk Windows XP
Kiquenet
8

Saya tahu ini adalah posting yang sangat lama, tetapi ada cara yang dibangun ke dalam Windows 7 dan yang lebih baru (mungkin di Windows Vista, tapi saya tidak yakin). Jalankan yang berikut ini dari prompt perintah yang meningkat di folder yang ingin Anda atur ulang. /tmemberitahu icaclsuntuk melakukan operasi secara rekursif.

icacls .\* /setowner %UserDomain%\%UserName% /t
icacls .\* /reset /t

Perintah pertama mengatur ulang pemilik ke siapa yang pernah masuk melalui variabel lingkungan. Tentu saja, nama tertentu dapat digunakan sebagai gantinya.

Perintah kedua kemudian memaksa izin untuk diulang kembali ke pohon ke semua folder dan file anak.

Semoga ini bisa membantu seseorang di masa depan.

Jim
sumber
Perintah pertama sudah cukup bagiku.
Benoit Blanchon
6

Anda mungkin ingin melihat SetACL , pisau manajemen izin tentara swiss. Berikut adalah contoh cara menetapkan kepemilikan semua file pada drive C: ke "Administrator" dan menghapus perlindungan warisan dari semua objek anak sekaligus:

SetACL.exe -on "C:\\" -ot file -actn setprot
           -op "dacl:np;sacl:nc"
           -rec cont_obj
           -actn setowner -ownr "n:S-1-5-32-544;s:y"

Anda juga bisa menambahkan -silent.

Helge Klein
sumber
3

Di Windows Server 2003 R2 (dan yang lebih baru), Anda dapat memanfaatkan alat icacls.exe bawaan untuk mengubah kepemilikan dari baris perintah, serta semua manipulasi cacls.exe tradisional yang digunakan untuk ...

Perhatikan bahwa icacls.exe default ke mode "edit", sementara cacls.exe default ke mode "replace" - perubahan selamat datang bagi kita yang digigit (lebih dari sekali) dengan sedikit nuansa cacl!

jab
sumber
icacls bagus karena disertakan dalam versi windows terbaru dan memungkinkan penetapan kepemilikan kepada pengguna mana pun.
David
1

Alternatif lain adalah fileacl. Ini kecil dan dapat mengeset / membatalkan set flag "inherit / don't inherit" pada objek, tidak seperti kebanyakan utils windows.

Skelewir
sumber
0

Saya telah menemukan solusi menggunakan Windows Tools: cacls

cacls <file or directory> /E /T /G <user>:F
chepseskaf
sumber
0
  1. buka command prompt sebagai pengguna admin dan ubah ke direktori yang bermasalah
  2. ambil kepemilikan semua file di sana ... contoh: takeown /f *.jpg
  3. berikan hak akses kepada pengguna pilihan Anda ... contoh: icacls *.jpg /grant "Everyone":F(perhatikan bahwa di Windows non-bahasa Inggris "Semua Orang" mungkin tidak ada, misalnya di Jerman Windows hanya berfungsi dengan "Jeder" - gelandangan nyata bahwa Windows menerjemahkan opsi perintah!)
Jorg
sumber