linux 계열에서 계정을 생성할 땐 보통 useradd나 adduser 등의 명령어를 사용합니다. 이번 포스팅에서는 계정 생성 명령어 없이 파일 수정만으로 계정을 생성해보도록 하겠습니다. 따라한 후 스스로 다시 할 수 있게 스냅샷을 미리 찍어두는 것을 추천합니다.
1. /etc/passwd 파일 수정
먼저 우리는 /etc/passwd 파일이 무엇이고, 그 구조가 어떻게 되는지 알 필요가 있습니다. /etc/passwd 파일은 아래 표처럼 총 7개의 필드로 이루어지며 계정에 대한 정보를 저장합니다.
쉘에서 cat /etc/passwd를 실행해보면 미리 생성되어 있는 root 계정이나 시스템 계정들의 정보를 볼 수 있습니다. 우리도 이 구조에 맞춰서 새로운 계정을 생성할 것입니다.
먼저 생성할 계정의 정보는 아래와 같습니다.
- 계정명: matiii
- 패스워드: martina0126
- UID: 126
- GID: 126
- 계정 설명: just me
- 홈 디렉터리: /home/matiii
- 쉘: /bin/bash
그럼 vi /etc/passwd 를 실행하여 위 계정 정보를 입력해봅시다. 그런데, /etc/passwd 파일의 두 번째 필드는 패스워드가 암호화되었다는 뜻의 'x'가 들어가있던데, 수동으로는 어떻게 입력해야 할까요?
1) 만약 두 번째 필드에 비밀번호를 그대로 적는다면?
일단 아래와 같이 /etc/passwd 파일에 비밀번호도 그대로 적어 삽입해봅시다.
그랬더니 바로 문제가 보입니다. 먼저 이 상태로 cat /etc/passwd를 실행하면 방금 만든 계정만 비밀번호가 훤히 보인다는 것입니다. pwconv를 실행하고 나면 해당 필드의 값이 'x'로 변하긴 하지만, 이번엔 /etc/shadow에 암호화 따윈 없고 그대로 보입니다.
2) 그래서 우리는 /etc/passwd 파일에 비밀번호를 지정하면 안됩니다. 비밀번호를 저장하는 두 번째 필드를 비워두거나 'x'를 입력하여 아래와 같이 입력해봅시다.
2. /etc/shadow 파일 수정
위에서 설정한 /etc/passwd 파일의 수정으로, 이제 계정 생성에 대한 첫 단계를 끝냈습니다. 다음으로는 계정에 대한 비밀번호를 암호화하여 저장하는 /etc/shadow 파일에 대한 설정을 진행합니다. 지금 문제는, /etc/shadow 파일에 아예 'matiii'라는 계정이라는 문자열 조차 없다는 것입니다.
게다가 /etc/shadow 파일은 비밀번호를 암호화해서 저장하기 때문에 직접 값을 집어넣기도 힘듭니다.
이때는 passwd matiii를 입력해 패스워드를 새로 지정해주면 됩니다.
자 이제 /etc/shadow 파일에도 matiii라는 계정에 대한 정보가 생겼습니다.
여기에 추가로 4, 5, 6번째 필드에 값을 추가합시다. 각각 패스워드 최소 사용 기간을 1일, 최대 사용 기간을 90일로 설정하고 만기 경고 메시지는 7일 전부터 띄운다는 뜻입니다.
3. /etc/group 파일 수정
/etc/passwd와 /etc/shadow 파일의 설정이 끝났으니, 다음엔 /etc/group 파일을 수정해야 합니다. 계정을 생성할 때 UID와 GID를 126으로 설정했으나, 현재 /etc/group 에서는 GID=126인 그룹이 없기 때문입니다.
/etc/group 파일의 구조는 아래와 같습니다.
vi /etc/group 명령어를 실행하여 matiii라는 계정에 대한 GID=126 값을 삽입해줍니다.
4. passwd 설정, /etc/gshadow 파일 확인
그룹을 할당하였으니 /etc/group과 관련된 파일을 또 설정해주어야 합니다. gpasswd matiii를 입력하여 먼저 그룹에 대한 비밀번호인 gpasswd를 설정해줍니다.
그 후 /etc/gshadow에서 아래와 같이 matiii 라는 계정에 대한 검색을 해보면 잘 암호화되어 들어가있는 것을 볼 수 있습니다.
추가로 wheel 그룹에도 넣어주었습니다.
5. /etc/skel 파일 수정
/etc/skel 파일은 새로운 계정을 생성할 때 만들어지는 홈 디렉터리의 뼈대를 설정하는 파일입니다. 다시 말해, /etc/skel 파일에 기본적으로 저장된 모든 디렉터리와 파일을 새 계정이 생성될 때 모두 복사해 그 뼈대를 이뤄줍니다.
그런데 지금 /etc/passwd 에서 계정 matiii에 대한 홈 디렉터리를 설정해주었는데도 불구하고 제대로 된 홈 디렉터리가 보이지 않습니다. 이 때 /etc/skel 파일의 디렉터리를 수동으로 복사하면 됩니다.
현재 /etc/skel 파일에는 5개의 숨겨진 파일이 있습니다. 이 중 .bash_logout, .bash_profile, .bashrc 파일은 필수 파일로, 그 외는 설정에 따라 약간씩 다를 수 있습니다.
먼저 mkdir /home/matiii 명령어를 실행해 계정 matiii의 홈 디렉터리를 만들어줍니다.
그 다음엔, /etc/skel의 필수 파일인 .bash_logout, .bash_profile, .bashrc 파일을 /home/matiii라는 계정 matiii의 홈 디렉터리에 복사해줍니다.
6. 계정의 소유권과 권한 변경
이제 /etc/passwd, /etc/shadow, /etc/group, /etc/skel 파일에 대한 설정을 마쳤습니다. 마지막으로 계정에 대한 소유권과 권한에 대한 설정을 해줍니다.
ls -al를 통해 계정 목록을 보면, 기존의 명령어 존재했던 mika라는 계정과 지금 생성하고 있는 matiii라는 계정이 다른 점이 있습니다.
위 구조의 각 필드는
- 파일/디렉터리 구분 (파일은 -, 디렉터리는 d)
- 파일의 허가권 (rwxr-xr-x)
- 연결된 링크 수 (26 등)
- 해당 파일의 소유자 (root, mika 등)
- 해당 파일의 소유 그룹 (root, mika 등)
- 파일 크기 (4096 등)
- 파일의 최종 수정 일시 (Mar 9 10:55 등)
를 뜻합니다. 이 때 두 번째 필드는 리눅스 허가권을 의미하는데, 가장 앞 파일/디렉터리 구분자를 제외한 후 3개씩 끊어서 읽습니다.
- 'r'은 read의 약자, 읽기 권한
- 'w'는 write의 약자, 쓰기 권한
- 'x'는 execute의 약자, 실행 권한
이 허가권 필드는 3자리씩 순서대로 소유자에 대한 허가권, 소유 그룹에 대한 허가권, 그 외 사용자(others)에 대한 허가권을 의미합니다. 즉 위의 mika 라는 디렉터리는 소유자(mika)에 대해서는 읽기r/쓰기w/실행x 권한이 있고, 소유 그룹과 others에게는 아무 권한도 없다는 것을 뜻합니다.
이 허가권을 숫자로 표시하기도 합니다. 각 3자리를 2진수로 생각하여 rwx = 111 (2) = 7 (10) 이 되어, 위 mika라는 디렉터리는 700의 허가권을 갖는 것입니다.
그런데 matiii라는 디렉터리는 소유자와 소유 그룹이 root일뿐만 아니라, 그 허가권이 731입니다다. 따라서 권한을 변경하는 명령어인 chmod 700 /home/matiii를 실행해 이를 변경해줄 것입니다.
다음으로는 소유자와 소유 그룹에 대한 변경입니다. chown matiii.matiii /home/matiii를 실행하여 소유자와 소유 그룹을 계정명과 동일하게 변경하였습니다.
7. 최종 확인
계정이 잘 생성되었는지 확인해봅시다.
새로 생성한 계정인 matiii라는 ID로 잘 로그인됩니다.
8. 기타 설정
계정 생성은 이렇게 끝났지만 로그인에 대한 PAM 설정을 추가로 해주겠습니다. 기본적인 패스워드 복잡성은 vi /etc/pam.d/system-auth를 실행하여 설정합니다.
각 구문의 의미는 아래와 같습니다.
- retry=3 (패스워드 입력 실패 시 재시도 횟수) : 패스워드 3번 재입력 가능
- minlen=8 (최소 패스워드 길이 설정) : 최소 8자리 이상으로 설정
- lcredit=-1 (최소 소문자 요구) : 소문자 최소 1자 이상 요구
- ucredit=-1 (최소 대문자 요구) : 대문자 최소 1자 이상 요구
- dcredit=-1 (최소 숫자 요구) : 숫자 최소 1자 이상 요구
- ocredit=-1 (최소 특수문자 요구) : 특수문자 최소 1자 이상 요구
- difok=N (기존 패스워드와 비교, 기본값은 10(50%))
추가로 /etc/login.defs 파일에 아래 구문도 추가합니다.
각 구문의 의미는 아래와 같습니다.
- PASS_WARN_AGE=7 (패스워드 기간 만료 경고) : 7일이 남은 시점부터 패스워드 변경 알림
- PASS_MAX_DAYS=60 (최대 패스워드 사용 기간 설정) : 설정일로부터 60일까지 사용 가능
- PASS_MIN_DAYS=1 (최소 패스워드 변경 기간 설정) : 최소 1일 경과 후 패스워드 변경 가능
'SYSTEM' 카테고리의 다른 글
bash (3) 간단한 계산기 스크립트 짜기 (1) | 2021.03.11 |
---|---|
bash (2) 환경 변수 설정 (1) | 2021.03.10 |
bash (1) alias (별칭/단축키) 설정 (0) | 2021.03.10 |
LINUX 계열 별 useradd와 adduser의 차이점 (+userdel와 deluser) (0) | 2021.03.09 |
Windows Server와 CentOS의 계정 관리 정책 분석 (0) | 2021.03.08 |