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

bash - не лучшая оболочка для вычисления даты, так как ее возможности обработки даты очень ограничены.

С zsh :

zmodload zsh/datetime
d=03012012
strftime -rs d %m%d%Y%H ${d}12
strftime %m%d%Y $((d-86400))

С ksh93 :

d=03012012
printf "%(%m%d%Y)T\n" "${d:4}${d:0:4} yesterday"

С bash вам придется либо выполнять вычисления вручную, либо полагаться на perl или некоторые расширения GNU или FreeBSD для утилиты date .

1
09.08.2018, 02:28
1 ответ

При использовании sudoваш $PATHиз соображений безопасности переопределяется такой строкой в ​​вашем файле /etc/sudoers:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Пример

Несмотря на то, что подобная запись присутствует в/etc/environment:

$ cat /etc/environment
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp

И, похоже, подхватили:

$ sudo env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp

И у нас есть скрипт в/tmp:

$ ls -l /tmp/blah.bash
-rwxrwxr-x 1 vagrant vagrant 20 Aug  8 20:57 /tmp/blah.bash

И этот скрипт будет печатать whoamiпри запуске:

$ cat /tmp/blah.bash
#!/bin/bash

whoami

Судо не дает нам это сделать:

$ sudo blah.bash
sudo: blah.bash: command not found

Изменение безопасного пути sudo

Но если я отредактирую свой /etc/sudoersфайл:

$ sudo visudo
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/tmp

Теперь работает:

$ sudo blah.bash
root

Безопасность

Хорошо подумайте, почему вы добавляете дополнительные каталоги в безопасный путь sudo. Это настроено так по очень веской причине. Не относитесь легкомысленно к добавлению дополнительных путей для команд sudo!

Добавление дополнительных каталогов подвергает вас и ваших пользователей дополнительным рискам, которые вы не осознаете, пока не станет слишком поздно.

3
27.01.2020, 23:23

Теги

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