- 사용자는 로그인을 하게 되면 각 사용자별로 별도의 시스템 환경 변수를 할당 받는다.
- 연속된 2개 이상의 명령어를 한번에 실행하고자 한다면 다음과 같이 하면 된다.
- ls ; date - ls && date
- redirction(>,>>,<,<<)
표준입력 : 키보드 (0) 표준출력 : 화면 (1) 표준에러 : 화면 (2)
- 입력 1> 파일명 # 정상처리 결과값만 파일에 저장
- 입력 2> 파일명 # 오류 결과값만 파일에 저장
[root@srv7 0720]# cat /etc/passwd | grep bash [root@srv7 0720]# userdel -r user10
- -r옵션은 디렉토리까지 삭제
yum -y install tree
- mv는 파일이나 디렉토리를 이동하는 기능이며 동일 디렉토리 내에서 사용하게 되면 이름을 변경하는 효과가 있다.
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
- grep root anaconda-ks.cfg - 파일내(anaconda-ks.cfg)에서 특정(root) 문자열이
- cat anaconda-ks.cfg - 전체 내용을 화면에 출력
- less/more
- 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 연결 과정]
- 서버 인증 - 클라이너트가 서버를 인증
- 사용자 인증 - 서버가 정상적인 사용자인지 여부를 확인한다.
- 템플릿 이미지를 준비한다.
- 이미지 수정하기(public key 인증 불가 -> 활성화, 사용할 계정 미리 만들어두기)
- key-pair 만들기(이미지에서 만들어야 하는가?? -> 그렇지 않다. bastion host[관리용 서버])
- public key를 기본이미지에 추가적으로 부착한다.
virt-customize -a test.qcow2 --upload mykey.pem.pub:/root/.ssh/authorized_keys -> 사용할 계정이 루트 계정일 경우
- private key는 사용자에게 보여준다. 또는 다운로드 해준다. 이후 개인키는 삭제한다.
- 템플릿 이미지를 인스턴스로 실행한다.
- 생성된 인스턴스의 정보는 DB에 저장한다.
(인스턴스 IP, CPU, RAM, HOST[zone])
- 사용자는 관리페이지에서 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
centos7 ------------------> centos8 nfs server nfsclient
- 1. mkdir /pubilc
- 2. 접근제어, 소유주, 그룹, 그외 일반사용자 모두다 /public에 접근하여 파일 업로드 다운로드
ls -ldrw-rw-r-- rw- 소유주/그룹 - 디렉토리를 읽고 새로운 파일 업로드하는것 가능하다. r 그 외 사용자 - 디렉토리의 목록을 보는 것만 가능하다. - chmod 777 모든 권한을 가진다 - touch /public/test.txt - yum -y install nfs-utils
- 서버설정
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]#
- 전원을 종료한다.
- NIC를 vmnet10에서 bridge(vmnet0)으로 변경한다.
- IP 주소는 192.168.1.112로 변경하고 기본게이트웨이와 DNS 서버를 등록한다.
ping www.google.com, ping mainserver라고 했을때 192.168.1.199로 부터 응답이 와야한다.
- 192.168.1.199에 nfs 서버가 등록되어 있고 /public에 들어가보면 0720.pem 파일이 있다.
- 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