나는 때때로한다 echo "secret" | mysql -u root -p ...
. 이제 보안에 대해 우려하고 있습니다. 모든 프로세스를 나열하는 사람이 비밀번호를 볼 수 있습니까?
내가 시도 echo "test" | sleep 1000
하고 비밀과 함께 echo 명령 은 "ps aux"의 출력에서 보이지 않았다 . 그래서 나는 그것이 안전하다고 가정하지만 보안 전문가가 그것을 확인할 수 있습니까? :)
.history
.
나는 때때로한다 echo "secret" | mysql -u root -p ...
. 이제 보안에 대해 우려하고 있습니다. 모든 프로세스를 나열하는 사람이 비밀번호를 볼 수 있습니까?
내가 시도 echo "test" | sleep 1000
하고 비밀과 함께 echo 명령 은 "ps aux"의 출력에서 보이지 않았다 . 그래서 나는 그것이 안전하다고 가정하지만 보안 전문가가 그것을 확인할 수 있습니까? :)
.history
.
답변:
이에 대한 대답은 사용중인 쉘에 따라 다릅니다. 많은 쉘이 echo
A와 내장의 이 나열하는 과정에 표시되지 않습니다 따라서 별도의 프로세스를 생성하지 않는 것을 의미 명령. 그러나 명령으로 내장 을 입력 /bin/echo
하거나 ./echo
비활성화 enable -n echo
하면 쉘은 내장 명령을 사용하지 않고 이진 버전을 대신 사용합니다. 프로세스 목록에 나타납니다.
쉘 내장이 아닌 바이너리를 사용하는 경우, 데이터를 다른 프로세스의 STDIN 버퍼로 이동하는 동안 echo 명령이 표시됩니다. 이 버퍼는 크기가 한정되어 있으므로 버퍼에 맞는 것보다 많은 데이터가있는 경우 다른 프로세스가 버퍼에서 일부 데이터를 읽을 수있을 때까지 echo 명령이 잠시 동안 정지해야합니다. 대부분의 경우 (위의 두 예제와 같이)이 기간은 마이크로 초입니다. echo를 사용하여 20MB SQL 덤프를 MySQL에 붙여 넣으면 더 길어질 수 있습니다. 시간이 아무리 짧아도 셸 내장 대신 바이너리를 사용하고 누군가 타이밍을 올바르게 잡으면 프로세스 목록에서 프로세스를 볼 수 있습니다.
비밀 데이터를 적절한 권한으로 파일에 넣고 다음과 같이 파일을 STDIN으로 사용하면이를 피할 수 있습니다.
mysql -u root -p < file_with_secret.sql
그냥 사용
mysql -uroot -p
Enter 키를 누르십시오. 그런 다음 암호를 묻는 메시지가 표시되고 프로세스 목록 또는 기록 파일에 암호가 표시되지 않습니다.