Измените определенную строку с помощью sed

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

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

Это возможно, если Ваш неимущий пользователь так или иначе скомпрометирован, возможно, через другой сервис (http/etc). Большинство взломщиков будет быстро работать ls или find на / всем в /etc только, чтобы видеть, существуют ли такие возможности, существуют оболочки, записанные на различных языках, которые они используют, который делает это простым.

Если Вы управляете сервером удаленно, главным образом через SSH, существует очень хороший шанс, что Вы не будете даже видеть это, если Вы не осмотрите init сценарий, потому что Вы не будете видеть вывода при начальной загрузке (хотя, необходимо использовать что-то, что проверяет хеши тех сценариев против известных хешей, чтобы видеть, изменилось ли что-то, или программное обеспечение управления версиями, и т.д.),

Вы определенно не хотите, чтобы это произошло, базировалось действительно потребности владеть этим init сценарий. Вы могли добавить пользователя разработки к списку sudoers так, чтобы было достаточно удобно обновить сценарий, но я советовал бы не позволять неимущий доступ для записи ни к чему в init.d

2
20.11.2018, 22:28
1 ответ

Вы используете двойные кавычки для разделения строки, а также внутри самой строки, поэтому заключенная в кавычки строка останавливается досрочно и ваши внутренние символы кавычек не включаются:

sed -i "s|"jdbc:mysql:...
Ends here-^

Вы можете экранировать каждую из кавычек внутри строки:

sed -i "s|\"jdbc:mysql://localhost/bajaj\",\"root\", \"root\"|\"jdbc:mysql://${HOSTNAME}/${DBNAME}\",\"${DBUSERNAME}\", \"${DBPASSWORD}\"|" DbConnection.java

Теперь каждая двойная кавычка внутри команды sed имеет обратный слэш перед ней, чтобы остановить интерпретацию оболочки.

В качестве альтернативы можно использовать одинарные кавычки вокруг аргумента sed:

sed -i 's|"jdbc:mysql://localhost/bajaj","root", "root"|"jdbc:mysql://'"${HOSTNAME}"'/'"${DBNAME}"'","'"${DBUSERNAME}"'", "'"${DBPASSWORD}"'"|' DbConnection.java

Для того, чтобы переменные все еще были заменены, мы оставляем одинарные кавычки вокруг каждой переменной: 'AB'"$VAR"'CD'. Мы дважды заключили переменные в кавычки в оболочке, чтобы они не разворачивались на несколько слов.

5
27.01.2020, 21:57

Теги

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