리눅스에서의 sudo와 권한 관리 (1)

이 글은 리눅스에서 sudo를 소개하고, 권한 관리에 대해 생각해본다. 예시 중에서 사용자를 생성하는 방법 또한 다룬다.

참고 자료

기준 환경:

Ubuntu 20.04.1 LTS (WSL2 by Windows 10 x64)


su와 sudo는 약자이다. su는 “substitute user”, sudo는 “substitute user do”이다.

리눅스에서의 su 사용법과 사용자 생성

su는 현재 로그인된 사용자에서 다른 사용자로 로그인하는 것이다.

사용자 목록은 cat /etc/passwd로 볼 수 있다. (이름과 다르게 비밀번호가 나오진 않는다.)

각 사용자의 암호화된 비밀번호를 확인하려면 cat /etc/shadow를 확인하라.

어떤 암호화가 쓰였는지는 cat /etc/pam.d/common-password로 확인할 수 있다 - 기준 환경에서는 sha-512를 사용한다. (출처: What methods are used to encrypt passwords in /etc/passwd and /etc/shadow?)


재밌는 점은, 사용자가 직접 만든 계정이 아닌 경우 로그인할 수 없게 되있다는 점이다. (출처: What are the default passwords of these users: nobody, daemon, uucp, etc.?)

모든 그룹의 이름만 출력한 경우

만약 ‘사람이 사용하는 용도의’ 사용자 목록을 확인하려면, cat /bin/bash /etc/passwd로 확인할 수 있다.

시스템 계정 제외하고 출력


사용자를 추가해서, 해당 사용자로 로그인해보자.

1
2
3
4
5
sudo useradd tmp # tmp는 유저명이다. 나머지는 자동으로 생성해준다. (단, 비밀번호가 없는 상태이다.)
sudo passwd tmp # 로그인을 하려면 비밀번호를 설정해야 한다. passwd 명령어로 비밀번호를 지정할 수 있다.
su tmp
echo $0 # bash가 사라져서, 현재 셸을 출력해봤다. 기본 셸은 dash인걸로 아는데, /bin/sh를 사용하고 있다.
bash # bash shell로 전환한다.

이렇게 로그인하면 bash가 사라지고, sh가 셸로 사용된다. (chsh로 바꿀 수 있다.)


사용자가 sudo를 사용할 수 있게 만들기, sudo의 권한에 대하여

sudo는 특정 작업을 root 권한으로 수행할 수 있게 하는 명령어이다. 특정 사용자를 sudo 그룹에 추가하기만 하면 된다: sudo usermod -aG sudo {사용자명}. 이후 사용자는 sudo 명령어를 사용할 수 있게 된다.


sudo 파일의 내용

각 유저에 대한 권한은 /etc/sudoers에 있는데, 권한의 포멧이 있다: %sudo ALL=(ALL:ALL) ALL 이것인데, (출처: How To Edit the Sudoers File)

%sudo ALL= (ALL: ALL) ALL
username 규칙 hostname 규칙 sudo로 로그인할 수 있는 사용자 목록 sudo로 로그인할 수 있는 그룹 목록 root 권한으로 사용할 수 있는 명령어

지금 알고 있는 지식으로는 sudo 파일의 Best Practice를 소개는 어렵기 때문에 추후로 미루지만, 권한 제어를 폭 넓게 할 수 있도록 필드가 5개나 된다는 점은 확인할 수 있었다. (아직 한 번도 sudoer 설정을 만져본 적이 없다는 점은 좀 부끄럽기도 하다.)


sudo의 장점

출처: Best practices for hardening sudo?

  1. sudo는 Root Password 공유를 막는다.

  2. syslog 등의 명령을 통해, sudo를 사용하는 경우 원격 서버로 로그를 전송하게 해서 더 빠르게 침입을 알아낼 수 있다.

  3. 제대로 권한 설정만 한다면 Root 권한보다 많이 축소되므로 침입자가 모든 기록을 말소하지 못하게 할 수 있다. (온전한 root 권한을 탈취 당한 경우 아무 소용이 없게 된다.)

위 출처의 아래 답변에서 얻은 사실인데, ssh_user 그룹을 만들어 remote login만 가능하게 하면 공격자가 ssh credential을 탈취하더라도 sudo 명령을 활용할 수 없기 때문에 보안 상 더 안전하다고 한다. (굉장히 유용한 방법인 듯하다.)


TODO:

  • 프로덕션 배포용 서버에 적절한 sudoer 설정에 대해 찾아보기
  • sudo 등의 예시 외에도 리눅스 상에서 보안 관련한 기능과 설정들을 찾아보기

리눅스에서의 sudo와 권한 관리 (1)

https://jsqna.com/linux-user-and-sudo/

Author

Seongbin Kim

Posted on

21-04-04

Updated on

21-04-12

Licensed under

댓글