인프런 '생활코딩-리눅스' 강의를 함께 듣고 공부했다.
섹션 6. 사용자
섹션 7. 권한
섹션 8. 그룹
섹션 9. 인터넷, 네트워크 그리고 서버
📌 섹션6. 다중 사용자 시스템
1. 다중 사용자 -1
컴퓨터를 여러명이서 같이 사용할 때 각자의 권한이 필요함(각자의 아이디로 로그인해 컴퓨터 사용)
=> 다중 사용자 시스템 필요
- 다중 사용자 시스템의 단점
: 각 사람마다의 권한 체크가 필요함 -> 시스템 복잡도 커짐
중요한 정보를 저장했는데 권한에 대해 제대로 설정하지 않아 누구에게나 공개될 수 있음
2. 다중 사용자 -2
명령어
id : 자신이 누구인지 알 수 있음(내가 누군지 식별한다)
uid (user id) : 사용자의 아이디
gid (group id) : 그룹의 아이디
who : 현재 이 시스템에 누가 접속했는지 알려줌
3. 관리자와 일반 사용자
1. unix의 두가지 형태의 사용자
super(root) user | user |
---|---|
시스템에서 전지전능한 권력 가지고 있는 강력한 사용자 | 컴퓨터 사용자 |
super user인지 확인 필요 | 일반적으로 super user 권한 얻고 싶을 때 -> sudo (기본적으로는 일반 유저임) |
일반적으로 root라는 이름 가지고 있음 | |
# : 슈퍼유저 | $ : 일반유저 |
2. su 명령어
su : A 사용자 상태에서 B 사용자가 되고 싶을 때
< su로 super user 되는 법>
su - root -> 비밀번호 -> super user됨
exit -> 다시 일반 유저 되고 싶을 때 로그아웃 되면서 기존 사용자 됨
3. root 사용자 잠금 푸는 법
sudo passwd -u root -> 잠금 풀림
(-u : unlock 약자)
sudo passwd -l root : root 잠금
(-l : lock 약자)
super user 상태에서
pwd입력 -> /root 나옴
=> 최상위 디렉토리 밑에 있는 루트 디렉토리가 root라는 사용자(super user)의 홈 디렉토리이다
일반 사용자의 홈 디렉토리는 cd
로 알 수 있음
(: 현 사용자의 홈 디렉토리)
4. 사용자의 추가
(duru라는 이름의 사용자를 추가하고 싶을 때)
- sudo useradd -m duru
- password 입력
- 홈 디렉토리로 가서 ls 입력
- duru라는 사용자 디렉토리 생성
su passwd duru : duru가 사용할 비밀번호 입력 설정
- su - duru
- password입력
- 로그인 됨
** sudo usermod -a -G sudo duru** : duru가 sudo 사용할 수 있도록 함
📌 섹션 7. 권한
1. 권한, permission
하나의 게시물 누가 볼 수 있는지 결정하는 것 (= 권한을 부여한다.)
< 유닉스 >
사용자가 file, directory에 대해 어떠한 행위할 수 있거나 없게 하는 것
권한 종류 : read, wirte, execute
2. 권한 제어하는 법
(배경)
< 사용자 A >
touch perm.txt 파일 만들기
ls -l perm.txt 파일 상세보기 -> 파일의 소유자(사용자A)확인
echo 'hi' (echo : 파일에 표준출력해줌)
echo 'hi > perm.txt 리다이렉션해서 파일에 출력해줌
< 사용자 B >
-> 사용자 A의 파일 소유자 확인
echo 'hello' > perm.txt
소유자가 아닌 사람이 자기 것이 아닌 파일에 편집 ->permission denied(거절당함)
type : -(일반 파일), d(디렉토리), l(심볼릭 링크 파일) ...
access mode : owner권한. group 권한, other (그룹아닌 불특정 사람에 대한) 권한
r ** : read (읽기)
**w : write (쓰기)
*x * : execute (실행)
rwx : 읽기, 쓰기, 실행 권한 모두
rw- : 읽고 쓸 수 있지만 실행 권한 없음
-w- : 쓰기 권한만 있고 읽기, 실행 권한 없음
r-x : 읽고 실행 권한 있고 쓰기 권한 없음
3. 권한 변경 방법
chmod (옵션)(모드) (파일)
chmod o-r (파일 이름) : other의 read 권한 없앰
chmod o+r (파일 이름) : other의 read 권한 추가
chmod u+r (파일 이름) : user의 read 권한 추가
chmod u+rw (파일 이름) : user의 read, write 권한 추가
4. 실행의 개념과 권한 설정
실행 액세스 모드 -> 실행 할 것인지 아닌지
예시
nano (파일이름)
-> #!/bin/bash
echo '(내용 추가)'
->편집기 나오기
/bin/bash 프로그램 실행 -> 편집 내용 나오고 실행
-> 파일 실행 하고 싶을 때 실행 권한 필요
chmod u+x 통해 실행권한 부여 -> 실행
cat (파일명) 하면 /bin/bash나옴
** 파일이 현재 사용자에 게 실행 가능한 지 봄 -> 운영체제는 /bin/bash 구동시키면서 파일 전달 -> 결과출력
5. 디렉토리의 권한
파일 : 읽기, 쓰기, 실행 명확
디렉토리 : 불분명
** r** : 디렉토리에 대해 안에 있는 파일, 디렉토리 열람 가능/ 불가능 확인
** w** : 없으면 그 디렉토리 안에 파일 생성, 쓰기, 이름 바꾸기 불가
** x** : 디렉토리에 cd명령 통해 들어갈 수 있는지 없는 지에 대해 확인
** 디렉토리 안에 있는 모든 디렉토리 바꾸고 싶을 때
chmod -R o+w (파일 이름)
-R (recursive) : 재귀적으로 모든 디렉토리 수정
6. chmod 총정리
r : 4
w : 2
x : 1
- : 0
rwxrwxrwx (rwx/rwx/rwx) : 777
rwx/r-x/r-x : 755
r--/---/--- : 400
rw-/r-x/r-- : 654
chmod 333 (파일이름) -> --wx-wx-wx
reference
u : user
g : group
o : other
a : all
operator
/+
/-
/=
chmod a+r (파일이름) : 모든 사용자에 대해 읽기 권한
chmod a=rwx (파일이름) : 모든 사용자에 대해 rwx
** +는 추가하는 것, =은 아예 그걸로 바꾸는 것
📌 섹션 8. group
1. group
파일과 디렉토리를 여러 사용자들이 공동으로 관리할 수 있는 방법
user아니고 (user가 아닌 모든 사용자인) other도 아닌 어떤 특정 사람들의 그룹에게 파일 권한을 주고 싶을 때 group 사용
파일에 그룹 부여 -> rwx 통해 그 그룹에 속하는 사람들에 대해 권한 부여
2. groupadd
< 그룹 만들기 >
useradd -G (그룹 이름) (사용자 이름) : 아직 존재하지 않는 사용자를 그룹에 넣고 싶을 떄
sudo groupadd (그룹이름) : 그룹 추가(일반 사용자는 수정 불가)
sudo usermod -a -G (그룹 이름) (사용자 이름) : (-a는 -G와 함께 다님, 그룹에 사람 추가하는 명령어)
sudo chown (현 디렉토리 소유자):(그룹이름) . : 현 디렉토리의 소유자가 (그룹이름)으로 바뀜 (.은 현 디렉토리)
** (명령어) !! : 앞에 사용한 내용 다시 쓸 때 -> !!
📌 섹션 9 인터넷, 네트워크, 세션
1. 인터넷
1. < 인터넷에 접속하는 방법 >
1 .
domain name 입력
goggle.com => domain name
(전화번호에 저장된 이름)
2 .
ip address (internet protocol)
(전화번호)
(원리)
** DNS(Domain Name System) : 모든 도메인이 어떤 ip인지 저장되어있음
(전화번호부)
DNS 서버에 연결되어서 domain name이름 입력하면 DNS가 ip 찾아서 접속
2. 내 IP 알아내는 방법
1. id addr
-> 결과 내용 중 inet 부분에 있는 ip address가 내 아이피
*2. ipinfo.io *
-> 웹 브라우저에서 ipinfo.io 온라인 서비스에 접속하며 나옴
=> cmd에서
curl google.com (구글닷컴 접속해서)
curl ipinfo.io/ip (ip주소 cmd로 확인)
입력하면 ip 확인가능
ip addr과 curl로 검색한 ip주소가 다를 수 있음
id address : 컴퓨터에 부여된 실제 ip
curl : 온라인 서비스 입장에서 접속한 것의 결과적인 ip가 무엇인지 나옴
대부분 다르지만
같다면 컴퓨터의 실제 ip와 외부 접속 시 사용하는 ip가 같은 것임
3. router
집에서 컴퓨터 쓸 때 통신사와 연결됨
통신사는 각 기기마다 ip를 부여함
컴퓨터들이 router(공유기)를 이용해 통신사와 하나로 연결됨
router ip | 기기들의 ip |
---|---|
router가 통신사의 ip를 부여받음 | 사설아이피 |
public address | private address |
대표번호 | 내선번호 |
router로 연결된 기기들은 server가 될 수 없음 (client는 가능)
=>외부 컴퓨터가 접속할 순 없지만 같은 공유기로 연결되어있는 컴퓨터들끼리만 접속 가능
2. apache
(배경)
- 웹브라우저가 웹서버에게 정보 요청request
- 웹 서버는 항상 켜져있다가 요청 들어오면 분석
- 웹 서버의 하드디스크, ssd 같은 곳에서 요청 들어온 파일 읽어서 가져온 다음 웹브라우저에게 response 해줌
웹 브라우저 : firefox, chrome ...
웹 서버 : apache, nginx, IIs ...
1. apache 설치해보기
많은 웹 서버들 중 apache를 설치해보았다.
sudo apt-get update; (무언가를 설치할 떄는 항상 업데이트 먼저 하기)
sudo apt-get apache2 (apache 설치)
sudo service apache2 start : 켜짐
sudo service apache2 stop : 꺼짐
sudo service apache2 restart : 껐다 켤 때
sudo htop : 여러 프로그램을 화면에 표시해줌 -> apache 잘 켜졌나 확인하는 방법
웹 서버에는 많은 접속 들어올 수 있음
접속 많아지면 분산처리를 위해 자동으로 새로운 apache프로세스 켜지고, 적어지면 없어진다.
sudo apt-get install elinks : elinks 설치
(elinks : url 치면 쉘 환경에서 웹 브라우징할 수 있음)
elinks http://(내 ip주소)/ : 자신의 웹브라우저 접속
local host : 웹 브라우저가 설치되어 있는 서버 컴퓨터에 존재하는 웹 서버에 접속
127.0.0.1 : 자기 자신 가리키는 고정적 ip, 컴퓨터 자체의 아이피
local host, 127.0.0.1 서로 같은 의미이다.
따라서 해당 웹브라우저가 설치되어있는 컴퓨터의 웹 서버에 접속할 떄 local host, 127.0.0.1 이용해서 접속 가능
프로그램 동작 방법에 대한 설명 : cd /etc
웹서버는 사용자가 요청한 파일을 어디서 읽어 오는 것일까?
- cd apache2/
- ls -l => apache2.conf 파일 나옴
- sites enabled라는 파일 들어가보면 => 000-default.conf 파일
- nano 000-default.conf => /var/www/html
- 들어가 ls -l 하면 index.html파일 나옴
- 그 파일 이름을 sudo 이용해 다르게 바꾼 뒤
- sudo nano index.html => 문서 편집. 내용 쓰기
(바로 elinks http://127.0.0.1/index.html => 에러) - elinks http://127.0.0.1/index.html
=> 편집한 글 나옴, 일반적인 웹브라우저에 접속해도 그대로 잘 나옴
/etc/apache2 디렉토리에 있는 여러가지 설정 파일 이용해서
사용자의 접속이 들어왔을 때
server 컴퓨터의 저장소에서 사용자가 요청한 파일 어디서 찾을 것인가를 도와줌
그곳에 있는 파일 찾아 읽어서 웹 브라우저에 보내줌
실제 서버, 프로그램 운영 시 설정 어떻게 하느냐에 따라 프로그램 동작 바꿀 수 있음
웹 서버가 사용자가 요청한 파일을 찾는 설정에서 지정된 /var/www/html 디렉토리는 설정 바꾸면 언제든지 이동 가능
document root : 웹 브라우저에서 사용자가 요청한 웹 페이지 찾는 최상위 디렉토리
3. log
apache 웹 서버가 동작할 때 잘 되고 있는지 아닌지 확인하고 싶을 때
*access.log // err.log *
파일에 기록됨
cd /var/log/apache2/
tail /var/log/apahe2/access.log : 파일 끝에 있는 내용만 추가
tail -f /var/log/apache2/access.log : 실시간으로 추가되는 끝 정보만 출력 (접속 현황 알고 싶을 때 log를 찾아본다)
error.log 붙이면 특정 에러 발생 시 이 파일 열어 문제가 무엇인지 알 수 있음
4. ssh
자신 컴퓨터 이용해 sever 컴퓨터 원격제어할 때 사용
sever에 ssh server 설치
자신 컴퓨터에 ssh client 설치
=> server 컴퓨터에 실행, 동작 결과를 ssh server에 전달하고 그 서버는 client에 보내 ssh client 화면에 보여짐
1. ssh 서버 설치하는 법
sudo apt-get install openssh-server openssh-client
*sudo service ssh start
sudo ps aux | grep ssh *
=> 잘 설치되었나 확인 (sshd 나오면 잘 설치됨)
ssh (접속하고자 한 아이디)@(접속하고자 하는 컴퓨터 ip) : 원격 제어 통해 타 컴퓨터에 접속
5. port
1. port
(ssh -p(포트숫자) (위에 있는 접속 방식)
웹 브라우저에서는** :(포트번호)**
(포트 숫자는 생략해도 가능 )
모든 컴퓨터에는 port 있음
0번 구멍부터 65000개 구멍
client의 웹브라우저는 웹 서버의 80번 포트 찾아감
(웹 서버가 80번 포트와 연결되어 있기 때문)
80포트번호에서 대기하고 있던(listen) 서버가 동작하기로 약속했던 대로 동작해서 웹브라우저에 돌려줌
특정 포트번호
웹 : 80
ssh : 22
네트워크에서 1024 포트까지는 well-known port
포트값 고정해서 접속할 떄 포트 안써도 됨
- 컴퓨터 원격제어는 위험하기 때문에 잘 안쓰는 포트번호로 바꿔서 표현O
웹 서버 포트번호 바꿔서 웹 서버에 접속 가능
2. port forwarding
3. default gateway
default gateway : 공유기 내부에서만 사용되는 ip
< 알아내는 법 >
- 브라우저에 ip route 입력해서 검색
게이트웨이 관리자 화면
- 관리도구 -> 환경설정 -> 고급설정
- nat 라우터 관리 -> 포트포워드 설정
- 서버 설치하고 싶은 컴퓨터의 내부 ip입력
- 규칙이름 입력
- 외부포트 입력 (사용자가 사용할 포트번호, router쪽 prot)
- 내부포트 입력 (컴퓨터에 설치되어있는 웹 서버가 몇번째 포트에서 리스닝 하고 있는지 )
- 추가버튼 누르고 완료
(외부포트)로 사용자가 들어왔을 때 (내부 ip)에 해당되는 컴퓨터의 (내부포트)로 신호 보낸다.
(router ip 알아내는 법)
curl http://ipinfo.io/ip
이 주소 웹 브라우저에 사용자가 ip 입력해 포트번호 쓰면 > 내용 나옴
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[24.05.11] 6주차 활동- 포너블 개념 (0) | 2024.05.11 |
---|---|
[24.05.04] 4주차 활동 - 리눅스 기초, 포너블 기초 (0) | 2024.05.05 |
[2024.03.23] 2주차 활동 - 리눅스 기초 (2) | 2024.03.23 |
[2024.03.16] 1주차 활동 - 리눅스 기초 (1) | 2024.03.17 |
[2023.05.20] '드림핵-시스템 해킹' 강의 수강 (0) | 2023.05.26 |