CS/OS

[Linux] 생활코딩 리눅스 강좌 (5)

창문닦이 2019. 10. 8. 23:55

[권한 : permission]

  • 권한 기본
    • 유닉스 계열 시스템에서 '권한' 통해 '제어가 가능한 대상' 파일과 디렉토리이다.
    • 대상에 관련된 읽기, 쓰기, 실행 권한을 제어한다.
    • echo 'hello' >  permission.txt
      • 파일에 입력하는 명령어. 하지만 권한이 없는 사용자가 접근해서 작성할 경우 permission denied 된다.
    • -rw-rw-r-- 1 hoho hoho 0 Dec 4 23:11 permission.txt
      • 맨앞에 - 파일을 의미. 디렉토리일땐 d 기록된다.
      • rw- rw- r--
        • Access mode. 접근 권한
        • 소유자 권한/그룹 권한/모든 사용자 권한
        • r = read, w : write, x : execute
      • hoho 소유자 owner
      • hoho 그룹
  • 권한을 변경하는 방법 : chmod
    • chmod o-r permission.txt : permission.txt파일의 other 읽기 권한을 제거한다.
    • chmod o+r permission.txt : 모든 사용자에게 permission.txt 읽기 권한을 부여한다.
    • chmod u-r permission.txt : 소유자에게 읽기 권한을 제거한다.(이런식으로도 설정 가능하다.)
  • 실행의 개념과 권한 설정 : execute
    • 실행 액세스 모드는 어떤 파일에 대해서 실행 가능한 파일로 것인지 설정하는 것이 실행권한이다.
    • hoho-machine.sh 생성
      • /bin/bash 프로그램을 사용해서 명령어를 수행하라는 내용이다.
#!/bin/bash
echo 'ho ho ho ho '

 

  • 특정 프로그램을 통해서 프로그래밍 언어를 실행하는 것은 제약이 없지만 실행 파일을 사용해서 프로그램을 구동시키고 싶다면 권한이 필요하다.
  • chmod u+x hoho-machine.sh : 소유자에게 파일에 대한 실행 권한을 준다.
  • 파일을 실행시켰을 운영체제는 제일 먼저 현재 사용자에게 실행 가능한지 확인한다.
  • chmod o+x hoho-machine.sh : 다른 사용자들이 실행가능하도록 권한을 준다.
    • directory 권한
      • 파일은 읽기/쓰기/실행이 명확하지만, 디렉토리는 명확하지 않다.
      • mkdir perm; cd perm; echo 'hi' > perm.txt
        • 디렉토리 생성하고 디렉토리안에 텍스트 파일을 생성했다.
        • chmod o-r perm :  other 디렉토리의 읽기 권한 제거
        • chmod o+r perm  : other 디렉토리의 읽기 권한 부여
        • 디렉토리의 r 권한은 디렉토리에 있는 파일들을 조회할  있는 권한이다.
        • 디렉토리의 w 권한이 없다면 디렉토리 하위에 파일을 생성/삭제/변경을 없다.
        • x 권한은 cd 통해 디렉토리에 들어갈 있는지를 의미한다.
        • 특정 디렉토리 하위의 모든 디렉토리의 권한을 변경하고 싶을 R (recursive 옵션) 사용한다.
        • chmod -R o+w perm
          • perm 디렉토리에 other애개 w권한을 주는데 하위 디렉토리들의 권한까지 함께 줘라.
    • chmod 사용법 정리 - class & operation
      • Octal modes : 8진수를 사용해서 권한을 표현할  있다.
read,write,execute rwx 7
read,write rw- 6
read,execute r-x 5
read only r-- 4
rite and execute -wx 3
write only -w- 2
execute only --x 1
none --- 0
        • chmod 111 perm.txt
          • 파일에 대한 권한을 소유자, 그룹, other 모두 실행권한만 부여한다.
      • 다른 방식
u owner 파일 소유자
g group 그룹에 속하는 사용자
o others 위를 제외한 모든 사용자
a all 모든 사용자
        • 연산자
+ 권한 부여
- 권한 제거
= 특정 클래스에 해당하는 권한을 기재
      • chomod a=r perm.txt
        • 모든 사용자에게 읽기 권한만 부여

[그룹]

  • 파일과 디렉토리를 여러 사용자들이 공동으로 관리할 있는 방법 - group
    • 특정한 사용자들에게 권한을 부여하고 싶을 그룹으로 묶는다.
    • 그리고 파일에 대한 그룹권한을 설정해서 한꺼번에 설정할 있다.
  • groupadd
    • sudo mkdir /var/developer
      • 개발자들이 공용으로 사용할 프로그램들을 넣을 디렉토리를 생성
    • groupadd developer
      • 일반사용자는 실행할 없는 명령어.
    • sudo !!
      • 느낌표 두개는 직전에 사용한 명령어를 호출하는 것이다.
    • nano /etc/group
      • 그룹에 대한 정보를 가지고 있는 파일을 조회해서 반영 여부를 확인 할수있다.
    • sudo usermode -a -G developer [사용자명]
      • usermode 이미 존재하는 사용자의 설정을 변경하는 명령어. 그룹에 사용자를 추가한다는 옵션을 추가한 것이다.
    • sudo chown root:developer .
      • 현재 디렉토리의 소유자를 root에서 developer 그룹으로 변경.

[인터넷,네트워크,서버]

  • 인터넷
    • 인터넷, 네트워크, 서버에 대한 기본 개념을 이해해보자.
    • 인터넷이 돌아가는 원리는 클라이언트가 브라우저를 통해 서버에 요청을 보내고 페이지를 응답을 받아서 렌더링한다.
    • 두가지 주소 체계 (도메인명과 ip 주소)
      • google.com , naver.com domain name 이다.
      • 서버에 접속할 이런 도메인 네임 말고 ip주소(172.217.25.78) 이용해서도 접속할  있다.
      • 도메인 이름으로 어떻게 ip 주소를 찾아가는 것일까 ? 정답은 DNS Server 덕분이다.
      • DNS 요청으로 전달받은 도메인명을 ip주소로 반환해서 알려준다.
    • 자신의 ip 주소를 알아내는 방법
      • ip addr : inet 뒤에 ip 주소를 확인할 있다. 컴퓨터에 부여된 ip
      • https://ipinfo.io/ip 접속하면 브라우저에 접속한 ip주소가 조회된다.
      • curl ipinfo.io/ip 쉘에 실행하면 브라우저가 조회된다. 온라인 서버로 접속된 ip 결과적으로 확인하는 것이므로 ip addr 같을수도 다를수도 있다.
      • 다른 경우는 일까 ?
        • 통신사는 컴퓨터 회선에 ip 부여한다. 디바이스마다 회선을 만들면 ip 각기 부여되고 요금이 비싸다. 그래서 공유기를 두고 router 통해서 여러대의 컴퓨터를 사용할 있는 것이다. 통신사가 부여한 ip router 갖는다. 사설 ip라는 개념이 여기서 등장한다.
        • public address : 통신사가 부여한 ip. curl 조회한 ip. 둘이 동일한 경우는 라우터를 사용하지 않음
        • private addrsee : 사설 ip. 외부에서 모름. 'ip addr' 명령어를 통해 조회.

 

  • apache 웹서버 서버를 리눅스에 설치하는 방법을 알아보자
    • intro
      • 클라이언트는 request, 서버는 response
        • 브라우저를 통해 페이지를 클라이언트에서 요청
        • 서버는 요청을 받아 이를 파악해서 필요한 데이터를 조회해서 응답한다.
      • 브라우저에 해당되는 프로그램으로 firefox, ie, chrome 설치해서 사용하는 처럼, 서버도 설치해서 사용하면 된다. ) apache, nginx , IIS
    • install
      • sudo apt-get install apache2  : 패키지 설치
      • sudo apt-cache search apache : 정확한 패키지명을 모를 검색.
      • sudo service apache2 start : 웹 서버 키기
      • sudo service apache2 stop : 서버 끄기
      • sudo htop : 아파치가 제대로 켜졌는지 프로세스 리스트 확인
      • 웹 서버는 많은 접속이 들어올 있으므로 분산해서 처리해야 한다. 그래서 여러개의 프로세스가 생성된다.
      • 쉘에서 웹브라우징을  있는 프로그램 : elinks
      • sudo apt-get install elinks 설치
      • elinks http://[웹서버를 자신의 ip]/
      • 127.0.0.1 자기 자신을 의미하는 주소. localhost
    • configuration
      • 대부분 서버는 etc 디렉토리 하위에 자신들의 이름의 경로가 존재하고 환경설정 파일 또한 존재한다.
      • /etc/apache2
        • 여러가지 프로그램의 설정파일이 저장된 디렉토리 /etc
        • /sites-enabled/apache2.conf 파일을 통해 환경설정 진행.
      • 페이지를 찾는 최상위 디렉토리 DocumentRoot
    • log
      • /var/log/apache2/
        • 디렉토리안에 access.log, error.log 파일이 존재한다.
        • follow하면서 추가되는 로그들을 출력하도록 실행 : tail -f /var/log/apache2/access.log
        • 서버 프로그램이 동작을 확인하고 싶다면 로그를 확인하자
        • error.log 무슨 문제가 있는지 파악하는 용도로 사용한다.

 

  • 원격제어 ssh
    • 웹서버를 사용하지 않을 있어도 ssh 사용하지 않는 경우는 몹시 드물다.
    • 데스크탑 대용으로 리눅스를 일반적인 가정에서 사용하지 않는다.
    • 리눅스는 서버시장에서 압도적 다수를 차지하고 있다.
    • 아주 작은 사물들의 IoT 제어할 , 내부에 설치된 운영체제는 거의 모두 리눅스이다.
    • 클라이언트는 서버 컴퓨터를 원격 제어하는 경우가 있는데 이때 SSH 원격제어를 사용한다.
    • 유닉스 계열에 운영체제가 깔린 컴퓨터를 쉘을 통해 원격제어를 하고자할때 사용하는 SSH이다.
    • SSH Client, SSH Server 설치되어 있어야한다.
    • 오늘날 대부분의 유닉스 계열 컴퓨터에서는 SSH 기본적으로 설치되어있다.
    • sudo apt-get purge openssh-server openssh-client
      • remove 아닌 purge 하게되면 환경설정 관련한 파일까지 모두 삭제된다.
    • sudo apt-get instatll openssh-server openssh-client
      • 현재 서버에 openssh-server openssh-client 설치 (구체적인 서버명인 개념 - openssh-server )
    • sudo service ssh start
    • sudo ps aux | grep ssh 현재 프로세스중에 ssh 관련된 프로세스 조회
    • ssh라는 명령어는 openssh-client 실행하는 명령어
      • ssh 사용자명@ip주소
  • 포트 port
    • 포트란 무엇인가?
      • ssh -p 22 사용자명@ip주소
      • ssh방식은 22 포트를 사용한다.
      • default 포트번호는 웹은 80, ssh 22이다.
      • 포트는 구멍과 같은 개념이다. 0~65천여개가 존재한다.
      • 0~1024 well known 포트로 마치 표준처럼 사용한다.
    • 포트포워딩
      • Internet Service Provider(ISP) 부여한 ip 라우터에 부여되고 라우터(공유기) 통해서 디바이스들은 인터넷을 연결한다.
      • 라우터에 부여된 ip public ip, 내부망에서 부여된 ip private ip 외부에서 접근이 불가능하다.
      • 라우터에 존재하는 포트 활용해서, 클라이언트의 접속이 들어왔을때 특정 서버로 연결을 하는 것을 의미한다.
      • 공유기의 환경설정 방법은 기기마다 모두 다르니 사용설명서를 보고 진행하면 된다.
      • 공유기의 안쪽에서만 통용되는 공유기의 ip default gateway라 한다
      • ip route 명령어를 실행해서 조회된 공유기의 ip주소를 브라우저에 치면 공유기 관리도구 화면으로 넘어간다.
      • 외부포트는 라우터로 클라이언트의 요청을 받을 포트번호를 의미한다.
      • 내부포트는 안에 있는 private ip LISTEN상태의 포트번호를 의미한다.
      • 포트포워딩을 통해 많은 자유도를 누릴 있다.

[도메인 : domain]

  • 도메인 기본 개념
    • DNS = Domain Name System
    • DNS 있기전에는 host 존재했다. 인터넷을 사용하는 컴퓨터마다 hosts file 가지고 있었다. 파일에 등록되어 있는 ip주소를 가지고 접속을 했던 시절이 존재했다.
    • elinks http://localhost/
      • 이 명령어를 실행하게 되면 현재 로컬컴퓨터로 연결된다. 다른 도메인으로 변경하길 원한다면 hosts file을 수정하면 된다.
  • hosts 파일
    • 호스트 파일을 통해서 도메인명을 마음대로 변동시킬 있다.
    • sudo nano /etc/hosts
      • 127.0.0.1 google.com
      • 추가로 위에 내용을 작성해주면 이상 구글사이트가 연결되는 것이 아니라 hosts파일에 등록되어있는 ip주소로 연결된다.
    • host들이 묶여있는 것을 네트워크. 네트워크 집단들이 모여있는 것이 인터넷을 의미한다.
    • /etc/hosts 어떻게 이용할 있을까?
      • 개발환경에서만 hosts파일에서 도메인을 자신의 테스트 pc 변경해두는 경우가 있다. (상용서버를 바로 변경하면 위험하기 때문이다)
      • 그래서 해커들의 목표가 되기도 한다. (사용자들의 개인정보를 이용해서 악의적인 변조를 하는 경우)
  • 도메인 구입
    • /etc/resolv.conf 조회하면 nameserver 확인할 있다.
    • 도메인을 사용가능한지 조회하고, 마음에 드는 도메인을 선택 & 구매해서 ip주소를 등록하면 된다.
    • host 도메인명
      • 명령어 실행시 도메인명과 매칭되는 ip주소를 확인할 있다.
  • 서브 도메인
    • 여러대의 서버가 있을 경우 각의 서버에 다른 도메인을 얻으면 도메인 마다 금액을 지불해야한다.
    • 그래서 서브 도메인을 얻는 방식이 있다.
  • DNS 동작 원리
    • dig +trace [도메인]
    • 클라이언트는 root DNS list 이미 알고있다. 여기에 정보를 요청하는 것이다.
    • 도메인마다 담당하는 DNS 목록이 있고, 검색한 도메인에 해당하는 ip 주소를 때까지 반복해서 찾는다.
    • 도메인을 구매할 경우 DNS 관장하는 기관에  관리비를 내는 개념으로 생각하면 된다.
    • DNS 서버를 직접 구축하는 방법도 있지만 사업자들이 제공하는 서비스를 이용하는 방법을 많이 사용한다.

[인터넷을 이용 서버간 동기화 rsync]

  • rsync
    • sync 동기화를 의미한다. (기준값이 있으므로 방향성이 존재한다)
    • remote. , 원격을 통해 서로 독립된 곳에 있는 서버끼리 네트워크를 통해서 sync 진행한다.
    • touch ./src/test{1..2}
      • 파일을 test1~10까지 생성한다.
    • rsync -a src dest
      • dest안에 src 모두 카피한다. (싱크를 맞춘다.)
    • rsync -a src/ dest
      • src밑에 있는 파일을 dest디렉토리에 싱크를 맞춘다.
    • v 옵션을 추가하면 상세 내역을 조회할 있다
    • 변동이 있을 경우만 동작하므로 매우 효율적이다.
    • a 옵션은 아카이브 모드로 동작한다는 의미이다.
  • Remote sync(네트워크를 통해 동기화시키는 방법)
    • rsync -azP [전송할 디렉토리] [사용자명]@[ip주소]:[전송받을 디렉토리]
    • 백업할때 거의 필수적으로 유용하게 사용한다.

[로그인 없이 로그인하기 : ssh key]

  • ssh public private key
    • ssh 공개키, 비공개키를 만든다.
      • ssh-keygen 명령어 실행 랜덤으로 생성된 암호화키를 만들 있다.
      • id_rsa 개인키.
      • id_rsa.pub 공개키.
    • ssh-copy-id 사용자명@ip주소
      • 로그인 하고자하는 컴퓨터에 authorized-keys 공개키를 추가로 붙여준다. 이를 통해 로그인 인증이 필요없이 접속이 허용된다.
  • rsync
    • 기본적으로 ssh 통신을 하기 때문에 공개키를 등록해둔다면
    • cron 같은 자동화를 이용 가능하다. 백업과 같은 용도로 사용하면 매우 편리하다.
  • RSA
    • 암호화된 상태를 원래 상태로 돌리는 것을 복호화라 한다.
    • key 이용해서 암호화 / key 이용해서 복호화
    • 암호화 & 복호화할때 공통적인 key 사용하는 경우는 대칭키 방식이다.
    • 다른 키를 이용할때는 비대칭키 방식이다.
    • 공개키(대칭키) 대표적인 기법이 RSA 기법이다.