Sử dụng ICACLS để đặt quyền trên thư mục người dùng


16

Tôi đang cố gắng thiết lập lại quyền trên thư mục người dùng và gặp một chút rắc rối với bước cuối cùng của tập lệnh. Tập lệnh của tôi về cơ bản chiếm quyền sở hữu toàn bộ thư mục người dùng, đặt lại quyền trên tất cả các tệp và thư mục cho thư mục, cấp rõ ràng các quyền tôi cần, dừng tất cả các quyền thừa kế từ thư mục mẹ, đặt chủ sở hữu hợp pháp (người dùng được chỉ định) cho tất cả các tệp và các thư mục, và sau đó xóa quyền mà tôi đã cấp cho chính mình để tôi có thể thao tác trên các tệp. Tôi cần bước cuối cùng này để xóa bản thân khỏi TẤT CẢ các tệp và thư mục con, nhưng tại thời điểm này, nó chỉ xóa tôi khỏi% userDir% và để lại tất cả các quyền được kế thừa bên dưới. Đây là một thiếu sót rõ ràng trong ICACLS. Có ai biết cách nào khác để thực hiện điều này?

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"

Tôi đang chơi xung quanh với tập lệnh XCACLS.vbs không được hỗ trợ do Microsoft tạo và tôi đã may mắn sử dụng tập lệnh này cho dòng cuối cùng của tập lệnh. Thay vì ICACLS này "E: \ Home Directories \% userDir%" / xóa "MYDOMAIN \% username%" Tôi đã thay thế nó bằng cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% tên người dùng% "Điều này hoạt động, nhưng tôi thực sự muốn tránh việc sử dụng XCACLS.vbs vì nó có vấn đề nghiêm trọng về hiệu suất. Còn ý tưởng nào khác không?
pk.

Câu trả lời:


18

Trước tiên hãy quan sát: Mỗi khi bạn chặn quyền thừa kế, bạn sẽ tự cắt đứt sự linh hoạt trong tương lai. Tôi tránh chặn quyền thừa kế bằng mọi giá.

Ví dụ: nếu bạn cần người dùng có thể liệt kê nội dung của thư mục "E: \ Home Directories" cấp cao nhất, hãy xem xét các quyền sau:

  • HỆ THỐNG - Kiểm soát hoàn toàn - Áp dụng cho thư mục này, thư mục con và tệp
  • BUILTIN \ Quản trị viên - Kiểm soát hoàn toàn - Áp dụng cho thư mục này, thư mục con và tệp
  • BUILTIN \ Người dùng được xác thực - Đọc và Thực thi - Chỉ áp dụng cho thư mục này

Sự cho phép cuối cùng không kế thừa vào các thư mục con. Ở mỗi thư mục con, tính kế thừa vẫn được bật và bạn chỉ cần chỉ định người dùng với quyền "Sửa đổi" hoặc "Kiểm soát hoàn toàn" (tùy thuộc vào cách bạn cảm nhận về việc người dùng có thể đặt quyền trong thư mục chính của họ). (Thông thường tôi đặt quyền cuối cùng bằng cách thêm "Người dùng được xác thực" vào trang thuộc tính Bảo mật không "Nâng cao", bỏ chọn hộp kiểm "Đọc" và "Đọc và Thực thi". Sau đó, tôi tiếp tục vào hộp thoại "Nâng cao" và thay đổi Cài đặt "Áp dụng cho" cho ACE đó thành "Chỉ thư mục này". Đó là cách dễ nhất, về số lần nhấp, để đặt nó.)

Sau đó, tập lệnh của bạn trở thành:

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

Tôi hoàn toàn nghi ngờ rằng việc bổ sung quyền "Người dùng được xác thực" mà tôi đã mô tả ở trên với quyền thừa kế được đặt thành "Chỉ thư mục này" sẽ cung cấp cho bạn những gì bạn đang tìm kiếm trong chức năng và sẽ cho bạn sự linh hoạt trong tương lai nếu bạn tìm ra rằng bạn phải thiết lập một quyền có thể cần phải kế thừa vào tất cả các thư mục nhà của người dùng trong tương lai.

Đây là SOP của tôi cho các thư mục nhà của người dùng, các thư mục "Tài liệu của tôi", "Máy tính để bàn", vv và cho các thư mục hồ sơ người dùng chuyển vùng. Nó hoạt động rất tốt.

Biên tập

re: nhận xét của bạn về BUILTIN \ Quản trị viên truy cập

Tôi đã có nhiều tranh luận với mọi người về việc tôi cấp quyền truy cập BUILTIN \ Quản trị viên trong nhiều năm qua và vấn đề của tôi là:

  • Sẽ dễ dàng hơn để giải quyết một loại vấn đề người dùng nhất định nếu bạn có thể truy cập vào tệp của họ. Đó là một nỗi đau để "sở hữu" và có thể khá chậm nếu có một số lượng lớn các tập tin.

  • Như bạn đã thấy với ICACLS, BUILTIN \ Quản trị viên có thể "gán" quyền sở hữu (ngoài "lấy" nó) để không có "bảo mật" nào được thêm vào bằng cách không có các tệp có thể truy cập vào BUILTIN \ Quản trị viên ở vị trí đầu tiên.

  • Trừ khi bạn đang sử dụng kiểm toán (và chọn lọc một số lượng lớn các mục dương tính giả), sẽ không có dấu vết kiểm toán khi người dùng BUILTIN \ Quản trị viên sở hữu các tệp mà họ không nên truy cập, sao chép chúng và sau đó trả lại các tập tin cho chủ sở hữu và sự cho phép "thích hợp" của họ.

  • Trong thế giới của Microsoft, Hệ thống tập tin mã hóa (EFS) có nghĩa là để giải quyết vấn đề giữ cho truy cập BUILTIN \ Quản trị viên trái phép không xảy ra. ACL NTFS không giải quyết vấn đề đó. (Rõ ràng, EFS không phải là chương trình duy nhất trong thị trấn. Mã hóa là câu trả lời thực sự để giải quyết vấn đề "giới hạn quyền truy cập của Quản trị viên mạng" cho dù bạn cắt nó như thế nào.)

Theo tôi, không chỉ định BUILTIN \ Quản trị viên có quyền truy cập vào thư mục nhà của người dùng (và trên thực tế, bất kỳ thư mục nào) có nghĩa là bạn đang tăng độ phức tạp và thời gian cần thiết để giải quyết các vấn đề trong khi cung cấp ít hơn không có bảo mật thực sự ("ít hơn không có "Bởi vì nó truyền đạt một cảm giác an toàn sai lầm ở nơi không có).

Tôi đã từ bỏ việc cố gắng giành chiến thắng trong cuộc tranh luận với mọi người bằng logic. Nó dường như là một vấn đề tình cảm với một số người. Nó giống như "Từ chối / Nhận là" ngớ ngẩn được đặt ở gốc của một tổ chức Exchange để ngăn các nhóm đặc quyền nhất định mở hộp thư của người dùng. Nó không cung cấp bảo mật thực sự (vì khi kiểm toán, người ta có thể loại bỏ / áp dụng lại ACE khi cần thiết), một cảm giác an toàn sai lầm và cản trở khi giải quyết các vấn đề thực sự.

Ngay cả khi bạn không thích lập luận của tôi về BUILTIN \ Quản trị viên có quyền truy cập, bạn vẫn muốn giữ nguyên cấu trúc phân cấp thừa kế bằng cách sử dụng kế thừa "Chỉ thư mục này" khi thích hợp. Chặn kế thừa trong hệ thống phân cấp quyền là một dấu hiệu chắc chắn rằng một cái gì đó về thiết kế bị "hỏng" (đảo ngược, v.v.).


1
Bạn có khuyên bạn nên cấp cho BUILTIN \ Quản trị viên toàn quyền truy cập vào toàn bộ cấu trúc thư mục không? Tôi cho rằng chúng tôi (quản trị viên) thực sự không nên có quyền truy cập đầy đủ vào thư mục / hồ sơ người dùng của mọi người mà không có quyền sở hữu.
pk.

+1, thích những điểm về cảm giác an toàn sai lầm ...
DCookie

1

Đầu tiên, cảm ơn cho đoạn trích kịch bản của bạn. Tôi đã làm việc trên cùng một thứ nhưng bị mắc kẹt ở một nơi khác. Trên hộp SBS 2008 của tôi, đoạn mã dưới đây hoạt động với tôi (tất nhiên là giả sử nó chạy cao). Tôi đã thực hiện một icacls% userdir% / t của một thư mục người dùng hoàn toàn mới (mặc định) được tạo bởi HĐH và so sánh nó với icacls% userdir% / t của một thư mục sau khi chạy tập lệnh này và nó trông giống như tất cả "O's và Tôi "là chính xác. Hy vọng nó cũng sẽ làm việc cho bạn.

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

Trân trọng,

 -d

Hãy chắc chắn rằng bạn xác minh dòng cuối cùng của tập lệnh của bạn. Theo kinh nghiệm của tôi, ICACLS sẽ không xóa thành công các quyền được kế thừa. Nó xóa mục nhập trên thư mục "MYDOMAIN \% username%", nhưng quyền của các thư mục con không được sử dụng. Do đó, "MYDOMAIN \% username%" sẽ vẫn có quyền truy cập vào các thư mục con nếu được truy cập trực tiếp, bạn sẽ không thể duyệt chúng. XCACLS.vbs đã giải quyết điều này cho tôi. cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% tên người dùng%"
pk.

Đó là nơi . một phần trong bản chỉnh sửa của tôi. doing / thừa kế: r trên thư mục cha, tôi gặp vấn đề tương tự. nhưng làm nó trên . trong thư mục cha dường như thực hiện các mẹo. Sau khi chạy ở trên,% userdir% có% username%, system và quản trị viên, nhưng mọi thứ bên dưới chỉ là% username% và system, đó là cách máy chủ thiết lập chúng ban đầu - đúng như những gì tôi muốn.

-1

Tôi cần sự giúp đỡ của bạn để sửa đổi lệnh này theo yêu cầu của tôi nếu điều đó là có thể về mặt kỹ thuật.

Đây là cấu trúc

\ Server \ Parent \ UserA \ unix

\ Máy chủ \ Phụ huynh \ Người dùngB \ unix

\ Server \ Parent \ UserC \ unix .... vân vân ..

Trong mỗi thư mục User $ có một thư mục có tên "unix".

Tôi muốn thêm người dùng hoặc nhóm có toàn quyền trên tất cả các thư mục Người dùng $ được liệt kê trong thư mục "Phụ huynh" (tên được lấy theo cấu trúc trên) nhưng chỉ muốn loại trừ quyền trên thư mục "unix".

Tôi có lệnh này hoạt động tốt đối với tôi theo quan điểm về khả năng áp dụng các quyền cần thiết nhưng tôi không thể thêm chức năng loại trừ trong này.

icacls "\\ Server \ Parent \ UserA" / cấp tên miền \ Nhóm: (OI) (CI) F / T

Bạn sẽ có thể hướng dẫn trong kịch bản này?


1
Xin chào và chào mừng bạn đến với Server Fault! Xin đừng đặt câu hỏi thông qua câu trả lời. Sử dụng nút Hỏi Câu hỏi để gửi yêu cầu của bạn.
Ông Shunz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.