
Некоторые приложения позволяют передавать пароль в качестве аргумента. Например:
mysql --user=user_name --password=your_password db_name
Безопасно ли это? Помимо того, что введенный пароль будет сохранен в истории bash, кто-то может ввести w
команду в подходящий момент и увидеть полную командную строку процесса (включая пароль).
Для меня довольно удивительно, что каждый пользователь может видеть, какую команду я в данный момент выполняю.
решение1
Аргументы командной строки каждого процесса в системе считаются «публичными». Не только команда w
, но ps
и top
многие другие команды получают доступ к этой информации как к чему-то само собой разумеющемуся. Действительно, для получения этой информации не требуется никаких специальных привилегий. В Linux вы можете прочитать командную строку другого процесса, даже процесса, принадлежащего другому пользователю, прочитав /proc/<pid>/cmdline
.
Это не является недостатком или небезопасным поведением со стороны w
или top
или ps
(или cat
). Скорее, бремя лежит на стороне не передавать конфиденциальную информацию в командных строках в многопользовательских системах, никогда.
Большинство утилит, которые могут принимать пароли в командной строке, документируют, что делать это не рекомендуется. Например, из mysql
man-страницы:
Указание пароля в командной строке следует считать небезопасным. См. раздел 5.3.2.2, «Руководство конечного пользователя по безопасности паролей». Вы можете использовать файл параметров, чтобы избежать указания пароля в командной строке.
Кстати, передача паролей или конфиденциальных данных в переменных среды не так явно небезопасна, но все же небезопасна в большинстве систем.
решение2
Нет, передавать пароли программам в командной строке небезопасно. Лучше использовать:
mohsen@debian:~$ mysql -uuser -p
Enter password:
решение3
Хотя это и небезопасно, помните, что Linux в наши дни находится на пороге двадцатилетия — как и в случае с другими вещами в сфере ИТ, проблемы безопасности либо не были тогда столь очевидны, либо были устранены позднее.
Поэтому, как упоминалось в других ответах, не используйте пароль в командной строке.
Вы можете (и, вероятно, должны) также ограничить информацию, предоставляемую либо procfs with the
опцией mountring hidepid`, либо с помощьюgrsecurityукрепленное ядро. Обратите внимание, что это может сломать некоторые вещи (возможно, cgroups и все, что от них зависит - например, systemd), по крайней мере на момент написания этого.