이번 포스팅에서는 net user를 활용해 Windows 환경에서 계정을 생성하고 관리하는 법을 다룹니다.
NET USER
net user(또는 users) : Windows에는 사용자 계정을 추가/수정하거나 사용자 계정 정보를 표시하는 'net user'라는 명령어가 있다. CMD창에서 'net user' 또는 'net users'라고 입력하면 해당 시스템에 생성되어 있는 사용자 계정 목록을 출력한다.
net user [계정명] : net user 뒤에 사용자 계정명을 입력하면 해당 계정에 대한 정보를 출력해준다.
그럼, net user라는 명령어는 정확히 어떻게 사용하는 것일까? 도움말을 출력해보면 여러가지 쓰임이 나온다. 삭제, 시간, 활성화 등의 예시를 알 수 있다.
net user [<UserName> {<Password> | *} [<Options>]] [/domain]
net user [<UserName> {<Password> | *} /add [<Options>] [/domain]]
net user [<UserName> [/delete] [/domain]]
net user 명령어에 대한 자세한 옵션은 MS 공식 문서에서 찾을 수 있었다.
옵션 - net user [계정명]을 입력했을 때 나오는 계정 정보 필드 - 설명 순으로 정리해보았다.
option | field | description |
/add | - | 사용자 계정 추가 |
/delete | - | 사용자 계정 삭제 |
/fullname:"name" | 전체 이름 | 사용자 이름 x, 사용자 전체 이름 o |
/commnet:"text" | 설명 | 48글자 |
/usercomment:"text" | 사용자 설명 | 관리자만 편집 가능 |
/countrycode:nnn | 국가/지역 코드 | 도움말/에러 메시지에 언어 파일 구현 |
/active:{yes | no} | 활성 계정 | 기본값은 'yes' |
/expires:{date | never} | 계정 만료 날짜 | /countrycode에 따라 지정 |
/passwordreq:{yes | no} | 암호 필요 | 기본값은 'yes' |
/passwordchg:{yes | no} | 사용자가 암호를 바꿀 수도 있음 | 기본값은 'yes' |
/workstations:{computername[,...] | *} | 허용된 워크스테이션 | 최대 8개, 목록이 없으면 로그온 불가 |
/scriptpath:path |
로그온 스크립트 | %root%\SYSTEM32\REPL\IMPORT\SCRIPTS 내 상대 경로 사용 |
/profilepath:[path] | 사용자 프로필 | 레지스트리 프로필을 저장하는데 사용 |
/homedir:path | 홈 디렉터리 | 사용자의 홈 디렉터리 경로 지정 |
/homedirreq:{yes | no} | - | 홈 디렉터리 필수 존재 여부 |
/times:{times | all | null} | 허용된 로그온 시간 | 사용자가 컴퓨터를 사용할 수 있는 시간 |
이제 위 옵션들을 활용해 계정을 생성하고 관리해볼 것이다.
(1) 계정 생성 = 사용자 이름 지정 => net user /add [계정명] [계정암호]
계정 삭제 = net user /delete [계정명]
먼저 계정을 생성할 땐 /add 옵션을 적용하고 순서대로 계정명과 암호를 입력한다. 여기서는 'matiii'라는 이름의 계정과 'martina0126!!'이라는 암호를 적용했다.
이 때 암호 정책에 맞지 않는 암호를 지정하게 되면 아래와 같은 에러 메시지가 뜬다. 따라서 적용된 암호 정책에 맞게 암호를 설정해주어야 한다.
암호 관련 정책은 secpol.msc에서 관리할 수 있다. '암호는 복잡성을 만족해야 함' 정책이 '사용'으로 설정되어 있는 경우, 영문자/숫자/특수문자를 사용해 최소 8자리 이상의 비밀번호를 지정해야 한다.
계정을 생성하고 나면 net user 명령어를 통해 목록에서 확인할 수 있다.
net user matiii 를 입력해보면 방금 생성한 계정에 대한 계정 정보가 뜬다. 지금은 모두 기본값으로 설정되어 있으므로 하나씩 변경해보도록 하자.
더불어 방금 생성한 계정인 'matiii'로 콘솔을 통해 로그인하려면 현재 '로컬 그룹 구성원' 필드값인 '%Users' 그룹이 secpol.msc의 '로컬 로그온 허용' 정책 내 포함된 그룹이어야 한다. 이 설정 역시 관리자 권한으로만 편집이 가능하다.
(2) 전체 이름 지정 => net user /fullname:"name"
'matiii'라는 계정의 전체 이름을 먼저 지정해주자. /fullname 옵션을 적용하고, 큰 따옴표로 묶어 문자열을 입력해주면 된다.
잘 적용되었다.
(3) 설명 => net user /comment:"text"
빠르게 설명을 입력하자. 총 48글자를 입력할 수 있다.
설명도 잘 적용되었다.
(4) 사용자 설명 => net user /usercomment:"text"
사용자 설명은 위의 '설명'과 달리 관리자만 편집이 가능하다.
지정하려면 꼭 관리자 계정으로 시도하자.
(4) 국가/지역 코드 => net user /countrycode:nnn
이 국가/지역 코드는 도움말 및 오류 메시지에 대해 지정된 코드에 따라 언어 파일을 구현한다. 위에서 볼 수 있듯, 000은 시스템 기본값이다. '082'를 입력해 국가를 '대한민국'으로 설정해주었다.
(5) 활성 계정 => /active:{yes | no}
/active는 계정의 활성화 여부를 지정하는 옵션이다. 기본값은 'yes'로 로그온이 가능하게 되어있다. 이 계정을 비활성화해보고 어떤 일이 일어나는지 보자.
비활성화 후 해당 계정으로 로그인을 시도하면 '사용할 수 없'다는 메시지가 뜬다.
이후 다시 활성화해주었다.
(6) 계정 만료 날짜 => /expires:{date | never}
/expries는 계정에 대한 만료 날짜를 지정한다. 만료 날짜는 국가 코드에 따라 월/일/년 혹은 일/월/년의 형태로 표시한다. '월'은 숫자나 문자로 표기해도 되고 3자 약자 표기도 가능하다. '년'은 2글자 혹은 4글자로, '일'은 '/'나 '-'를 쓴다.
2021년 3월 16일로 인수를 주면 '계정 만료 날짜'의 필드값으로 지정된다.
만료 날짜 제한을 없애고 싶으면 'never'를 입력한다.
(7) 암호 필요 => /passwordreq:{yes | no}
사용자 계정에 대한 암호 설정을 필수화하지 않으려면 /passwordreq의 값을 'no'로 지정한다.
이렇게 설정을 해도 암호를 입력해야만 로그온이 되는 것은 당연하다. 그래서 직접 계정 암호를 공백으로 바꾸려고 시도했다. 하지만 암호 정책 요구 사항에 위배되어 공백 암호 설정이 불가능했다.
혹시 몰라서 여러가지 설정을 건드려봤지만 결과는 같았다.
[이후 추가]
아래 사이트에서 이 의미에 대해 알게되었다.
malicious.link/post/2016/passwordreq-no-a-hacker-prospective/
net user 로 계정 생성시 해당 옵션에 no 값을 주면, 비밀번호를 지정하지 않아도 (+ 패스우드 복잡성을 만족하지 않아도) 계정 생성이 가능하다.
또, 암호 입력칸에 아무 입력을 하지 않은 공백으로 두고도 로그인이 가능했다. 설정 창에는 아래와 같이 표시된다.
하지만 위에서 본 것처럼 이미 정상적으로 계정을 생성한 후에 해당 옵션에 no를 설정해도 암호를 입력해야만 로그온이 가능했던 것을 보니, 최초 계정 생성 시에 설정하지 않으면 의미가 없는 것 같다. 암호 조차 필요없이 시스템에 접근 가능한 익명의 계정을 만드는 옵션이었다.
(8) 사용자가 암호를 바꿀 수도 있음 => /passwordchg:{yes | no}
/passwordchg 옵션을 통해 사용자 암호를 스스로 바꾸게 할 것인지의 여부를 지정할 수 있다. 기본값이 '예'이므로 현재 'matiii'라는 계정은 스스로 암호를 변경할 수 있다.
관리자 계정이 아닌, 현재 계정 설정 중인 'matiii'로 로그온 한 뒤, net user matiii * 을 통해 암호 변경을 시도해보았다. 하지만 시스템 오류 5로 인해 액세스가 거부되었다.
사용자 계정으로 들어올 때는 net user가 아닌, 설정의 계정 암호 변경 기능을 이용해야 했다.
여기서 암호를 변경할 수 있다.
만약 아래와 같은 메시지가 출력된다면, 먼저 패스워드 복잡성 정책에 맞게 새 암호가 잘 설정되었는지 확인해야 한다.
복잡성 조건을 만족했는데도 같은 에러가 뜬다면, secpol.msc에서 최소 암호 사용 기간을 0일로 설정하면 된다. 취약성 문제 때문에 최소 1일로 설정하는 것이 좋으므로 실습 동안에만 0일로 하도록 하자.
만약 이 옵션을 'no'로 지정한다면,
변경 버튼 자체가 비활성화된다.
(9) 허용된 워크스테이션 => /workstations:{computername[,...] | *}
허용된 워크스테이션 옵션은 /workstations로 지정하는데, 사용자가 어느 컴퓨터에서 네트워크로 로그온 할 수 있는지 최대 8개 목록을 보여준다. 목록을 따로 지정하지 않고 공백으로 두거나 '*'로 설정할 경우에는 제한없이 '전체'로 표시된다.
이 옵션 값을 존재하지 않는 컴퓨터 이름으로 지정해보면,
아예 로그온 가능한 사용자 계정으로 판단하지 않는다.
옵션 값을 '*'로 설정하여 설정을 초기화할 수 있다.
(10) 로그온 스크립트 => /scriptpath:path
로그온 스크립트는, 로그온 시 자동으로 미리 지정한 스크립트 구문을 실행시켜 주는 것으로, %root%\SYSTEM32\REPL\IMPORT\SCRIPTS 내 상대 경로 사용해 지정한다.
먼저 관리자 권한으로 위 경로에 startIE.bat 파일을 만들고 아래와 같이 스크립트 구문을 작성하였다. 간단하게 로그온 후 시스템에 접속하면, 인터넷 익스플로러 브라우저를 띄우는 것으로 하였다.
그리고 아래와 같이 startIE.bat을 지정해주었다.
그 후 matiii 계정으로 로그온하면 스크립트가 잘 실행되는 것을 확인할 수 있다.
(11) 사용자 프로필 => /profilepath:[path]
사용자 프로필 옵션은 레지스트리에서 시스템 내 사용자 계정 프로필을 저장하는 경로를 지정하는데 사용된다. net user를 사용해 조회하면 비어있다. 기본값이 설정되어 있기 때문이다.
regedit을 실행하여 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 경로로 접속하면 시스템 프로필(S-1-5-18), 로컬 서비스(S-1-5-19), 네트워크 서비스(S-1-5-20)와 함께 사용자 계정을 볼 수 있다.
이 중 ~1008로 끝나는 프로필이 matiii에 대한 프로필이다.
(12) 홈 디렉터리 => /homedir:path
사용자 계정의 홈 디렉터리를 나타내는 부분도 net user를 통해 조회하면 비어있다. 역시 'C:\Users\계정명'이라는 기본값이 지정되어 있기 때문이다.
큰 의미는 없지만 net user /homedir 옵션을 통해 사용자 홈 디렉터리를 직접 지정할 수 있다.
lusrmgr.msc를 실행하여 사용자 > matiii의 속성 > 프로필 탭을 보면 설정한 홈 디렉터리가 보인다.
(13) 허용된 로그온 시간 => /times(또는 time):{times | all | null}
'허용된 로그온 시간'은 사용자가 컴퓨터를 사용할 수 있는 시간을 뜻한다. 예를 들어, 주말 근무자의 컴퓨터 보안을 위해 해당 근무자의 계정을 토요일과 일요일에만 로그온 할 수 있도록 설정하여 근무자가 부재하는 평일에 생길 악의적인 로그온 시도를 차단할 수 있다. 기본값은 '전체'이다.
포스팅을 작성하고 있는 지금이 화요일 오후 3시 35분이다. 현재는 matiii 계정의 로그온이 매우 자유롭다. 만약 평일은 오전 9시부터 오후 6시까지만, 주말에는 오전 9시부터 오후 12시까지만 로그온을 허용하고 싶다면, 아래와 같이 설정한다.
요일은 영문으로 표기하되 전부 풀어써도 되고 줄여써도 된다. 시간 표현 역시 12시간, 24시간 표기법 모두 가능하며 12시간 표기법을 쓸 경우 am/pm/a.m./p.m.으로 구분이 필요하다. 대신 1시간 단위로만 설정할 수 있다. 복수 요일/시간 설정도 가능한데, 요일끼리 혹은 시간끼리 표기할 땐 ','로 구분하고 여러개의 요일/시간을 표기할 땐 ';'로 구분한다.
이 때 옵션에 값을 지정해주지 않으면 다른 옵션처럼 '전체'로 지정되는 것이 아니라 '없음'으로 지정된다. 즉, 로그온이 아예 차단된다.
해당 설정을 초기화하고 싶으면 'all' 값으로 설정한다.
이렇게 Windows 환경의 net user 명령어와 계정 생성 및 관련 옵션 적용에 대한 포스팅을 마치겠습니다. 다음 포스팅에서는 해당 계정에 암호 정책 설정을 다루겠습니다. 또, net user를 통한 설정을 wmic 명령어를 통해서도 할 수 있는 부분들에 대해서는 따로 다루겠습니다.
'SYSTEM > Windows Server 보안' 카테고리의 다른 글
[WinServer2016] 사용자 계정 생성 및 관리 (3) 암호 설정 및 관리 with net accounts + wmic useraccount set passwordexpires (1) | 2021.03.17 |
---|---|
[WinServer2016] 사용자 계정 생성 및 관리 (2) net user와 wmic useraccount (0) | 2021.03.17 |
[Windows Server 2016] 1. 계정관리 (선택 사항) (1) | 2021.03.05 |
[Windows Server 2016] 1. 계정관리 (필수 사항) (0) | 2021.03.05 |
Windows Server 보안 List (0) | 2021.03.03 |