파일을 실행 가능하게만 만들고 다른 사용자는 읽거나 쓸 수 없도록 만들 수 있습니까? 그 이유는 내 사용자 이름을 사용하여 작업을 수행하지만 비밀번호를 제공하고 싶지 않기 때문입니다. 나는 시도했다:
chmod 777 testfile
chmod a=x
chmod ugo+x
다른 사용자로 실행해도 내 권한이 여전히 거부됩니다.
답변1
이전 진술은 절반만 사실입니다. 사용자가 읽을 수는 없지만 계속 실행할 수 있도록 스크립트를 설정할 수 있습니다. 프로세스는 약간 길지만 /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
명령을 사용하여 스크립트 사용자를 관리 할 수 있습니다 .
답변2
스크립트를 실행하려면 스크립트에 대한 읽기 및 실행 권한이 필요합니다. 스크립트의 내용을 읽을 수 없으면 실행할 수도 없습니다.
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
답변3
다른 사용자가 프로그램을 실행하도록 허용하면 프로그램 파일을 읽을 수 있는지 여부에 관계없이 프로그램이 수행하는 모든 것을 알 수 있습니다. 그들이 해야 할 일은 디버거(또는 디버거와 유사한 프로그램, 예를 들어strace
). 바이너리 실행 파일이 실행 가능하고 읽을 수 없는 경우 실행할 수 있지만(인터프리터가 스크립트를 읽을 수 있어야 하므로 스크립트는 실행할 수 없음) 보안이 제공되지 않습니다.
다른 사람들이 프로그램이 수행하는 작업을 정확히 볼 수 없도록 블랙박스처럼 프로그램을 실행할 수 있도록 하려면 스크립트에 더 높은 권한을 부여해야 합니다.설정값귀하의 사용자에게. 루트만 사용할 수 있음디버깅 도구setuid 프로그램에서. 안전한 setuid 프로그램을 작성하는 것은 쉽지 않으며 대부분의 언어는 적합하지 않습니다.쉘 스크립트에 setuid 설정 허용더 많은 설명을 원하시면. setuid 프로그램을 작성하고 싶다면 안전한 setuid 스크립트를 가능하게 하기 위해 명시적으로 설계된 모드(taint 모드)가 있는 Perl을 적극 권장합니다.
답변4
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