ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Chapter1] 리눅스의 추억6(feat. 막힘없이 실무까지)
    Backend/LINUX 2022. 6. 27. 23:44

    본 포스팅은 2020년에 작성했던 포스팅입니다, blog를 이관하게 되어 재포스팅 하였습니다.

     


    아래 포스팅은 제가 수강하였던 동영상 강의, 각종 블로그 혹은 공식 홈페이지에서 습득한 자료들 제 나름대로 재구성하여 포스팅 한 자료입니다. 잘못된 내용이 있을 수도 있습니다. 최대한 글 읽으시는 시간이 헛되지 않게 검토하여 올리겠습니다. 편하게, 재미있게 제 글을 읽어주셨으면 좋겠습니다. 틀린 부분이 있으면 댓글이나 메일 주시면 수정하여 놓겠습니다. 제 글을 읽어주셔서 감사합니다^^


    - 목차 -

    Chapter1. 리눅스 맛보기

    Chapter2. 리눅스 활용하기

    Chapter3. 리눅스 개발 및 운영하기


    안녕하세요. 오늘은 Permission과 User, UserGroup에 대한 개념에 대해서 알아보겠습니다.

    여러분 어렸을 적 그러니까 학창 시절에 컴퓨터실에서 실습할 때, 컴퓨터 과목 담당 선생님이 '이 폴더가 공용 폴더이니까 여기 들어와서 작업하세요'라는 말과 함께 Window에서 네트워크 폴더에 접속해서, 컴퓨터 과목 담당 선생님의 공용 폴더에 접속해서 여러 파일들을 다운로드하고 실습을 진행했던 추억을요.

    오늘은 그것과 비슷한 추억을 리눅스에서 되새김질해볼까 합니다.

    출처: 구글 / 이말년님만화

    ....오늘은 사전에 준비해 주실 사항이 있습니다.

    터미널 창을 두 개 띄워주셔서 virtual box와 연결해 주셔야 합니다.

    왜냐하면 두 가지 유저 계정으로 접속해 주셔서 테스트를 해야 하거든요.

     

    (15). 계정확인 관련 명령어들

    (15)-1. whoami

    brandon@brandon-VirtualBox:/$ whoami
    brandon
     

    명령어가 정말 직관적인 것 같습니다. who am i?

    본인이 어떤 계정으로 접속하였는가?를 알려줍니다.

    brandon@brandon-VirtualBox:/$ sudo whoami
    [sudo] password for brandon: 
    root
    
     

    sudo 명령어를 빌리면 root라고 알려주네요.

     

    (15)-2. id

    brandon@brandon-VirtualBox:/$ id
    uid=1000(brandon) gid=1000(brandon) groups=1000(brandon),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)
    
     

    이 명령어를 사용하면, 본인이 어떤 그룹에 포함되어 있는지 uid는 무엇인지 gid는 무엇인지 알려줍니다.

    요기서 uid는 사용자 식별 번호, gid는 그룹 식별 번호입니다.

     

     

    (16).권한의 대여

    여러분 만약 이 글을 보고 계신 분들이 리눅스를 처음 접하시는 분들이라면 권한을 대여한다는 개념이 무척 낯설게 느껴지실 겁니다. 왜냐하면 window 운영체제에서는 기본적으로 여러 개의 계정을 만들 수 있게는 해놓았지만 대부분의 유저분들은 그냥 하나의 계정으로 대부분의 볼일을 보셨을 것이라고 생각되기 때문입니다.

    저도 많이 낯섭니다. 그런데 리눅스 관련 문서들을 찾아보면 그것이 리눅스에 철학이라고 많이 언급이 됩니다.

    한 명의 유저가 모든 일을 처리하는 것이 아닌, 평범한 권한의 유저들이 평범하게 서버를 이용할 수 있게 하고, 권한을 대여해 주거나 유저별로 권한을 달리하여 서버를 이용할 수 있도록 하는 것입니다.

     

    root의 권한을 빌려오는 sudo라는 명령어가 있습니다.

    (16)-1. sudo

    sudo
     

    superuser do의 줄임말로, 무언가를 할 때 빈번하게 사용하는 root 권한을 대여해오고 싶을 때 사용합니다.

    누가 sudo의 권한을 빌려올 수 있는지에 대한 정책 지정이 필요하다.

     

    (16)-2. visudo

    brandon@brandon-VirtualBox:~$ sudo visudo
    
     

    위 명령어를 이용하시면, 사용자별로 어떠한 권한을 가지고 있는지 확인할 수 있고 그룹도 확인할 수 있습니다.

    이 포스팅의 후반부에서는 직접 유저들의 권한을 제어하는 파일도 수정해보도록 하겠습니다.

     

    (16)-3. su

    이 명령어는 현재의 userID를 다른 계정으로 바꾸어주는 명령어입니다.

    주로 su -root 이런 식으로 많이 사용하셨을 것 같습니다.

    하지만 어느 블로그를 보시면 su 계정명 , 어떤 블로그를 보시면 su - 계정명 을 사용하라고 안내할 것입니다.

    두 가지 방식에는 차이가 있습니다.

    su 계정명
     

    위와 같이 사용하시면 현재의 사용자는 로그아웃하지 않고 다른 사용자의 계정으로 전환하는 명령어이고

    su -계정명
     

    위와 같은 방법은 완전히 계정을 전환하고 그 환경까지도 불러오는 방법입니다.

    그래서 저는 su - 계정명 <- 이 방식으로는 잘 사용하지 않습니다. 왜냐하면 개발 환경이 바뀌기 때문입니다.

     

    (17). 현재 서버의 사용자 계정, 사용자 그룹 확인하기

    (17)-1. 사용자 계정 확인

    cat /etc/passwd
     

    (17)-2. 사용자 그룹 확인

    cat /etc/group
     

    위는 그냥 간단한 경로라서 설명은 따로 드리지 않도록 하겠습니다. 그밖에 중요한 정보들이

    /etc/shadow
     

    위 디렉토리에 있습니다.

    사용자 이름, 패스워드, 최종 수정일, 패스워드의 최소 변경일 등등...의 정보들이 있습니다.

    하지만 패스워드가 암호화가 되어있기 때문에 이 파일들을 볼 수 있다고 해서 이걸로 패스워드를 유추하거 하는 일은 없습니다.

     

     

    (18).사용자와 그룹 관리에 관련된 명령어들

    (18)-1.adduser

    brandon@brandon-VirtualBox:/$ adduser
    adduser: Only root may add a user or group to the system.
    brandon@brandon-VirtualBox:/$ sudo adduser harry
    Adding user `harry' ...
    Adding new group `harry' (1001) ...
    Adding new user `harry' (1001) with group `harry' ...
    Creating home directory `/home/harry' ...
    Copying files from `/etc/skel' ...
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    Changing the user information for harry
    Enter the new value, or press ENTER for the default
    	Full Name []:  
    	Room Number []: 
    	Work Phone []: 
    	Home Phone []: 
    	Other []: 
    Is the information correct? [Y/n] y
    
     

    저는 harry라는 user를 만들어 보겠습니다. 비밀번호도 지정해야 합니다. 나중에 까먹지 않게 단순한 것으로 실습해보시는 것이 좋을 것 같습니다.

    그리고 저 같은 경우 다른 정보는 입력하지 않고, 마지막에 정보가 정확하냐고 물어보는 질문에 y를 입력하였습니다.

     

    (18)-2.addgroup

    brandon@brandon-VirtualBox:/$ sudo addgroup developers
    Adding group `developers' (GID 1002) ...
    Done.
    
     

    아까 포스팅 초반부에 말씀드렸던 공용 폴더를 만들어볼 생각입니다.

    폴더의 이름은 developers입니다.

    여기에서는 신기하게 완료가 되었다고 Done을 표시해 주네요. 신기합니다 ㅎㅎ

    그룹을 만들었으니 이제 사용자를 할당해보겠습니다.

    제가 주로 사용했던 user의 이름은 저 자신의 이름인 brandon , 그리고 실습에 이용할 user 이름을 한 개 더 언급 드리면 harry입니다. 위에서 user를 생성했었죠.

    (이 포스팅을 보고 따라 해주시는 분들은 harry가 아니라 다른 계정으로 진행해 주시면 됩니다. 이름은

     

    (18)-3.usermod

    brandon@brandon-VirtualBox:/$ sudo usermod -a -G developers brandon
    brandon@brandon-VirtualBox:/$ sudo usermod -a -G developers harry
    
     

    앞으로 -mod라는 postfix를 자주 보게 될 겁니다. 여기에서 -mod는 주로 무언가 '부여'하거나 '할당'할 때 쓰입니다.

     

    usermod 그룹 유저 이름

     

    위와 같은 형식으로 사용해 주시면 됩니다. 그렇다면, 제대로 그룹에 포함되어 있는지 확인해야겠죠?

    아까 앞에서 터미널 창을 두 개 열어달라고 부탁드렸었습니다. 현재 창을 끄고 다시 ssh 연결(혹은 putty 연결)을 하셔서 다른 창을 열어서 다른 계정으로 로그인을 한 후 id 명령어를 입력해보면.....

    harry@brandon-VirtualBox:/$ id
    uid=1001(harry) gid=1001(harry) groups=1001(harry),1002(developers)
    
     

    harry라는 계정이 develpers에 귀속되었습니다.

    brandon@brandon-VirtualBox:~$ id
    uid=1000(brandon) gid=1000(brandon) groups=1000(brandon),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare),1002(developers)
    
     

    기존 계정 또한 developers라는 그룹에 속해있다는 것을 id라는 명령어를 통해 아실 수 있으십니다.

    우리는 계정도 만들어보았고, 그룹도 만들어보았습니다.

    이제 폴더를 만들어볼 차례입니다.

     

     

    (19). 공용 폴더 만들기

    brandon으로는 계속 무언가를 했었으니까, 새롭게 생성한 harry의 계정에서 sudo 명령어를 이용하여 폴더를 하나 만들어 보겠습니다. 그러면 아래와 같은 명령어를 마주하시게 될 것입니다.

    harry@brandon-VirtualBox:/$ sudo mkdir /permission-test-folder
    [sudo] password for harry: 
    harry is not in the sudoers file.  This incident will be reported.
    
     

    헉.. 도대체 넌 왜 Why...!!

    harry가 sudoers 파일에 없고. 이 문제는 보고될 것이라고 하죠.

    그럼 sudoers 파일에 있게 하면 되는 것 아닐까? 맞습니다!

     
    사진 삭제

    출처: 구글

    비밀번호를 알고 있다고 해서 누구나 sudo 권한을 끌어다가 쓸 수 있는 것이 아니라, /etc/sudoers 파일에 이름이 존재하는 자만이 sudo의 권한을 빌릴 수가 있습니다. 일단 다시 브랜든의 터미널로 돌아옵니다. 그 후에 아래 명령어를 입력합니다.

    brandon@brandon-VirtualBox:~$ sudo vi /etc/sudoers
    
     

    그렇다면 아래와 같은 창이 나올 것입니다.

    .
    .
    .
    .
    .
    .
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    harry ALL=(ALL:ALL) ALL
    .
    .
    .
    .
     

    harry는 제가 추가해 주고 싶은 user의 이름이고, 여러분들은 이거 보시면서 아까 만들어주었던 계정의 이름을 저 자리에 입력해 주시면 됩니다.

    그러고 나서 다시 harry의 터미널로 돌아옵니다.

    두 개 띄우셔서 하나씩 접속하여 따라 하고 계실 테니 그냥 마우스로 띄우시면 됩니다.

    다시 아까와 같은 mkdir 명령어를 입력해보면 ....

    harry@brandon-VirtualBox:/$ sudo mkdir /permission-test-folder
    [sudo] password for harry: 
    harry@brandon-VirtualBox:/$ ls
    bin             lost+found              srv
    boot            media                   sys
    cdrom           mnt                     test1-forder-sim-link
    dev             opt                     test-folder
    etc             permission-test-folder  test-something.txt
    
     

    폴더가 정상적으로 만들어졌습니다!!!

     

    하지만 확인할 것이 있으니 ls -al 명령어로 조금 더 자세히 폴더들을 조회해보도록 해볼까요?

    어랏... 폴더의 주인이 'root'입니다.

    폴더를 만들어보았으니, 이제 그 폴더의 '권한'을 지정해보겠습니다.

     

    harry가 한번 폴더의 권한을 뺏어와 보겠습니다.

    harry@brandon-VirtualBox:/$ sudo chown harry:harry permission-test-folder
    harry@brandon-VirtualBox:/$ ls -al
    total 120
    drwxr-xr-x  26 root  root   4096  9월  8 22:15 .
    drwxr-xr-x  26 root  root   4096  9월  8 22:15 ..
    drwxr-xr-x   2 root  root   4096  8월 28 15:54 bin
    drwxr-xr-x   3 root  root   4096  9월  8 19:32 boot
    drwxrwxr-x   2 root  root   4096  8월 28 15:52 cdrom
    drwxr-xr-x  19 root  root   3960  9월  8 19:31 dev
    drwxr-xr-x 133 root  root  12288  9월  8 22:15 etc
    drwxr-xr-x   4 root  root   4096  9월  8 21:57 home
    lrwxrwxrwx   1 root  root     34  9월  8 19:31 initrd.img -> boot/initrd.img-4.15.0-117-generic
    lrwxrwxrwx   1 root  root     34  8월 28 15:51 initrd.img.old -> boot/initrd.img-4.15.0-112-generic
    drwxr-xr-x  22 root  root   4096  8월 28 15:54 lib
    drwxr-xr-x   2 root  root   4096  8월  7 07:38 lib64
    drwx------   2 root  root  16384  8월 28 15:51 lost+found
    drwxr-xr-x   3 root  root   4096  8월 28 16:41 media
    drwxr-xr-x   2 root  root   4096  8월  7 07:37 mnt
    drwxr-xr-x   4 root  root   4096  8월 28 21:30 opt
    drwxr-xr-x   2 harry harry  4096  9월  8 22:15 permission-test-folder
    
     

    소유주가 harry로 변해있는 것을 보실 수가 있습니다.

    어라? 어떻게 그걸 알았냐고요? 제가 리눅스에서 읽기/쓰기 권한에 대해 읽는 방법에 대한 설명을 생략한 것 같습니다... 이렇게 중요한 걸 소개 안 하다니! 중요한 부분이므로, 다음 포스팅에서 이어서 더 자세히 다루어 보겠습니다.

     

    Thanks for reading!

     

     

    댓글

Designed by Tistory.