ssh를 통해 비밀번호를 가진 사용자를 만들 수 없습니다.


13

다음과 같이 ssh (루트 권한으로)를 통해 비밀번호를 가진 사용자를 만들려고했습니다.

ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser

그렇게함으로써, 나는 성공적이라는 계정을 만들 수 있습니다 newuser(인,하지만 예상 비밀번호를 사용하여 로그인 할 수 있습니다 1234)

큰 따옴표를 추가해도 아무런 차이가 없습니다.

ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"

그리고 해시 된 암호를 생성하여 로컬로 변수로 저장할 수 있는지 궁금하지만 여전히 운이 없습니다.

password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"

내가 놓친 것이 있습니까? 미리 감사드립니다!


다른 사용자가 명령 행 인수를 볼 수 있으므로 명령 행에서 비밀번호를 전달하는 것은 좋지 않습니다. 이에 대한 heemayl의 답변을 참조하십시오. 그 외에도 이것은 XY 문제 처럼 들립니다 . 실제로 무엇을 달성하려고합니까? 아무도 모르는 계정 암호의 요점은 무엇입니까? 요점은 암호를 통한 로그인을 허용하지 않는 계정을 만드는 것이라면 암호를 전혀 설정하지 않으면 암호 기반 로그인이 우분투의 기본 정책으로 비활성화됩니다.
— David Foerster

답변:


22

이것은 전형적인 인용 문제입니다.

문제점 : 따옴표 나 큰 따옴표없이 명령 대체 ( $()) 및 변수 확장 (에 $의해 리턴 된 해시 된 암호 의 s가 openssl변수 표시기로 처리됨)이 원격 쉘이 아닌 로컬 환경에서 수행되고 있습니다.

솔루션 : 로컬 환경에서 명령 대체 및 변수 확장을 막으려면 로컬 쉘에서 useradd사용 된 명령 주위에 작은 따옴표를 사용 ssh하십시오. 확장은 원격 비 로그인 비대화 형 쉘에서 이루어집니다.

ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'

인용문을 참고하십시오.

보안 문제들:

  • SSH root로그인을 비활성화해야합니다. 활성화해야하는 경우 키 기반 인증 만 허용해야합니다.

  • MD5는 이미 고장 났으며 소금이 없으면 간단한 레인보우 테이블 공격을받습니다 (무차별 강제 / 사전 공격도 필요 없음). openssl passwd그래도 무작위 소금을 생성합니다. 어쨌든, 소금을 뿌린 채 SHA-2 사용을 고려해야합니다.

  • 명령에 인수로 전달 된 비밀번호는 (원격) 시스템의 다른 프로세스에서 볼 수 있습니다. 이것은 procfs마운트 방법 ( hidepid)과 명령이 다시 작성 되는지 여부에 따라 다릅니다 (이 경우에는 그렇지 않습니다)


1
매력처럼 작동하고 추가 정보를 주셔서 감사합니다!
— amigcamel

1
md5crypt 암호 해시는 소금을 가지고 있습니다 ...
— ilkkachu

@ilkkachu MD5는 안전한 해시가 아닙니다. 관심이 있으시면 정보 보안 검색을 실행하십시오 . 실제로 복합 알고리즘 또는 암호화 라이브러리를 사용해야하지만 SHA-2는 MD5보다 훨씬 낫습니다.
— wizzwizz4

1
@ wizzwizz4 예, 잘 알려져 있지만이 답변의 정보가 잘못되었다는 사실을 변경하지는 않습니다. :)
— hobbs

2
@ wizzwizz4는 암호 해시 ( md5crypt 지원) crypt(3)리눅스 및 표시 $1$는 AS 식별자는 동일한 방식이 아닌 일반 MD5 해시 알고리즘과 동일 $5$하고 $6$ 암호 해시가 하나없는 일반 SHA-256 및 SHA-512이다 . MD5 기반 방법에는 고정 된 반복 횟수가 있으며이 방법이 가장 큰 문제입니다.
— ilkkachu

7

@heemayl이 지적했듯이 MD5 암호 해시 알고리즘은 오래되었으며 현재 시스템은 최신 SHA-2 기반 암호 해시이며 사용자 정의 가능한 작업 요소가 있습니다. 그러나 OpenSSL 명령 행 도구는이를 지원하지 않는 것 같습니다.

chpasswd유틸리티는 , 그러나, 당신은 시스템 설정에 따라 사용자의 암호를 변경할 수 있습니다.

이를 통해 새 사용자를 작성하고 원격에서 비밀번호를 변경할 수 있습니다.

echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd' 

chpasswd명령 행이 아닌 stdin에서 사용자 이름과 비밀번호를 가져옵니다. 이것은 명령 행 인수가 시스템의 다른 모든 프로세스에 대해 표시되므로 openssl passwd원격에서 실행 되는 경우 시스템의 모든 프로세스에 비밀번호가 순간적으로 표시 되므로 실제로 이점이 있습니다 .

시스템 crypt(3)기능으로 알려진 암호 해시를 생성하기 위해 기성품 명령 줄 유틸리티가 있는지 확실하지 않습니다 . Perl에는 crypt기능이 내장되어 있지만 적절한 소금을 생성해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.