Разделение слов в позиционных параметрах

@ TomHunt указал на проблему в своем комментарии, и заслуживает похвалы за ответ. Я просто хотел расширить его точку зрения, чтобы будущие вопросы cron работы можно было решить легче.

Я предлагаю захватить текущую (функциональную) среду, а также среду сценария cron-задания, а затем сравнить их, чтобы увидеть, чего не хватает. Помните, что cron запускается во время загрузки и никогда не читает файлы среды личной оболочки (~/.bashrc, ~/.bash _ profile или что-либо другое, загруженное оттуда).

  1. set | sort >/tmp/set.out
  2. Временно добавить set | sort >/tmp/cron-set.out в сценарий оболочки задания cron
  3. diff/tmp/cron-set.out/tmp/set.out
  4. Найдите отсутствующие переменные среды и добавьте их в сценарий оболочки задания cron (при удалении временного дополнения set сверху).
-121--195403-

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

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

SELinux, если он настроен правильно (что может быть затруднено), обеспечивает изоляцию даже для процессов, запущенных как root. Chroot на самом деле избыточен как средство безопасности, если у вас есть SELinux - вы можете настроить SELinux, чтобы ограничить программу определенными каталогами - но это намного проще настроить правильно.

-121--97584-

.bashrc является файлом конфигурации bash, только когда он выполняется в интерактивном режиме. Загружается только при запуске bash, а не при запуске другой программы, например sh (даже если bash вызывается через имя sh ). И загружается только когда bash интерактивный, а не когда он выполняет сценарий или команду с -c .

sudo sh -c 'echo $ PATH' или sudo bash -c 'echo $ PATH' не вызывает интерактивную оболочку, поэтому .bashrc не участвует.

судо су; echo $ PATH запускает интерактивный экземпляр оболочки корня. Если это bash, то загружается ~ root/.bashrc . Этот фрагмент выполняет echo $ PATH после завершения этой интерактивной оболочки, поэтому все, что происходит в интерактивной оболочке, не влияет на то, что фрагмент печатается в конце. Но если ввести echo $ PATH в подсказке интерактивной оболочки, запущенной sudo su , появится значение, заданное ~ root/.bashrc .

С тех пор .bashrc вызывается в каждой интерактивной оболочке, а не оболочками входа (даже не оболочками интерактивного входа, что является дефектом конструкции в bash), это неправильное место для определения переменных среды. Используйте .bashrc для интерактивных параметров настройки bash, таких как привязки ключей, псевдонимы и параметры настройки завершения. Набор переменные среды в файлах, загружаемых при входе в систему: ~/.pam _ environment или ~/.profile .

Установите PATH в .profile вместо .bashrc и либо запустите оболочку входа с sudo -i 'echo $ PATH' , либо явно укажите исходный .profile с sudo sh -c '. ~/.profile; echo $ PATH '.

7
04.12.2017, 00:23
0 ответов

Теги

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