디렉토리 생성을 제한하지 않고 디렉토리의 파일 생성을 제한하기 위해 권한이나 facl을 사용할 수 있습니까?

디렉토리 생성을 제한하지 않고 디렉토리의 파일 생성을 제한하기 위해 권한이나 facl을 사용할 수 있습니까?

나는 다양한 사용자가 생성한 파일(스크립트)로 가득 찬 상당히 허용적인 권한을 가진 일부 디렉토리를 가지고 있습니다. 나는 사람들에게 자신만의 하위 디렉터리를 만들고 그 안에 파일을 추가하도록 권장하지만 일부 사람들은 그렇게 하지 않아 루트 스크립트 디렉터리가 다른 사람에게 흥미롭지 않은 내용으로 채워지는 결과를 낳습니다.

사람들이 루트 디렉터리에 파일을 만들도록 설득하는 데는 제한적인 성공을 거두었지만 여전히 모든 사용자가 모든 스크립트에 액세스할 수 있어야 하기 때문에 다음을 사용하여 하위 디렉터리에 스크립트를 작성하는 정책을 시행할 수 있기를 바랍니다. 권한 또는 액세스 제어 목록.

그렇다면 사용자가 루트 스크립트 폴더에만 디렉터리를 생성하도록 허용하고 이러한 하위 디렉터리에만 스크립트를 생성하도록 허용할 수 있습니까?

답변1

이는 훌륭한 솔루션은 아니지만 다음과 같습니다.

  • 귀하, 명명된 사용자 또는 의사 사용자 또는 그룹(귀하의 사용자가 구성원이 아닌)만이 디렉토리에 쓸 수 있도록 만듭니다.
  • 이에 대한 래퍼를 주의 깊게 작성 mkdir하고 setuid 또는 setgid를 사용하여 설치합니다.


  • group/setgid 옵션을 선택하면 다음과 같이 간단할 수 있습니다.
    mkdir("루트_스크립트/<사용자 폴더 이름>",0755);

    그리고 폴더를 생성한 사용자가 폴더를 소유하는 것에 관심이 없다면 프로그램이 setuid이면 수행해야 할 전부입니다. 그렇지 않으면,
  • 프로그램 setuid 루트를 만든다면 매우 조심해서 부적절한 사용 여부를 백만 번 확인하십시오.
    mkdir("루트_스크립트/<사용자 폴더 이름>",0755);
    chown(“루트_스크립트/<사용자 폴더 이름>",<사용자의 UID>,<사용자의 GID>);
  • 프로그램을 루트가 아닌 사용자로 설정한 경우 root_scripts디렉터리(또는 그 아래 어딘가)에 전역적으로 쓰기 가능한 하위 디렉터리를 만들고 다음과 같은 작업을 수행하십시오.
    euid = geteuid();
    ruid = getruid();
    seteuid(ruid); // 프로그램을 실행하는 사람
    mkdir("root_scripts/.writable_subdir/<사용자 폴더 이름>",0755);
    seteuid(euid); // 프로그램의 소유자 및 최상위 디렉토리
    rename("root_scripts/.writable_subdir/<사용자 폴더 이름>, "루트스크립트/<사용자 폴더 이름>");

관련 정보