OS/Solaris

[Solaris] 보안 정책 ( 로그인 / 패스워드 / root ), 계정 expire

개발계발게발 2022. 1. 11. 12:01
반응형

[Solaris] 패스워드 정책

 

1. 보안 정책 파일 수정

# vi /etc/security/policy.conf

 LOCK_AFTER_RETRIES=YES

 

* 계정 잠금 ( Account Locking ) 

  : Login 중 반복적인 실패가 발생할 경우 해당 Account 를 정지하는 기능

 

2. /etc/default/login 환경 파일 수

 RETRIES=5                // 연속 오류 입력 허용 : 5회 이내

 

3. Locking 정보 제거

# passwd -u Account

 

* 패스워드 조합

 

1. 설정 파일

  : /etc/default/passwd

 

2. 설정 옵션

 

Option Description
MINWEEKS 비밀번호를 바꾸지 못하는 일 수를 주 단위로 설정, /etc/shadow 파일에서는 하루 단위로 설정이 가능함
MAXWEEKS 비밀번호를 바꾸지 않고 현재 비밀번호를 사용할 수 있는 일 수를 주 단위로 설정,
/etc/shadow 파일에서는 하루 단위로 설정이 가능함
WARNWEEKS 지정한 일수 며칠 전부터 시스템에 로그인 시에 경고 메시지를 출력할 것인가를 주 단위로 설정
PASSLENGTH root를 제외한 일반 사용자의 비밀번호의 최소 길이를 지정,
이 값은 6,7,8 세 값중에서 하나만 가능, 6보다 작으면 6이 되고 8보다 크면 8로 설정됨,
새로 시스템에 사용자가 추가 되거나 기존 사용자가 자신의 비밀번호를 바꿀 경우에 적용됨
DICTIONDBDIR 시스템에서 사용할 수 없는 비밀번호를 미리 정의한 데이터베이스 파일이 존재하는 디랙토리를 지정,
사용자가 비밀번호를 처음 생성하거나 변경할 때마다 데이터베이스를 검색하여 존재하지 않는 비밀번호일 경우에만 사용토록 함
DICTIONLIST /usr/share/lib/dict/words 파일처럼 단어들이 나열된 파일의 절대 경로명을 나열한다.
여기에 나열된 파일들을 이용하여 비밀번호를 사용할 수 없는 데이터베이스를 생성한다.
데이터베이스를 생성할 때는 mkpwdict 명령어가 쓰임
HISTORY 사용자가 비밀번호를 변경할 때, 전에 사용했던 비밀번호를 몇 개까지 기억할 것인가를 지정한다.
0∼26까지 지정할 수 있으며 0을 입력할 경우 기존에 입했던 비밀번호 정보가 모두 지워짐
MAXREPEATS 비밀번호에 동일한 글자를 연속해서 사용할 수 있는 최대 개수를 지정, 0은 해당 기능을 사용하지 않음을 의미
MINALPHA 비밀번호에 필요한 최소한의 알파벳 개수를 지정,
디폴트로 2이므로 비밀번호는 최소 2자까지 동일 알파벳을 연속으로 사용할 수 있음
MINDIGIT 비밀번호에 필요한 최소한의 숫자 개수를 지정, 디폴트로 0이므로 숫자를 사용하지 않아도 가능함
MINSPECIAL 비밀번호에 필요한 최소한의 특수 문자 개수를 지정, 디폴트=0이므로 특수 문자를 사용하지 않아도 가능
MINLOWER 비밀번호에 필요한 최소한의 영어 소문자 개수를 지정, 디폴트=0이므로 소문자를 사용하지 않아도 가능
MINUPPER 비밀번호에 필요한 최소한의 영어 대문자 개수를 지정, 디폴트=0이므로 대문자를 사용하지 않아도 가능
MINDIFF 새로운 비밀번호가 직전에 사용했던 비밀번호와 몇 글자 이상 차이가 있어야 되는지를 지정,
디폴트=3이므로 3자 이상만 다르면 가능
WHITESPACE tab, space과 같은 공백문자를 비밀번호에 사용할 수 있는지를 지정,
YES이면 공백문자를 사용할 수 있고 NO이면 금지되며 디폴트=YES임

 

1. 솔라리스 10 패스워드 정책 관련 파일

 

/etc/shadow , /etc/default/passwd

 

계정을 신규로 생성하는 경우 /etc/default/passwd 파일에 정의된 정책에 따라 패스워드 정책을 가진 계정이 생성

/etc/shadow에도 이를 반영하여 설정이 됩니다.

계정 생성후에는 /etc/shadow 파일의 필드를 수정하여 해당 계정의 패스워드 정책을 수정할 수 있다

/etc/shadow에 정의된 정책이 /etc/default/passwd에 정의된 정책보다 우선순위가 높다

 

1) /etc/default/passwd 파일

 

MAXWEEKS :  패스워드 사용 최대 기간 설정
MINWEEKS : 패스워드를 변경할 수 있는 최소 기간 설정
PASSLENGTH : 패스워드의 최소 문자 수
WARNWEEKS : 암호가 만료하기 전에 암호가 만료된다는 사실을 사용자에게 알려주는 기간 설정
NAMECHECK : 사용자가 패스워드를 사용자 로그인 이름과 똑같이 설정 못하게 확인 여부 설정(YES or NO )
HISTORY: 이전에 사용한 패스워드 기억한 후 history수 내에 동일한 패스워드 변경 불가
                                       (0 ~ 최대 26까지 설정)

Ex) 이 값을 3으로 설정할 경우, 이전 패스워드 변경 이력에서 3회 전까지 사용했던 패스워드로는 변경 불가

 

2) /etc/shadow 파일

 

예) solaris 서버에서 /etc/shadow파일을 vi 에디터나 cat 명령으로 조회해 보면, 아래와 같이 구성

 

 실제 예시 ==>      myID      : nVIHFzWRRuEo.  : 18020     : 7     : 70    :14              :               :           :
 필드의 의미 ==>    loginID  : password           :  lastchg  : min  : max : warn      : inactive:expire :flag

 

loginID : 계정 이름    

passwdord : 암호와된 패스워드 값

astchg : 1970-01-01을 기준으로, 패스워드를 마지막으로 변경한 누적 일수

즉, 이 값이 위와 같이 18020인 경우에는 1970년 1월 1일에서 18020 일 (약 49년 ..) 이후의 날짜에 패스워드를

마지막으로 변경하였음을 의미

min : 패스워드 변경의 최소 간격 (단위 day)      

max : 패스워드 사용 최대 기간 (단위 : day), 이 기간 내에 패스워드를 변경해주어야 함

warn : 패스워드 만기 전에 경고메시지를 보내는 시간 (단위 day) 예, 14로 명시된 경우 패스워드 만료일 14일전에 경고

inactive: 로그인 하지 않은  day 수

expire : 패스워드가 만료되는 날짜 (date). 이 값을 명시하지 않으면 expire되지 않음

flag : 로그인 실패 회수

 

 

2. 솔라리스 패스워드 변경 방법

 

솔라리스에서 계정의 패스워드 변경 시에는 아래 명령어 예시처럼 하면 된다.

  

우선, 패스워드를 변경할 계정을 이용하여 로그인 합니다.  ( 또는 su - 변경할 계정명)

그 다음 passwd 명령으로 ( 일반적으로 -r files옵션 사용) 패스워드를 변경합니다.

아래 예는 myid라는 계정의 패스워드를 바꾸는 경우입니다.

 

   (myid)% /usr/bin/passwd -r files myid

Enter existing login password:                ( 현재 패스워드 입력)    
New Password:                                    (새로운 패스워드 입력)

 

Q> 솔라리스에서 패스워드 변경 시에 이전에 사용했던 패스워드로 다시 설정하고 싶은 경우

 

일반적으로 패스워드 변경 후에 바로 직전의 패스워드로 재변경을 시도하면, 아럐 예와 같이 HISTORY 설정에 걸려서 변경이 되지 않습니다.( /etc/default/passwd 파일에서 HISTORY 설정 값만큼의 이전에 사용했던 패스워드는 설정이 불가)

 

 (myid) % /usr/bin/passwd -r files myid
Enter existing login password:
New Password:
passwd: Password in history list.

  

     이 경우는 아래 방법으로 설정이 가능합니다.

 

    1) /etc/default/passwd 설정 파일 수정

        아래 예외같이 기존에 설정된 HISTORY 부분을 주석으로 막고, 이 값을 0으로 재설정해 줍니다.

 

 #HISTORY=12
HISTORY=0

 

2) passwd 명령으로 패스워드를 변경하면, 바로 변경 직전의 패스워드로 원복이 가능합니다.

 

 (myid) % /usr/bin/passwd -r files myid
Enter existing login password:
New Password:
Re-enter new Password:
passwd: password successfully changed for myid

 

 

 

 

3. 솔라리스10 에서 passwd expire안되게 설정하는 방법

 

( 현재 shadow 파일 확인 )


# cat /etc/shadow | grep myid
myid:9ERj9EjQRT6oE:18372:7:70:14:::


( myid 계정을 expire안되게 설정)

# passwd -x -1 myid
passwd: password information changed for myid

 

( shadow 파일 변경 내역  확인)
# cat /etc/shadow | grep myid
myid:9ERj9EjQRT6oE:18372::::::

 

 

 

* 계정 expire 테스트 과정 
 
1. test 유저생성 후 최초 shadow 파일
useradd -d /user1/test -s /usr/bin/csh  -g users -m test
 
[root@localhost:/ ] cat /etc/shadow | grep test
test:*LK*:::::::
 
2. /etc/default/passwd 에서 
MAXWEEKS=
MINWEEKS=
을 
 
MAXWEEKS=1
MINWEEKS=1
으로 변경 
 
3. passwd test  로 test 의 암호변경
 
4. 이후 test 의 shadow 파일
[root@localhost:/ ] cat /etc/shadow | grep test
test:ElDAk3ozroP8M:15050:7:7::::
 
5. 이후에 다시 변경하더라도 shadow 파일은 바뀌지 않음.
[root@localhost:/ ] passwd test
New Password: 
Re-enter new Password: 
passwd: password successfully changed for test
[root@localhost:/ ] 
[root@localhost:/ ] cat /etc/shadow | grep test
test:DBbyTmnUecSwA:15050:7:7::::
 
6. 시스템날짜를 일주일 앞으로 변경하여 test 계정의 패스워드가 expire 되는 것을 확인
 
 
7.이후에 로그인시도시 
login: test
Password: 
Choose a new password.
New Password: 
telnet: The first 8 characters of the old and new passwords must differ by at least 3 positions.
Try again
( 여기서 기존의 패스워드와는 다른 패스워드를 넣어야 함 must differ 최소한 3군데 이상 틀린.)
 
Choose a new password.
New Password: 
Re-enter new Password: 
telnet: password successfully changed for test
 
 
8. shadow파일을 다음과 같이 변경
test:whbZLDLK7rnZY:15058:::::: 
 
이후 passwd test 로 다시 패스워드 설정
 
[root@localhost:/ ] cat /etc/shadow | grep test
test:e1kGSsbZPaj22:15058::::::
 
 
9. 다시 시스템날짜를 일주일 더 앞으로 설정후 aging 이 일어나는지 확인
[root@sgsrc2:/ ] date 04011100
Fri Apr  1 11:00:00 KST 2011
 
다시 패스워드 재설정을 물어봄.
 
 

--------------------------------
결론적으로 이야기하면 최초 aging 을 설정하는 것은 /etc/default/passwd 파일의
MAXWEEKS=
MINWEEKS=
이 두개 의 설정값이다. 

MINWEEKS 비밀번호를 바꾸지 못하는 일 수를 주 단위로 설정, /etc/shadow 파일에서는 하루 단위로 설정이 가능함
MAXWEEKS 비밀번호를 바꾸지 않고 현재 비밀번호를 사용할 수 있는 일 수를 주 단위로 설정, /etc/shadow 파일에서는 하루 단위로 설정이 가능함 

이것을 적용하고 나서 어느 계정이든 ( 심지어 root 까지 ) MINWEEK 에 설정된 시간이 지나게 되면 
해당 계정의 패스워드가 expire 되게 되고 
재로그인시 패스워드를 재설정하라는 메시지가 뜨게 됩니다.

하지만 위의 경우는 일반계정의 경우이며 root 패스워드가 expire 가 되었다고 나왓을 때에는 
로컬에서 접속하여 변경하여야 합니다.
즉 KVM 같은 것을 사용하여 로컬에서 GUI 를 통해서 root 로그인 시도를 하였을 때 
알람이 하나 뜨고 New password 를 물어볼 것입니다. 



이때 root 패스워드를 재설정하고 /etc/default/passwd 파일의 MAXWEEKS 와 MINWEEKS 를 값이 없도록 변경한 뒤에, 문제가 된 해당 계정의 /etc/shadow 파일의 4번째 5번째 필드를 지워줘야 한다

shadow 파일의 필드들은 콜론 (:) 으로 구분됩니다.. 콜론은 지우면 안됩니다.

추가적으로 아래는 shadow 파일의 필드 설명입니다. 

/etc/shadow 파일 형식
 
(1)test33:
(2)$1$U.6P.t/R$nE.fAQoQxSZi3CjdWHx.a/:
(3)14883:
(4)0:
(5)99999:
(6)7:
(7):
(8)14911:
 
(1):(2):(3):(4):(5)
 
 
passwd 파일과 마찬가지로 섀도우 파일도 ":" 콜론 문자로 각 항목을 구분하며 각각은 다음과 같다:
 
(1)사용자이름. 최대 8자. 대소문자를 구분하며 대개의 경우에는 소문자로만 구성된다. /etc/passwd 파일의 사용자이름과 짝을 이룬다.
 
(2)패스워드. 13 글자로 암호화 됨. 비어있는 경우 (즉, ::) 는 (보통은 좋은 방법이 아니지만) 로그인하는데 패스워드가 필요없다는 것을 나타내며, 
 
``*'' 라고 되어 있으면 (즉, :*:) 그 계정은 막아두었다는 것을 나타낸다.
 
(3)패스워드를 마지막으로 바꾼 날이 (1970년 1월 1일로부터) 며칠째의 날인지 나타내는 항목.
 
(4)최소 며칠이 지난 뒤에 패스워드를 바꿀 수 있는지를 나타내는 항목 (0이면 언제든지 바꿀 수 있다는 의미)
 
(5)패스워드를 반드시 바꿔야 하는 날로 부터 며칠이나 지났는지를 나타내는 항목 (99999 는 무지무지 오랫동안 패스워드를 바꾸지 않았다는 것을 나
 
타낸다)
 
(6)패스워드가 만기가 되었음을 며칠 동안 사용자에게 계속 주의를 줄 것인지 나타내는 항목 (1주일 동안 알려주려면 7)
 
(7)패스워드가 만기가 되어서 계정이 사용불가가 된지 며칠이나 되었는지 나타내는 항목
 
(8)계정이 사용불가가 된 것이 1970년 1월 1일부터 계산하여 며칠째였는지 나타내는 항목
 
(9)미래의 사용을 위해서 잡아둔 항목 

 

반응형