파일 권한 실행 만


12

파일을 다른 사용자에게만 실행 가능하지만 읽기 / 쓰기가 불가능하도록 파일을 설정하는 방법은 무엇입니까?이 이유는 사용자 이름으로 무언가를 실행하고 있지만 비밀번호를 알려주고 싶지 않습니다. 나는 시도했다 :

chmod 777 testfile
chmod a=x
chmod ugo+x

다른 사용자로 실행할 때 권한이 거부되었습니다.


다른 사용자가 아닌 다른 사용자로 실행할 때는 어떻습니까? 그리고 이것은 스크립트입니까, 바이너리 프로그램입니까? 통역사가 스크립트를 읽어야합니다.
psusi

파일 상단에 shebang이 있습니까? #! / bin / sh
J Baron

답변:


10

스크립트를 실행하려면 스크립트에 대한 읽기 및 실행 권한이 모두 필요합니다. 스크립트의 내용을 읽을 수 없으면 스크립트를 실행할 수 없습니다.

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

사실, 원래 질문을 고려한 스크립트가 사실이라는 것을 반영하도록 업데이트되었습니다.
EightBitTony

13

이전 진술에는 반 사실이 있습니다. 사용자가 스크립트를 읽을 수는 없지만 여전히 실행 가능하도록 스크립트를 설정할 수 있습니다. 프로세스는 약간 작성되었지만 / 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명령으로 스크립트 사용자를 관리 할 수 ​​있습니다 .


6

다른 사용자가 프로그램을 실행하게하면 프로그램 파일을 읽을 수 있는지 여부에 관계없이 프로그램이 수행하는 모든 작업을 알 수 있습니다. 그들이해야 할 일은 디버거 (또는 같은 디버거와 같은 프로그램)를 가리 키는 것 strace입니다. 바이너리 실행 파일은 실행 가능하고 읽을 수없는 경우 실행할 수 있지만 (인터프리터가 스크립트를 읽을 수 있어야하기 때문에 스크립트를 사용할 수 없음) 보안을 제공하지는 않습니다.

다른 사람들이 프로그램을 정확히 수행하지 않고 블랙 박스로 프로그램을 실행할 수있게하려면 스크립트에 높은 권한을 부여해야합니다 . 사용자에게 setuid 로 설정하십시오. 루트 만 setuid 프로그램에서 디버깅 도구 를 사용할 수 있습니다 . 안전한 setuid 프로그램을 작성하는 것은 쉽지 않으며 대부분의 언어는 적합하지 않습니다. 자세한 설명 은 쉘 스크립트 에서 setuid 허용을 참조하십시오 . setuid 프로그램을 작성하려는 경우 안전한 setuid 스크립트를 가능하게하는 모드 (오픈 모드)가있는 Perl을 강력히 권장합니다.


-1

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

OP가 사용법을 이해한다는 것은 의문의 여지가 분명합니다 chmod. 이것은 질문에 대답하지 않습니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.