루트가 아닌 사용자가 파일 권한을 변경하도록 허용

루트가 아닌 사용자가 파일 권한을 변경하도록 허용

우리는 사용자가 생성한 특정 파일의 파일 권한을 변경할 수 있는 애플리케이션을 개발 중입니다.

예를 들어, 사용자 "Bob"이 /srv/share/에 파일을 생성하는 경우 bob은 자신이 생성한 파일의 소유자이며 해당 사용자와 루트만이 적절한 권한을 설정할 수 있습니다.

이제 일부 보안 문제로 인해 애플리케이션을 루트로 실행하고 싶지 않습니다. 그러면 Linux에서 사용자 "응용 프로그램"이 /srv/share 디렉토리에 있는 다른 사용자가 만든 파일의 권한을 수정할 수 있다고 말할 수 있습니까? 그리고 거기에만? 그렇지 않으면 사용자 "응용 프로그램"이 특정 시스템 파일을 변경하고 스스로 루트가 될 수 있지만 이는 물론 의도되지 않은 일입니다.

Bob이 다음과 같은 권한을 사용하여 /srv/share/에 "test.txt" 파일을 생성한다고 가정합니다. UserOwner: Bob GroupOwner: AGroupName 권한: 755

이제 애플리케이션이 "test.txt" 파일의 권한을 770으로 변경하려고 한다고 가정합니다. 이는 애플리케이션이 루트로 실행 중인 경우에만 가능합니다. 새로 생성된 파일의 기본 권한이 변경되도록 umask를 변경하거나 기본 ACL을 사용할 수 있다는 것을 알고 있지만 특정 파일의 권한을 동적으로 변경해야 하는 또 다른 사용 사례가 있습니다.

현재 우리는 커널 4.9.0-6과 함께 Debian Stretch 9.3을 실행하고 있습니다.

그럼 이 작업을 수행하는 방법을 아는 사람이 있나요? 아니면 이것이 단순히 불가능합니까?

편집:// 몇 가지 사항을 명확히 합니다. 우리는 그룹이 Bob의 파일에 액세스하거나 디렉토리에 쓰는 것을 허용하고 싶지 않습니다. 사용자 자신(Bob)과 루트가 아닌 다른 사용자에게만 루트를 허용하도록 파일 권한을 변경하고 싶습니다. 해당 특정 디렉터리에서만 가능합니다.

답변1

"협업 폴더"를 사용해 볼 수 있습니다. 예를 들어, "Projects" 그룹이 폴더에 액세스할 수 있도록 하고 Project 그룹(따라서 그룹의 모든 구성원)이 파일을 수정할 수 있도록 하고 싶습니다. 가장 중요한 것은 chmod 2770인데, 이는 2(sgid, 파일이 그룹 소유자에 의해 생성됨)를 의미하고, 770은 uid 및 gid에 대한 읽기 및 쓰기 액세스입니다.

mkdir /projectfolder
groupadd project
chmod 2770 /projectfolder

그룹 프로젝트가 폴더를 사용하지만 그룹의 다른 구성원의 파일을 삭제하지 않도록 하려면 sgid+sticky를 사용하십시오.

mkdir /projectfolder
groupadd project
chmod 3770 /projectfolder

물론 그룹 프로젝트에 bob을 추가하세요.

이것이 작동하지 않으면 (내가 아는 한) 유일한 해결책은 sudo입니다. 이는 그룹 및 특정 명령을 할당할 수 있습니다(예: visudo를 사용하여 편집).

User_Alias    PROJECT = bob
Cmnd_Alias    BOBCMD = /sbin/chmod

bob ALL= BOBCMD

특정 폴더에서만 chmod를 사용해야 한다면 bash 스크립트를 만들어 sudo 명령으로 사용할 수 있습니다. 스크립트는 사용자가 정상인지, 디렉토리가 정상인지 제어한 후 chmod 명령을 실행해야 합니다.

관련 정보