실행 가능한 파일을 읽을 수 있습니까?


9

파일에 권한이 -rwx-wx-wx있는 경우 다른 사용자 및 그룹 사용자 가 파일을 읽거나 실행할 수만 있습니까? 실행 파일을 실행하여 읽을 수있는 방법이 있습니까?


내가 말할 수있는 표준 방법이 없습니다.
Tim

답변:


18

-rwx-wx-wx권한이 있는 파일 에는 소유자에 대한 읽기 / 쓰기 / 실행 권한이 있으며 다른 모든 사람에 대한 쓰기 / 실행 (읽기는 안 됨) 권한이 있습니다.

스크립트 (보통 #!첫 번째 줄에 텍스트 파일이있는 ) 인 경우 스크립트를 실행하면 실제로 인터프리터가 실행되므로 스크립트를 읽을 수 있어야하기 때문에 다른 사람이 실행할 수 없습니다 . (인터프리터는 다른 스크립트가 아닌 바이너리 여야합니다.) (실제로 모든 시스템에 해당되는 것은 아닙니다. 3.2.0 Linux 커널을 사용하는 Ubuntu는 인터프리터 자체가 해석 된 스크립트가 될 수 있습니다. 이 질문과 관련이없는 것으로 보입니다.)

이 바이너리 실행 파일이 있다면, 그것은 수 있습니다 직접 실행할 수 있지만, 그 내용은 읽을 수 없습니다. 예를 들어, 소유자 이외의 사람이 명령으로 명령을 실행할 수 있지만 실행 파일의 사본을 가져올 수는 없습니다.

물론 실행에는 읽기가 필요하지만 사용자가 아니라 커널에서 읽습니다. 실행중인 프로세스의 메모리를 검사하여 실행 파일의 내용에 대한 정보를 얻을 수는 있지만 바이너리 실행 파일을 재구성 할 수는 없을 것입니다. 실행 파일이 setuid이면 프로세스의 메모리를 검사 할 수 없습니다 (실행중인 계정에 액세스 할 수없는 경우).

덧붙여 말하자면, -rwx-wx-wx매우 이상한 권한 집합입니다. 소유자 이외의 다른 사람이 파일을 읽지 못하도록 보호하지만 누구나 수정할 수 있습니다. 나는 그것이 의미가있는 경우를 생각할 수 없다.


단지 추상적 인 임의의 질문 : 프로파일 링 / 디버깅 도구는 실행 권한 만있는 실행 파일에서 작동합니까?
Sairam

@Sairam : 실험 : 아니오 : chmod 111 hello ; gdb ./hello말한다 ./hello: Permission denied.; r말한다No executable file specified.
키이스 톰슨

실행 불가능한 경우 -rw--w--w-와 같은 정보는 사람들이 정보를 읽을 수없이 로그에 기록 할 수있게하려는 로그 파일과 같은 경우에 유용 할 수 있습니다. 물론 파일을 비울 수도 있지만 별도의 문제입니다.
Dave

6

이러한 권한이 있으면 파일 소유자 만 파일을 실행할 수 있습니다.

다른 사용자는 쓸 수는 있지만 실행할 수는 없지만 (이 경우에는 읽을 수 있음을 의미하므로) 일종의 블랙 박스로 쓸 수 있습니다.

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello

4
셸 스크립트를 실행하려면 READ 및 EXECUTE 액세스 권한이 필요합니다. 그러나 컴파일 된 바이너리는 그렇지 않습니다. 따라서 위의 권한을 가진 컴파일 된 바이너리는 누구나 실행할 수 있습니다!
mdpc

1
이것이 OP가 무엇을 달성하려고하는지, 즉 컴파일 된 바이너리가 쓰기 가능한지에 대한 질문을 제기한다고 생각합니다. 권한 집합 (733)은 실제로 비표준이기 때문에 알아내는 데 약간의 시간이 걸렸습니다.
cjc

2

간단한 대답은 아니오입니다 . execsyscall 만이 읽기 액세스 를 요구하지 않고 파일을 읽을 수 있습니다 ( 실행 액세스는 필수이지만 ). openO_RDONLY또는 O_RDWR실패 할 것이다.


1

물론 모든 파일은 루트 사용자가 읽을 수 있습니다.

또한 시스템 로더, 메모리 관리, 스왑 퍼 등은 'x'권한이있는 파일을 읽습니다. 그렇지 않으면 실행할 수 없습니다.

실행 가능한 내용을 공개하는 데 가능한 구멍은 프로세스의 / proc 파일, 코어 파일 또는 디버거를 사용하는 것일 수 있습니다.


이것은 chmod| chown수행되었습니다
경고
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.