스크립트는 실행 가능하지만 읽을 수는 없습니까?

스크립트는 실행 가능하지만 읽을 수는 없습니까?

스크립트를 읽을 수 있는 권한이 없어도 스크립트를 실행할 수 있나요? 루트 모드에서 스크립트를 만들었고 다른 사용자가 이 스크립트를 실행하기는 하지만 읽지 않기를 원합니다. 읽기 및 쓰기는 금지하고 실행은 허용 했지만 chmod사용자 모드에서는 권한이 거부되었습니다.라는 메시지를 보았습니다.

답변1

문제는 실행 중인 스크립트가 아니라 인터프리터( bash, perl, python등)라는 것입니다. 그리고 통역사는 대본을 읽어야 합니다. ls이는 프로그램이 인터프리터처럼 커널에 직접 로드된다는 점에서 와 같은 "일반" 프로그램과 다릅니다 . 커널 자체가 프로그램 파일을 읽고 있으므로 읽기 액세스에 대해 걱정할 필요가 없습니다. 일반 파일을 읽어야 하므로 인터프리터는 스크립트 파일을 읽어야 합니다.

답변2

이는 바이너리에만 가능합니다.

$ chown foo:foo bar
$ chmod 701 bar

권한이 없는 사용자로서:

$ ls -lha bar
-rwx-----x 1 foo foo 7.0K 2012-03-15 03:06 bar

$ cat bar
cat: bar: Permission denied

$ ./bar
baz

자, 여기 키커가 있습니다. 일반적인 방법으로는 파일을 읽을 수 없지만 실제로 파일 읽기를 막을 수는 없습니다. 이것은 실제로 챌린지입니다.http://smashthestack.org/(레벨 13). hktrace를 사용하여 파일을 읽을 수 있게 해주는 잘 알려진 유틸리티가 있습니다 ptrace.

답변3

이전 진술에는 절반의 진실이 있습니다. 사용자가 읽을 수는 없지만 여전히 실행 가능하도록 스크립트를 설정할 수 있습니다. 프로세스가 약간 복잡하지만 /etc/sudoer에서 예외를 만들어 사용자가 비밀번호를 묻는 메시지 없이 일시적으로 스크립트를 직접 실행할 수 있도록 하면 가능합니다. 이 방법은 다음과 같습니다. - 다른 배포판의 setuid 패치를 우회합니다. - 사용자에게 모든 것에 대한 sudo 권한을 부여하지 않고도 특정 스크립트에 대해 일시적으로 높은 권한을 부여할 수 있습니다.

이 게시물의 지침을 따르십시오. 파일 권한 실행만

답변4

내 생각에는 setuid.

setuid엄청난 보안 허점이 있기 때문에 대부분의 배포판이 (분명히) 비활성화되어 있기 때문에 할 수 없다는 점을 제외하면 . 내 기능이 비활성화되어 있어서 실제로 이 답변이 효과가 있을지는 모르겠습니다. 어쨌든 그렇게 생각해서 게시합니다.~해야 한다.

어쨌든, 내가 원하는 일을 하고 싶고 setuid스크립트가 활성화된 배포판이 있다면 다음과 같이 할 것입니다.

$ chmod 700 myscript
$ cat > myscript-nonroot
#!/bin/sh
bash myscript
^D
$ sudo chown root:root myscript-nonroot
$ sudo chmod 4755 myscript-nonroot # make SURE this isn't world-writable!

즉, 루트 읽기 전용 스크립트를 호출하고 이를 루트 소유로 변경하고 setuid 권한을 부여하는 것이 유일한 목적인 다른 스크립트를 작성한다는 의미입니다. (다른 모든 사람이 쓸 수 없는 상태와 함께)

myscript-nonroot 함수는 모든 사람이 읽을 수 있으므로 읽고 실행할 수 있으며, 실제로 스크립트( )를 실행하는 두 줄을 얻을 때쯤에는 bash myscript루트(또는 원하는 다른 사람, 정확한 사용자)로 실행되고 있습니다. 래퍼 파일을 동일한 사용자가 소유하는 한 문제가 되지 않습니다.)

관련 정보