파일을 다른 사용자에게만 실행 가능하지만 읽기 / 쓰기가 불가능하도록 파일을 설정하는 방법은 무엇입니까?이 이유는 사용자 이름으로 무언가를 실행하고 있지만 비밀번호를 알려주고 싶지 않습니다. 나는 시도했다 :
chmod 777 testfile
chmod a=x
chmod ugo+x
다른 사용자로 실행할 때 권한이 거부되었습니다.
파일을 다른 사용자에게만 실행 가능하지만 읽기 / 쓰기가 불가능하도록 파일을 설정하는 방법은 무엇입니까?이 이유는 사용자 이름으로 무언가를 실행하고 있지만 비밀번호를 알려주고 싶지 않습니다. 나는 시도했다 :
chmod 777 testfile
chmod a=x
chmod ugo+x
다른 사용자로 실행할 때 권한이 거부되었습니다.
답변:
스크립트를 실행하려면 스크립트에 대한 읽기 및 실행 권한이 모두 필요합니다. 스크립트의 내용을 읽을 수 없으면 스크립트를 실행할 수 없습니다.
tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied
이전 진술에는 반 사실이 있습니다. 사용자가 스크립트를 읽을 수는 없지만 여전히 실행 가능하도록 스크립트를 설정할 수 있습니다. 프로세스는 약간 작성되었지만 / etc / sudoer에서 예외를 작성하면 사용자가 비밀번호를 묻지 않고 스크립트를 임시로 실행할 수 있습니다. 아래 예 :
사용자와 공유하고 싶은 스크립트 :
me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl
'somescript.pl'을 호출하는 쉘 스크립트를 작성하여 / bin /에 저장하십시오.
me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me:
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@
선택 단계 / bin /에서 somescript.sh로 심볼릭 링크를 만듭니다.
sudo ln -s /bin/somescript.sh /bin/somescript
쉘 스크립트가 사용자가 읽을 수 있고 실행 가능한지 확인하십시오 (쓰기 액세스 권한 없음).
sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root 14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh
다음 행을 추가하여 / etc / sudoer에서 예외를 만드십시오.
# User alias specification
User_Alias SCRIPTUSER = me, someusername, anotheruser
# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl
푸딩의 증거 :
someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***
someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied
이 방법으로 당황하게하는 것보다 더 나은해야 Filter::Crypto
하거나 PAR::Filter::Crypto
또는 Acme::Bleach
정해진 사용자에 의해 설계 반전 될 수있다. 스크립트를 바이너리로 컴파일하는 것도 마찬가지입니다. 이 방법에 문제가 있으면 알려주십시오. 고급 사용자의 경우 User_Alias 섹션을 완전히 제거하고 SCRIPTUSER를 '% groupname'으로 바꾸십시오. 이 방법으로 usermod
명령으로 스크립트 사용자를 관리 할 수 있습니다 .
다른 사용자가 프로그램을 실행하게하면 프로그램 파일을 읽을 수 있는지 여부에 관계없이 프로그램이 수행하는 모든 작업을 알 수 있습니다. 그들이해야 할 일은 디버거 (또는 같은 디버거와 같은 프로그램)를 가리 키는 것 strace
입니다. 바이너리 실행 파일은 실행 가능하고 읽을 수없는 경우 실행할 수 있지만 (인터프리터가 스크립트를 읽을 수 있어야하기 때문에 스크립트를 사용할 수 없음) 보안을 제공하지는 않습니다.
다른 사람들이 프로그램을 정확히 수행하지 않고 블랙 박스로 프로그램을 실행할 수있게하려면 스크립트에 높은 권한을 부여해야합니다 . 사용자에게 setuid 로 설정하십시오. 루트 만 setuid 프로그램에서 디버깅 도구 를 사용할 수 있습니다 . 안전한 setuid 프로그램을 작성하는 것은 쉽지 않으며 대부분의 언어는 적합하지 않습니다. 자세한 설명 은 쉘 스크립트 에서 setuid 허용을 참조하십시오 . setuid 프로그램을 작성하려는 경우 안전한 setuid 스크립트를 가능하게하는 모드 (오픈 모드)가있는 Perl을 강력히 권장합니다.
chmod 명령으로 파일 권한을 설정할 수 있습니다. 루트 사용자와 파일 소유자 모두 파일 권한을 설정할 수 있습니다. chmod에는 기호 및 숫자의 두 가지 모드가 있습니다.
먼저 사용자 (u), 그룹 (g), 기타 (o) 또는이 세 가지 (a) 모두에 대한 권한을 설정할지 결정합니다. 그런 다음 권한을 추가 (+)하거나 제거 (-)하거나 이전 권한을 지우고 새 권한을 추가 (=)합니다. 다음으로 읽기 권한 (r), 쓰기 권한 (w) 또는 실행 권한 (x)을 설정합니다. 마지막으로, chmod에게 어떤 파일의 권한을 변경하고 싶은지를 알려줄 것입니다.
다음은 몇 가지 예입니다.
모든 권한을 지우고 모든 사람에 대한 읽기 권한을 추가하십시오.
$ chmod a=r filename
명령 후 파일의 권한은 -r--r--r--입니다.
그룹에 대한 실행 권한을 추가하십시오.
$ chmod g+x filename
이제 파일의 권한은 -r--r-xr--입니다.
파일 소유자에 대한 쓰기 및 실행 권한을 모두 추가하십시오. 동시에 둘 이상의 권한을 설정하는 방법에 유의하십시오.
$ chmod u + wx 파일 이름
이후 파일 권한은 -rwxr-xr--입니다.
파일 소유자와 그룹 모두에서 실행 권한을 제거하십시오. 다시 한 번에 두 가지를 모두 설정하는 방법에 유의하십시오.
$ chmod ug-x 파일 이름
이제 권한은 -rw-r--r--입니다.
다음은 심볼 모드에서 파일 권한을 설정하기위한 빠른 참조입니다.
Which user?
u user/owner
g group
o other
a all
What to do?
+ add this permission
- remove this permission
= set exactly this permission
Which permissions?
r read
w write
x execute
chmod
. 이것은 질문에 대답하지 않습니다.