Только разрешение на выполнение файла

12

Как я могу сделать файл исполняемым только для других пользователей, но не доступным для чтения / записи, поэтому я выполняю что-то под своим именем пользователя, но не хочу выдавать пароль. Я попытался :

chmod 777 testfile
chmod a=x
chmod ugo+x

Я по-прежнему получаю отказ в разрешении при выполнении от имени другого пользователя.

c0mrade
источник
Как насчет того, чтобы выполнить его НЕ как другого пользователя? И это скрипт или бинарная программа? Сценарии должны быть прочитаны переводчиком.
Псуси
У вас есть шебанг в верхней части файла? #! / 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
источник
Действительно, обновлено, чтобы отразить, что это верно для сценариев, которые, как я подозреваю, имеют место при рассмотрении исходного вопроса.
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 $@

ДОПОЛНИТЕЛЬНЫЙ ШАГ Создайте символическую ссылку на somescript.sh в / bin /:

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). Бинарный исполняемый файл может запускаться, если он исполняемый и не читаемый (сценарий не может, потому что интерпретатор должен уметь читать сценарий), но это не дает вам никакой безопасности.

Если вы хотите, чтобы другие могли выполнять вашу программу в виде черного ящика, не позволяя им точно видеть, что делает программа, вам нужно предоставить вашему сценарию повышенные привилегии: настройте его для своего пользователя. Только root может использовать средства отладки в программах setuid. Обратите внимание, что написание безопасных программ setuid нелегко, и большинство языков не подходят; см. Разрешить setuid для сценариев оболочки для получения дополнительных объяснений. Если вы собираетесь писать программу setuid, я настоятельно рекомендую Perl, в котором есть режим (режим taint), который явно предназначен для создания безопасных сценариев setuid.

Жиль "ТАК - прекрати быть злым"
источник
-1

Вы можете установить права доступа к файлу с помощью команды chmod. Пользователь root и владелец файла могут устанавливать права доступа к файлу. У 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. Это не отвечает на вопрос.
Скотт