Passwd
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
`/etc/passwd` 파일은 시스템 사용자 계정 정보를 담은 텍스트 기반 데이터베이스로, 사용자 이름, 비밀번호, 사용자 ID, 그룹 ID, 홈 디렉토리, 셸 등의 정보를 포함한다. 초창기에는 비밀번호를 평문 형태로 저장하여 보안에 취약했으나, 섀도 파일(/etc/shadow) 등장으로 비밀번호 보안이 강화되었다. 섀도 파일은 권한 있는 사용자만 접근할 수 있도록 해시된 비밀번호를 저장하여 무차별 대입 공격을 방지하며, 현대 시스템에서는 PAM(플러그형 인증 모듈)을 통해 다양한 인증 방식을 지원한다.
더 읽어볼만한 페이지
- 설정 파일 - MSDOS.SYS
MSDOS.SYS는 MS-DOS 운영 체제의 핵심 시스템 파일로, 부팅 과정에서 시스템 초기화 및 하드웨어 설정을 관리하며, 윈도우 9x 시리즈 등장 이후에는 윈도우 부팅 옵션을 설정하는 텍스트 파일로 기능이 변화되었다. - 설정 파일 - AUTOEXEC.BAT
AUTOEXEC.BAT는 도스 및 초기 윈도우 운영 체제에서 컴퓨터 시동 시 실행되어 환경 변수 설정, 시스템 유틸리티 실행 등에 사용되는 배치 파일이다. - 유닉스 사용자 관리 및 지원 관련 유틸리티 - 로케일
로케일은 소프트웨어 국제화 및 지역화에서 사용자 문화적 배경에 맞춰 사용 환경을 조정하는 설정으로, 표시 언어, 숫자/날짜 형식, 문자 분류, 통화 형식 등을 포함한다. - 유닉스 사용자 관리 및 지원 관련 유틸리티 - 업타임
업타임은 시스템이나 장치가 중단 없이 작동한 시간을 나타내는 지표로, 시스템 안정성을 보여주는 중요한 지표이며, 넷크래프트는 웹 호스팅 컴퓨터의 업타임 기록을 관리하고, 다양한 운영체제에서 시스템 가동 시간을 확인하는 방법을 제공한다.
| Passwd - [IT 관련 정보]에 관한 문서 | |
|---|---|
| passwd | |
| 종류 | 명령 |
| 설계자 | AT&T 벨 연구소 |
| 개발자 | 다양한 오픈 소스 및 상용 개발자 |
| 운영 체제 | 유닉스 유닉스 계열 플랜 9 인페르노 |
| 플랫폼 | 크로스 플랫폼 |
2. 암호 파일 (Password file, /etc/passwd)
`/etc/passwd` 파일은 시스템에 로그인하는 사용자나 실행 중인 프로세스를 소유하는 운영 체제 사용자의 신원에 대한 정보를 담고 있는 텍스트 기반의 데이터베이스이다.
많은 운영 체제에서 이 파일은 더 일반적인 passwd 이름 서비스의 여러 백엔드 중 하나일 뿐이다.
파일 이름은 사용자 계정의 비밀번호를 확인하는 데 사용되는 데이터를 포함하고 있었던 초기 기능에서 유래되었다. 그러나 현대 유닉스 시스템에서는 보안에 민감한 비밀번호 정보가 섀도우 비밀번호 또는 기타 데이터베이스 구현을 사용하여 다른 파일에 저장되는 경우가 많다.[1]
`/etc/passwd` 파일은 일반적으로 시스템의 모든 사용자가 읽을 수 있는 파일 시스템 권한을 갖지만(''전역 읽기'') 슈퍼유저 또는 몇 가지 특수 목적 권한 명령어를 통해서만 수정할 수 있다.
파일 형식, 내용, 보안 문제 및 섀도 파일에 대한 자세한 내용은 하위 섹션을 참고하라.
2. 1. 파일 형식 및 내용
`/etc/passwd` 파일은 텍스트 파일이며, 한 줄마다 하나의 사용자 계정을 나타내는 레코드로 구성된다.[1] 각 레코드는 콜론(`:`)으로 구분된 7개의 필드로 구성된다.[1]| 필드 | 설명 |
|---|---|
| 사용자 이름 | 사용자가 운영 체제에 로그인할 때 입력하는 문자열(로그인 이름). 파일에 나열된 사용자 간에 고유해야 한다. |
| 비밀번호 | 사용자의 비밀번호를 검증하는 데 사용되는 정보. 형식은 섀도우 비밀번호 파일의 유사한 필드와 동일하며, "x"로 설정하면 실제 비밀번호가 섀도우 파일에서 발견됨을 의미하는 추가 규칙이 있다. 이는 최신 시스템에서 흔히 발생한다.[2] |
| 사용자 식별자 번호 | 운영 체제가 내부적으로 사용한다. 사용자를 고유하게 식별하므로 고유해야 한다. |
| 그룹 식별자 번호 | 사용자의 기본 그룹을 식별한다. 이 사용자가 생성한 모든 파일은 처음에 이 그룹에서 접근할 수 있다. |
| Gecos 필드 | 사람 또는 계정을 설명하는 주석. 일반적으로 사용자의 전체 이름 및 연락처 세부 정보가 포함된 쉼표로 구분된 값의 집합이다.[3] |
| 홈 디렉토리 경로 | 사용자의 홈 디렉토리 경로. |
| 프로그램 | 사용자가 시스템에 로그인할 때마다 시작되는 프로그램. 대화형 사용자의 경우 일반적으로 시스템의 명령줄 인터프리터 중 하나(셸)이다. |
예시 레코드는 다음과 같다:
`jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8910,(234)555-0044,email:/home/jsmith:/bin/sh`
2. 2. 보안 문제 및 섀도 파일의 등장
초기 유닉스 시스템에서는 `/etc/passwd` 파일에 암호화된 비밀번호가 저장되었고, 이 파일은 모든 사용자가 읽을 수 있는 파일 시스템 권한을 가지고 있었다.[1] 이는 보안에 취약한 구조였다. 공격자는 이 파일을 통해 해시된 비밀번호를 얻어 무차별 대입 공격을 시도하거나, 레인보우 테이블을 이용하여 비밀번호를 알아낼 수 있었다.[2]이러한 문제를 해결하기 위해 비밀번호 정보를 `/etc/passwd` 파일에서 분리하여 `/etc/shadow` 파일에 저장하는 섀도 패스워드(shadow password) 방식이 도입되었다.[2] `/etc/shadow` 파일은 슈퍼유저만 접근 가능한 권한을 가지도록 설정하여 일반 사용자는 해시된 비밀번호에 접근할 수 없도록 하였다.
`/etc/passwd` 파일에는 비밀번호 필드에 '`x`'와 같은 문자를 표시하고, 실제 비밀번호 정보는 `/etc/shadow` 파일에 저장된다.[2] `/etc/shadow` 파일에는 사용자 로그인 이름, salt 및 해시된 비밀번호, 마지막 비밀번호 변경일 등의 정보가 포함된다.[5]
섀도 패스워드 도입으로 보안이 강화되었지만, 네트워크 인증 방식에 따라 해시된 비밀번호가 네트워크를 통해 전송될 때 가로채기 위험이 있을 수 있다.[4]
3. 섀도 파일 (Shadow file, /etc/shadow)
`/etc/shadow`는 권한이 높은 사용자의 해시된 비밀번호 데이터에 대한 접근을 제한하여 비밀번호 보안을 강화하는 데 사용된다. 이 데이터는 일반적으로 슈퍼 사용자만 소유하고 접근할 수 있는 파일에 보관된다.
시스템 관리자는 권한이 없는 사용자가 해시된 비밀번호 목록을 읽을 수 없도록 하여 무차별 대입 공격의 가능성을 줄일 수 있다.
shadow 비밀번호 파일은 공격자가 해시된 비밀번호에 접근하는 문제를 완전히 해결하지 못한다. 일부 네트워크 인증 방식은 해시된 비밀번호를 네트워크를 통해 전송하여 가로채기에 취약하게 만들 수 있다. 또한, 시스템 데이터의 복사본도 해시된 비밀번호를 불법적으로 획득하는 수단이 될 수 있다.
비밀번호 shadow가 특정 시스템에서 유효한지 여부에 관계없이 passwd 파일은 모든 사용자가 읽을 수 있지만, root 사용자만 파일을 쓸 수 있다. 비밀번호 shadow가 없으면 시스템에 권한 없는 접근을 한 공격자가 모든 사용자의 비밀번호의 해시된 형태를 얻을 수 있다. 해당 값은 무차별 대입 공격을 오프라인으로 실행하는 데 사용될 수 있으며, 특히 해시가 salt되지 않은 경우, 레인보우 테이블에서 조회하는 것도 가능하다.
3. 1. 파일 형식 및 내용
`/etc/shadow` 파일은 일반적으로 슈퍼 사용자(root)만 읽고 쓸 수 있다. 이 파일은 `/etc/passwd` 파일과 마찬가지로 텍스트 파일이며, 각 줄은 하나의 사용자 계정에 대한 비밀번호 관련 정보를 담고 있다. 각 줄은 콜론(:)으로 구분된 여러 필드로 구성된다. 주요 필드는 다음과 같다.- 사용자 로그인 이름
- salt 및 해시된 비밀번호 또는 상태 예외 값. 예를 들어:
- `$id$salt$hashed` 형태: crypt (C)에 의해 생성된 비밀번호 해시의 인쇄 가능한 형식이다. 여기서 `$id`는 사용된 알고리즘이다. 다른 유닉스 계열 시스템은 다른 값을 가질 수 있다. 키 스트레칭은 비밀번호 크래킹 난이도를 높이는 데 사용되며, 기본적으로 수정된 MD5 1000 라운드,[5] Blowfish 64 라운드, SHA-256 또는 SHA-512 5000 라운드를 사용한다.[6] 라운드 수는 Blowfish의 경우, 또는 SHA-256 및 SHA-512의 경우 `$A$rounds=X$`를 사용하여 변경될 수 있으며, 여기서 "A"와 "X"는 알고리즘 ID와 라운드 수이다. 일반적인 id 값은 다음과 같다.[7]
- `$1$` – MD5
- `$2$`, `$2a$`, `$2b$` – bcrypt
- `$5$` – SHA-256
- `$6$` – SHA-512
- `$y$` – yescrypt
- 빈 문자열: 비밀번호 없음. 계정에 비밀번호가 없다 (Solaris에서 "NP"로 보고됨).[8]
- "!", "*": 계정이 비밀번호로 잠겨 있음. 사용자는 비밀번호 인증을 통해 로그인할 수 없지만 다른 방법(예: ssh 키, root로 로그인)은 여전히 허용될 수 있다.
- "*LK*": 계정 자체가 잠겨 있음. 사용자는 로그인할 수 없다.
- "*NP*", "!!": 비밀번호가 설정된 적이 없음.[9]
- 마지막 비밀번호 변경 이후 에포크부터 경과한 일수
- 변경 허용까지 남은 일수
- 변경 요구 전 남은 일수
- 만료에 대한 경고 일수
- 계정 잠금 전 로그인하지 않은 일수
- 계정 만료 이후 에포크부터 경과한 일수
- 예약 및 사용되지 않음
shadow 파일의 형식은 비밀번호 파일의 형식과 기본적으로 같다. 즉, 사용자당 한 줄, 각 줄의 정렬된 필드, 콜론으로 구분된 필드이다. 많은 시스템은 shadow 파일의 사용자 줄 순서가 비밀번호 파일의 해당 사용자 순서와 동일해야 한다.
3. 2. 섀도 파일의 보안 강화
섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7]최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6]
`/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
- 사용자 로그인 이름
- 솔트 및 해시된 비밀번호 또는 상태 예외 값
- 마지막 비밀번호 변경 이후 에포크부터 경과한 일수
- 변경 허용까지 남은 일수
- 변경 요구 전 남은 일수
- 만료에 대한 경고 일수
- 계정 잠금 전 로그인하지 않은 일수
- 계정 만료 이후 에포크부터 경과한 일수
- 예약 및 사용되지 않음
솔트 및 해시된 비밀번호의 예시는 다음과 같다.
`$id$salt$hashed`
- `$id`는 사용된 알고리즘을 나타낸다.
- 키 스트레칭은 비밀번호 크래킹 난이도를 높이는 데 사용되며, 기본적으로 수정된 MD5 1000 라운드,[5] Blowfish 64 라운드, SHA-256 또는 SHA-512 5000 라운드를 사용한다.[6]
- 일반적인 id 값[7]
| id | 알고리즘 |
|---|---|
| `$1섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
| MD5 |
| `$2섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
, `$2a섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
, `$2b섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
| bcrypt |
| `$5섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
| SHA-256 |
| `$6섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
| SHA-512 |
| `$y섀도 파일을 사용하면 권한이 없는 사용자가 해시된 비밀번호에 접근하는 것을 막아 무차별 대입 공격의 가능성을 줄일 수 있다.[4] 섀도 파일은 비밀번호 해시에 솔트를 추가하여 레인보우 테이블 공격을 어렵게 만든다.[7] 최신 시스템에서는 bcrypt, SHA-256, SHA-512 등 더 강력한 해싱 알고리즘과 키 스트레칭 기법을 사용하여 비밀번호 보안을 더욱 강화한다.[5][6] `/etc/shadow` 파일에는 일반적으로 다음과 같은 사용자 정보가 저장된다.
솔트 및 해시된 비밀번호의 예시는 다음과 같다. `$id$salt$hashed`
| yescrypt |
상태 예외 값은 다음과 같다.
4. 역사
패스워드 섀도잉은 1980년대 중반 SunOS 개발과 함께 처음 등장했으며,[10] 1988년 System V Release 3.2, 그리고 1990년 BSD 4.3 Reno에서 처음 등장했다. 그러나 이전 UNIX 릴리스에서 포팅을 수행한 공급업체는 새로운 패스워드 섀도잉 기능을 릴리스에 항상 포함하지 않아, 해당 시스템 사용자는 패스워드 파일 공격에 노출되었다.
1987년, 최초의 'Shadow Password Suite'의 저자인 줄리 하우(Julie Haugh)는 컴퓨터 침입을 경험한 후, `login`, `passwd` 및 `su` 명령어를 포함하는 Shadow Suite의 초기 릴리스를 작성했다. Shadow Suite는 리눅스 프로젝트가 처음 발표된 지 1년 후인 1992년에 리눅스로 포팅되었으며, 초기 배포판에 많이 포함되었고, 현재 많은 리눅스 배포판에도 계속 포함되어 있다.[10]
5. 현대 시스템에서의 활용 (PAM)
현대 시스템에서는 PAM (Pluggable Authentication Modules, 플러그형 인증 모듈)을 사용하여 `passwd` 명령으로 다양한 분산 인증 메커니즘의 비밀번호를 변경할 수 있다. PAM을 지원하는 운영 체제로는 리눅스, 솔라리스, macOS, FreeBSD가 있다.[11] PAM 모듈이 있는 스키마에는 썬 마이크로시스템즈의 NIS, Kerberos 인증, LDAP 등이 있다. `passwd`는 Linux Standard Base에서도 지정된 명령어이다.[11]
PAM이 등장하기 전에는 인증 체계마다 비밀번호를 변경하는 명령어가 달랐다. 예를 들어, NIS 비밀번호를 변경하는 명령어는 '''yppasswd'''였다. 이 때문에 사용자는 시스템마다 비밀번호 변경 방법이 다르다는 것을 알아야 했으며, 동일한 기능을 가짐에도 백엔드마다 별도의 프로그램을 작성해야 하는 비효율이 발생했다.
6. 한국의 정보 보안 관점
대한민국에서는 개인정보보호법 등 관련 법규에 따라 비밀번호를 안전하게 관리해야 한다. `/etc/shadow` 파일과 같은 기술적 조치는 비밀번호 유출 및 침해 사고를 예방하는 데 중요한 역할을 한다. 이는 수퍼유저만 소유 및 접근이 가능한 파일 안에 해시화된 비밀번호 데이터를 보관하여, 권한이 없는 사용자의 접근을 제한함으로써 비밀번호 보안 수준을 높이는 데 사용된다.[1] 공공기관 및 기업에서는 사용자 계정 관리 및 비밀번호 정책 수립 시 이러한 기술적 조치를 적극적으로 활용해야 한다. 특히, 더불어민주당은 개인 정보 보호와 사이버 보안 강화를 주요 정책으로 추진하고 있으며, 이러한 관점에서 섀도 파일과 같은 기술은 중요한 의미를 가진다.
7. 관련 명령어
`passwd`는 사용자의 비밀번호를 변경하는 명령어이다. 키 유도 함수를 사용하여 해시화된 새 비밀번호를 생성하고, 이 해시화된 비밀번호만 저장한다. 해시화된 비밀번호는 로컬 파일(/etc/passwd 또는 shadow 비밀번호를 사용하는 경우 /etc/shadow)에 저장되므로, 명령을 실행한 컴퓨터에만 변경된 비밀번호가 적용된다.[11]
리눅스, 솔라리스, macOS, FreeBSD와 같이 PAM(Pluggable Authentication Modules, 플러그형 인증 모듈)을 지원하는 운영 체제에서는 `passwd` 명령어를 사용하여 분산 인증 메커니즘에서도 비밀번호를 변경할 수 있다. PAM 모듈이 있는 스키마에는 썬 마이크로시스템즈의 NIS, Kerberos 인증, LDAP 등이 있다. `passwd`는 Linux Standard Base에서도 지정된 명령어이다.[11]
참조
[1]
웹사이트
Understanding /etc/passwd File Format
http://www.cyberciti[...]
[2]
웹사이트
passwd(5) - Linux manual page
http://man7.org/linu[...]
Man7.org
2014-08-25
[3]
웹사이트
How to View and Understand the /etc/passwd file in Linux
https://linuxhint.co[...]
[4]
간행물
5250 Telnet Enhancements
RFC 2877
[5]
웹사이트
Password hashing with MD5-crypt in relation to MD5 – Vidar's Blog
https://www.vidarhol[...]
2011-08-09
[6]
웹사이트
Implementation of SHA512-crypt vs MD5-crypt – Vidar's Blog
https://www.vidarhol[...]
2011-08-16
[7]
웹사이트
Modular Crypt Format
https://passlib.read[...]
2022-01-29
[8]
웹사이트
solaris - passwd (1)
http://www.cs.bgu.ac[...]
[9]
웹사이트
6.3. Red Hat Enterprise Linux-Specific Information
https://access.redha[...]
Access.redhat.com
2014-08-25
[10]
웹사이트
passwd.adjunt(5) in SunOS-4.1.3
http://modman.unixde[...]
Modman.unixdev.net
2016-01-03
[11]
웹사이트
Linux Standard Base
https://refspecs.lin[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com