고양이를 통해 컬에 비밀번호를 전달하는 것이 얼마나 안전하지 않습니까?

고양이를 통해 컬에 비밀번호를 전달하는 것이 얼마나 안전하지 않습니까?

curl여러 번 실행되는 스크립트가 있습니다.

비밀번호는 한 번만 입력하고 싶습니다(그래서 실행할 때마다 컬이 비밀번호를 묻는 것을 원하지 않습니다). 프로세스 목록이나 파일 설명자 등에 비밀번호가 표시되는 것을 원하지 않습니다.

#!/bin/bash

read -p "Enter pw:" -s pw

provide_pw() {
    cat << END
"$pw"
END
}

for i in {1..10}; do
    curl -u $(logname):$(provide_pw) "$url"
done

이 방법은 안전한가요? 이렇게 하면 다른 사용자가 내 비밀번호를 알 수 있나요?

답변1

$(provide_pw)read, cat 및 heredocs와 관련된 모든 작업의 ​​경우 최종 명령 대체는 실제 비밀번호로 대체 됩니다 . 그런 다음 프로세스 세부정보의 일부가 됩니다.

~에서man curl, 에 대한 -u:

작동하는 시스템에서 컬은 프로세스 목록에서 주어진 옵션 인수를 숨깁니다.

따라서 이러한 시스템과 적절하게 설정된 Linux 시스템에서는 비밀번호가 다른 사용자에게 숨겨지지만 다른 곳에서는 , 등을 사용하여 hidepid컬 프로세스의 명령줄을 보면 누구나 비밀번호를 볼 수 있습니다.pstop

read비밀번호를 원하시면 curl다음을 수행해 주세요.

사용자 이름만 지정하면 컬이 비밀번호를 묻는 메시지를 표시합니다.

또한보십시오:컬은 비밀번호가 ps 출력에 나타나지 않도록 어떻게 보호합니까?여기에는 경쟁 조건이 있습니다. 컬을 시작하고 명령줄을 정리하는 사이에 비밀번호가 표시되며, 다른 방법(예: Linux)으로 숨기지 않으면 hidepid해당 창에 있는 모든 사람에게 표시됩니다.

답변2

명령줄 인수에 암호를 입력하는 것은 curl매우 일반적입니다 . 비밀번호를 사용하는 가장 안전한 방법은 아닐 수 있지만 완벽한 것은 없으며 대부분의 경우 선택의 여지가 많지 않습니다.

그러나 비밀번호를 얻는 능력은 전혀 필요하지 않습니다. 간단히 이렇게 할 수 있습니다:

read -rsp "Enter pw: " pw
curl -u "$(logname)":"$pw" "$url"

참고: 백슬래시 이스케이프 문자를 문자 그대로 읽을 수 있도록 명령 -r에 매개변수를 추가했습니다 . 이는 확실히 비밀번호로 수행할 수 있는 작업입니다.read

관련 정보