오픈소스

리눅스에서 chpasswd를 이용해 계정 암호를 바꾸는 방법

Sandra Henry-Stocker | Network World 2021.11.05
chpasswd 명령어를 이용하면 관리자가 사용자 이름과 암호 조합을 전송하는 방법으로 계정 암호를 바꿀 수 있다. 한번에 계정 하나만 변경하거나 파일에 모든 계정 정보를 넣은 후 이 파일을 명령어에 붙이는 방식이 있다. 일단 chpasswd 명령어를 쓰려면 루트 권한이 필요하다. 다음과 같이 입력해 루트 계정으로 변경할 수 있다.
 
# echo nemo:imafish | chpasswd

명령어에 sudo를 함께 쓰는 것이 더 좋다.
 
$ echo skunk:istink! | sudo chpasswd

사용자 이름과 암호는 명령 줄에 서식 없는 텍스트로 입력해야 한다. 다음과 같이 파일 형태로 추가하는 것도 가능하다. 방법은 2가지인데, 하나는 루트로 실행하는 것, 다른 하나는 sudo 명령을 이용하는 것이다.
 
# cat np                    $ cat np
nemo:imafish                nemo:imafish
lola:imadog                 lola:imadog
skunk:istink!               skunk:istink!
# cat np | chpasswd         $ cat np | sudo chpasswd

파일을 사용하려면 shred 같은 명령어를 사용해야 한다. 파일을 삭제한 후 덮어쓰기해 나중에라도 이 사용자 이름과 암호를 디스크에서 복구할 수 없다. 암호화되지 않은 형태의 암호를 시스템에 보관하는 것은 어떤 상황이든 결코 좋은 생각이 아니다. 새 계정의 암호를 설정해야 한다면 처음에는 이 방법을 사용할 수 없다. /etc/shadow 파일 엔트리가 다음과 같이 나타난다.
 
$ sudo grep skunk /etc/shadow
skunk:!!:18935:0:99999:7:::

chpasswd 명령을 사용한 후에 이 엔트리는 해시가 포함된 긴 암호 같은 것으로 바뀐다.
 
$ sudo grep skunk /etc/shadow
skunk:$6$qeZmt/yXbkk$PVwHoUY5X/qv9cDK6KNkDCADd87i4h3bHeyfLFNsvQYdmhzZL8rVRTKB9vLT872Dh21K0/KVBUccZ6Vkg34NK/:18935:0:99999:7:::

echo를 이용해 사용자 이름과 암호를 chpasswd 명령에 추가했다면, 이 명령은 명령어 히스토리에 기록되는데 이 역시 보안 측면에서 좋은 상황이 아니다. 이럴 때는 다음과 같이 히스토리 명령 캡처를 비활성화하는 방법을 사용하면 된다.
 
$ set +o history

기록하고 싶지 않은 chpasswd 명령을 실행한 후에는 다시 본래대로 명령어 히스토리를 기록하도록 돌려놔야 하는데 방법은 다음과 같다.
 
$ set -o history

이렇게 사용자 암호를 변경했다고 해도 이는 어디까지나 임시적인 방법이라는 점을 명심해야 한다. 따라서 계정이 만료되는 시점을 설정하는 것이 좋다. 사용자가 다음에 로그인할 때 자신만 알고 있는 암호로 재설정하도록 해야 한다. 서비스 계정의 암호를 변경했다면 시스템에서 복구할 수 없도록 했는지 확인해야 한다. 다음과 같이 처리하면 된다.
 
$ sudo passwd -e skunk
Expiring password for user skunk.
passwd: Success

editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.