실행 권한 비트를 설정하지 않고 Linux 바이너리를 실행할 수 있습니까?


25

실행 비트 세트가없는 Linux에서 실행 가능 바이너리 파일을 실행하는 방법이 있습니까? chmod +x옵션이 아닙니다.

예를 들어 권한 r--r--r--만 있을 수 있습니다 .

실행 비트를 설정하지 않고 소스를 인터프리터 (예 : bash script.sh또는) 에 전달하여 shebang에 넣지 않고도 스크립트를 실행할 수 python script.py있습니다.

그렇다면 execute abinaryfile객체 코드를 메모리에로드하고 실행하는 것과 같은 것이 있습니까?


3
사본과 chmod를 옵션으로 만드시겠습니까?
TiCL

아니요, 권한 비트를 설정할 수없는 환경 (주어진 파일 또는 그 복사본에 대해)에서 바이너리를 실행할 수있는 방법이 있는지 궁금합니다.
Tom

답변:


36

다음과 같이 /lib/ld*.so를 ELF 인터프리터로 사용할 수 있습니다.

$ cp /bin/ls /tmp/ls
$ chmod a-x /tmp/ls
$ /lib/ld-linux.so.2 /tmp/ls

실제 이름은 아키텍처마다 다릅니다. 일부 이름은 포함 /lib/ld-linux.so.2, /lib/ld-linux-x86-64.so.2/lib/ld-2.7.so. 당신은 아마 그것을 단수로 찾을 수 있습니다 /lib/ld*.


훌륭한 정보 .... 어쨌든 ld는 무엇을 의미합니까?
Vineet Menon

@VineetMenon ld은 프로그램 링커 / 로더입니다. 프로그램에서 사용하는 공유 라이브러리를 찾아서로드 한 다음 실행합니다. ld-linuxELF 바이너리를 처리합니다.
다니엘 벡

좋아, /lib/ld-linux.so.2실행 가능하지 않은 경우 어떻게 됩니까? (가능한 경우 도 있습니까?)
LawrenceC

@ultrasawblade AFAIK, 실행 파일 만 .so로드 할 수 있으며 ld-linux일종의 중요합니다.
Daniel Beck

64 비트 우분투에서/lib64/ld-linux-x86-64.so.2
Tor Klingberg

1

아니, 적어도 같은 방식으로. 파이썬 일을 할 때 여전히 바이너리를 실행하고 있습니다. 파이썬은 + x입니다. 파일을로드하고 실행할 수있는 것을 컴파일해야합니다.

TiCL은 최선의 방법이므로 답변을 답변해야합니다.


예, "파이썬"은 그 경우 바이너리입니다. 내가 기대했던 것은 "파일을로드하고 실행할 수있는 무언가를 컴파일"한다는 것이 이미 존재한다는 것입니다.
Tom

@Tom 바이너리를 메모리로 읽어서 실행할 수있는 C 프로그램을 찾을 수 있습니다. 그래도 파이썬이 C 방식으로 수행하기에 충분히 낮은 수준인지는 모르겠습니다.
new123456

0

파일이 실행 가능하지 않으면 execLinux 커널 의 syscall이 실패합니다.EACCES

할 수는 있지만 그렇게 할 수 없으므로 sh myprog.sh프로그램을 실행할 ./myprog.sh수 없습니다.

이것은 다음을 통해 확인할 수 있습니다 main.c.

#define _XOPEN_SOURCE 700
#include <errno.h>
#include <stdio.h>
#include <unistd.h>

int main(void) {
    char *argv[] = {"myprog", NULL};
    char *envp[] = {NULL};
    int ret;
    ret = execve("myprog.sh", argv, envp);
    perror("execve");
    printf("%d\n", errno);
    printf("%d\n", EACCES);
}

그리고 myprog.sh:

#!/bin/sh
echo worked

myprog.sh실행 파일이 아닌 경우 main실패합니다.

execve: Permission denied
13
13

우분투 17.10에서 테스트되었습니다 gcc -std=c99.

POSIX 7은 다음에서 언급합니다.

다음과 같은 경우 fexecve ()를 제외한 exec 함수는 실패합니다.

[EACCES] 새 프로세스 이미지 파일의 경로 접두사에 나열된 디렉토리에 대한 검색 권한이 거부되었거나 새 프로세스 이미지 파일이 실행 권한을 거부합니다.

자세한 근거는 /security/66550/unix-execute-permission-can-be-e-as-bypassed-is-it-superfluous- 또는 -whats-the에서 확인할 수 있습니다.

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