stty sane
, или более конкретно stty echo
, должен повернуться реагируют на. (stty sane
зафиксирует другие терминальные причуды ввода или вывода, такие как новые строки, не возвращающиеся к левому полю.)
Ssh (и большинство других программ) выключают эхо для подсказки пароля, т.е. символы, которые Вы вводите, не отображены (отраженные) на экран. stty -echo
команда оболочки с тем же эффектом. Обычно эхо должно быть снова включено (как stty echo
) после подсказки пароля; это - ошибка или в ssh или в некотором другом программном обеспечении в действии здесь, таком как Ваши системные библиотеки или эмулятор терминала.
tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
В отличие от регулярного создания файла, которое подвержено тому, чтобы быть угнанным существующим файлом или символьной ссылкой, созданием канала имени через mkfifo
или базовая функция или создает новый файл в указанном месте или сбоях. Что-то как : >foo
небезопасно потому что, если взломщик может предсказать вывод mktemp
затем взломщик может создать конечный файл для себя. Но mkfifo foo
перестал бы работать в таком сценарии.
Если Вам нужна полная мобильность POSIX, mkfifo -m 600 /tmp/myfifo
безопасно против угона, но подвержен отказу в обслуживании; без доступа к сильному случайному генератору имени файла необходимо было бы справиться с попытками повторной попытки.
Если Вы не заботитесь о тонких проблемах безопасности вокруг временных файлов, можно следовать простому правилу: создайте частный каталог и сохраните все там.
tmpdir=
cleanup () {
if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi
if [ -n "$1" ]; then kill -$1 $$; fi
}
tmpdir=$(mktemp -d)
trap 'cleanup' EXIT
trap 'cleanup HUP' HUP
trap 'cleanup TERM' TERM
trap 'cleanup INT' INT
mkfifo "$tmpdir/pipe"
Можно использовать mktemp
для создания временного файла затем удалите его и создайте именованный канал с тем же именем.
Например:
TMPPIPE=$(mktemp -t pipe.XXX) && {
rm -f $TMPPIPE
mkfifo $TMPPIPE
}
$TMPPIPE
перед mkfifo
избегайте 'небезопасной' проблемы, связанной от выполнения TMPPIPE=`mktemp -u` ; mkfifo $TMPPIPE
?
– J. M. Becker
24.01.2012, 11:46
mkfifo
на самом деле безопасно, в отличие от обычного регулярного создания файла от оболочки. Если бы это не было, то создавая файл, затем удаляя это не помогло бы вообще (на самом деле, это значительно упростило бы задание взломщика, не требуя, чтобы он предположил имя файла). Так работы ответа dogbane, но промежуточное создание файла бесполезная сложность.
– Gilles 'SO- stop being evil'
24.01.2012, 19:46
mktemp
страница справочника, названная -u
'небезопасная' опция?
– J. M. Becker
25.01.2012, 04:39
mktemp -d
Вы все еще поняли некоторые мысли для своего входа. Спасибо за всю Вашу справку, я действительно ценю его!
– J. M. Becker
25.01.2012, 04:46
mktemp -u
небезопасно при создании регулярного файла, потому что он обеспечивает защиту против отказа в обслуживании (если имя, которое он генерирует, достаточно непредсказуемо), но не препятствует тому, чтобы взломщик создал файл под носом программы. Создание FIFO вместо регулярного файла является редким вариантом использования, к которому не обращается страница справочника.
– Gilles 'SO- stop being evil'
25.01.2012, 11:41
Используйте опцию "пробного прогона":
mkfifo $(mktemp -ut pipe.XXX)
-t
, но, пока это работает надежно, я пошел бы с ним.
– polemon
24.01.2012, 12:07
mkstemp()
функция (linux.die.net/man/3/mkstemp). -t
переключателю не препятствуют, это -p
, мое плохое.
– polemon
24.01.2012, 12:12
Использовать mkfifo
или mknod
в Unix, где двумя отдельными процессами может получить доступ к каналу по имени — один процесс может открыть его как читателя и другой как устройство записи.
mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz
cat file > my_pipe
Именованный канал может быть удален точно так же, как любой файл:
rm my_pipe
mkfifo --mode=0666 /tmp/namedPipe
gzip --stdout -d file.gz > /tmp/namedPipe
NamedPipe может использоваться регулярный файл для того, чтобы только читать однажды.
mkfifo
. Это не рассматривает мой вопрос о временных именованных каналах, больше, чем mkdir
обратился бы к создающим временным каталогам.
– J. M. Becker
24.01.2012, 09:16
mktemp
адреса для безопасного создания именованного канала?
– camh
24.01.2012, 09:17
mktemp
закончитесь самостоятельно (ofcourse путем удаления временного файла сначала и затем выполнения mkfifo
на том же). mktemp
может также использоваться, чтобы создать временный каталог, попробовать -t -d
переключатель.
– Nikhil Mulley
24.01.2012, 09:24
Более безопасная альтернатива должна использовать mktemp
для создания каталога безопасно затем поместите именованный канал в том каталоге, сделайте rm -R $dir
избавиться от него в конце.
mktemp
каталог, как это было действительно единственный приемлемый ответ, На всякий случай Вы не заметили, @Gilles уже отправил этот всесторонний ответ. стандарт конфетки
– J. M. Becker
09.12.2012, 21:14
trap "rm -rf '$tempdir'" EXIT HUP INT TERM
? Прерывание может сделать свое собственное переменное расширение? Независимый Исполняемый файл положения – Six 09.05.2015, 08:27$tempdir
в то времяtrap
команда оценена, не в то время, когда прерывание инициировано. В этом случае это не имеет никакого значения, за исключением того, что Ваш код повреждается ужасно если значениеtempdir
содержит одинарную кавычку, тогда как мой код всегда работает. – Gilles 'SO- stop being evil' 09.05.2015, 13:27$tempdir
был объявлен локально, и это должно быть определено глобально для прерывания, чтобы иметь доступ к нему. Имеет смысл теперь... – Six 09.05.2015, 13:45$tempdir
значение не изменяется также, который приемлем в в основном всех целях. Просто бойтесь использовать то же имя для создания нескольких временных файлов/директоров... – MestreLion 15.01.2016, 17:50