문제

IT 그룹의 생산 변경 구현자는 우리 그룹의 모든 다양한 객체에 대한 보안을 검토해야합니다. , 웹 디렉토리, SQL 데이터베이스 등 우리는 최근 SQL 부분을 완료했으며 매년 (또는 어떤 빈도로 무엇이든) 실행할 수있는 재사용 가능한 스크립트가 있습니다. 그것은 훌륭하게 작동했으며 우리는 몇 분 동안 10 개 정도의 서버에서 20 개의 데이터베이스를 감사했습니다.

이제 서버 작업을 위해. .NET 2.0을 사용하여 C#에 쓴 응용 프로그램이있어 디렉토리 목록을 재귀 적으로 스캔하고 ACL을 텍스트 파일로 덤프합니다. 이것은 훌륭하게 작동합니다. 로컬 기계에서. UNC 및 매핑 경로는 작동하지 않습니다. 다음과 같은 예외 메시지가 표시됩니다. 프로세스는이 작업에 필요한 'SesecurityPrivilege'권한이 없습니다.

이 라인에서 :

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

여기서 di는 directoryInfo [] 배열에서 열거 된 디렉토리 인포 객체입니다.

우리는 sesecurity -privilege 특권을 부여받을 수 없을 것입니다. 그러나 나는 이것이 필요하다고 생각하지 않습니다. 폴더를 열고 오른쪽 클릭하여 속성을 클릭하고 보안 탭을 클릭하여 GUI에서 볼 수 있습니다. 나 ~해야 한다 프로그래밍 방식으로도 액세스 할 수 있습니다.

대상 폴더에 대한 권한을 얻기 위해이 코드 섹션을 변경할 수있는 방법에 대한 생각이 있습니까?

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();
}

편집 : 루트 폴더의 "getAccessControl ()"메소드를 얻는 데 실패 할 때 ACL에서 Read Attrib의 원격 폴더를 어떻게 확인합니까? ( server path를 통과하면 server path에 대한 정보를 얻는 데 오류가 발생합니다).

사용자 계정은 도메인 계정이며 파일 구조를 읽을 권한이 있습니다. 폴더/파일의 속성에서 보안을 볼 수 있습니다.

프로세스 모니터를 확인하지만 서버에서 실행할 수 있을지 확신하지 못합니다 (문제의 서버의 관리자가 아닙니다).

도움이 되었습니까?

해결책

'감사'탭으로 인해 오류가 발생하지만 화면에서 실제로 액세스하고 싶은 것은 '권한'탭의 데이터라고 확신합니다. sesecurity -privilege는 SACL에 대한 액세스를 제어합니다.

변경해보십시오

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

에게

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

그런 다음 오류가 발생하지 않아야합니다

다른 팁

원격 폴더가 ACL에서 코드 읽기 속성을 실행하는 사용자에게 부여하는지 확인하십시오.

또한이 권한은 원격 (서버) 기계에서 해결되므로 로컬 그룹 (사용자 및 관리자) 멤버십에는 클라이언트에서 실행되는 사용자 계정이 포함되지 않을 수 있습니다.

was 프로세스 모니터 서버에서 실행 (문제의 폴더/파일로 필터링)하면 실패한 이유에 대한 세부 정보를 해결하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top