잡다구리

[centOS] chage 명령어 상세분석

황조롱이 2017. 11. 15. 00:24

10여년 전..무슨 리눅스책 명령어 열심히 연습해 보다가
chage 명령에서 이해가질 않아 포기했던 기억이 있다..
마음에 짐 같은 것이 있었는데...

다시 도전해봤다.
대체로 책,구글링을 해보면, 각자 용어도 맘대로고(유추가 잘 되지않는 해석)
여러 엔지니어들의 자기해석등으로 더욱 헷갈리고 꼬여서,
뭔 뜻인지 잘 상상도 안 되더라

잠도 오지 않는 가을밤 , 한번 분석해 보았다...
결론은...현재 한국어 블로그등에 나오는 여러 chage 관련 옵션으로는
잘못 이해할 수 밖에 없을 듯 하다..

아래는 내 나름에 해석이다..(책이나 구글링에서 나오는 용어들이랑 많이 다를 것이다)

chgae 명령은 일단 계정과 암호 <사용기간> 을 관리하는 것이라 생각하고 들어가자
크게 생각하면 아래 형식일 것이다.

1. [암호만료일=계정만료일]: 로그인 때마다 같은 암호를 변경없이 무한정 쓸지, 아님 일정 기간동안 계속 바꾸게 할지(ex: 90일마다) 정하는 것.


2. [계정만료일]을 <강제로> 정해 놓아서 그 이후에는 로그인 못하게 한다.

1번을 구현하려면, 일단 기준이 있어야하지...그 기준이 암호를 처음 설정,또는 변경한 날(암호변경일)이다.
그 암호변경일을 기준으로 다음 20일간만 사용하게 하든, 90일간 사용하게 하든, 아님 무한정 계속하게 하는 것이다.
이 글에서는 일단 90일로 한다.
그 기간이 지나면 로그인 못하게 한다. (암호만료되면서 계정도 만료된다.[암호만료=계정만료] )

근데 아무 메시지 없이 그냥 정지 시키면 계정사용자는 당황하겠지?
그럼 [암호만료=계정만료] 전 7일전부터 로그인시 '암호 변경하세요!!'라는 메시지를 알려주자
이후 암호만료일이 다가오기전 7일전부터 로그인시 <암호변경 경고메시지>를 해준다.
그래도 암호변경 안하면 계정만료! 로그인 못함.

메시지를 보여줘도 불구하고 암호변경을 하지 않아 [암호만료=계정만료] 당한,
해당 계정사용자는 관리자에게 풀어주라고 연락해야한다. 관리자 입장에서 귀찮다.

[암호만료=계정만료]이 지나도 [계정만료]를 바로 하지말고 한 10일간 유예기간을 두자.

여기서 [암호만료일] 과 [계정만료일]이 분리된다

[암호만료일] ~ (10일간 암호비활성화) ~[계정만료일]

그럼 저 10일간은 뭐냐?

암호는 비활성화 되었으니, 로그인은 못한다...그런데 [계정만료]는 아니다.
계정만료는 아닌데, 로그인은 못하는 식물인간 상태쯤?
어정쩡한 그 기간에 할 수 있는게 딱히 없다.
좀 더 강력한 메시지를 보여주던가
아님 그 비활성화 기간에 로그인 시도했다면,
암호를 강제로 바꾸게 유도하자..

(CentOS는 암호변경 유도를 하고, 다른 버전의 리눅스,유닉스는 다를지도 모른다)

[암호만료일] 후 10일동안 로그인하면 그 만료된 암호는 [암호비활성화]유예기간 10일 걸려있기 때문에
로그인은 되지 않으면서, 암호를 바꾸라는 유도 메시지를 보게된다.


다행이 이 기간에 암호변경하면, 그날로 새 [암호변경일]이 바뀌고 + 그 이후 90일간 변경된 암호로 로그인 가능하다.
이마저도 기간이 넘어버리면 [계정만료] 때려야지 뭐.


2번 구현은...암호기준이 아니고, 그냥 [계정 만료일]을 강제로 지정하는 거다..
암호하고 관계없이 그날 지나면 로그인 못한다, 말그대로 [계정만료일]
암호관련 값보다 우선한다..
제일 센 계정만료 방법.

아래 테스트를 하면서 이런 내용이라는 것을 알게 되었다..

[암호만료일]이 가장 중요한데 설정하는 옵션이 없다..
이 녀석은 [암호변경일] + [90일] = 암호변경일 이후 90일째 날이 [암호만료일]
이런 식이다...

길지만 차근차근 가보자~
(CentOS 6에서 테스트 했다)

---------------------------------------//
(옵션 봐도 잘 이해 안 될거다...아래 상세설명까지 다 보고 다시 읽으면 이해되기 시작할지도..)

chage 옵션 계정명

옵션
-d : 암호변경일, (YYYY-MM-DD)
 ex) chage -d 2019-01-01 dong

-I (대문자 i): 암호만료일 종료 이후에 암호비활성[=계정비활성화] 화될 일 수 (새암호 입력 유도 유예기간)
 - 10으로 설정하면 암호만료일 다음날부터 10일간 새암호 입력하라고 로그인시마다 물어본다.
 - 설정하면 그날 기준으로 모든 값들이 새로 셋팅된다
 - 이 날 지나가면 계정만료 됨.

 ex) chage -I 10 dong

-E : 계정만료일 (YYYY-MM-DD), 또는 "", 암호와는 상관 없다 , 강제 계정만료일 지정.
 ex) chage -E 2019-12-31 dong
     chage -E -1 dong <-제한없음
     chage -E "" dong <-제한없음 (-1, never[레드헷계열]등이 있다고 하는데, 로그인이 안 되어서 ""로 하니 된다)

-m : 암호변경일 이후부터 다시 암호를 변경할 수 있는 최소일 수 
 - 0으로 설정시 : 해당 계정 로그인 후 아무때나 다시 암호변경 가능,
 - 5으로 설정시 : 해당계정이 로그인 후 다시 바꾸려면 5일 후에 암호변경가능

 ex) chage -m 5 dong

-M : 암호변경일 이후부터 몇일간 사용할지 일수 
 - 암호변경일과 이 값을 설정해야  **<암호만료일>**이 나온다
 - 암호변경일이 2019-01-01 이고, 이 값을 90으로 했을때 (2019-01-01일) + (90일) = (2019-04-01)일이 **<암호만료일>**이 된다
 - 99999 이면 만료 없다..주욱 계속 사용

 ex) chage -M 90 dong <- 새암호 설정 후 90일까지만 암호사용 가능

-W : 암호변경경고일, 암호만료일 몇 일전 부터 만료일까지 warning 메시지를 보낼 것인가.
 ex) chage -W 7 dong  <- 암호만료일 7일전 부터 로그인시마다 메시지 출력(암호변경하라고!)

-l (소문자 L) : 특정사용자의 정보출력


------------------------------------------------자세한 이해를 위해 설정 테스트 해보자
chage -d 2019-01-01 dong <- [1]
chage -I 10 dong  <- [3]
chage -E 2019-12-31 dong <- [4] 암호와 관련없음..계정 자체 만료일(암호값들과는 관련없음, 우선적으로 적용됨.)
chage -m 5 dong   <- [5]
chage -M 90 dong  <- [6]
chage -W 7 dong   <- [7]

chage -l dong  <- dong 계정 암호설정 출력

[1] Last pasword chage     : Jan 01, 2019 (암호변경일, [root가 바꿨든, 자기가 바꿨든] 마지막으로 암호 바꾼 날 , 2019-01-01)
[2] Password expires     : Apr 01, 2019 (암호만료일 , 2019-04-01)  
[3] Password Inactive     : Apr 11, 2019 (암호비활성화만료일, 2019-04-11)
[4] Account expires     : Dec 12, 2019 (계정만료일, 2019-12-31)
[5] Minimum number of days between password change : 5 (암호변경일 5일 후에 다시 바꿀수 있다)
[6] Maximum number of days between password change : 90 (암호변경일부터 90일 후가 만료되는 날)
[7] Number of days of warning between password expires : 7 (암호만료일 -7일부터  warning 메시시 출력)

----------
[1] Last pasword change  : Jan 01, 2019 (암호변경일 , 2019-01-01)
 - (root가 바꿨든, 자기가 바꿨든, 아님 여기서 강제로 지정하든) 마지막 암호변경일
 - [2] Password expires (암호만료일) 연장은 Last pasword change만 변경해주면 된다.
 - 암호를 변경하면 오늘날짜로 변경됨.
 - (이 날 기준으로 [2] , [3] 자동 변경 셋팅된다)

 ex) chage -d 2019-01-01 dong

----------
[2] Password expires : Apr 01, 2019 (암호만료일 , 2019-04-01)
 - [1] + [6] = [2] 값이 나온다..그러므로 먼저 저 값들을 설정해야한다.
 - 그러므로 위 예제의 암호만료일은 2019-01-01 + 90일 = 2019-04-01 일이된다.
 - 암호만료일이 결정되어야 나머지 연산들이 가능해진다.
 - 그러므로 다른 옵션들도 이것이 지정되어지지 않는다면 소용없게 된다.
 
---------
[3] Password Inactive : Apr 11, 2019 (암호비활성화만료일, 2019-04-11)
 - 테스트에서 chage -I 10 dong 로 설정했다 (10일간)
 - Password Inactive 기간 =  (암호만료일 2019-04-01 다음날부터  ~ 10일간 )
 - 그러므로 2019-04-01 + 10일 = 2019-04-11
 - 그럼 이 10일간 뭘하느냐? 로그인시 새암호 다시 설정하라고 나온다.
 - 만약 이 기간이 0이면, 만료일과 같은 날로 될 것이고, 바로 계정만료(정지) 된다.
 - 새암호 설정 안하면 로그인 안된다. (아래는 centos 6에서 출력한 것임)

 You are required to change your password immediately (password aged)
 Last login: Wed Nov 14 00:00:34 2018 from 192.168.0.150
 WARNING: Your password has expired.
 You must change your password now and login again!
 Changing password for user dong.
 Changing password for dong.
 (current) UNIX password:

 만약  이 기간(2019-04-11) 지나면?
 
 Your account has expired; please contact your system administrator
 Connection closing...Socket close.

 계정만료! 로그인 안된다..관리자에게 문의하래..
---------
[4] Account expires : Dec 12, 2019 (계정만료일, 2019-12-31)
 chage -E 2019-12-31 dong
 usermod -e 2019-12-31 dong
 - 위 둘은 같다
 - 암호와는 관련 없다..말 그대로 계정만료일...(!강제지정)
 - 암호관련 날짜가 길던 말던, 계정만료일이 우선이다

 Your account has expired; please contact your system administrator
 Connection closing...Socket close.

 계정만료! 로그인 안된다..관리자에게 문의하래..

 chage -E "" dong
 usermod -e "" dong
 위는 계정만료기간을 무제한으로 만든 것(centOS 6에서 -1, never등 해봤는데 로그인 안되더라)

---------
[5] Minimum number of days between password change : 5
 - 암호를 바꾼 후 해당 계정으로 로그인 후 본인 암호를 다시 바꾸려면 5일 후에 바꿀 수 있다

---------
[6] Maximum number of days between password change : 90
 - 암호변경일(2019-01-01) 다음날 부터 ~ 90일까지만 암호사용 가능
 - 결국 [2]암호만료일(2019-04-01)이 산출된다.

---------
[7] Number of days of warning between password expires : 7
 - 암호만료일  7일전 부터 만료일까지 warning 메시지(암호 바꾸라고), 로그인시마다 보여준다.
 - 요렇게...
 ex) warning : your password will expire in 6 days(1일째)
   .
   .
        your password will expire in 0 days(7일째)

  그러다가 [3] Password Inactive 기간이 혹시 1이상 설정 되었다면,
  (<- [3]참조 ) 새암호 설정하는 모드가 출력되고, 그마저도 안하고 기간이 지나면
  계정 만료..로그인 못함.

-------- 기타


[2] Password expires 과 [3] Password Inactive 가 같다면?
 chage -I 0 dong <- 요래 설정..그럼
 
 [2] Password expires : Apr 01, 2019 (암호만료일 , 2019-04-01)  
 [3] Password Inactive : Apr 01, 2019 (암호비활성화만료일, 2019-04-01)

 새암호 설정따윈 안 물어보고 , 바로 계정 정지[계정만료]겠지 뭐..

.

.

저 위에 설정 값들은 어디에 있나?

/etc/shadow 에 설정한 정보가 기록된다. 저 위 설정값들이 이곳에 저장된다.
grep dong /etc/shadow
dong:$6$fJK7pJGF$bY4Uutfc29hWw7iniiTZrTZed5T18/1RLzKUc8qZOhtRrg/U9shdsZ09uISW7oKrlAfoFAyE.N20TM3vlaZLk/:17897:5:90:7:10:18242:

// 각 항목별 구분은 :(콜론) 으로 구분되어있으며 콜론과 콜론 사이 각 필드에는 다음과 같은 구조로 구성되어 있다.


ex) dong계정해석:


1:---------------2----------------:3:4:5:6:7:8:9


1.Login Name : 사용자 계정         <- dong
2.Encrypted : 패스워드를 암호화시킨 값        <- $6$fJK7pJGF$b....ZLk/
3.Last Changed : [1] Last pasword chage 값이 여기에 설정(유닉스[1970-01-01부터]날짜값으로) <- 17897
4.Minimum : [5] Minimum number of days between password change 값    <- 5
5.Maximum : [6] Maximum number of days between password change 값    <- 90
6.Warn : [7] Number of days of warning between password expires 값    <- 7
7.Inactive : [3] Password Inactive 값        <- 10
8.Expire : [4] Account expires (유닉스[1970-01-01부터]날짜값으로)    <- 18242
9.Reserved : 사용되지 않음

 

 

*****마무리*****

실제로 날짜 바꿔가며 테스트한 결과 ,

만료일이면 그날 만료되는 것이 아니라 2일 후부터 되더라


1일후라면 뭐 그런가보다(만료기간까지 치면) 할텐데, 왜 2일간 밀리는지...


위 이미지에는 이해하기 편하라고 설정값과 같게 일치 시켰지만..실제는
2019-03-27일  ~  2019-04-03일 ~ 2019-04-13일에 경고메시지 겸 만료액션이 나왔다.
(요건 관리하실 분들이 꼭 테스트 하시기 바란다)

웹호스팅이나 큰업체 아니면, 저렇게까지 할일이 드물거다..어찌하다보니 이렇게까지 해봤다..

- 끝 -
     

'잡다구리' 카테고리의 다른 글

2018년 9월 18일 3차 남북 정상회담  (0) 2018.09.18
[2018.03.22] 이명박 구속  (0) 2018.03.23
아두이노  (0) 2017.10.15
샤오미 미밴드 2  (0) 2017.10.15
한성컴퓨터 기계식키보드 MKF40S2  (0) 2017.03.03