باستخدام C # للحصول على قائمة من ACLs للخوادم ومحركات الأقراص المعينة

StackOverflow https://stackoverflow.com/questions/570042

سؤال

تم تكليف مسفخي تغيير الإنتاج لدينا بمجموعة تكنولوجيا المعلومات الخاصة بنا مراجعة الأمن لجميع الأشياء المختلفة في مجموعتنا، في المقام الأول للتأكد من أن الأشخاص الذين تركوا توظيفنا أو نقلهم إلى مجموعات أخرى لم يعد لديهم حق الوصول إلى أسهم الخادم لدينا أو أدلة الويب وقواعد بيانات SQL، إلخ إلخ. لقد أكملنا مؤخرا جزء SQL ولدينا برنامج نصي قابل للاستخدام يمكن تشغيله سنويا (أو في أي تردد وصلنا إليه). لقد عملت رائعة وقمنا بمراجعة 20 قاعدة بيانات عبر 10 أو نحو ذلك خوادم مع بضع دقائق.

الآن، لأشياء الخادم. لدي تطبيق كتبته في C # باستخدام .NET 2.0 الذي سيقوم بإعادة فحص قائمة من الدلائل وإخراج ACLs إلى ملف نصي. هذا يعمل ممتاز. على الجهاز المحلي. لا تعمل مسارات UND ومصفوفة، أحصل على رسالة الاستثناء التالية: لا تملك العملية امتياز "SesecurityPrivilege" المطلوب لهذه العملية.

في هذا الخط:

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

حيث DI هو كائن DACEIDFO تم تعداده من مجموعة directoryInfo [].

من غير المرجح أن نكون قادرين على منح امتياز SesecurityPrivilege. ومع ذلك، لا أعتقد أن هذا يجب أن يكون ضروريا. يمكنني فتح المجلد والنقر بزر الماوس الأيمن للحصول على خصائص وانقر فوق علامة التبويب أمان وعرضها في واجهة المستخدم الرسومية. أنا ينبغي تكون قادرة على الوصول إليها برمجيا أيضا.

أي أفكار حول كيفية تغيير هذا القسم من التعليمات البرمجية للحصول على أذونات المجلد المستهدف؟

private void CheckSecurity(DirectoryInfo[] DIArray)
{
    foreach (DirectoryInfo di in DIArray)
    {
        DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
        string sAccessInfo = string.Empty;

        foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
        {
            sAccessInfo += GetAceInformation(FSAR);
        }

        if (sAccessInfo != string.Empty)
        {
            // Write info to text file
        }
    }
}

private string GetAceInformation(FileSystemAccessRule ace)
{
    StringBuilder info = new StringBuilder();
    string line = string.Format("Account: {0}", ace.IdentityReference.Value);
    info.AppendLine(line);
    line = string.Format("Type: {0}", ace.AccessControlType);
    info.AppendLine(line);
    line = string.Format("Rights: {0}", ace.FileSystemRights);
    info.AppendLine(line);
    line = string.Format("Inherited ACE: {0}", ace.IsInherited);
    info.AppendLine(line);
    return info.ToString();
}

تحرير: كيف يمكنني التحقق من المجلد البعيد ل Aread Attrib في ACL عندما يفشل في الحصول على طريقة "getaccesscontrol ()" للمجلد الجذر؟ (إذا مررت في Path Path، فقد أخطاء في الحصول على معلومات Server Path).

حساب المستخدم هو حساب مجال ولدي أذونات لقراءة بنية الملف. يمكنني عرض الأمان من خصائص المجلد / الملفات.

سأحقق من مراقب العملية، لكنني لست متأكدا من أن أكون قادرا على تشغيله على الخادم (أنا لست مسؤول على الخادم (الخوادم) المعني).

هل كانت مفيدة؟

المحلول

لديك الحصول على الخطأ بسبب علامة التبويب "التدقيق"، على الرغم من أنني متأكد من أن كل ما تريد حقا الوصول إليه على الشاشة هو البيانات الموجودة في علامة التبويب "الأذونات". يتحكم SesecurityPrivilegile في الوصول إلى SACL.

حاول التغيير

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

ل

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access);

ثم يجب عليك التوقف عن الحصول على الخطأ

نصائح أخرى

تحقق من أن المجلد البعيد يمنح المستخدم الذي يقوم بتشغيل الكود سمات قراءة في ACL.

تذكر أيضا أن الأذونات يتم حلها على آلات البعيدة (الخادم)، لذلك قد لا تتضمن عضوية المجموعة المحلية (المستخدمين والإداريين) حساب المستخدم قيد التشغيل على العميل.

نأخذ مراقبة العملية قد يساعد التشغيل على الخادم (يتم تصفيته إلى المجلدات / الملفات المعنية) حل تفاصيل سبب فشله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top