리눅스 기본 정리3

양승현·2022년 7월 20일
0

linux

목록 보기
5/20

복습

EC2
    1. 이미지 <- 템플릿
    1. flaver <- CPU/RAM
    1. IP(승인) -> 동적 NAT -> 정적 NAT(eip)
    1. key-pair

[리눅스 기본 명령어]

  • 사용자는 로그인을 하게 되면 각 사용자별로 별도의 시스템 환경 변수를 할당 받는다.
  • 연속된 2개 이상의 명령어를 한번에 실행하고자 한다면 다음과 같이 하면 된다.
- ls ; date
- ls && date
  • redirction(>,>>,<,<<)
표준입력 : 키보드 (0)
표준출력 : 화면 (1)
표준에러 : 화면 (2)
  • 입력 1> 파일명 # 정상처리 결과값만 파일에 저장
  • 입력 2> 파일명 # 오류 결과값만 파일에 저장

user 삭제

[root@srv7 0720]# cat /etc/passwd | grep bash
[root@srv7 0720]# userdel -r user10
  • -r옵션은 디렉토리까지 삭제

tree

yum -y install tree

mv

  • mv는 파일이나 디렉토리를 이동하는 기능이며 동일 디렉토리 내에서 사용하게 되면 이름을 변경하는 효과가 있다.

grep

ls a -> a 디렉토리 내에 있는 파일/디렉토리 보여줌
ls | grep a -> 현재디렉토리에서 a 라는 이름의 디렉토리나 파일이 있다면 화면에 보여달라.
  • grep는 특정 단어에 매치되는 파일이나 디렉토리 등을 출력시켜줌

삭제

  • rmdir - 디렉토리 삭제(비어있는 디렉토리 삭제 가능)
  • rm -f - 파일 삭제(force, 물어보지말고 그냥 삭제)
  • alias rm='rm -i'
  • rm -r - 비어있지 않은 디렉토리 삭제
rm -rf => 파일이나 디렉토리를 물어보지 않고 즉시 삭제한다(빈도 높음)
[root@srv7 0720]# ls
a  abc  abc.txt  c  def.txt  ttt.txt
[root@srv7 0720]# 
[root@srv7 0720]# rm -rf a*
[root@srv7 0720]# ls
c  def.txt  ttt.txt
[root@srv7 0720]# 
[root@srv7 0720]# rm -rf *.txt

파일 내용 살펴보기

    1. grep root anaconda-ks.cfg - 파일내(anaconda-ks.cfg)에서 특정(root) 문자열이
    1. cat anaconda-ks.cfg - 전체 내용을 화면에 출력
    1. less/more
    1. head/tail
	head 파일의 상단 10줄
	tail 파일의 하단 10줄
    특히 tail의 경우에는 실시간으로 특정 파일의 내용/로그 등을 확인할 때 유용하다.
    일반적으로 log는 /var/log에 위치한다.
    tail -f /var/log/httpd/access_log
    로 웹접속 기록을 확인할 수 있다.
    (마지막 10줄, 3줄 보고 싶다면 -3f)

[실습 시나리오]

  • 우리는 centos7이라는 인스턴스를 생성했다. 주소는 211.183.3.201이고 ec2-user가 만들어져 있으며 해당 계정은 wheel 그룹애 포함되어 있어 sudo를 이용하면 필요할 때마다 루트의 권한을 불러와서 실행할 수 있다.
    public key는 인스턴스에 위치하고 있으며 private key는 윈도우에서 보관하며 접속할 계획이다.

1. IP 점검

  • ifdown ens32; ifup ens32
  • vmware 쪽 문제일 수 있으므로 vmnet10을 비활성화 > 활성화
  • cxat /etc/sysconfig/network-scripts/ifcfg-ens32

2. ssh 동작 상태 확인하기

  • systemctl restart sshd
  • systemctl status sshd

3. ssh를 위한 설정 파일 확인하기

  • vim /etc/ssh/sshd_config

4. 계정 생성하기

[root@srv7 0720]# useradd ec2-user
[root@srv7 0720]# passwd ec2-user
Changing password for user ec2-user.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@srv7 0720]# su ec2-user
[ec2-user@srv7 0720]$ cd; pwd
/home/ec2-user

5. key-pair 만들기

[ec2-user@srv7 ~]$ ssh-keygen -q -f ~/.ssh/0720.pem -N ""
[ec2-user@srv7 ~]$ ld
ld: no input files
[ec2-user@srv7 ~]$ ls
[ec2-user@srv7 ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .cache  .config  .mozilla  .ssh
[ec2-user@srv7 ~]$ ls .ssh
0720.pem  0720.pem.pub
[개인키]   [공개키]
[ec2-user@srv7 ~]$ cd .ssh
[ec2-user@srv7 .ssh]$ cat 0720.pem.pub > authorized_keys
[ec2-user@srv7 .ssh]$ ll
  • cat 0720.pem 열어 내용을 복사한 뒤, 윈도우에서 노트패스를 열고 동인한 파일명으로 저장해 둔다.

6. ec2-user는 현재 인스턴스 내에서 sudo를 이용하여 루트의 권한으로 명령 실행할 수 있어야 한다.

[root@srv7 ~]# vim /etc/sudoers
[root@srv7 ~]# usermod -aG wheel ec2-user
  • ec2-user를 기존 그룹은 유지하면서 새로운 그룹인 wheel에 가입시킨다. wheel은 sudo명령을 이용하여 루트의 권한으로 명령 실행이 가능하되, 패스워드는 요구하지 않는다.

7. putty 를 이용한 원격접속

  • puttygen을 통해 .pem -> .pkk
  • authorized_keys -> 를 퍼미션 조정 -> /home/ec2-user/.ssh
[root@srv7 ~]# cd /home/ec2-user/.ssh/
[root@srv7 .ssh]# chmod 644 authorized_keys 
[root@srv7 .ssh]# ls -l
  • 접속

[ssh 연결 과정]

    1. 서버 인증 - 클라이너트가 서버를 인증
    1. 사용자 인증 - 서버가 정상적인 사용자인지 여부를 확인한다.

DC(Data Center)에서 key 관리

    1. 템플릿 이미지를 준비한다.
    1. 이미지 수정하기(public key 인증 불가 -> 활성화, 사용할 계정 미리 만들어두기)
    1. key-pair 만들기(이미지에서 만들어야 하는가?? -> 그렇지 않다. bastion host[관리용 서버])
    1. public key를 기본이미지에 추가적으로 부착한다.
	virt-customize -a test.qcow2 --upload mykey.pem.pub:/root/.ssh/authorized_keys
    -> 사용할 계정이 루트 계정일 경우
    1. private key는 사용자에게 보여준다. 또는 다운로드 해준다. 이후 개인키는 삭제한다.
    1. 템플릿 이미지를 인스턴스로 실행한다.
    1. 생성된 인스턴스의 정보는 DB에 저장한다.
	(인스턴스 IP, CPU, RAM, HOST[zone])
    1. 사용자는 관리페이지에서 IP를 확인하고 접속한다.
	ssh -i mykey.pem IP주소 또는 ppk 파일을 putty와 연결하여 접속한다.

[파일의 내용 수정하기]

  • gedit는 runlevel5에서 동작하는 애플리케이션이다. 따라서 그래픽 환경이 없다면 동작하지 않는다.
  • gedit는 편집기능이 부족하다.

편집기

  • 행단위 편집기 : 프롬프트 상에서 파일을 편집하고 해당 내용을 파일로 전송하는 형태
예) sed
sed -i 's/root/hello/g' anaconda-ks.cfg
root로 시작하는 친구를 hello으로 변경한다. globaling 하게 바꾼다.
[root@srv7 0720]# edit=hi
[root@srv7 0720]# sed -i 's/hello/$edit/g' anaconda-ks.cfg 

"g"를 사용하면 전체에서 변경
"g"가 없으면 파일 위에서부터 검색하여 만나게 되는 첫번째 문자열만 변경

  • 화면단위 편집기 : 직접 파일을 화면에 모두 열어두고 편집하는 형태
예) emacs[전문가용], vi(m)[일반적으로 널리 사용하는 편집기]
[root@srv7 0720]# sed -i 's/Listen 80/Listen 8888/' /etc/httpd/conf/httpd.conf
[root@srv7 0720]# grep Listen /etc/httpd/conf/httpd.conf
Listen: Allows you to bind Apache to specific IP addresses and/or
Change this to Listen on specific IP addresses as shown below to 
#Listen 12.34.56.78:80
Listen 8888
[root@srv7 0720]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details. - 오류발생
오류가 발생한 원인은
리눅스에서의 보안(firewalld, SELinux)
방화벽 : originated, terminated, transit(forwarded)
SELinux : 내부자원으로의 접근
[root@srv7 0720]# setenforce 0
/etc/selinux/config -> enforcing
SELINUX= can take one of these three values:
SELINUX=enforcing
SELINUXTYPE= can take one of three values:
SELINUXTYPE=targeted 
[root@srv7 0720]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@srv7 0720]# setenforce 0
[root@srv7 0720]# systemctl restart httpd
-> http://211.183.3.201:8888

vi(m)은 내부적으로 sed가 내장되어 있다.

  • 다른 배포판에서는 vim이 설치되어 있지 않은 경우가 있다. 이경우에는 vim을 설치하고 .bashrc에서 alias vi='vim' 설정해 두는 것이 좋다.
  • 명령모드애서 이동하기
1. 방향키 가능
2. 한 행에서 가장 끝으로 이동 -> $, 가장 앞으로 -> ^
3. 전체 화면에서 첫번째 행으로 이동 -> gg, 마지막 행으로 이동 -> G
4. 10행으로 이동하기 -> 10G
  • 입력하기
1. i 
2. o 
  • 행표현
: set nu
  • 삭제하기
1. dd -> 한 행 삭제하기
2. 2dd -> 두 줄 삭제하기
  • 복사하기
1. yy -> 한줄 복사
2. 2yy -> 두줄 복사
  • 붙여넣기
p
  • 벗어나기
:wq  저장후 종료
:q    종료 (만약 작업한 내용이 있다면 해당 내용을 처리한 뒤 나가야 한다)
:q!   저장하지 않고 강제 종료 
  • 간혹 퍼미션 문제로 wq 를 하더라도 종료가 되지 않는 경우가 있다. 이 경우에는 :wq! 해야 한다.
  • 검색 하기
/검색할단어
두번째 결과로 이동 n 
직전 결과로 이동 N

웹서버 설정 변경하기

  • vi /etc/httpd/conf/httpd.conf
/var/www/html/index.html -> main.html 
systemctl restart httpd
http://211.183.3.201 

NFS 실습

centos7 ------------------>  centos8
nfs server                   nfsclient
  • 1. mkdir /pubilc
  • 2. 접근제어, 소유주, 그룹, 그외 일반사용자 모두다 /public에 접근하여 파일 업로드 다운로드
    ls -l
	drw-rw-r--
    rw- 소유주/그룹 - 디렉토리를 읽고 새로운 파일 업로드하는것 가능하다.
    r   그 외 사용자 - 디렉토리의 목록을 보는 것만 가능하다.
- chmod 777 모든 권한을 가진다
- touch /public/test.txt
- yum -y install nfs-utils
    1. 서버설정
vi /etc/exports
i
/public      211.183.3.0/24(rw,sync,no_root_squash)
  • no_root_squash -> 원격지에 있는 사용자가 공유디렉토리에서 파일을 만들었을 경우 서버 입장에서 해당 파일을 누가 만든것으로 간주할 것인가?
  • 만약 root_squash 라고 하면 nfsnobody 가 만든 것이다.
  • no_root_squash 라고 하면 root 라 만든것이다.
systemctl restart nfs-server
systemctl enable nfs-server
클라이언트
[root@srv8 network-scripts]# showmount -e 211.183.3.201
Export list for 211.183.3.201:
/public 211.183.3.0/24
[root@srv8 network-scripts]# mkdir /remote
[root@srv8 network-scripts]# 
[root@srv8 network-scripts]# mount -t nfs 211.183.3.201:/public /remote
[root@srv8 network-scripts]# 

[실습]

    1. 전원을 종료한다.
    1. NIC를 vmnet10에서 bridge(vmnet0)으로 변경한다.
    1. IP 주소는 192.168.1.112로 변경하고 기본게이트웨이와 DNS 서버를 등록한다.
      ping www.google.com, ping mainserver라고 했을때 192.168.1.199로 부터 응답이 와야한다.
    1. 192.168.1.199에 nfs 서버가 등록되어 있고 /public에 들어가보면 0720.pem 파일이 있다.
    1. 0720.pem 파일을 이용하여 원격 접속한다.(ssh) 자신의 홈디렉토리인 /home/ec2-user로 접근 가능하다. 여기에 "seunghyun.txt"파일을 만들어둔다.
showmount -e 192.168.1.199
mount -t nfs 192.168.1.199:/public /yang
ssh -i 0720.pem ec2-user@192.168.1.199

[사용자]

  • 리눅스는 multi-user/multi-tasking
  • super-user[root] VS normal-user[일반 사용자,user1]
  • 리눅스의 모든 사용자들은 최소한 한개의 그룹(primary group)에 포함되어야한다.
  • 모든 사용자들은 생성과 동시에 자신의 이름으로 그룹이 만들어지고 해당 그룹에 자동 포함된다.
  • 사용자 생성시 기본값
  • 사용자 생성 (기본)
 useradd testuser
 passwd testuser
 password: test123
 Confirm password : test123
  • 사용자 생성(중간에 멈추는 것 없이 진행되도록)
[root@srv7 0720]# useradd testuser1
[root@srv7 0720]# echo "testuser1:test123" | chpasswd
[root@srv7 0720]# cat /etc/passwd | grep testuser1
testuser1:x:1007:1007::/home/testuser1:/bin/bash
[root@srv7 0720]# cat /etc/shadow | grep testuser1
testuser1:$6$z3LFC/3yI$K6K1pK5VyVMThptfjUqCh.RXzr.DJIwx30Qchj9Bs/DDo8zoiU9efmvEFpWMN60sAipB3iyblMQx2tUm/E15X.:19193:0:99999:7:::
[root@srv7 0720]#

과제

웹 서비스중에서 vhosting(가상호스팅)을 이용하여 각 사용자별로 별도의 홈페이지를 사용하고 싶다. 어떻게 해야할까? -> 한글파일(pdf)에 작성. 월요일날 확인/제출

vhosting이란?
필요한 이유?
구성하기
결과 사진
결과 예)
user1.test.com
user2.test.com

211.183.3.201/user1
211.183.3.201/user2

0개의 댓글