패스워드
passwd![]() | |
원본 작성자 | AT&T 벨 연구소 |
---|---|
개발자 | 다양한 오픈 소스 및 상업용 개발자 |
운영 체제 | Unix, Unix 유사, Plan 9, Inperno |
플랫폼 | 크로스 플랫폼 |
유형 | 명령 |
passwd는 사용자의 암호를 변경하는 데 사용되는 Unix, Plan 9, Inperno 및 대부분의 Unix 유사 운영 체제에 대한 명령이다.사용자가 입력한 비밀번호는 키 파생 기능을 통해 실행되어 새 비밀번호의 해시 버전을 만들어 저장된다.해시 버전만 저장되며, 입력한 암호는 보안상의 이유로 저장되지 않는다.
사용자가 로그온하면 로그온 프로세스 중 사용자가 입력한 암호가 동일한 키 파생 기능을 통해 실행되며, 결과 해시 버전을 저장된 버전과 비교한다.해시가 동일할 경우 입력한 암호가 정확한 것으로 간주되어 사용자가 인증된다.이론적으로는 서로 다른 두 개의 암호가 같은 해시를 생성하는 것이 가능하다.그러나 암호해시함수는 동일한 해시를 생산하는 암호를 찾는 것이 매우 어렵고 실질적으로 실행 불가능한 방식으로 설계되어 생산한 해시가 저장된 해시와 일치하면 사용자를 인증할 수 있다.
passwd 명령은 로컬 계정의 암호를 변경하는 데 사용될 수 있으며, 대부분의 시스템에서는 NIS, Kerberos 또는 LDAP와 같은 분산 인증 메커니즘에서 관리되는 암호를 변경하는 데도 사용할 수 있다.
암호 파일
그/etc/passwd
file은 시스템에 로그인할 수 있는 사용자에 대한 정보의 텍스트 기반 데이터베이스 또는 실행 중인 프로세스를 소유하는 다른 운영 체제 사용자 ID이다.
많은 운영 체제에서 이 파일은 보다 일반적인 패스워드 이름 서비스에 대해 가능한 많은 백엔드 중 하나에 불과하다.
파일 이름은 사용자 계정의 암호를 확인하는 데 사용된 데이터를 포함하고 있는 초기 기능 중 하나에서 유래한다.그러나 현대의 유닉스 시스템에서는 보안에 민감한 암호 정보가 섀도 암호 또는 기타 데이터베이스 구현을 사용하여 다른 파일에 저장되는 경우가 많다.
그/etc/passwd
파일에는 일반적으로 슈퍼 유저에 의해서만 또는 소수의 특수 목적의 특권 명령을 사용하여 수정될 수 있지만, 시스템의 모든 사용자가 읽을 수 있도록 허용하는 파일 시스템 권한이 있다.
그/etc/passwd
file은 한 줄에 하나의 레코드가 있는 텍스트 파일이며, 각각은 사용자 계정을 설명한다.각 기록은 콜론으로 구분된 7개의 분야로 구성되어 있다.파일 내의 레코드 순서는 일반적으로 중요하지 않다.
예시 기록은 다음과 같다.
jsmith:x:1001:1000:Joe Smith, Room 1007, (234)555-8910, (234)555-0044,이메일:/home/jsmith:/bin/sh
필드는 왼쪽에서 오른쪽으로 순서대로 다음과 같다.[1]
jsmith
: 사용자 이름: 사용자가 운영 체제에 로그인할 때 입력하는 문자열: 로그 이름.파일에 나열된 사용자 간에 고유해야 함.x
: 사용자의 비밀번호 유효성 검사에 사용되는 정보.형식은 섀도 비밀번호 파일에 있는 유사 필드와 동일하며, 이를 "x"로 설정하면 실제 비밀번호가 섀도 파일에서 발견됨을 의미한다는 추가 규약이 있어 현대 시스템에서 흔히 볼 수 있는 형식이다.[2]1001
: 운영 체제에서 내부 목적으로 사용하는 사용자 식별자 번호.독특할 필요는 없다.1000
: 사용자의 기본 그룹을 식별하는 그룹 식별자 번호. 이 사용자가 만든 모든 파일은 처음에 이 그룹에 액세스할 수 있다.Joe Smith,Room 1007...
: 지코스 분야, 인물이나 계정을 설명하는 해설.일반적으로 사용자의 전체 이름과 연락처 세부 정보를 포함하여 쉼표로 구분된 값 집합이다./home/jsmith
: 사용자의 홈 디렉토리에 대한 경로./bin/sh
: 사용자가 시스템에 로그인할 때마다 시작되는 프로그램.대화형 사용자의 경우 일반적으로 시스템의 명령줄 인터프리터(셸) 중 하나이다.
섀도 파일
/etc/shadow
해시 암호 데이터에 대한 모든 권한을 제외한 모든 사용자의 액세스를 제한함으로써 암호의 보안 수준을 높이는 데 사용된다.일반적으로, 그 데이터는 슈퍼 유저만이 소유하고 접근 가능한 파일에 보관된다.
시스템 관리자는 권한 없는 사용자가 해시된 암호 목록을 읽을 수 없도록 설정하여 무차별 공격의 가능성을 줄일 수 있다.이렇게 하는 것이 분명한 방법은 바로 그 일을 만드는 것이다.passwd
루트 사용자만 읽을 수 있는 데이터베이스그러나 이렇게 하면 사용자 이름 대 사용자 이름 매핑과 같은 파일의 다른 데이터에 대한 액세스가 제한되어 기존의 많은 유틸리티와 프로비저닝이 중단된다.하나의 해결책은 세계적으로 읽을 수 있는 패스워드 파일의 다른 데이터와 분리된 암호 해시를 보유하는 "그림자" 암호 파일이다.로컬 파일의 경우 일반적으로/etc/shadow
리눅스 및 유닉스 시스템 또는/etc/master.passwd
BSD 시스템에서는 각각 루트만 읽을 수 있다. (전통적인 "전원적인 루트" 보안 모델이 있는 시스템에서는 루트 사용자가 어떤 경우에도 다른 방법으로 정보를 얻을 수 있기 때문에 데이터에 대한 루트 액세스는 허용 가능한 것으로 간주된다.)사실상 최근의 모든 유닉스 유사 운영체제는 그림자 암호를 사용한다.
섀도 암호 파일은 해시 암호에 대한 공격자의 접근 문제를 완전히 해결하지 못하는데, 일부 네트워크 인증 체계는 해시 암호를 네트워크(예: 텔넷[3])를 통해 전송함으로써 작동하여 가로채기에 취약하게 만들기 때문이다.테이프나 광학 매체에 기록된 시스템 백업과 같은 시스템 데이터의 사본은 해시 암호를 불법적으로 획득하는 수단이 될 수도 있다.또 합법적인 비밀번호 검사 프로그램이 사용하는 기능은 악성 프로그램이 빠른 속도로 다수의 인증확인을 할 수 없도록 작성해야 한다.
암호 섀도잉이 특정 시스템에 적용되는지 여부에 관계없이 패스워드 파일은 모든 사용자가 읽을 수 있어 다양한 시스템 유틸리티(예: grep)가 작동할 수 있다(예를 들어, 시스템에 존재하는 사용자 이름이 파일 내부에서 발견될 수 있도록 하기 위해). 반면 루트 사용자만이 쓸 수 있다.이것은 시스템에 대한 권한이 없는 액세스 권한을 가진 공격자가 모든 사용자의 암호 해시 형식을 얻을 수 있다는 것을 의미한다.이러한 값은 비정상적인 횟수의 로그인 시도 실패를 감지하도록 설계된 시스템 보안 조치를 사용하지 않고 해시된 암호에 대해 가능한 암호를 비교적 신속하게 테스트하는 데 사용될 수 있다.특히 해시가 소금에 절이지 않을 때는 레인보우 테이블에서 해시 패스워드를 조회할 수도 있는데, 독특한 해시의 패스워드를 돌려주기 위해 특별히 만들어진 데이터베이스다.
섀도핑된 암호 체계를 사용 중인 경우/etc/passwd
파일에는 일반적으로 '과 같은 문자가 표시된다.*
' 또는 'x
' 해시된 암호 대신 각 사용자의 암호 필드에서/etc/shadow
일반적으로 다음과 같은 사용자 정보를 포함한다.
- 사용자 로그인 이름
- 소금 및 해시 암호 또는 상태 예외 값(예::
$id$salt$hashed
, 암호화(C)에 의해 생성된 암호 해시의 인쇄 가능한 형태, 여기서$id
사용되는 알고리즘이다.다른 유닉스 유사 시스템은 NetBSD와 같이 다른 값을 가질 수 있다.키 스트레칭은 비밀번호 크래킹 난이도를 높이기 위해 사용되며, 기본적으로 수정된 MD5 1000라운드,[4] 블로피쉬 64라운드, SHA-256 또는 SHA-512 5000라운드를 사용한다.[5]회진 횟수는 복어의 경우 또는 SHA-256 및 SHA-512를 사용하여 변경할 수 있다.$A$rounds=X$
여기서 "A"와 "X"는 알고리즘 ID와 라운드 수입니다.공통 ID 값은 다음과 같다.[6]- 빈 문자열 – 암호 없음, 계정에 암호가 없음("NP"[7]를 사용하여 Solaris에서 암호로 보고됨).
- "!", "*" – 계정이 비밀번호 잠김, 사용자는 비밀번호 인증을 통해 로그인할 수 없지만 다른 방법(예: ssh 키, 루트로 로그인)은 여전히 허용될 수 있다.
- "*LK*" – 계정 자체가 잠겨 있어 사용자가 로그인할 수 없음
- "*NP*", "!!" – 암호가 설정된[8] 적이 없음
- 마지막 암호 변경 이후 일 수
- 변경이 허용될 때까지 일
- 변경 전 일 수 필요
- 만료 날짜 경고
- 계정을 잠그기 전에 로그인하지 않은 후 일
- 계정이 만료된 이후 일 수
- 예약 및 미사용
섀도파일의 형식은 간단하며 기본적으로 암호파일의 형식과 동일하며, 사용자당 한 줄씩, 각 줄에 순서가 지정된 필드, 콜론으로 구분된 필드 등이 있다.많은[quantify] 시스템이 섀도 파일의 사용자 줄 순서와 암호 파일의 해당 사용자의 순서가 일치하도록 요구한다.
역사
암호 섀도잉에 앞서, Unix 사용자의 해시 암호는 레코드의 두 번째 필드에 저장되었다./etc/passwd
file (위에서 설명한 7-필드 형식 내에서
암호 섀도잉은 1980년대 중반 SunOS,[9] 1988년 System V Release 3.2, 1990년 BSD4.3 Reno가 개발되면서 유닉스 시스템에 처음 등장했다.그러나 이전 UNIX 릴리스에서 포트를 수행한 벤더는 항상 새로운 암호 섀도잉 기능을 릴리스에 포함하지 않아 이러한 시스템의 사용자는 암호 파일 공격에 노출되었다.
시스템 관리자는 또한 연결된 각 시스템의 파일이 아닌 NIS와 LDAP와 같은 분산 데이터베이스에 비밀번호 저장을 준비할 수 있다.NIS의 경우 섀도 패스워드 메커니즘이 여전히 NIS 서버에서 사용되는 경우가 많고, 다른 분산 메커니즘에서는 다양한 사용자 인증 컴포넌트에 대한 접근 문제가 기반 데이터 저장소의 보안 메커니즘에 의해 처리된다.
1987년, 최초의 섀도 패스워드 스위트(Shadow Password Suite)의 저자 Julie Haugh는 컴퓨터 침입을 경험하고, 이 제품들을 담은 섀도 스위트(Shadow Suite)의 초기 릴리즈를 작성했다.login
,passwd
그리고su
명령어SCO Xenix 운영 체제를 위해 작성된 원래의 릴리즈는 빠르게 다른 플랫폼에 포팅되었다.섀도 스위트는 리눅스 프로젝트의 최초 발표 1년 후인 1992년에 리눅스로 포팅되어 많은 초기 배포에 포함되었고, 현재 많은 리눅스 배포에 계속 포함되어 있다.
과거에는 서로 다른 인증 체계에서 비밀번호를 변경하는 다른 명령이 필요했다.예를 들어 NIS 암호를 변경하는 명령은 yppasswd였다.이를 위해 사용자는 시스템마다 비밀번호를 변경하는 다른 방법을 알아야 했고, 백엔드가 다른 동일한 기능을 수행하는 다양한 프로그램에서 코드를 낭비하는 결과를 초래했다.대부분의 구현에서는 이제 단일 passwd 명령이 있으며, 실제로 암호가 변경되는 위치에 대한 제어는 PAM(플러그형 인증 모듈)을 통해 사용자에게 투명하게 처리된다.예를 들어, 사용되는 해시의 유형은 의 구성에 의해 지시된다.pam_unix.so
모듈기본적으로 MD5 해시가 사용됐고, 기존 모듈도 복어, SHA256, SHA512와 같은 더 강한 해시가 가능하다.
참고 항목
참조
- ^ 이해
/etc/passwd
파일 형식 - ^ "passwd(5) - Linux manual page". Man7.org. Retrieved 2014-08-25.
- ^ RFC 2877: 5250 텔넷 향상
- ^ MD5와 관련하여 MD5-crypt를 사용한 암호 해싱
- ^ SHA512-crypt 대 MD5-crypt의 구현
- ^ "Modular Crypt Format". Archived from the original on 2022-01-07. Retrieved 2022-01-29.
- ^ "solaris - passwd (1)". cs.bgu.ac.il. Archived from the original on 2013-12-17.
- ^ "6.3. Red Hat Enterprise Linux-Specific Information". Access.redhat.com. Retrieved 2014-08-25.
- ^ "passwd.adjunt(5) in SunOS-4.1.3". Modman.unixdev.net. Retrieved 2016-01-03.
외부 링크
- /etc/passwd를 설명하는 Unix First Edition의 수동 페이지
- FreeBSD 일반 명령 설명서 : 사용자의 인증 토큰 업데이트 –
- Plan 9 Programmer's Manual, 1권 –
- 설명서 없음 – 일반 명령
- 섀도 암호 사용을 제어하는 명령줄 도구인 authconfig