Может ли сценарий быть исполняемым, но не читаемым?

Возможно ли выполнить скрипт, если нет разрешения на его чтение? В корневом режиме я создал сценарий, и я хочу, чтобы другой пользователь выполнил этот скрипт, но не прочитал его. Я сделал chmod чтобы запретить чтение и запись, но разрешить выполнение, однако в пользовательском режиме я увидел сообщение, в котором говорится: разрешение отклонено.

  • создавать исполняемые файлы по трубопроводам
  • причина добавления разрешений на выполнение сценария оболочки
  • 7 Solutions collect form web for “Может ли сценарий быть исполняемым, но не читаемым?”

    Проблема в том, что скрипт не работает, но интерпретатор ( bash , perl , python и т. Д.). И интерпретатор должен прочитать сценарий. Это отличается от «обычной» программы, например, ls , поскольку программа загружается непосредственно в ядро, как это сделал бы интерпретатор. Поскольку само ядро ​​считывает программный файл, ему не нужно беспокоиться о доступе к чтению. Интерпретатору необходимо прочитать файл сценария, так как нормальный файл должен быть прочитан.

    Это возможно только для двоичных файлов.

     $ chown foo:foo bar $ chmod 701 bar 

    Как непривилегированный пользователь:

     $ ls -lha bar -rwx-----x 1 foo foo 7.0K 2012-03-15 03:06 bar $ cat bar cat: bar: Permission denied $ ./bar baz 

    Теперь вот кикер. Хотя файл не читается обычными средствами, вы фактически не можете запретить чтение файла. На самом деле это проблема на http://smashthestack.org/ (уровень 13). Существует известная утилита, называемая hktrace которая позволяет вам читать файл, используя ptrace .

    Это невозможно; подумайте об этом, когда вы запустите скрипт, оболочке нужно прочитать его, чтобы знать, что делать.

    Вы можете, я думаю, сделать это с помощью setuid .

    Кроме того, что вы не можете, потому что большинство дистрибутивов (по-видимому) отключено setuid потому что это массивная дыра в безопасности. Он отключен на моем, поэтому я действительно не знаю, что этот ответ будет работать, я все равно публикую его, потому что я думаю, что это нужно .

    Во всяком случае, если бы я хотел сделать то, что вы хотели сделать – и у меня был дистрибутив с включенным setuid для скриптов – я бы сделал что-то вроде:

     $ chmod 700 myscript $ cat > myscript-nonroot #!/bin/sh bash myscript ^D $ sudo chown root:root myscript-nonroot $ sudo chmod 4755 myscript-nonroot # make SURE this isn't world-writable! 

    Я хотел бы написать еще один скрипт, единственной целью которого является вызов скрипта с правами root, изменение его права на root и предоставление ему разрешения setuid. (Наряду с сопутствующим статусом, не подлежащим записи, всеми остальными).

    Поскольку функция myscript-nonroot может быть прочитана всеми, ее можно прочитать и выполнить, и к тому времени, когда вы получите две строки, в которых вы фактически выполняете свой скрипт ( bash myscript ), он запускается как root (или кто бы вы ни захотели, точный пользователь не имеет значения, если файл обертки принадлежит одному и тому же пользователю.)

    В предыдущих утверждениях есть половина правды. Вы можете настроить сценарий так, чтобы он не читался пользователем, но все же исполнялся. Процесс немного затянулся, но это выполнимо, сделав исключение в / etc / sudoer, чтобы пользователь мог запустить скрипт как самостоятельно, не запрашивая пароль. Этот метод: – обходит патч setuid для других дистрибутивов. – позволяет временно предоставлять повышенные разрешения для конкретного скрипта, не предоставляя пользователю права sudo на все.

    Следуйте инструкциям на этом посту: Только разрешение на файл

    В этой ситуации я использовал sudo с опцией NOPASSWD, чтобы пользователи могли запускать скрипт, не имея возможности его прочитать.

    Чтобы ваши скрипты были нечитабельными, но исполняемыми, у вас есть 3 основных варианта:

    Первый вариант

    Используйте команду openssl для ее ручного шифрования. И в будущем, когда вы захотите запустить скрипт, вам придется снова запустить openssl вручную и предоставить пароль для расшифровки.

    Шифрование с помощью openssl:

    cat yourscript.sh | openssl aes-128-cbc -a -salt -k yourpassword> yourscript.enc

    Расшифровка с помощью openssl:

    cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k yourpassword> yourscript.dec

    yourscript.dec будет таким же, как ваш оригинальный скрипт yourscript.sh

    Второй вариант

    Используйте сайт, например, http://www.Enscryption.com, чтобы автоматически шифровать ваш скрипт и сделать зашифрованную версию исполняемого скрипта. Этот сайт использует как возможности шифрования openssl, так и некоторые другие методы обфускации, чтобы заставить злоумышленников входить в ваш скрипт или раскрывать секреты, которые вы хотите скрывать. С помощью этого сайта вы можете шифровать скрипты оболочки и скрипты perl, python, ruby ​​в командной строке. Я думаю, php также.

    Третий вариант

    Используйте такой инструмент, как shc . Похоже, что он не обновлялся с 2012 года. Но я использовал его в прошлом. Вы должны скомпилировать свой скрипт для каждой ОС, на которой вы хотите использовать его, если ОС отличается от той, которую вы использовали для ее компиляции.

    Резюме:

    Если вы скрываете свой код, вам очень важно, полагаясь только на разрешения и права собственности, это поможет вам, так как любой, у кого есть root, может получить к нему доступ. Это просто факт. Что вы можете сделать, если вы действительно хотите предотвратить несанкционированный просмотр вашего кода кем угодно, это написать скрипт вокруг команды openssl. Сделайте так, чтобы перед запуском скрипта он запрашивал пароль И после ввода пароля он запускает скрипт, не записывая его в файл temp. Если это звучит слишком много, тогда варианты 2 и 3 должны быть достаточными для ваших целей.

    Interesting Posts

    К каким файлам применяется `patch -p1` патч в этом примере?

    Копирование файлов с форматированного диска VFAT32 в Linux

    Почему / lib / модули настолько огромны под моим gentoo, по сравнению с Ubuntu

    Centos 6 VPS – Fresh Install – нет сети

    Прочитайте переменную с «read» и сохраните обратную косую черту, введенную пользователем

    Как сопоставить заголовки Markdown Setext в буйных ctags

    файлы заголовков списка, используемые проектом, скомпилированным с gcc, вместе с иерархией

    Как перенести пользовательские данные и настройки, если старый компьютер не работает, но я могу установить старый диск на новый?

    Копирование файлов с несколькими расширениями

    Строка состояния экрана несколько строк

    Почему я не могу скопировать директиву с * nix на установленный smbfs-ресурс в Windows 7?

    Замените шаблон в файле длинной строкой

    Невозможно выполнить команду с помощью su для другого (системного) пользователя

    openvpn ПРЕДУПРЕЖДЕНИЕ: не был проверен метод проверки сервера

    Можно ли возобновить fsck.ext4 с помощью смещения X?

    Linux и Unix - лучшая ОС в мире.