То, что сразу приходит на ум, является неимущей пользовательской способностью выполнить вещи на начальной загрузке как корень, который желателен взломщикам что:
Это возможно, если Ваш неимущий пользователь так или иначе скомпрометирован, возможно, через другой сервис (http/etc). Большинство взломщиков будет быстро работать ls
или find
на / всем в /etc
только, чтобы видеть, существуют ли такие возможности, существуют оболочки, записанные на различных языках, которые они используют, который делает это простым.
Если Вы управляете сервером удаленно, главным образом через SSH, существует очень хороший шанс, что Вы не будете даже видеть это, если Вы не осмотрите init сценарий, потому что Вы не будете видеть вывода при начальной загрузке (хотя, необходимо использовать что-то, что проверяет хеши тех сценариев против известных хешей, чтобы видеть, изменилось ли что-то, или программное обеспечение управления версиями, и т.д.),
Вы определенно не хотите, чтобы это произошло, базировалось действительно потребности владеть этим init сценарий. Вы могли добавить пользователя разработки к списку sudoers так, чтобы было достаточно удобно обновить сценарий, но я советовал бы не позволять неимущий доступ для записи ни к чему в init.d
Вы используете двойные кавычки для разделения строки, а также внутри самой строки, поэтому заключенная в кавычки строка останавливается досрочно и ваши внутренние символы кавычек не включаются:
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'
. Мы дважды заключили переменные в кавычки в оболочке, чтобы они не разворачивались на несколько слов.