아래 시나리오에서 쉘 스크립트나 Java 프로그램에는 어떤 종류의 권한(소유자/그룹/기타)이 있는지 궁금합니다.
run.sh
Java 프로그램을 호출하는 스크립트가 있습니다 a.java
. 스크립트와 java는 사용자 A에 속하며 -rwxrw-r--
권한이 있습니다. 사용자 A가 실행하는 경우 해당 권한 그룹은 어느 그룹에 속합니까? 사용자 A의 소유자 권한이 있습니까?
사용자 A와 같은 그룹에 속한 사용자 B도 있습니다. 그는 run.sh
Java 프로그램을 순차적으로 실행하고 호출합니다. 현재 그들은 어떤 권한 그룹에 속해 있나요? 사용자 B로부터 집단 허가를 받았나요?
프로그램이 /common/abc
권한이 있는 디렉토리에 쓰기를 시도 drwxrw-r--
하고 프로그램에 "기타" 권한이 있는 경우 실패할 수 있습니다.
한 가지 주목할 점은 둘 다 표현식을 사용하여 sh run.sh
스크립트를 실행하므로 실행 권한이 필요하지 않다는 것입니다. 읽기 액세스만 필요합니까?
답변1
모든 프로세스는 다음을 통해 생성되지 않는 한 해당 프로세스를 호출한 프로세스와 동일한 사용자 및 그룹으로 실행되기 시작합니다.설정값또는 setgid 실행 파일, 즉 권한이 있는 실행 파일, 즉 rws
또는 r-s
또는 -ws
또는 --s
권한이 있는 실행 파일입니다. 비트 이외의 권한 비트 s
는 관련이 없습니다. 실행 파일의 소유자는 스크립트가 setuid인 경우(즉, s
사용자 열의 비트가 설정된 경우)에만 중요하며, s
그룹 소유권은 스크립트가 setgid인 경우(즉, 그룹 열의 비트가 설정된 경우)에만 중요합니다.
따라서 설명하는 시나리오에서 사용자 A가 스크립트를 실행할 때 스크립트와 Java 프로그램은 모두 사용자 A와 A가 속한 그룹으로 실행됩니다. 사용자 B가 실행하면 사용자 B와 사용자 B가 속한 모든 그룹으로 실행됩니다.
기본 실행 파일을 실행하려면 실행 권한이 필요합니다. 스크립트( 로 시작하는 프로그램 #!
)를 실행하려면 실행 권한(메커니즘이 인계되기 전에 실행 시작 #!
)과 읽기 권한(인터프리터가 스크립트를 읽을 수 있도록)이 필요합니다. 인터프리터가 명시적으로 호출되는 경우 스크립트는 실행 가능하지 않아도 됩니다. 시스템에 관한 한 이는 단지 또 다른 데이터 파일일 뿐입니다.