스크립트를 읽을 수 있는 권한이 없어도 스크립트를 실행할 수 있나요? 루트 모드에서 스크립트를 만들었고 다른 사용자가 이 스크립트를 실행하기는 하지만 읽지 않기를 원합니다. 읽기 및 쓰기는 금지하고 실행은 허용 했지만 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
루트(또는 원하는 다른 사람, 정확한 사용자)로 실행되고 있습니다. 래퍼 파일을 동일한 사용자가 소유하는 한 문제가 되지 않습니다.)