리눅스 서버 root와 사용자, 그리고 CLI 명령어 실행 시 주의사항

4

이번 포스팅에서는 초보자로서 리눅스(우분투,CentOS,데비안등) 서버관리를 하는 입장이라면 알아두면 좋을 사용자계정과 서버 명령어 입력에 관한 사항을 포스팅하려고 합니다. SSH 접속, 명령어 입력시 알아두면 유용할 기초사항일 거예요.

 

참고로 서버접속 및 CLI 사용에대한 기초지식이 필요하다면 서버 접속과 제어방법 글을 읽어보시기 바랍니다.

 

리눅스 컴퓨터의 다중 사용자 계정

개인컴퓨터만 사용하다가 서버를 사용하려고 하면 한가지 새로울 수 있는 개념이 있는데요. 그것은 바로 다중 사용자입니다. 쉽게 말해 하나의 컴퓨터를 여러명의 사용자가 사용한다는 개념이라고 보면 됩니다.  각자의 사용자명과 비번으로 로그인하면 같은 컴퓨터이더라도 사용할 수 있는 프로그램이나 실행할 수 있는 파일이 다른 것이죠. 게다가 거기에 최고의 권한을 가진 컴퓨터 관리자 계정이 또 있습니다. 관리자의 파워는 막강해서 각 사용자가 접근할 수 있는 권한을 바꾸거나 사용자를 없애거나 새롭게 추가할 수도 있죠.

 

여러분의 컴퓨터 또한 다중사용자를 사용할 수 있으나 아마도 컴퓨터,노트북을 혼자서 쓸것이므로 이에대한 개념이 없을 수도 있습니다.  하지만 서버관리에서는 대단히 중요한 개념입니다. 저처럼 혼자서 서버만들고 코딩하고 북치고 장구치는 입장에선 제가 관리자고 사용자이며 게스트이므로 좀 귀찮긴합니다.

서버가 아닌 개인컴퓨터로써 리눅스를 사용하는 사람도 있습니다.

그런데, 웹서버(아파치, NginX, Node.js 등)를 설치해 사용하는 입장이라면 또 조금 다르죠. 웹서버 또한 하나의 사용자로 지정되어있습니다. 왜냐하면 자신의 서버에 접속하는 방문자들의 권한때문이죠. 방문자는 웹서버가 허락하는 범위내에서만 서버에 접속해 볼 수 있습니다. 그래서 보통 웹서버가 포함된 서버를 구축하고 나면 기본적으로 3가지의 사용자를 염두에 둬야합니다.

  • root : 관리자로서 모든 리눅스 서버는 이 사용자명이 있습니다.
  • ubuntu: 서버가 우분투 리눅스 서버라면 보통은 ubuntu 사용자가 일반사용자로 기본으로 되어있습니다. 비트나미 워드프레스의 경우 bitnami 라는 사용자가 있습니다.
  • 웹서버 사용자명:  예를들어 아파치 웹서버의 경우 서버 OS가 우분투 리눅스라면 www-data이고  CentOS 리눅스라면 apache 라는 사용자명으로 존재하는게 일반적입니다.

 

 

리눅스 root 사용자로 전환: sudo su

리눅스 서버를 터미널이나 웹콘솔 같은 CLI 명령어 프로그램으로 접속했을 때 종종 하게 되는 일이 root 사용자로의 전환입니다. 보통은 일반사용자로 최초 접속을 하는데요. ubuntu 사용자로 접속했을때는 아래그림처럼 나타납니다.

ubuntu 사용자 명령어 입력상태
ubuntu 사용자 명령어 입력상태

위 그림은 서버 시간을 알아보는 date 라는 명령어를 실행한 것인데요. 명령어 입력상태의 시작인 빨갛게 하이라이트 한부분을 보면 아래와 같은 형태입니다.

서버사용자명@서버IP주소:현재경로$

현재경로에 해당하는 물결기호 ~는 현재위치가 사용자(ubuntu)의 홈 폴더라는 뜻이예요.

 

그리고 명령어 입력 시작부 끝자리가 $기호 인걸 볼 수 있는데요.  root(루트) 사용자일땐 다른 기호가 붙습니다. sudo su 명령어를 통해서 root 사용자로 전환해 볼 수 있습니다.

root 사용자로 전환한 모습

 

아래 그림처럼 앞자리는 root 관리자명, 뒷자리는 #(해쉬,샵)으로 바뀐걸 볼 수 있습니다. 또한 현재경로가 root의 홈폴더가 아닌 다른 사용자의 홈폴더이므로 ~물결이 아니라 전체경로인 /home/ubuntu 로 되어있네요.

root 사용자 명령어 입력상태
root 사용자 명령어 입력상태

 

다시 ubuntu 사용자로 돌아오려면 아래처럼 입력하면 됩니다.

sudo su 사용자명 

사용자를 전환한 일이 있다면  exit 명령어를 입력하면 위 처럼 서로 바뀌기도 합니다.

참고: exit 명령어는 보통은 SSH 접속을 끊는 명령어라는 것을 상기해볼때 아리송하기도 한데요. 위 같은 상황에서 SSH 터미널 접속을 끊으려면 exit 호스트네임 처럼 @: 사이에 오는 호스트네임(서버 컴퓨터 이름. 보통은 ip-숫자조합)을 입력해서 SSH 접속을 끊을 수 있습니다.

 

 

root 사용자 CLI 명령어 입력 주의사항: $과 # 그리고 sudo 접두사

인터넷에 남이 써둔 명령어를 접할때 $또는 # 기호sudo 사용에 대한 내용입니다.

$과 # 기호

명령어를 통한 서버제어에서 노파심에 언급하고 싶은게 있는데 제 블로그 뿐만 아니라 인터넷을 떠돌며 알아낸 서버관련 리눅스 명령어를 실행할때 염두에 두면 좋을 사항이 한가지 있습니다. 바로 $ 기호와 # 기호입니다.  위에서 말했듯 명령어 입력 시에 $는 일반사용자일 때 나타나고 #은 root 상태일 때 표시됩니다.

 

보통 CLI 최초접속시엔 ubuntu 라는 서버컴퓨터 사용자로 접속하게되어 끝자리가 $(달러 표시)가 붙습니다.  다시한번 보자면 아래철럼 말이죠.

ubuntu 사용자 명령어 입력상태
ubuntu 사용자 명령어 입력상태

 

인터넷에서 서버관리 관련 블로거들의 글을 보면 명령어라면서 써놓는 형태를 보면 이렇게 앞자리에 $ 또는 #을 붙여서 써놓곤 합니다. date 명령어를 예를 들자면 아래처럼 말이죠

$ date

또는

# date

그러면 여러분은 서버에 입력할때 $ 또는 #을 제외하고 곧바로 date만 입력하면 되는데요. 초보들은 아무래도 이 사항을 모르므로 남이 알려주는 명령어를 작성할때 $이나 #까지 같이 복사해와서 입력해보고는 안되는 걸 경험하곤 합니다. 여러분은 꼭 빼고 입력하시길 바래요.

 

제 블로그에서는 보통 이 명령줄 구분문자인 $이나 #을 제외하고 작성한게 많았는데요.  사람들은 어째서 $또는 #을 함께 쓸까요? 한 줄 명령어만 쓸땐 딱히 $이나 # 문자를 필요치 않습니다만 연속으로 여러개 명령어를 써두려면 아무래도 줄과 줄사이 구분이 필요합니다.  명령어와 명령어를 구분하는거죠. 길거나 여러줄에 거친 여러명령어를 실행하는 것을 보여줄 경우 $또는 #기호를 통해 이 명령어가 어디서 부터 어디까지인지 구분될 수 있죠.  아래처럼 말이죠.

$ touch /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php
$ cp /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line-copy.php
$ rm -f /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php
$ ls -l

위처럼 긴 명령어는 웹브라우저 가로폭에따라 줄바꿈이 다르게 보이게 됩니다. 여러분들은 몇 줄로 보이시나요? 위 명령어는 사실상 4개의 명령어를 순차적으로 입력한 모습을 나타내고 있습니다. 여러분이 실제로 입력할 땐 앞부분 $과 스페이스를 제외하고 아래처럼 4번 입력하면 되는 것이죠.

touch /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php
cp /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line-copy.php
rm -f /home/ubuntu/test-file-whose-name-is-so-long-that-it-cannot-be-displayed-in-a-line.php
ls -l
터미널에 연속된 명령어 입력
실제 실행한 모습

 

sudo 명령어 접두사 사용

두 번째로 sudo 라는 명령어가 있습니다. 우분투 사용자인 상태에서 root 권한이 필요한 명령어를 실행해야할때가 종종 있는데요. 이때는 sudo su 명령어를 통해서  root 사용자로 전환하지 않고도 맨앞에 sudo만  붙여서 1회성으로 root권한 명령어를 실행시킬 수 있습니다. 그래서 아래처럼 실행시키죠.

sudo service nginx restart

아래 그림은 위 명령어 그대로 우분투 사용자 입력상태에서 sudo 명령어를 통해 관리자(root)권한 명령어를 입력한 것입니다.

 

물론, root 사용자인 상태에서는 sudo가 필요없습니다.

root 사용자로 전환후 같은 명령어 입력

 

이 얘기를 왜 또하냐면 수많은 블로거들이 명령어를 작성해둔걸 보면 sudo 를 붙여서 알려주곤 하기 때문이예요. 만일 어느 블로거의 글에 sudo 가 붙은 명령어를 보았고, 자신은 root 상탤라면 sudo는 빼고 입력하면 됩니다. 반대로 인터넷에서 본글은 root 권한이 필요한 명령어인데 sudo 없이 적혀있을 때 자신은 ubuntu같은 일반사용자 입력상태라면 sudo  를 붙여서 실행해야합니다. 

‘아니, 이 블로거에서 말하기론 # service nginx restart 하면 된다는데 나는 왜 똑같이 $ service nginx restart 로 입력했는데 왜 안돼지?’ 같은 상황이 올 수 있는거죠. 그땐 sudo 를 붙여보시기 바랍니다. 관리자 권한이 필요한 명령어일지도 몰라요.

다시 말해 남이 알려주는 명령어가 root 명령어일지 일반사용자 명령어일지를 간파해내고 내 상태에 맞게 적절히 sudo를 붙이거나 붙이지 않는게 핵심입니다. 또는 잠시 root로 전환해서 연속된 root권한 명령어를 수행 할 수 있겠죠.

 

 

사용자 권한 주의사항

sudo su를 통해 사용자를 전환해서, 혹은 sudo를 붙여서 명령어를 수행할때 주의해야하는 명령어도 있습니다. 대표적으로 새로운 파일,폴더를 생성하거나 복사하는 명령어입니다.

 

파일이나 폴더는 생성될때 소유자와 사용자그룹이 지정됩니다. 만일 자신이 ubuntu 사용자일때 파일생성 명령어를 사용해 파일을 만들었다면 그 파일은 소유자와 그룹이 각각 ubuntu ubuntu 가 됩니다. 자신이 root 사용자로 전환한 상태에서 파일을 만든다면 각각 root root 가 되겠죠.

또한 ubuntu 사용자 입력상태이더라도 sudo 명령어를 사용해 파일을 만들었다면 그 파일 역시도 소유자와 그룹이 root root 입니다.

 

이것이 문제될 수 있는 경우는 ubuntu 나 웹서버가 실행해야할 파일을 만들면서 root 명령어로 파일을 만들었는데 정작 ubuntu 사용자는 그 파일을 실행할 권한이 없을 때입니다. 이럴땐 경우에따라 파일소유자를 바꾸든, 그룹을 재편성하든,  권한을 바꿔줘야하는 귀찮은 절차가 하나 더 추가될 수밖에 없는 상황을 맞이하게됩니다. 그렇게 권한을 수정하는 것도 문제가 생겼을때 그것이 파일실행,편집 권한문제라는걸 알아챌 수 있어야 가능한 얘기지요.

 

4 댓글

  1. 와 진짜 많이 도움받고 있습니다
    리눅스에 리짜도 모르는데 lemp부터 워드프레스까지 너무 잘 설명해 주셔서 감사하게 잘쓰고 있습니다.

댓글은 익명이나 SNS, wordpress.com 로그인 지원). 마크다운 문법 사용가능(Shift+~ 키로 특정문구 혹은 위아래 ~~~으로감싸서 여러줄을 코드블락으로 작성)