bxm's IT Story

Linux 이론#6 - User와 Group 관련 명령어 / chmod (허가권,소유권) / Process(bg, fg, kill) 본문

서버/Linux

Linux 이론#6 - User와 Group 관련 명령어 / chmod (허가권,소유권) / Process(bg, fg, kill)

bxmsta9ram 2021. 6. 24. 14:50

<복습 & 과제>

/etc/passwd : 사용자 계정 정보

/etc/shadow : 사용자 계정 정보가 암호화 되어 있는 것.

 

오늘 할 수업에 앞서 기존의 사용자들을 전부 제거.

 

과제2]

1. user2 사용자 생성시 홈 디렉토리를 /home/myuser2로 하라.

2. 기본 그룹을 mygroup2, 보조그룹을 Luckyguys로 해서 만드시오.

 

  • groupadd mygroup2
  • groupadd Luckyguys
  • mkdir /home/myuser2
  • useradd -d /home/myuser2 -g mygroup2 -G Luckyguys user2

## 확인!

  • id user2


  • vi /etc/login.defs : 해당 계정의 패스워드 유효기간,  // 계정 생성시 자동으로 할당되는 UID/GID 범위


  • vi /etc/default/useradd : /etc/passwd 파일에 생성되는 대부분의 기본값이 정의되어 있는 곳.


  • cd /etc/skel : 사용자 홈 디렉토리 생성시 복사될 기본 정보 파일들의 위치.                                                                      기본 skel 디렉토리, 사용자에게 공지할 내용이 있다면 /etc/skel 디렉토리에 내용을 포함시킬 수 있다.
  • ls         : 아무것도 안보임.(당연)
  • ls -a : 숨은 파일들을 찾아내었다!
  • ls -al


  • useradd -D   를 치면 아래와 같이 나온다. 옆에는 선생님이 써주신 역할!
GROUP=100 기본 소속 그룹 GID
HOME=/home 기본 홈 디렉토리 생성 경로
INACTIVE=-1 패스워드 종료일 이후 유효기간
EXPIRE= 계정 만료기간 ex) useradd -D -e 2017-05-01
SHELL=/bin/bash 기본 쉘
SKEL=/etc/skel 홈 디렉토리 생성시 참조할 기본 skel 디렉토리
CREATE_MAIL_SPOOL=yes 사용자 생성시 메일함 파일 생성 여부

  • usermod -D  : 사용자 계정 수정. useradd와 사용 형식 동일                                                                        ex1) usermod -c test user1                                                                                                                ex2) usermod -d /kedu/user1 user1                                                                                                      ex3) usermod -g mygroup1 user1

useradd user9

tail -1 /etc/passwd  ## 지금 홈 디렉토리가 /home/user9로 되어있다. 이것을 옮겨보자.

 

## 옮길 디렉토리 만들어주기

mkdir -p /kedu/user9

 

## 홈 디렉토리 옮기기

usermod -d /kedu/user9 user9

 

tail -1 /etc/passwd

## 문제는 디렉토리만 바꾸는게 전부가 아니라, skel 파일도 옮겨야함.

 

 

cd /home/user9

ls -al

 

pwd

cp -r ./.* /kedu/user9

## 숨긴파일은 .으로 시작하므로,  .*(.으로 시작하는 모든 것) /kedu/user9로 그것들을 전부 복사하자.


useradd user8

tail -1 /etc/passwd

usermod -d /kedu/user8 user8

mv /home/user8/kedu

tail -1 /etc/passwd

 

기본적으로 home 말고, kedu 안으로 기본값을 설정하려면 어떻게 하면 될까? 

vi /etc/default/useradd

변경 전
변경 후

 

useradd를 통해 사용자를 만들면, 기본 경로인 저 곳으로 간다.

 

## 그렇다면 그룹을 바꾸고 싶을 때는? ==> -g 옵션을 주면 된다.

usermod -g mygroup user 11

 

 

하... 좀 졸았습니다..


<과제 3>

user1의 주 그룹과 부 그룹을 각각 mygroup/user1 group으로 변경하세요.

  • groupadd mygroup
  • groupadd user1group
  • usermod -g mygroup -G user1group user1

  • usermod -D  : 사용자 계정 삭제                                                                                                           - userdel [계정명] : 계정만 삭제                      ## 흔적이 남아있음.                                                           - userdel -r [계정명] : 계정, 흔적 모두 삭제       ## 흔적 없는 깨끗한 삭제 (directory), 홈 디렉토리까지 모두 삭제                                                                                                                                              

     userdel -r user로 전부 삭제해보기


  • id [계정명]  : 해당 계정의 상세 정보 (uid, gid 등)     

  • /etc/group : 시스템에 현재 존재하는 group들      vi /etc/group                                                                  groups : 현재 사용자가 소속된 그룹을 보여줌                                                                                        groups [사용자명] : 해당 사용자가 소속된 그룹을 보여줌.

user1이라는 사용자는 user1이라는 group에 들어가 있다.


  • groupadd : 그룹 생성

       ex) groupadd -g 2001 mygroup                ## 그룹 번호를 지정하여 생성


  • groupmod : 그룹 수정

      ex) groupmod -n newgroup mygroup          ## mygroup을 newgroup으로 이름 변경

          grep newgroup /etc/group                    ## 바뀌었는지 확인법!


  • groupdel : 그룹삭제

      ex) groupdel newgroup

           grep newgroup /etc/group

날아갔음.


## 사용자의 권한 변경 ##

 

## 허가권 ##

  • 자료(파일 및 디렉토리)의 허가권 형식

   d      r w x      r w x      r w x

          -------     ------     -------

          Owner     Group    Other

 

 r = 4 : read = 읽기

w = 2 : write = 쓰기

x  = 1 : excute (x가 파일에 있다면 실행, 디렉토리에 있다면 접근 가능)

          ==> 디렉토리는 접근이 되어야만 안에 있는 파일을 읽거나 쓸 수 있다.  

 

        파일 : 실행 여부와 관련 => 읽기 (-rw-r--r--), 실행(-rwxr-xr-x)

  디렉토리 : 접근 여부와 관련

      문서는 Other에 r권한이 있어야만 접근 가능하고, 디렉토리는 Other에 x 권한이 있어야 접근 가능하다.

      외부 사용자가 로컬 Device에 접근시 UID 권한만 가질 수 있다. 또한 UID에 'x'가 없으면 외부에서 접근이 안된다.

      요컨대 3xx 7xx만 ftp 업로드가 가능하다.

 

 

  • chmod (CHang MODification)

      ex) chmod [permission] [변경할 파일 / 디렉토리명]

 

cd /temp

ls -l

 

 

## 그렇다면 a라는 파일에 그룹의 쓰기 권한을 주려면 어떻게 하면 될까?

  • chmod

      ex) chmod g+w a

그룹에 대한 쓰기 권한을 주기

      ex) chmod g+x a

그룹에 대한 실행 권한을 주기

      ex) chmod g-wx a

         

그룹에 대한 쓰기,실행 권한 회수

       ex) chmod g+wx, o+wx a

그룹과 기타사용자에게 동시에 쓰기,실행 권한 부여

 

그렇다면 10진수로 권한을 줄 때는 어떻게 줄까?

chmod 755 a


## 소유권 ##

  • chown

     chown [사용자] [파일명] : 파일의 소유자를 바꿈

     chown [.사용자] [파일명] : 파일 그룹의 소유자를 바꿈

 

     chown [사용자:사용자] [파일명] : 아래까지 총 3가지의 명령어는 파일의 소유자와 그룹의 소유자를 모두 바꿈

     chown [사용자.사용자] [파일명]

     chown [사용자.] [파일명]

 

 

    ex1) chown kedu group2.cfg

    ex2) chown kedu:kedu inittab

    ex3) chown kedu:root login.defs

    ex4) chown kedu. login.defs


## 특수 권한 ##

    유닉스 운영체제는 기본적으로 파일의 소유자가 아니면, 해당 디렉토리 내의 파일을 지우거나 수정하지 못하도록 

   umask를 설정한다. 하지만 딱 2군데 모든 사용자 계정이 파일을 만들고 수정, 삭제할 수 있는 디렉토리가 존재한다.

   

   바로 /tmp/var/tmp 이다. 이 2개의 디렉토리는 퍼미션이 기본적으로 777로 설정되어 있어, 누구나 임의의 파일을 

   생성하고 수정하고 삭제할 수 있다. 말 그대로 모든 사용자 계정이 사용하는 공용 디렉토리이다.

 

  1) 일반 사용자(Other)가 SetUID 권한이 설정되어 있는 실행파일을 실행할 경우, 그 파일의 소유자 권한을 가지게 된다.

  2) 해당 권한이 설정되어 있는 디렉토리의 모든 유저는 파일을 생성하고 삭제하는 것이 자유롭지만 삭제 시에는 

      소유권자 혹은 슈퍼 유저만 지울 수 있다.

 

  • r w x(setUserID)   r w s(setGroupID)  r w x : SetGid  --- 2xxx번대 2777
  • r w x                 r w x                  r w t : Stick bit --- 1xxx번대 1777

/etc에 있는 passwd 파일을 ./(현재 디렉토리)로 복사했음.

 

1번설명) SetUID 권한이 설정되어 있는 실행파일을 Root 권한을 일시적으로 준 것임. 대표적으로 passwd를 건드려 본것임!!


   ex) chmod 0755 /usr/bin/passwd                            ## 사용자 비밀번호 변경 불가

         ==> 다시 4755로 원상복구 해놓는다.

 

  • Umask [mode]

     파일이나 디렉토리 생성시 관리자 또는 사용자에 따라 각기 다른 허가권 기본값을 적용할 수 있다.

    새로운 파일이나 허가권 지정 명령어로 일반 파일인 경우 666, 디렉토리인 경우 777에서 Umask 값을 뺀

    값을 기본 허가권으로 조정한다.

    ex) umask가 0022인 경우 : 파일 666-022 = 644 / 디렉토리 777-022 = 755

 

## 현재 test1(파일), test(디렉토리)를 만들었다. 그런데 파일인 경우 666, 디렉토리인 경우 777이 기본값이다.

## 그런데 umask 값을 조회해보니 0022 이므로, 666-0022 = 644(rw-r--r--) // 777-0022 = 755(rwxr-xr-x)가 된다.


## Process ##

   - 각각의 프로세스마다 고유번호의 프로세스 ID (PID)를 하나씩 증가시키면서 부여한다.

   - 더 이상 할당할 PID가 없으면, 사용되지 않는 가장 낮은 숫자로 다시 할당한다.

   - 파일의 소유권과 유사한 방식으로 동작한다.

   - 프로세스를 실행하는 사용자의 UID가 프로세스의 실제 UID로 할당된다.

   - 가장 최근에 한 명령이 가장 큰 번호를 부여받는다.

   - (+)는 1단계 전, (-)는 2단계 전의 프로세스이다. 그리고 앞에 [번호]로 부여받은 것이 JOB 번호이다.

PID = Process ID(1번부터 7천번대까지의 프로세스가 돌아가고 있음 ...!!) // PPID = Parent Process ID

man cat & : 백그라운드로 man cat을 실행해라.

 

 

  • Job : 터미널 단말기별로 본 작업 단위

man cat의 job 번호는 3번이고, PID는 7834이다. 그리고 +는 한단계 전에 실행된 명령어라는 뜻이다.

 

  • Kill : 현재 진행중이거나 멈춘 프로세스들을 강제로 죽여버림.


  • fg %[Job 번호] 백그라운드로 진행중인 것들을 포그라운드로 끌어냄. (포그라운드로 끌어온 것을 일시정지 하려면

                                                                                                             Cntl + z 누르면 된다.

     

     ex) man cat & // less --help & // man less & // vi & 를 다시 백그라운드로 넣어보자.

## fg 명령어를 통해 백그라운드에서 있던 것을 포그라운드로 불러낸 것을 확인할 수 있다.

## 그리고 가장 최근에 한 것이 +, 2단계 전에 했던 것이 - 이므로 fg +나 fg - 명령어를 통해서도 불러올 수 있다.

## 그리고 가장 최근에 시행한 프로세스가 + 마크가 붙게 된다.

 

 

kill 명령어를 통해서 전부 죽여보기.

 

man cat   명령어를 통해서 (&붙이지 말고!!) 포그라운드로 진입

bg와 fg를 통해 백그라운드 / 포그라운드로 변경시켜 보았음.