INIDOG
network-access-card

Linux 일반계정에게 root 권한을 ‘모두’ 부여하기 (sudo 미사용)

root 권한 전체를 특정 계정에 부여하기


root 권한 자체를 특정 계정에 부여할 수 있습니다.

일반적으로 sudo를 사용하여 root 권한을 ‘빌리는’ 방법들이 있습니다. 그렇지만 단순히 root 권한을 빌리는 것이 아니라 root 계정으로 할 수 있는 모든 것을 특정 계정에 부여하도록 하는 방법 또한 존재합니다. 이는 su – root를 하여 root 계정으로 전환하는 것과 같은 역할을 하게 될 것입니다.

이 포스트에서는 sudo 명령을 사용하지 않고 특정 계정을 root 계정처럼 동작하도록 하는 방법을 소개할 것입니다.

 

 

이렇게 하는 이유가 있나요?


이 방법은 서버 운영자의 운영 정책에 따라 필요하기도 한 방법이지만, 권장되는 사항은 아닐 수 있습니다.

다만 서브 루트 계정을 별도로 만들고 기존 root 계정에 접근하기 어렵도록 바꾼다면 단순한 서버 공격에 대해서는 조금의 안전성을 보장받을 수 있을 것입니다.

 

이제 작업을 위해 수정해야 할 파일은 총 3개입니다. 이 모든 과정은 먼저 root 계정으로 로그인한 후에 진행해야 합니다.

  • /etc/sudoers (sudo 권한 부여하기)
  • /etc/group (root 그룹 부여하기)
  • /etc/passwd (root의 uid, gid로 변경)

 

먼저 /etc/sudoers 파일을 수정하여 sudo 명령어를 사용 가능하도록 변경합니다.

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

 

이 부분에서 root    ALL=(ALL)    ALL의 아래에 다음과 같이 입력해주시면 됩니다.

[계정명]    ALL=(ALL)    ALL

여기까지만 설정했다면, 일반적인 sudo 명령어로 root 권한을 빌릴 수 있습니다.

 

다음으로, /etc/group 파일을 수정합니다. 위쪽에 있는 root 계정을 찾습니다.

root:x:0:

 

여기에 다음과 같이 자신의 계정명을 추가해주세요. 계정 이름이 user인 경우 root:x:0:user가 됩니다. 콤마(,)로 다른 사용자를 추가할 수도 있습니다.

root:x:0:[계정명]

 

또는, /etc/group 파일을 건드리지 않고도 gpasswd -a [계정명] [추가할그룹명] 명령어를 통해 빠르게 현재 계정에 특정 그룹에 소속될 수 있도록 설정할 수 있습니다.

물론 이 방법으로도 /etc/group에서 위와 같이 바뀌게 됩니다.

 

마지막으로 /etc/passwd를 수정합니다.

하단에 있는 자신의 계정명을 찾아서, 아래처럼 UID와 GID부분을 모두 0으로 설정해줍니다. (…x:uid:gid::/home…)

만약 유저 이름이 user인 경우 user:x:0:0::/home/user:/bin/bash 가 될 것입니다. (혹시 모르니 기존의 UID/GID는 기억하거나 백업해둡시다.)

haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
[계정명]:x:0:0::/home/[계정명]:/bin/bash

 

이렇게 모두 설정해주신 후 로그아웃 후 다시 로그인하게 되면 정상적으로 적용될 것입니다.

단, 이렇게 하면 일부 서비스에 즉시 타격을 받을 수 있습니다. 예를 들면 가장 먼저 SSH 접속에 영향을 받아 접속에 문제가 발생할 수 있습니다.

아직 root 계정에서 로그아웃하지 마시고 하단의 지침을 따라 root 계정으로 SSH 로그인을 허용하도록 변경해야 합니다.

 

SSH 서버에 접속할 때 root 계정 허용하기


위와 같이 root 계정이 된 사용자로 SSH 로그인을 시도하면, 서버 환경에 따라 서버에 접속되지 않는 현상이 발생할 수 있습니다.

 

경고 : root 계정으로 즉시 로그인하는 것은 보안상 권장되지 않으며 첫 로그인은 일반 사용자로 진행하는 것을 권합니다. 이 방법을 사용하면 root 계정 또한 SSH 접속 및 인증이 가능해질 수 있습니다.

 

vim 이나 emacs 등의 터미널 텍스트 에디터를 사용하여 SSH 서버 설정 파일(/etc/ssh/sshd_config)을 편집합니다.

 

이후 해당 파일이 열리면 다음 부분을 찾습니다 : PermitRootLogin

이 부분의 값이 다음 중 하나라면,

  • prohibit-password
  • without-password
  • no

이를 다음과 같이 변경한 후 파일을 저장하여 빠져나와줍니다.

PermitRootLogin yes

 

모든 설정이 완료되었다면 sshd 서비스를 재시작해줍니다. 다음 명령어를 사용합니다.

[root@localhost ~]# service sshd restart

 

systemd를 사용 중이라면 아래와 같이 사용해주셔도 됩니다.

[root@localhost ~]# systemctl restart sshd

 

이제 해당 사용자로 다시 로그인하면 정상적으로 SSH 접속이 될 것입니다.

이 글에 대해 어떻게 생각하시나요?
유용한 포스트였나요? 여러분의 의견을 하단의 Vote와 댓글로 남겨주세요 🙂
유용합니다!
아쉽습니다.

4
여러분의 의견을 댓글로 남겨주세요.

avatar
javamon
유저
javamon

[계정명]:x:0:0::/home/[계정명]:/bin/bash
하단에 있는 자신의 계정명을 찾아서, 아래처럼 UID와 GID부분을 0으로 설정해줍니다.

=> 해당 명령을 실행한 뒤 해당 서버에 ssh 접속이 불가해졌습니다.
아래 링크는 저와 같은 사례 더군요.
OS버전은 우분투 18.04 LTS 이며, 위의 내용이 정상적으로 작동 되는지 다시 검토 후 포스팅 유지 유무를 결정해주시길 바랍니다.

https://pram.tistory.com/entry/django-aws-deploy-%EC%8B%9C-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD-%EC%97%90%EB%9F%AC-Error-You-dont-have-permission-to-access-that-port

error: