전제 조건이 다소 복잡하므로 내용은 다음과 같습니다.
- 쉘 스크립트를 통해 시작되는 프로그램이 있습니다.
- 쉘 스크립트는 .jar 파일을 통해 프로그램을 시작합니다.
- 나는 이 프로그램이 캐시를
/var/opt/
하위 폴더 에 저장하기를 원합니다/var/opt/program/
. - 캐시된 콘텐츠는 직접 접근할 수 없으며 프로그램을 통해서만 접근할 수 있습니다.
- 프로그램은 시스템의 모든 로컬 사용자가 사용할 수 있어야 합니다.
제가 생각해낸 주요 아이디어는 캐시 폴더의 내용을 읽고 편집하는 데 필요한 모든 권한을 가진 그룹을 만드는 것이었습니다. 수동으로 그룹에 사용자를 추가하고 싶지 않아서 대안을 찾고 있습니다. 제가 이해한 것이 맞다면,setgid
비트는 나에게 완벽해야 합니다. 내 이해는 다음과 같습니다.
- 이 비트가 설정된 폴더는
setgid
모든 콘텐츠가 폴더와 동일한 소유자 그룹을 갖도록 강제하고 모든 하위 폴더가 동일한 규칙을 따르도록 합니다. 동시에 폴더 소유자 그룹에 포함되지 않은 사용자에게는 추가 권한을 제공하지 않습니다.drwxrws--x 마스크가 있는 폴더는 다른 사람이 해당 내용을 편집하고 읽는 것을 허용하지 않습니다.. - 이 비트가 설정된 프로그램은
setgid
항상 소유자 그룹을 대신하여 실행되므로 사용자는 그룹의 권한을 존중하는 작업을 수행할 수 있습니다.
내 단계는 다음과 같습니다.
- 그룹을 만들었어요나의 그룹;
- 폴더를 만들고
/var/opt/program/
소유자 그룹을 다음으로 설정했습니다.나의 그룹; setgid
폴더에 비트를 설정했습니다 .- 프로그램 쉘 스크립트 소유자 그룹을 다음으로 설정했습니다.나의 그룹;
setgid
쉘 스크립트에 대한 비트를 설정했습니다 .
문제는 프로그램이 루트 권한 없이 사용자가 시작한 캐시 폴더에 파일을 생성하고 편집할 수 없다는 것입니다. 모든 제안은 진지하게 고려될 것입니다.
UPD 환경:
운영 체제: 우분투 16.04.2 LTS
답변1
- setgid 비트가 설정된 폴더는 모든 내용이 폴더와 동일한 소유자 그룹을 갖도록 강제합니다.
예. 새로 생성된 파일은 디렉터리 그룹을 가져오며, 파일 그룹은 물론 이후에 변경될 수 있습니다. (폴더가 아니라 디렉터리라고 부릅니다.)
- setgid 비트가 설정된 프로그램은 항상 소유자 그룹을 대신하여 실행됩니다.
예. 그러나 setgid 바이너리를 통해서만 파일을 생성하는 경우 디렉터리에서 setgid를 사용할 필요가 없습니다. setgid 프로그램은 관련 그룹을 기본 그룹으로 처리하므로 생성된 모든 파일은 기본적으로 해당 그룹(호출 사용자의 그룹이 아닌)이 소유합니다.
- 쉘 스크립트에 대해 setgid 비트를 설정했습니다.
이것은 작동하지 않는 부분입니다.대부분의 시스템은 해석된 스크립트의 setuid 및 setgid 비트를 존중하지 않습니다., 이는 많은 보안 문제로 쉽게 이어질 수 있기 때문입니다.
당신이 해야 할 일은 스크립트를 실행하는 C 프로그램 래퍼를 작성하고 래퍼가 gid를 설정하도록 하거나 (바람직하게는) 유사한 방법을 사용하여 sudo
사용자가 다른 그룹의 권한으로 스크립트를 실행할 수 있도록 하는 것입니다. ( sudo
잠재적으로 문제가 있는 환경 변수를 정리하는 등의 작업이 처리되었습니다.) 두 경우 모두 스크립트와 해당 인터프리터가 사용자가 수정할 수 없는 디렉터리에 있는지 확인하세요.
의 경우 sudo
필수 구성(in /etc/sudoers
)은 다음과 같습니다.
username ALL=(:privgroup) /path/to/script
이를 통해 사용자는 username
그룹으로 실행할 수 있습니다. 모든 구성원이 스크립트를 실행하도록 허용하는 대신 사용할 수 있습니다. 사용자는 기본적으로 명명된 명령을 다음과 같이 실행하려고 시도하지만 우리는 이를 허용하지 않는 스크립트를 실행해야 합니다. 하지만 이 명령에 대한 래퍼를 작성할 수 있습니다./path/to/script
privgroup
%groupname
username
groupname
sudo -g privgroup /path/to/script
sudo
root
답변2
대부분의 운영 체제는 스크립트에서 setgid를 무시합니다. 디렉토리는 /var/opt/program
그룹 쓰기가 가능하고 setgid여야 합니다. ls -ld /var/opt/program
비슷한 것을 출력해야 합니다 drwxrwsr-x 159 root mygroup 5406 Jun 15 10:25 /var/opt/program
. 이 프로그램을 실행해야 하는 일반(루트가 아닌) 사용자는 mygroup
보조 그룹을 가져야 합니다. 사용자별 교체와 유사한 명령을 사용하여 usermod
추가합니다.usermod -a -G mygroup LOGIN
로그인그리고 사용자 이름. 또는 /etc/group
mygroup 및 해당 사용자의 쉼표로 구분된 목록을 사용하여 줄을 편집하고 추가합니다. 예를 들어 mygroup:x:5000:joe,frank,ellen,mark
사용자 joe, Frank, ellen 및 mark가 이 스크립트를 실행합니다.