«переключатель» на основе оболочки

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

Отредактированный с дополнительной информацией, так как вопрос был исправлен:

Учитывая сценарий Вы теперь добавили к вопросу, Вы могли сделать это:

  • создайте пользователя, который будет использоваться только для этой программы, например. guiuser
  • измените владение/GUI/images каталога к, например. guiuser
  • измените полномочия каталога и файлов в нем так, чтобы только guiuser прочитал разрешение
  • измените владельца программы GUI.exe, который будет принадлежать guiuser
  • полномочия изменения программы выполнить setuid (chmod u+s /GUI/program/GUI.exe)

Когда Ваши пользователи запустят программу, та программа будет иметь права доступа guiuser, таким образом, программа сможет считать файлы даже при том, что у обычного пользователя нет разрешения.

7
13.04.2017, 15:36
3 ответа

Как написано на странице проекта wget, в wget версии 1.16.1 были добавлены защищенные протоколы TLSv1 _ 1 и TLSv1 _ 2 . Ваш wget 1.15 его не поддерживает.

Ресурсы:

-121--69314-

Вместо записи фрагментов кода для каждой оболочки следует просто написать переносной код, который может интерпретироваться большинством оболочек. Необходимо ознакомиться с языком команд POSIX Shell . Это стандарт, как оболочка (которая чтит POSIX) должна интерпретировать код.

Многие оболочки, например bash , могут быть настроены так, чтобы вести себя как оболочка POSIX. Каждый снаряд имеет свои выигранные особенности и специфические нотации. Авиодировать их полностью в портативных скриптах.

-121--56799-

Я предполагаю, что вы хотите сделать это для портативности. Приведенные выше ответы дают вам подсказку. Если предположить, что оболочка Борна (sh) является наименьшим общим знаменателем и доступна 'везде' (Linux, Solaris, Unix, AIX и т. д.), то в начале сценария можно поставить # !/bin/sh и написать весь сценарий, используя только возможности sh. (Я думаю, что в Linux sh является просто псевдонимом для bash, потому что bash является супернабором оболочки Борна, но неважно, он все равно должен работать.)

Небольшое уточнение состоит в том, чтобы предположить, что sh всегда есть, но вам может понадобиться дополнительная мощность и удобство некоторых из более продвинутых оболочек. чтобы вы могли написать версию сценария для каждой поддерживаемой вами оболочки, например, script.bash, script.zsh, script.ksh, script.csh и т.д., каждая из которых начинается с собственной строки shebang, а затем в файле script.sh вы скажете что-то вроде:

#!/bin/sh
if [[ -e /bin/ksh ]] ; then 
 ./script.ksh
 exit
elif [[ -e /bin/csh ]] ; then
 ./script.csh
 exit
fi

и т.д.

Еще одно предложение - изучить исходный код цепочки инструментов auto-tools. Те вещи, которые выполняются при выполнении ./configure; изготовить; произвести установку. GNU сделали много умных вещей, чтобы гарантировать, что их скрипты работают во всех средах.

-1
27.01.2020, 20:19

Вместо того, чтобы писать фрагменты кода для каждой оболочки, вам следует просто написать переносимый код, который может интерпретироваться большинством оболочек. Вам следует обратиться к POSIX Shell Command Language . Это стандарт того, как оболочка (которая поддерживает POSIX) должна интерпретировать код.

Многие оболочки, например bash , можно настроить так, чтобы они работали как оболочка POSIX. У каждой оболочки есть свои лучшие особенности и особые обозначения. Авиод их полностью в портативных скриптах.

2
27.01.2020, 20:19

Для csh-подобных против Bourne-подобных, вы могли бы сделать:

start=:#||:<<"goto end="

echo "(t)csh code here"
if { bindkey >& /dev/null } then
  echo tcsh
endif

goto end=

echo Bourne-like code here
if [ -n "$BASH_VERSION" ]; then
  echo bash
fi

end=:

Объяснено:

  • start=: будет рассматриваться как объявление метки в csh, и присвоение переменной в sh, так что две безобидные операции.
  • В start=:#, этот # рассматривается как комментарий лидера csh, но не в sh, поскольку это не отдельная лексема. Поэтому то, что после этого, комментируется для csh, но не для sh.
  • присваивание переменной sh имеет статус успешного завершения (если присваивание не включает подстановку команд), поэтому команда справа от оператора || не будет выполнена.
  • Команда :<<"goto end="...goto end не выполняется, а разбирается и игнорируется (тот факт, что "goto end" заключен в кавычки, предотвращает различные расширения внутри данного документа). Однако, примечание: в оболочке Bourne (и только в оболочке Bourne) временный файл все еще создается.
  • Поэтому вся секция до goto end= игнорируется Bourne-подобной оболочкой и выполняется csh. goto end= заставляет csh игнорировать часть между этим и end=: (безобидное присвоение переменной в Bourne-подобных оболочках).

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

См. также:

2
27.01.2020, 20:19

Теги

Похожие вопросы