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

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

스크립트를 읽을 수 있는 권한이 없어도 스크립트를 실행할 수 있나요? 루트 모드에서는 다른 사용자가 실행은 하되 읽지는 못하게 하는 스크립트를 만들었습니다. 읽기 및 쓰기를 비활성화 했지만 chmod실행은 허용했지만 사용자 모드에서는 권한이 거부되었습니다.라는 메시지가 표시됩니다.

답변1

문제는 실행 중인 스크립트가 아니라 인터프리터( bash, perlpython)라는 것입니다. 통역사는 스크립트를 읽어야 합니다. 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루트(또는 원하는 다른 권한)로 수행하는 것입니다. 누구인지는 중요하지 않습니다. , 정확한 사용자)는 동일한 사용자가 래퍼 파일을 소유하고 있는 한 실행 중입니다. )

관련 정보