비밀번호 파이핑 및 보안


11

나는 때때로한다 echo "secret" | mysql -u root -p .... 이제 보안에 대해 우려하고 있습니다. 모든 프로세스를 나열하는 사람이 비밀번호를 볼 수 있습니까?

내가 시도 echo "test" | sleep 1000하고 비밀과 함께 echo 명령 은 "ps aux"의 출력에서 ​​보이지 않았다 . 그래서 나는 그것이 안전하다고 가정하지만 보안 전문가가 그것을 확인할 수 있습니까? :)


무한 루프를 실행할 때 프로세스 목록에서 볼 수 없습니다. 좋은 질문.
Tim

1
또한 대부분의 쉘에 입력 한 내용이 (예 :)와 같은 기록 파일에 저장된다는 것을 잊지 마십시오 .history.
Alexander Bird

답변:


13

이에 대한 대답은 사용중인 쉘에 따라 다릅니다. 많은 쉘이 echoA와 내장의 이 나열하는 과정에 표시되지 않습니다 따라서 별도의 프로세스를 생성하지 않는 것을 의미 명령. 그러나 명령으로 내장 을 입력 /bin/echo하거나 ./echo비활성화 enable -n echo하면 쉘은 내장 명령을 사용하지 않고 이진 버전을 대신 사용합니다. 프로세스 목록에 나타납니다.

쉘 내장이 아닌 바이너리를 사용하는 경우, 데이터를 다른 프로세스의 STDIN 버퍼로 이동하는 동안 echo 명령이 표시됩니다. 이 버퍼는 크기가 한정되어 있으므로 버퍼에 맞는 것보다 많은 데이터가있는 경우 다른 프로세스가 버퍼에서 일부 데이터를 읽을 수있을 때까지 echo 명령이 잠시 동안 정지해야합니다. 대부분의 경우 (위의 두 예제와 같이)이 기간은 마이크로 초입니다. echo를 사용하여 20MB SQL 덤프를 MySQL에 붙여 넣으면 더 길어질 수 있습니다. 시간이 아무리 짧아도 셸 내장 대신 바이너리를 사용하고 누군가 타이밍을 올바르게 잡으면 프로세스 목록에서 프로세스를 볼 수 있습니다.

비밀 데이터를 적절한 권한으로 파일에 넣고 다음과 같이 파일을 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 키를 누르십시오. 그런 다음 암호를 묻는 메시지가 표시되고 프로세스 목록 또는 기록 파일에 암호가 표시되지 않습니다.


MySQL에서 STDIN에 허용 된 데이터는 로그인 한 후에 실행되는 명령입니다. 질문의 "비밀"은 암호가 아닙니다.
Ladadadada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.