Глава 20. Ограниченный режим командной оболочки


Команды, запрещенные в ограниченном режиме командной оболочки

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

В ограниченном режиме запрещена команда cd — смена текщего каталога.

Запрещено изменять переменные окружения $PATH, $SHELL, $BASH_ENV и $ENV.

Заперщен доступ к переменной $SHELLOPTS.

Запрещено перенаправление вывода.

Запрещен вызов утилит, в названии которых присутствует хотя бы один символ "слэш" (/).

Запрещен вызов команды exec для запуска другого процесса.

Запрещен ряд других команд, которые могут использовать сценарий для выполнения непредусмотренных действий.

Запрещен выход из ограниченного режима.

Пример 20-1. Запуск сценария в ограниченном режиме

  1. #!/bin/bash
  2. # Если sha-bang задать в таком виде: "#!/bin/bash -r"
  3. # то это приведет к включению ограниченного режима с момента запуска скрипта.
  4. echo
  5. echo "Смена каталога."
  6. cd /usr/local
  7. echo "Текущий каталог: `pwd`"
  8. echo "Переход в домашний каталог."
  9. cd
  10. echo "Текущий каталог: `pwd`"
  11. echo
  12. # До сих пор сценарий исполнялся в обычном, неограниченном режиме.
  13. set -r
  14. # set --restricted    имеет тот же эффект.
  15. echo "==> Переход в ограниченный режим. <=="
  16. echo
  17. echo
  18. echo "Попытка сменить текущий каталог в ограниченном режиме."
  19. cd ..
  20. echo "Текущий каталог остался прежним: `pwd`"
  21. echo
  22. echo
  23. echo "\$SHELL = $SHELL"
  24. echo "Попытка смены командного интерпретатора в ограниченном режиме."
  25. SHELL="/bin/ash"
  26. echo
  27. echo "\$SHELL= $SHELL"
  28. echo
  29. echo
  30. echo "Попытка перенаправления вывода в ограниченном режиме."
  31. ls -l /usr/bin > bin.files
  32. ls -l bin.files    # Попробуем найти файл, который пытались создать.
  33. echo
  34. exit 0