# 유저 관리 on 리눅스

#### 유저

유저는 수퍼유저와 일반유저가 있다.

**수퍼유저**

* root 라는 계정이름을 갖는다.
* 특권을 가지고 있다.
* 시스템 파일과 명령을 액세스 할 수 있다.
* 관리의 목적으로만 사용하는것이 좋다.
* UID는 0이다.

**일반유저**

* 특권이 없다.
* 시스템 파일과 명령 액세스에 제한이 있다.
* `su`, `sudo`를 사용하여 한시적으로 특권을 사용할 수 있다.

#### su

로그아웃하지 않고, 다른 유저의 권한으로 새 셸을 실행할 수 있다.

```
su - 유저이름
```

원래 유저로 돌아 갈 수 있다.

```
exit
```

또는

```
logout
```

#### sudo

로그아웃하지 않고 일시적으로 다른 유저의 권한으로 명령을 실행할 수 있다:

```
sudo 명령어
```

또는:

```
sudo -u 유저이름 명령어
```

#### 유저 조회

유저만 리스트:

```
cut -f1 -d: /etc/passwd
```

유저와 권한을 모두 보려면:

```
cat /etc/passwd
```

이다. 각 라인은 아래 형식이다.

```
유저이름:패스워드:UID:그룹ID:추가정보:홈디렉토리:셸프로그램
```

이다.

#### bash 유저 조회

bash 유저만 리스트 하려면:

```
grep /bin/bash /etc/passwd | cut -f1 -d:
```

bash 유저와 권한을 모두 리스트 하려면

```
grep /bin/bash /etc/passwd
```

#### UID 500이상의 일반 유저 조회

일반 사용자의 UID는 500이상이므로 조건을 부여하여 조회 한다.

```
awk -F':' '{if($3>=500)print $1}' /etc/passwd
```

#### 유저 추가

수퍼유저 권한으로 유저를 추가 해야 하며, 다양한 옵션을 줄 수 있다.

```
sudo useradd -m -g 그룹 -G 새그룹 -s 셸 -p 패스워드 -u UID 유저이름
```

* `-m`은 홈디렉토리를 부여 한다. 시스템 계정의 경우 홈디렉토리가 없으므로 `-m` 옵션을 주지 않는다. CentOS나 Fedora 같은 레드햇 리눅스는 옵션을 주지 않아도 홈디렉토리와 셸이 설정된다.
* `-g`: 이미 존재하는 그룹에 유저를 추가한다.
* `-G`: 그룹이 없을 경우 새 그룹을 생성한다.
* `-s`: 셸 프로그램을 지정한다.
* `-p`: 패스워드를 지정한다.
* `-u`: UID를 직접 지정 한다.

**추가한 유저 조회**

바로 이전에 추가한 사용자는 `/etc/passwd`의 마지막에 추가 된다. 마지막에 추가한 유저를 조회 할 수 있다:

```
tail -n 3 /etc/passwd
```

유저의 홈디렉토리를 조회하려면:

```
ls /home/
```

**유저 패스워드**

```
passwd 유저이름
```

#### 유저 제거

유저를 제거하려면 수퍼유저 권한으로 해야 한다.

```
sudo userdel -r 유저이름
```

#### 수퍼유저

리눅스는 보안을 이유로 root 계정은 활성화 하지 않는다. 수퍼유저 권한을 계속 사용해야 한다면 `sudo`는 불편한다.

root 계정을 활성화하려면 패스워드를 설정해야 한다:

```
sudo passwd root
```

이러면 `sudo`에 의해 패스워드를 물어 보는데, 현재 계정의 패스워드를 입력하면 된다:

```
[sudo] password for root:
```

그리고 root 계정의 암호를 지정하라고 한다:

```
Enter new UNIX password:
Retype new UNIX password:
```

이렇게 하면 root 계정의 암호가 설정되며 root 계정을 사용하려면:

```
su
```

하고 패스워드를 입력하면 된다.

#### 그룹 추가

그룹을 추가하려면 수퍼유저 권한으로 해야 한다.

```
sudo groupadd  -g GID -r 그룹이름
```

* `-g`: GID를 지정한다. 일반 그룹은 500이상의 GID중 아직 사용하지 않은 가장 작은 값이 지정된다. 예를 들어 이전에 사용한 GID가 600인데 `-g 1000`을 지정하여 `1000`을 사용했다면, 다음 그룹 생성시 GID를 지정하지 않으면 자동으로 생성되는 GID는 1001이 된다.

`-r`: 시스템 관리자용 그룹으로 GID가 500미만인 그룹임을 지정한다.

**그룹 조회**

추가된 그룹을 조회한다:

```
grep 그룹이름 /etc/group
```

마지막에 추가된 그룹을 조회한다:

```
tail -f /etc/group
```

수퍼유저 권한으로 전체 그룹 이름을 조회한다:

```
sudo groups
```

#### 그룹 삭제

그룹을 삭제하려면 수퍼유저 권한이 필요하다.

```
sudo groupdel 그룹이름
```

#### 그룹 패스워드

`gpasswd`는 여러 옵션이 있다.

```
sudo gpasswd -a 유저이름 -d 유저이름 -r -R -A 유저이름 -M 유저이름 그룹이름
```

* `-a 유저이름`: 새 유저를 그룹에 추가 한다.
* `-d 유저이름`: 지정한 유저를 그룹에서 제거 한다.
* `-r`: 그룹의 패스워드를 제거한다.
* `-R`: 그룹에 액세스를 제한한다.
* `-A 유저이름`: 지정한 유저에 해당 그룹의 관리권한을 부여 한다.
* `-M 유저이름`: 해당 그룹에 기존 유저를 제거하고 새 유저를 설정 한다.

**그룹에 유저 추가**

그룹에 유저를 추가하는 방법은 여러가지가 있다.

* `/etc/gourp` 파일을 편집하여 유저 추가 할 수 있다.
* `gpasswd -a`로 유저를 추가 할 수 있다:

  ```
  sudo gpasswd -a 유저이름 그룹이름
  ```
* `gpasswd -M`으로 기존 유저를 모두 제거하고 새로 유저를 지정하여 할 수 있다:

  ```
  sudo gpasswd -M 유저이름 그룹이름
  ```

유저 추가시 다수의 유저를 추가하려면 띄어쓰지말고 코머로 구분한다:

```
sudo gpasswd -a 유저이름1,유저이름2,유저이름3 그룹이름
```

**그룹에서 유저 제거**

`-d 유저이름` 옵션으로 그룹에서 유저를 제거할 수 있다.

```
sudo gpasswd -d 유저이름 그룹이름
```

**그룹의 패스워드 지정**

일반적으로 그룹에 패스워드를 지정하지 않지만 그룹에 패스워드를 지정하려면:

```
sudo gpasswd 그룹이름
```

하고 프롬프트에서 패스워드를 입력한다.

설정된 패스워드를 제거하려면:

```
sudo gpasswd -r 그룹이름
```
