Skip to content
isdnetworks
Go back

장비마다 필요한 계정이 달랐다

서버 네 대를 세우면서 계정을 만들었다. 편하려고 네 대에 같은 계정을 다 만들었다.

Table of contents

Open Table of contents

전부 같게 만들었다

이렇게 만들었다.

# 네 대 모두
useradd deploy
useradd batch
useradd monitor
useradd dev1
useradd dev2

한 번 만들어 두면 어디서든 붙을 수 있어서 편했다. 몇 달 뒤 파일 서버에서 이상한 접속 기록을 봤다.

$ last | head
dev2  pts/0  web01  Mon Jun 15 22:14

dev2 가 파일 서버에 붙은 기록이었다. 거기서 할 일이 없는 계정이었다.

어디에 무엇이 필요한지 적어 봤다.

             웹    DB    파일   배치
deploy       O     -     -      O
batch        -     -     -      O
monitor      O     O     O      O
dev1/dev2    O     -     -      -
db_admin     -     O     -      -

deploybatchmonitor 가 필요한 자리가 각각 달랐고 전부 만들 이유가 없었다. 계정 하나가 새어 나가면 네 대가 한꺼번에 열리는 상태이기도 했다.

지우기 전에 무엇을 하는지 봤다

userdel 하려다 멈추고 그 계정이 무엇을 하고 있는지 먼저 봤다.

$ ps -u dev2
$ crontab -u dev2 -l
$ find / -user dev2 2>/dev/null | head

ps -u 에 도는 것이 없고 find -user 에 파일도 없으면 지웠다.

$ userdel -r dev2

crontab -u 로 보니 배치가 그 계정으로 도는 것이 있었다. 지웠으면 그 배치가 멈췄을 것이다.

파일이 있는 계정도 바로 안 지웠다. batch 계정은 파일 서버에 파일을 갖고 있어서 못 지웠고 대신 로그인을 막았다.

$ usermod -s /sbin/nologin batch
$ passwd -l batch

/sbin/nologin 이면 파일 소유자로는 남아 있고 접속은 안 된다. passwd -l 로 비밀번호도 잠가서 키로만 붙게 두는 것과 아예 못 붙게 하는 것을 나눴다.

붙는 방법의 구분

붙는 방법도 계정마다 나눴다.

deploy   키로만. 비밀번호 로그인 금지
dev1     키로만. 웹 서버에만
monitor  키로만. 명령 제한

monitor 는 확인만 하면 되므로 할 수 있는 것을 좁혔다.

# authorized_keys
command="/usr/local/bin/check-status.sh",no-port-forwarding ssh-rsa AAAA...

command= 를 주면 붙었을 때 그 스크립트만 돌고 끝난다. 셸이 안 열린다.

사람이 붙는 계정과 프로그램이 쓰는 계정도 나눴다. 둘을 섞어 두면 누가 무엇을 했는지 기록으로 가를 수 없다.

조치 — 만들 때 적고 정기적으로 봤다

만들 때 왜 만드는지 적는 자리를 뒀다.

계정      용도                    필요한 서버    만든 날      만든 사람
deploy    배포 스크립트 실행      웹, 배치       2014-03-02   ...
monitor   상태 확인               전체           2014-03-02   ...

적어 두니 나중에 이거 지워도 되느냐는 물음에 답할 수 있었다. 그리고 사람이 나갈 때 어디서 지워야 하는지가 이 표로 갈린다.

정기적으로 훑는 것도 넣었다.

#!/bin/sh
# 90일 넘게 접속 안 한 계정
for u in $(awk -F: '$3>=1000 {print $1}' /etc/passwd); do
    last -1 "$u" | head -1
done

/etc/passwd 에서 uid 1000 이상만 골라 last 를 보게 했다. 한 번 만들고 잊으면 계속 남으므로 분기에 한 번 훑기로 했다. 첫 번에 여섯 개가 나왔고 넷은 지웠으며 둘은 이유가 있어 남기고 그 이유도 표에 적었다.

계정마다 권한을 따로 주니 새 사람이 올 때마다 네 대를 다 손대야 했다.

$ groupadd developers
$ usermod -aG developers dev1
# sudoers
%developers ALL=(ALL) /usr/bin/tail, /usr/bin/less

usermod -aG 로 그룹에 넣기만 하면 되고 빼는 것도 한 번이다. 전에는 나간 사람의 권한이 한 대에만 남아 있는 일이 있었는데 네 대를 각각 손대다 하나를 빠뜨린 것이었다.

정리


Share this post on:

Previous Post
다시 받다 끊겼는데 원래 있던 것도 없어졌다
Next Post
돈 내고 부르던 것을 안에서 처리했다