리눅스 기본 명령어(01. 사용자 계정의 생성 및 관리)

사용자 생성 및 계정 관리

명령어 경로 설정 및 매뉴얼 보기

명령어의 경로 설정

 명령어는 /sbin, /bin, /usr/bin 및 /usr/sbin 디렉토리 아래에 있고 ,사용자의 프로그램 설치에 따라 임의의 디렉토리나 /usr/local/bin 및 /usr/local/sbin에 위치하게 된다. 이들에 대해 앞서의 네 곳의 경우와 /usr/local/[s]bin의 경우에는 명령 패스(PATH)가 미리 지정되어 있어 명령어를 지정하는데 경로가 필요 없지만 임의의 디렉토리에 명령어가 있는 경우네는 경로를 모두 기입해 주어야 명령이 실행된다.
 PATH 설정은 터미널의 쉘 프롬프트에서 "env | grep PATH" 명령어로 볼 수 있다.
만약 개별 사용자가 자신의 PATH를 설정하려면 사용자의 홈디렉토리 아래의 .bash_profile 파일을 수정한다. .bash_profile 파일에는 터미널 설정과 환경변수, 초기에 실행할 프로그램과 같은 항목들이 설정되고, 이 항목들은 사용자가 연결 중에 변경하지 않는 한 연결이 끊어질 때까지(로그아웃 할 때까지) 유지된다. PATH는 앞에서부터 읽혀지므로 PATH 설정의 가장 앞에 경로를 포함한 디렉토리를 기술하고 콜론(;)으로 다른 디렉토리와 구분한다.
 홈 디렉토리의 .bash_profile 파일은 PATH 설정에서 $PATH 변수에 의해 /etc/profile의 PATH 설정을 읽어들인다.

매뉴얼 페이지 보기

 매뉴얼 페이지(man page)는 텍스트 모드에서 사용하는 명령과 옵션에 대한 도움말이다. 새로운 명령을 접했을 때 맨 페이지를 검색해 보면 많은 도움이 된다.
# man [명령어]
 매뉴얼 페이지가 여러 개로 나뉘어 있다면 다음과 같이 세션 번호를 써서 페이지를 불러낸다.
-a 모든 manual page 출력
-d 디버깅 정보 출력맨 페이지는 출력하지 않는다.
-i whatis 와 같음
-h 도움말 출력
-k apropos 와 같음
-t groff(troff)를 사용하여 프린트를 위한 형식으로 출력
 다음은 kill(2) man 페이지를 불러낸 것이다.
$ man 2 kill
 이에 대해 info 문서를 참조하기 위해 info 명령을 내릴 수도 있다. info 문서는 매뉴얼 페이지보다 상세화된 것으로 매뉴얼 페이지보다 자주 쓰이지 않지만 유용하다.
$ info du

사용자 계정의 생성 및 관리

사용자 계정

 리눅스는 서로 다른 사용자가 동시에 로그인하며 시스템을 사용할 수 있는 운영체제이다. 일반 사용자들은 각자 자신의 홈디렉토리를 가진다. 사용자들은 각가 자시느이 취향이나 시스템 사용 목적에 맞게 자신의 환경을 설정할 수 있다.

사용자 생성 : useradd

 사용자 생성을 위한 기본적인 작업들은 useradd 또는 adduser 명령을 사용하여 수행할 수 있다.
# useradd
 이 명령을 내리면 /etc/default/useradd 파일의 기본 설정을 적용하여 사용자를 생성한다.
만약 기본 설정을 변경하여 사용자를 생성하려면 다음과 같은 형식으로 옵션을 주어 useradd 명령을 내리면 된다.
useradd [-u uid [-o]] [-g group] [-G group, ...] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire] [-n] [-r] username
-u 사용자의 UID(User IDentifier)를 지정한다.
-g 사용자가 속할 사용자의 그룹을 지정한다.
-G 사용자가 솔할 부속 그룹을 지정한다.
-d 사용자의 홈디렉토리를 지정한다.
-s 사용자의 기본쉘(로그인쉘)을 지정한다.
-c 사용자에 대한 설명을 추가한다.
-m 사용자의 홈디렉토리가 없다면 생성하고, 이곳에 /etc/skel의 내용을 복사한다.
-f 패스워드 비활성화 기간, 즉 패스워드가 유호기간 종료 이후에 계정 비활성화될 일 수를 지정한다.
-e 만료일자를 지정한다. YYYY-MM-DD의 형식으로 일자를 지정하면, 이 날짜 이후에는 사용 불가능해진다.
-n 사용자가 사용자명과 동일한 그룹이 아니라 /etc/default/useradd에 정의된 그룹에 속하도록 한다.
-c 시스템 계정을 생성하기 위해서 사용된다.
# useradd -u 510 -G500,501 -d /home/master-1 -e 2015-11-30 -s /bin/sh -f 10 master
 master라는 사용자를 생성하면서 UID는 510으로, 부속 그룹을 기존에 존재하는 500, 501로, 홈디렉토리를 /home/master-1로, 만료일자를 2015년 11월 30일로, 기본쉘을 /bin/sh로, 패스워드 비활성화 기간을 10일로 정하였다.
-D 옵션을 붙여서 명령을 내리면 /etc/default/useradd라는 파일에 저장된 사용자 생성에 관한 기본 설정값이 출력되고 -D 옵션 뒤에 추가적인 옵션을 붙여서 명령을 내리면 해당 기본 설정값을 수정할 수 있다.
-g 기본 설정 그룹을 변경한다.
-b 새로 사용자를 추가할 때 홈 디렉토리의 위치를 변경한다. 차후 새로운 사용자를 추가하면, 사용자의 홈 디렉토리는 -b 옵션에 지정된 디렉토리의 하위 디렉토리로 생성된다.
-f 패스워드 비활성화 기간을 변경한다.
-s 기본쉘을 변경한다.
-e 만기일자를 변경한다.

패스워드 설정 : passwd

 사용자를 생성한 후에는 passwd 명령을 이용하여 해당 사용자에 대한 패스워드를 설정한다. passwd를 사용하면 /etc/passwd와 /etc/shadow 에 주어진 값이 설정된다. 이 명령은 기존 사용자의 패스워드를 변경할 때에도 사용할 수 있다.
 root의 경우 passwd 명령을 내리면 root 자신의 패스워드를 설정하는 것이고, passwd 뒤에 일반 사용자 명을 사용하면 새당 사용자의 패스워드를 설정하는 것이다.
# passwd

사용자 변경 : su

 다른 계정의 권한 이필요한 경우에 su 명령을 이용하여 리눅스 쉘 상태에서 바로 다른 사용자로 교체할 수 있다. su는 'Substitute User"의 약어로서 이와 같이 다른 계정 사용자로 교체할 때 사용하는 명령어이다. su 뒤에 아무것도 붙이지 않고 su 명령만 내리면 root 계정으로 변경된다. 즉, root 계정으로 변경하기 위해서는 su 뒤에 사용자명을 적지 않고 명령을 내리면 된다.
 이때 실행되는 쉘은 지정된 사용자의 패스워드파일에서 찾아오거나 없으면 /bin/sh 를 수행한다.

사용자 설정 변경 : usermod

 사용법이나 옵션들은 useradd에서 사용한 것들 대부분 사용이 가능하다. usermod는 다음과 같은 형식으로 사용한다.
# usermod [-c comment] [-d home_dir [-m]] [-e expire_date] [-f inactivate_time] [-g initial_group[,...]] [-l login_name] [-p passwd] [-s shell] [-u uid [-o]] [-L|-U] 로그인 계정
-c 사용자에 대한 설명을 변경한다.
-d 홈디렉토리를 변경한다.
-f 패스워드 비활성화 기간, 즉 패스워드가 유효기간 종료 이후에 계정이 비활성화될 일 수 를 지정한다.
-e 만기일자를 지정한다. YYYY-MM-DD의 형식으로 일자를 지정하면, 이 날짜 이후에는 사용 불가능해 진다.
-m -d [새 홈디렉토리] 뒤에 붙여 기존의 홈디렉토리의 자료를 옮겨 준다.
-g 기본 그룹 설정을 변경한다. 옵션 뒤에 gid를 기재한다.
-G 부속 그룹 설정을 지정하거나 변경한다. 복수의 그룹을 지정할 수 있는데, 그룹간에는 쉼표(,)로 구분한다.
-p 패스워드를 변경한다.
-s 기본쉘을 변경한다.
-u uid를 변경한다.
-l 사용자명을 변경한다. 이 경우 홈디렉토리명도 수작업으로 변경한다.
-L 사용자 패스워드를 잠가서 사용자의 접근을 제한한다.
-U 사용자 패스워드의 잠금을 해제한다.

사용자 삭제 : userdel

#userdel test-user
 이렇게 하면 홈디렉토리와 메일 스풀 파일이 삭제되지 않는다. 이것들까지 삭제하기 위해서는 -r 옵션을 사용한다.
-f 옵션을 주면 사용자를 강제로 삭제한다. 현재 사용자가 로그인 상태인 경우, 다른 사용자가 홈 디렉토리를 함께 사용하는 경우, 사용자가 메일 스풀에 대한 소유권을 가지고 있지 않은 경우등에도 계정을 삭제한다.

groupadd

 시스템에 사용자들이 많고 그룹을 세분화해야 할 때에 효과적인 그룹 관리가 시스템의 안전과 괸리의 효율성을 높여줄 것이다.
# groupadd test1
 특별한 옵선이 주어지지 않는 한 GID 499까지는 할당되지 않으며, 500번부터 순차적으로 할당되지 않은 번호가 GID로 부여된다. 499번까지는 리눅스 시스템에서 사용하는 시스템용 GID 번호이기 때문이다.
-g 그룹의 고유 ID를 지정한다.
-o 기존의 gid와 동일한 gid로 그룹을 생성할 수 있도록 한다.
-r 고유 ID를 500 미만으로 자동 지정한다.
-f 기존 그룹 이름이 있다고 하더라도 명령을 성공적으로 실행한다. 다만, 이 경우에 기존에 있던 그룹의 정보가 변하지는 않는다. 만약 -g 옵션으로 지정한 gid와 동일한 gid를 가진 그룹이 있으면 다른 gid를 지정해 준다.

groupmod

 사용자와 그룹이 많은 경우에는 그룹 설정을 변경하는 것도 관리에 중요한 요소가 될 것이다. 그렇지만 그룹 설정을 변경하는 것은 그룹의 gid와 그룹명을 바꾸는 정도의 단순한 것들이다. 이렇게 그룹의 설정 사항을 바꾸어야 하는 경우가 있을 때에는 groupmod 명령을 사용한다.
# groupmod [-g gid [-o]] [-n 그룹명] 그룹명
-g 지정된 gid로 변경한다. 동일한 gid가 존재하는 경우에는 변경이 불가하지만, -o 옵션을 뒤에 붙이면 동일한 gid가 존재하더라도 해당 gid로 변경이 가능하다.
-n 새로운 그룹명으로 변경한다.

groupdel

 그룹을 삭제할 때에는 groupdel 명령을 사용한다.
# groupdel <그룹명>

사용자 및 그룹 계정 관련 파일

/etc/passwd 파일

 사용자에 대한 기본적인 설정 내지는 정보들이 들어 있다. 원래 이 파일에는 사용자의 패스워드에 대한 사항도 함께 저장되는데, shadow 프로그램에 의해서 암호화되어 기록된다. 한 행이 콜론(:)으로 구분된 7개의 필드로 구성되는 것을 알 수 있다.
sulinuxer:②x:③500:④500:⑤SULinux 사용자:⑥/home/sulinuxer:⑦/bin/bash
① 사용자의 사용자명(username) : passwd 파일의 사용자명과 같다.
② 사용자의 암호화된 패스워드 : 암호화된 것으로 실제 안호는 기재된 것과 다르다.
③ 최종 패스워드 변경일 : 마지막으로 패스워드를 변경했던 날짜를 의미하는 것으로, 1970년 1월 1일 이후부터의 일자수로 계산하여 기술된다.
④ 패스워드 변경 최소일수 : 패스워드를 한 번 변경하고 나면 최소 며칠 이후에 다시 설정할 수 있는가를 설정하는 것으로 0이면 아무 때나 다시 재설정할 수 있따는 것을 의미한다.
⑤ 패스워드 변경 유예기간
⑥ 패스워드 변경 경고일 수
⑦ 패스워드 비활성화 기간


/etc/shadow 파일

 passwd의 보안 문제를 해결하기 위해 나온 것이 shadow이다. /etc/passwd 파일은 기본적으로 사용자의 패스워드가 드러나게 되어 있다. 좀 더 보안성을 높이기 위해 shadow 패스워드를 사용한다. 즉, /etc/shadow 파일은 루트 사용자만이 읽기 권한을 가지고 있으므로 좀 더 안전하다.
 다음은 /etc/shadow 파일에서 sulinuxer라는 사용자의 정보를 확인한 것이다. 이것도 passwd 파일과 마찬가지로 콜론(:)으로 구분한 9개의 항목으로 구성되어 있다.
①sulinuxer:②$1$Zdwt1AOQ$tDVKMlyuWrA.:③16018:④0:⑤99999:⑥7:⑦:⑧:⑨
① 사용자의 사용자명(username) : passwd 파일의 사용자명과 같다.
② 사용자의 암호화된 패스워드 : 암호화된 것으로 실제 암호는 기재된 것과 다르다.
③ 최종 패스워드 변경일 : 마지막으로 패스워드를 변경했던 날짜를 의미하는 것으로, 1970년 1월 1일 이후부터의 일자수로 계산하여 기술된다.
④ 패스워드 변경 최소일수 : 패스워드를 한 번 변경하고 나면 최소 며칠 이후에 다시 설정할 수 있는가를 설정하는 것으로 0이면 아무 때나 다시 재설정할 수 있다는 것을 의미한다.
⑤ 패스워드 변경 유예기간 : 설정한 패스워드가 며칠까지 유효한지를 결정하는 것이다. 10으로 설정하면 10일간 유효한 것인데, 여기에서 99999로 설정한 것의 사실상 유효기간을 설정하지 않은 것과 같은 의미이다.
⑥ 패스워드 변경 경고일 수 : 설정된 숫자(여기서는 7)의 날만큼 패스워드가 만료되기 전부터 로그인 시에 안내 메시지를 출력한다.
⑦ 패스워드 비활성화 기간 : 패스워드 유호기간 종료 이후에 계정 비활성화될 일 수를 의미한다. 여기서는 설정되어 있지 않다.
⑧ 계정 사용 만료일 : 계정 자체의 종료일자를 설정한 것이다. 단, 패스워드의 만료일과는 구분해야 한다. 여기서는 설정되어 있지 않다.
⑨ 예약 필드

 이들 정보들 중에서 각 계쩡 사용자들의 최종 패스워드 변경일, 패스워드 변경 최소일수, 패스워드 변경 유예기간, 패스워드 변경 경고일 수, 패스워드 비활성화 기간, 계정 사용 만료일 등을 aging 정보(aging information)라고 한다.

/etc/group 파일

 group의 설정 파일은 /etc/group 이다. 관리자가 특정 그룹을 지정하지 않고 사용자를 생성하면 사용자명과 동일한 그룹이 생성되어 이 파일에 기록된다. 만약 관리자가 사용자를 기존에 생성된 그룹에 포함시키면 이 파일에 해당 내용만 업데이트되어 기록된다. 관리자가 groupadd 명령으로 그룹을 생성하면 해당 정보가 /etc/group 파일에 저장된다.
①sulinuxer:②x:③500:④
① 그룹명 : 그룹의 이름이다.
② 그룹 패스워드 : 그룹을 위한 패스워드 필드로서 보통은 사용하지 않는다.
③ 그룹의 GID : 그룹 생성시에 500부터 차례로 그룹의 GID가 부여된다. 만약 -r 옵션을 붙이면 499번 이하의 역순으로 할당되지 않은 번호를 부여하게 된다.
④ 사용자들 : 그룹에 속한 사용자를 기술한다. 사용자들은 쉼표(,)로 구분한다.

댓글

이 블로그의 인기 게시물

OverTheWire.org Bandit Level 24 -> Level 25

OverTheWire.org Bandit Level 12 -> Level 13

OverTheWire.org Bandit Level 25 -> Level 26