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.