본문 바로가기

Linux

Linux 기초(2) - 사용자 계정 및 그룹, Shell, 패키지 매니저

728x90
반응형

1) Linux

    1-1) 사용자 계정
    1-2) 명령어
    1-3) 사용자 그룹

    1-4) Shell
    1-5) 패키지 매니저

2) CLI 실습

 

 

 

 

1) Linux

1-1) 사용자 계정

Linux 구조의 특징 중 하나 : 멀티 유저(여러 사용자가 동시에 하나의 시스템에 접근하는 것을 의미)

Linux에서 작동하는 모든 파일과 directory는 사용자에서 시작된다!
=> 즉, 애초에 Linux를 사용하려면 로그인이 필요하므로 로그인된 상태에서 파일과 directory를 만들 수 있다는 의미!!

ex)
sangbeom이라는 사용자가 있고,
hongtae라는 사용자가 있다고 가정해보자.

sangbeom으로 로그인된 상태에서
vi를 통해 hello.txt라는 파일을 생성했다.

hongtae라는 계정이 hello.txt 파일에 접근하려 했을 때
해당 텍스트 파일을 못 보게 하거나, 수정을 못 하게 막을 수 있다!

왜냐하면 hello.txt는 sangbeom이라는 계정이 만들었기 때문에
hello.txt의 소유자는 sangbeom이라서 다른 계정이 해당 파일에 접근 못하게 할 수 있다!

hongtae라는 계정은 권한만 존재한다면 파일 접근이 가능하다!

즉, Linux는 파일 하나하나에 접근을 제한할 수도 있고, 허용할 수도 있다(접근권한 조절 가능)!
여러 계정을 묶어서 해당 그룹에 파일 접근 권한을 줄 수도 있다!(여러 사람에게 접근 권한을 줄 시에는 한 사람 한 사람 접근 권한을 주기 보다는 이들을 그룹으로 묶어 해당 그룹에 접근 권한을 주는 것이 효율적이기 때문!)
따라서 사용자가 많아질 경우, 개개인별로 권한을 주는 것이 귀찮기 때문에 "그룹"이라는 개념도 존재한다!!

ex) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
여기서 0이라는 계정이 짝수에게만 권한을 주고자 할 경우,
2, 4, 6, 8을 짝수 그룹으로 묶어 권한 부여 가능!!

 

 

사용자 계정

  • 권한
  • 그룹

모든 프로세스, 즉 실행은 사용자에 의해서 시작된다!
예를 들어, 하나의 프로그램을 실행하면

해당 프로그램을 다른 사람(계정)이 와서 끌 수 없어야 하기에

모든 실행은 사용자에서 시작된다는 것이다!!

Linux의 사용자 타입

  • 루트 사용자(최고 관리자) : "UID 0"에 할당되며 어떤 파일이든 삭제, 수정 등 모든 것을 할 수 있는 슈퍼 계정이다!
  • 시스템 사용자 : UIDs 1~999, 즉 천 번 미만에 할당됨!
  • 일반 사용자 : UIDs 1000, 즉 처음 만들면 천 번 부터 시작함!

Linux는 설치할 시 기본적으로 root 계정을 생성함!
그리고 안전을 위해서 또 하나의 일반 사용자 또한 생성함!

 

 


1-2) 명령어

사용자를 확인하는 명령어
(1) id : 현재 사용자의 아이디와 사용자가 속한 그룹의 아이디를 포함한 아이디 관련 정보를 보여줌!
(중요!!) 여기서 id는 숫자이다!!

$ id
# uid-1000(sangbeom) gid-1000(sangbeom)
# groups=1000(sangbeom), 4(adm), 20(dialout), 24(cdrom), ...

$ id [사용자 이름]
$ id -u    # 현재 사용자의 아이디를 출력함!
$ id -un    # 현재 사용자의 이름을 출력함!

$ id -u root    # root 사용자에 대한 아이디를 출력
$ id -un root    # root 사용자에 대한 이름을 출력


(2) whoami : 현재 사용자의 이름을 조회함!

$ whoami


(3) users : 현재 로그인되어 있는 전체 사용자의 정보를 조회함!

$ users



사용자 생성, 수정, 조회를 위한 명령어

사용자 생성, 수정 관련된 명령어들은 대부분 root 계정이 필요하다!
간단히 root 계정에 접속해서 만드는 방법도 있긴 한데 대부분 root 계정에 접속하여 수정하는 것은 금지시된다!

일반 사용자에서 root 권한이 필요할 경우,
"sudo"를 사용함!!
=> sudo(substitute user do의 약자로, 다른 사용자의 권한으로 실행한다는 의미) : 일반 사용자가 root 계정의 권한을 잠시 빌려쓰는 것을 가능하게 함!

sudo가 필요한 명령어가 있다!

(1) useradd
sudo가 필요함!(root 계정이 만들었던 파일을 읽거나 수정해야 한다는 의미와도 같다!)

새로운 사용자를 생성함

$ useradd user1


(2) adduser(앞으로 이것을 사용할 예정)
sudo가 필요함!

새로운 사용자를 생성함

$ adduser user1
# useradd : Permission denied.
# cannot lock /etc/passwd; try again later.

$ sudo adduser user1


왜 sudo 명령어가 필요할까?
/etc/passwd

$ cd /etc
$ sudo vi passwd

/etc/passwd
passwd 파일 내부 설명

# ...생략

tmp1:x:1002:1004:,,,:/home/tmp1:/bin/bash

# tmp1 : 사용자 이름
# 1002 : 사용자 ID
# 1004 : 그룹 ID
# ,,, : comment 또는 풀네임이 들어가는 곳(있어도 되고, 없어도 되는 곳)
# /home/tmp1 : 사용자 directory / home directory
# /bin/bash : shell 경로


(3) passwd
sudo 권한이 필요함!
사용자의 패스워드를 설정할 때

$ passwd [사용자 이름]


(4) usermod
sudo 권한이 필요함!

$ sudo usermod [사용자 이름]


-s : shell 경로를 변경할 경우, 사용함!

$ sudo usermod -s /bin/zsh tmp1


-G : 그룹 아이디를 변경할 경우, 사용함!

$ sudo usermod -G blockchain tmp1


(5) userdel
sudo 권한이 필요함!

$ sudo userdel [사용자 이름]


옵션 "-r"을 사용해야 home directory 안에 있는 폴더까지 삭제함!

/etc/passwd에 해당하는 줄을 삭제할 뿐이다!

$ cd ~   # sangbeom에 대한 home directory로 이동
$ sudo userdel -r tmp1

$ cd /home
$ ls -al   # tmp1 directory까지 삭제된 것을 확인함!

 

 

 

1-3) 사용자 그룹

Linux에서 그룹을 통해 파일에 대한 접근권한을 제한할 수 있음!!

"sangbeom"이라는 계정명을 만들면 "sangbeom"이라는 그룹이 만들어짐!
사용자를 만들면 최소한 그룹 하나를 가지고 있음!

그룹 관련 명령어
(1) groups : 현재 로그인된 사용자가 속한 그룹 리스트를 확인함!

$ groups
$ groups [계정명]


(2) groupadd : 새로운 그룹을 생성할 수 있음!

$ groupadd [그룹 이름]
$ groupadd blockchain

# groupadd: Permission denied.

# groupadd: cannot lock /etc/group; try again later.


/etc/group 이라는 파일이 어떻게 생겼는지 알아보기
$ vi /etc/group

$ cd /etc
$ ls -al # 너무 많이 나옴!
$ ls -al | grep group

$ cd ~
$ pwd

# /home/sangbeom

# /etc/group

$ groupadd blockchain1


사용자 같이 사용하기

$ sudo adduser tmp1
$ id tmp1
# /etc/passwd

$ sudo usermod -G blockchain1 tmp1
# cat /etc/passwd
# cat /etc/group
# id tmp1


/etc/group
blockchain:x:1003:user1

  • blockchain : 그룹 이름
  • 1003 : 그룹 ID
  • blockchain : 해당하는 유저 내용들을 표현함!   →    root, user1, sangbeom

 

(3) groupmod : 기존의 그룹을 수정할 수 있음!

$ sudo groupmod -aG blockchain1 tmp1


(4) groupdel : 그룹을 삭제할 수 있음!

$ sudo groupdel blockchain1
# /etc/group
# 그룹 이름이 "blockchain1"이라는 그룹을 지움!

 


파일 접근 권한 설정

$ cd ~ => ($ cd /home/sangbeom과 동일함!!)

$ ls -al
$ vi hello.txt

# "hello world!" 입력 후 저장

$ ls -al

 

-rw-r--r-- 1 sangbeom sangbeom 13 Jan 25 2022 hello

  • -rw-r--r--
  • -([0])
  • rw-([1]) r--([2]) r--([3])

 

[0]에 대한 설명
파일 타입에 대한 설명
조회된 내용 중에 파일인지, 폴더인지에 대한 구분값
- "-" : normal file(일반파일)
- "d" : directory
- "l" : link file(바로가기 파일)
- "p" : named pipe
- "s" : socket
- "c" : character device
- "b" : block device

[1], [2], [3]에 대한 설명
rw-r--r--
- "r" : 읽기
- "w" : 쓰기
- "x" : 실행할 수 있다는 의미(프로세스를 올릴 수 있다는 뜻)
- 여기서 읽기(r)는 "4", 쓰기(w)는 "2", 실행(x)은 "1"로 표현함!

[1] : 소유자에 대한 설정
[2] : 그룹에 대한 설명
[3] : 기타 사용자(즉, 아무것도 속하지 않은 사람)가 파일을 사용할 때


(5) chmod : 해당파일에 접근권한을 바꾸는 명령어

# rw-r--r-- 해당파일에 접근권한을 바꾸는 명령어
# rwx r-x r-x => 7 5 5
# rwx => 7
# r-x => 5

$ chmod 755 ./hello
$ ls -al | grep hello

# -rwxr-xr-x 1 sangbeom sangbeom 13 Jan 25 2022 hello
# - rw- r-- r-- 644

$ chmod 644 /home/sangbeom/hello
$ chmod 644 ~/hello

# -rw-r--r-- 1 sangbeom sangbeom 13 Jan 25 2022 hello


소유자 말고는 읽고 쓰는 것만 허용하고, 수정은 못하게 함!


(6) chown : 해당파일의 소유권을 바꾸는 명령어

# -rw-r--r-- 1 sangbeom sangbeom 13 Jan 25 2022 hello
# root root

$ sudo chown root:root ~/hello
$ ls -al | grep hello
$ vi hello
$ sudo chmod 700 ~/hello


MacOS용 코드
MacOS의 경우, wheel이 default라 위의 windows 버전 명령 코드로 실행하면

동작하지 않기에 "root" 대신 root 계정의 번호(0)로 접근해야 함!

$ sudo chown 0:0 ~/hello
$ vi ~/hello


+) sudo 권한 주기
/etc/sudoers
$ vi /etc/sudoers

root ALL=(ALL:ALL) ALL
sangbeom ALL=(ALL:ALL) ALL

 

 

 

1-4) Shell

application -> shell -> kernel -> 하드웨어
사용자와 컴퓨터 간의 커뮤니케이션을 수행하기 위해 우리는 shell을 배운 것임!!

bash : Linux의 기본 세팅이다!

zsh : MacOs는 zsh이 기본 세팅이다!(초기에는 MacOS 역시 기본 세팅이 bash였다!)

Windows 브라우저의 경우,
새로운 프로그램을 설치하고 싶다면
인터넷에서 해당 설치 파일을 다운로드 받은 뒤
해당 설치 파일을 더블 클릭하여
내 컴퓨터에 설치함!!

그럼 CLI 환경에서 새로운 소프트웨어를 설치하고 싶다면 어떻게 할까?

 

 

 

1-5) 패키지 매니저

Linux에서 패키지 관리 방법에 대해 알아보기
- 패키지 관리 : 새로운 소프트웨어를 설치, 업데이트, 삭제하는 행위를 말함
- install : 파일을 다운받는 행위

install 파일 내부들도 결국 다 코드로 되어 있음!
소스코드 하나의 아카이브 파일(tar) === .zip 파일

패키지 === 폴더

1. 인터넷에서 install 파일을 다운로드 받음!
2. install 파일을 실행시킴! = 압축을 푼다!!

"의존성" : 기존에 구축되어 있는 파일을 같이 다운받게 하는 것
(왜냐하면 내가 만든 파일(ex. js 파일)이 특정 프로그램(ex. node.js)이 있어야 동작하기 때문에

내가 만든 파일을 배포할 시 해당 프로그램을 같이 다운로드 받게 해야 함!!)

dpkg
dmg

homebrew

$ brew install zsh

 

 

  • apt-get 사이트 : 여기에는 다양한 install 파일들이 존재함!(dpkg 파일들이 많이 있음)
  • homebrew 사이트 : 여기 또한 다양한 install 파일들이 존재함!(dmg 파일들이 많이 있음)

 

apt install [프로그램 이름]

$ apt install zsh => 이렇게 하면 본인의 Linux에 zsh에 관련된 파일을 전부 다운로드 받아줌!


zsh 설치
$ zsh --version => zsh이 설치되어 있는지 확인하는 코드(zsh이 이미 설치되어 있으면 zsh 버전이 나옴!)
$ apt --version => mac은 안 됨!(apt는 Ubuntu 전용 명령어이기 때문!)
$ apt install zsh

/bin

$ cat /etc/passwd | grep sangbeom
# sangbeom:x:1000:1000:,,,:/home/sangbeom:/bin/bash
$ sudo usermod -s /bin/zsh sangbeom => 기존의 Linux에서 default인 bash를 zsh로 바꿔주는 코드

$ cd ~
$ ls -al

# -rw-r--r-- 1 sangbeom sangbeom 4012 Nov 18 21:28 .zshrc

 

oh-my-zsh

$ sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

$ sudo vi ~/.zshrc
#ZSH_THEME="agnoster"
$ sudo apt update
$ sudo apt install fonts-powerline => 이 코드를 사용하면 한 번에 폰트까지 설정해 줌!!

$ cd ~ => 테마를 어떤 것을 쓰느냐에 따라 보이는 view가 달라짐!
$ ls -al | grep .zshrc
$ vi ~/.zshrc

 

 

 

 

2) CLI 실습

 

 

 

 

 

 

 

 

 

 

'Linux' 카테고리의 다른 글

Linux 기초 - 기본개념 및 directory, CLI  (0) 2022.11.21