перенесення пароля та безпека


11

Я іноді так роблю echo "secret" | mysql -u root -p .... Тепер я поступаюсь щодо безпеки тут: чи може хтось із переліком усіх процесів бачити пароль?

Для перевірки я спробував, echo "test" | sleep 1000і команда echo із секретом не була видна у висновку "ps aux". Тож я припускаю, що це безпечно - але чи може це підтвердити експерт з питань безпеки? :)


Неможливо побачити його у списку процесів під час запуску нескінченного циклу. Хороше питання.
Тім

1
Крім того, не забувайте, що все, що ви введете на більшості оболонок, десь буде зберігатися у файлі історії (як .history).
Олександр Птах

Відповіді:


13

Відповідь на це залежить від того, яку оболонку ви використовуєте. Багато оболонки мають echoяк вбудована команда означає , що він не породжує окремий процес , і , отже , не буде доступний широкому в процесі лістингу. Однак якщо ви введете /bin/echoабо ./echoвимкнете вбудовані enable -n echoкоманди за допомогою команди, оболонка не буде використовувати свою вбудовану команду, а натомість використовуватиме двійкову версію. Це з’явиться в списку процесів.

Якщо ви використовуєте двійковий, а не вбудований оболонку, команда echo відображатиметься стільки часу, скільки потрібно для переміщення даних у буфер STDIN іншого процесу. Цей буфер має обмежений розмір, тому якщо в буфері буде більше даних, ніж вміститься, команда echo доведеться зависати деякий час, поки інший процес не зможе прочитати деякі дані з буфера. У більшості випадків (наприклад, два приклади, які ви подали вище) цей часовий період становитиме мікросекунди. Якщо ви випадково вставляєте дамп 20MB SQL в MySQL за допомогою echo, це може бути довше. Незалежно від того, наскільки короткий час, якщо ви використовуєте двійковий файл замість вбудованої оболонки, і хтось отримає правильний час, вони зможуть побачити процес у списку процесів.

Цього можна уникнути, ввівши секретні дані у файл (з відповідними дозволами) та використовуючи файл як STDIN таким чином:

mysql -u root -p < file_with_secret.sql

5
Майте на увазі, що, ввівши пароль у командному рядку, як, що він, швидше за все, зберігається у файлі історії вашої оболонки, тому варто перевірити дозвіл та вміст файлу історії.
aculich

3

Для випадку mysql ~ / .my.cnf можна використовувати для зберігання секретів, тобто

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME

1

Просто використовуйте

mysql -uroot -p

і натисніть Enter. Потім вам буде запропоновано ввести пароль, і він не буде видно ні в списку процесів, ні в файлах історії.


Дані, прийняті на STDIN MySQL, - це команда (команда), яку слід виконати після входу. "Секрет" у питанні не є паролем.
Ladadadada
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.