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

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

  • Внешнее хранилище Automount можно читать и записывать в Debian XFCE?
  • Как исправить ошибку 403, которую я получаю с XAMPP, пока я использую mod_userdir?
  • Найти файлы, которые пользователь может писать, эффективно с минимальным процессом создания
  • Как я могу оправиться от `chmod -x chmod`?
  • Не удалось создать домашние каталоги
  • Разрешить владельцу создавать и читать файлы, но не изменять или удалять
  • Что является переопределением опции установки разрешений fstab?
  • Разрешение отклонено для записи в журнал mysql
  • Как исправить ошибку 403, которую я получаю с XAMPP, пока я использую mod_userdir?
  • Как chmod без / usr / bin / chmod?
  • Как оправиться от chmod -R 000 / bin?
  • Невозможно вставить записи в sqlite в среде Linux
  • 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 должны быть достаточными для ваших целей.

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