Каково значение $ IFS= '\n' в сценариях удара?

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

Можно удостовериться, что никто не прерывает данные путем обеспечения, что цифровой отпечаток сервера SSH, о котором сообщает клиент SSH, - то, что Вы ожидаете.

SSH не скрывает IP, который Вы подключаете с или отрезок времени, Вы соединены. Это не передает информацию отдельно - когда соединение неактивно, так SSH (незначительное исключение является некоторыми клиентами [а именно, PuTTY] имеют опцию "проверки активности", посредством чего пакеты отправляются только, чтобы помешать соединению испытывать таймаут). Эта информация может использоваться взломщиком для корреляции действия с определенными файлами или операций. Существуют способы запутать это, если Вы очень параноики.

Существуют различные версии SSH - Вы хотите использовать версию 2 и никогда любые более ранние версии.

SSH является протоколом сетевого приложения - он создает "канал" между Вами и удаленной системой. Таким образом, это просто касается поставки данных, сервер хочет отобразить Вам и передаче, что Вы вводите назад к серверу. Учетные записи, управление доступом и вход в систему остаются ответственностью операционной системы. SSH ничего не изменяет относительно этого.

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

sshd_config имеет опцию отклонить root способность непосредственно войти в систему (не влияет sudo или su). Обычно это считают хорошей вещью, поскольку удаленный корневой доступ затем потребовал бы двух паролей вместо одного.

174
20.07.2016, 16:21
4 ответа

Для краткости, IFS=$'\n' присваивает переменной IFS новую строку \n.

$'string' конструкция является механизмом кавычки, который используется для декодирования ANSI C подобно экранирующим последовательностям. Этот синтаксис взят из ksh93, и был переносимым в современную оболочку, как bash, zsh, pdksh, busybox sh.

Этот синтаксис не определяется POSIX, но был принят для SUS выпуска 7.

15
27.01.2020, 19:27

IFS означает "внутренний сепаратор поля". Он используется оболочкой для определения того, как делать разделение слов, т.е. как распознавать границы слов.

Попробуйте это в оболочке типа bash (другие оболочки могут работать с этим по-другому, например zsh):

mystring="foo:bar baz rab"
for word in $mystring; do
  echo "Word: $word"
done

Значение по умолчанию для IFS состоит из пробельных символов (если быть точным: пробел, табуляция и новая строка). Каждый символ может быть границей слова. Таким образом, при значении по умолчанию IFS, вышеприведенный цикл выдаст:

Word: foo:bar
Word: baz
Word: rab

Другими словами, оболочка думает, что пробел - это граница слова.

Теперь попробуйте установить IFS=: перед выполнением цикла. На этот раз результат будет:

Word: foo
Word: bar baz rab

Теперь оболочка разбивает загадочный на слова также -- но теперь она рассматривает только двоеточие как границу слова.

Первый символ IFS специальный: он используется для разделения слов в выводе при использовании специальной переменной $* (пример взят из Advanced Bash Scripting Guide, где также можно найти более подробную информацию о специальных переменных, подобных этой):

$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
w:x:y:z

Сравните с:

$ bash -c 'set w x y z; IFS="-:;"; echo "$*"'
w-x-y-z

Обратите внимание, что в обоих примерах оболочка по-прежнему будет обрабатывать все символы :, - и ; как границы слов. Единственное, что меняется, это поведение $*.

Другая важная вещь, которую необходимо знать, это то, как так называемые "IFS белые пробелы" обрабатываются . В основном, как только IFS включает пробельные символы, ведущий и ведущий пробельные символы отделяются от строки, которая должна быть разделена перед ее обработкой, а последовательность пробельных символов также разделяет поля. Однако это относится только к тем пробельным символам, которые реально присутствуют в IFS.

Например, посмотрим на строку "a:b::: c " (трейлинговый пробел и два пробельных символа между c и d).

  1. С помощью IFS=: оно будет разбито на четыре поля: "a", "b", " (пустая строка) и " c " (опять же, два пробела между c и d). Обратите внимание на пробелы переднего и заднего плана в последнем поле.
  2. С помощью IFS=' :' оно будет разбито на пять полей: "a", "b", " (пустая строка), "c" и "d". Никаких лидирующих и скользящих пробельных символов нигде.

Обратите внимание на то, как многочисленные, последовательные символы пробела разделяют два поля во втором примере, в то время как многочисленные, последовательные двоеточия не разделяют (так как они не являются символами пробела).

Что касается IFS=$'\n', то это синтаксис ksh93, который также поддерживается bash, zsh, mksh и FreeBSD sh (с вариациями между всеми оболочками). Цитируя bash manpage:

слова формы $'string' обрабатываются специально. Слово расширяется до "string", с заменой символов в обратной кодировке на символы, указанные в стандарте ANSI C.

\n является экранирующей последовательностью для новой строки, поэтому IFS заканчивается установкой одного символа новой строки.

211
27.01.2020, 19:27

Внутри отдельные цитаты в долларах, некоторые персонажи оцениваются специально. Например, \ N переводится на новую строку.

Итак, эта конкретная линия присваивает новую строку переменной IFS. Если, в свою очередь, является специальной переменной в Bash: внутренний полевой сепаратор. Как говорит Man Bash

, он

используется для разделения слов после расширения и разделить линии в словах , чтение встроенной командой. Значение по умолчанию .

22
27.01.2020, 19:27

Я предпочла, чтобы объяснить $ IFS через пример:
Suppeoo, который вы хотите CP или MV или другой файл, откупающий файл, если он пуст, когда ваши файлы имеют место Meta Char или Space, например:
Администрирование Linux.pdf или Бесплатное программное обеспечение .ogg , Конечно, у вас будет пробелм, потому что: Linux рассмотрит расчетное параметра и администрирование, рассмотрите расчетное значение Seperate Param.so встроенной переменной , затем вы можете инициализировать на IFS == $ (echo -en "\ n \ b") , затем Bash отбрасывает любую мета чар и пространство между именем файла, например:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
mymusicdir=~/test/dd
find $mymusicdir -name "*" -execdir rename 's/ /_/g' "{}" +
IFS=$SAVEIFS
-1
27.01.2020, 19:27

Теги

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