2014-10-09 2 views
0

Если я хочу создать двоичный исполняемый файл, и я хочу, чтобы кто-то не выполнял его в моем каталоге, но я все же хочу, чтобы они могли копировать его в свою область, я должен предоставить им права на чтение, но не выполнить разрешение.Могу ли я запретить пользователям выполнять двоичные файлы?

Теперь я понимаю, что для файлов, написанных на языках высокого уровня, таких как python, разрешения на выполнение не являются действительно концепцией. Любой, у кого есть разрешение на чтение, может просто запустить их с помощью команды (например, python, для .py-файлов), что и происходит на самом деле, когда кто-то «выполняет» их.

Но бинарники, я думал, были разными. Они могут быть выполнены без разрешения на чтение, поскольку они действительно выполняются, а не просто перетаскиваются на команду интерпретатора, которая требует разрешения на чтение.

Но потом я узнал о команде sh, которая, кажется, способна действовать в двоичных файлах (в отличие от bash, которая отказывается). Есть ли способ отключить это или защитить от этого двоичный файл?

+5

Что вы имеете в виду, когда говорите, что sh "кажется способным воздействовать на двоичные файлы"? Можете ли вы привести пример? Например, если я печатаю 'sh/bin/rm', он сообщает о синтаксической ошибке (потому что это не действительный sh-скрипт). –

+0

Линкером и загрузчиком по-прежнему необходимо загрузить двоичный файл, чтобы выполнить его. Нет, + x без + r недостаточно для выполнения. –

+0

... и нет, 'sh' никоим образом не обходит это. –

ответ

1

wat?


[email protected] % vim a.c 
[email protected] % gcc a.c 
[email protected] % ./a.out 
a 
[email protected] % ls -l a.out 
-rwx------ 1 yac yac 11877 Oct 10 02:27 a.out* 
[email protected] % chmod -x a.out 
[email protected] % ./a.out 
zsh: permission denied: ./a.out 
[email protected] % sh ./a.out 
./a.out: ./a.out: cannot execute binary file 
[email protected] % cat a.c 
#include <stdio.h> 
void main(void) {printf("a\n");} 

, но если они могут читать его в любом случае, исполнение просто

[email protected] % cp a.out b.out 
[email protected] % chmod +x b.out 
[email protected] % ./b.out 
a 

копия прочь

и если ваша проблема «выполнить в моем каталоге» они могут просто

% cd your/directory && ./their/executable/copy 
+0

Вам также, вероятно, потребуется статически связать его, иначе вы можете просто использовать динамический компоновщик/загрузчик ELF, как и с любой другой интерпретируемой программой. См. Man ld.so –

+0

Хорошо, но если у них нет права на запись в мой домашний каталог, эта последняя часть не будет работать. Вы говорите, что они могли бы записываться в мой домашний каталог, а затем ./../their_home_dir/their_copy? Я не думал об этом раньше, может быть, это будет иметь тот же эффект. – anotherguy

+0

Да, они могут. Прочитайте, как работают процессы linux - fork/exec и наследуют env и прочее. Поэтому они могут выполнять что угодно с CWD в любом случае, если они могут 'cd', но, конечно, если у них нет разрешения на запись, они там не могут писать. – yaccz

Смежные вопросы