Linux:User
리눅스 사용자 관리 방법에 대하여 정리한다.
사용자간 통신
아래와 같은 명령어로 사용자간 통신을 할 수 있다.
- write: 로그인한 다른 사용장에게 메시지를 전송할 수 있다.
- wall
- mesg
- biff
- who - 현재 접속한 사용자들의 정보.
- w - 현재 접속한 사용자들의 상세 정보.
사용자 생성
- adduser: 대화형 작업으로 사용자 홈 디렉터리, 사용자 그룹 비밀번호를 처리할 수 있음. (기본 계정정보를 함께 생성)
- Useradd#새로운 사용자 만들기 - 메인으로 사용하는 방법!!!
사용자 비밀번호 생성
-
passwd
: 자신의 비밀번호를 관리할 수 있음.
사용자 삭제
-
deluser
: 대화형으로 삭제 가능 - userdel: 명령실행 시 옵션으로 처리해야됩
사용자 정보 변경
-
chfn
: 대화식 사용자 정보 변경 -
chsh
: 대화식으로 사용자 쉘 변경 -
usermod
: 비 대화식 변경
사용자/그룹 확인
-
cat /etc/passwd
: 사용자 목록 확인. -
cat /etc/group
:그룹 목록 확인.
사용자의 그룹 수정
-
gpasswd -a [USERNAME] [GROUPNAME]
: 특정 사용자를 그룹에 추가. -
gpasswd -d [USERNAME] [GROUPNAME]
: 특정 사용자를 그룹에서 제거.
그룹 생성
- addgroup: 대화형으로 생성
- groupadd: 비대화형 다양한 옵션으로 작업 가능
그룹 변경
- groupmod: 비대화형 처리
그 밖의 그룹관련 명령
그룹 삭제
- delgroup: 대화형으로 그룹 삭제
- groupdel: 비대화형 그룹 삭제
사용자 이름 변경 방법
사용자명을 변경하고 싶다면 해당 사용자가 실행중인 모든 프로세스를 종료해야 한다. 그후, 관리자로 로그인한다.
ubuntu 등 일부 linux 배포본은 사용자명과 동일한 그룹명을 사용한다. 이 그룹명도 변경한다:
마지막으로 사용자명과 동일한 홈 디렉토리의 경로도 바꿔준다.
Example Script
사용자가 존재하는지 확인하고 없다면 추가한다.
function install_user
{
local username=$1
local homedir=$2
local exists_user
exists_user=$(awk -F: '{print $1}' /etc/passwd | grep "$username")
if [[ -n $exists_user ]]; then
echo "Exists '$username' user"
else
echo "Create '$username' user"
useradd -l -M -N -d "$homedir" -s /bin/bash "$username"
fi
}
그룹이 존재하는지 확인하고 없다면 추가한다.
function install_group
{
local username=$1
local groupname=$1
local exists_group
exists_group=$(awk -F: '{print $1}' /etc/group | grep "$groupname")
if [[ -n $exists_group ]]; then
echo "Exists '$groupname' group"
else
echo "Create '$groupname' group"
groupadd "$groupname"
gpasswd -a "$username" "$groupname"
usermod -aG docker "$username"
fi
}
리눅스 패스워드 & 섀도우 파일 형식
Shadow
root:$6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZO/PsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv. : 16431 : 0 : 99999 : 7 : : :
|-1–|———————————–2——————————————————————————————————————————————-|—3—|-4-|—5–|-6-|-7-|-8-|
- Login Name : 사용자 계정각 항목별 구분은 :(콜론) 으로 구분되어있으며 콜론과 콜론 사이 각 필드에는 다음과 같은 구조로 구성되어 있습니다.
- Encrypted : 패스워드를 암호화시킨 값
- Last Changed : 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
- Minimum : 패스워드가 변경되기 전 최소사용기간(일수)
- Maximum : 패스워드 변경 전 최대사용기간(일수)
- Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
- Inactive : 로그인 접속차단 일 수
- Expire : 로그인 사용을 금지하는 일 수 (월/일/연도)
- Reserved : 사용되지 않음
여기서 2번 항목 앞쪽 부분을 잘 보시면 $ 로 구분이 지어져 있습니다. 이 구분은 다음과 같은 값이 적용됩니다.
- Hashid: 어떤 scheme 를 이용해 hash 를 했는지 보여줍니다. 어떤 scheme를 사용했느냐에 따라 id 값이 달라지며 주로 많이 사용되는것은 $1, $5, $6 입니다.
- Salt: 해시는 단 방향 함수 입니다. 다시 말하면, A->B는 가능하지만 B->A는 불가능하다는 뜻입니다.
- Hash value: hash value는 hashid에 따른 해시방법과 salt값을 가지고 hash function을 수행한 결과입니다.
Passwd
- 사용자명
- 패스워드(/etc/shadow 파일에 암호화되어 있음)
- 사용자 계정 uid
- 사용자 계정 gid
- 사용자 계정 이름(정보)
- 사용자 계정 홈 디렉토리
- 사용자 계정 로그인 쉘
Group
See also
- Linux:AdminSetting: 리눅스 관리자 설정.
- InformationSecurity:CheckList:Unix - Unix계열 시스템의 보안 항목 체크 리스트.