[Linux] NFS, useradd, Virtual Host

gununoo·2022년 7월 20일
1

Linux

목록 보기
3/10
post-thumbnail

사용자는 로그인을 하게 되면 각 사용자별로 별도의 시스템 환경 별수를 할당 받는다.

printenv 

연속된 2개 이상의 명령어를 한 번에 실행하고자 한다면
ls ; date -> 앞 명령어에서 오류가 발생해도 뒷 명령어 실행함
ls && date -> 앞 명령어에서 오류가 난다면 뒷 명령어 실행 안 함
\ -> 명령어가 옆으로 너무 길어질 경우, 다음 줄에 이어서 작성

mkdir 0720 && cd 0720 && touch abc.txt 

redirection (>, >>, <, <<)
표준 입력: 키보드 (0)
표준 출력: 화면 (1)
표준 에러: 화면 (2)

입력 1> 파일명 # 정상처리 결과값만 파일에 저장

ping -c 1 www.google.com 1> abc.txt 

입력 2> 파일명 # 오류 결과값만 파일에 저장

ping -c 1 www.google.com 2> abc.txt 

yum -y install tree 
ls a* 

a로 시작하는 파일과 a로 시작하는 디렉토리도 모두 보여줌

rm -rf a* 

a로 시작하는 파일 삭제

rm -rf *.txt 

.txt 파일 삭제

파일 내용 살펴보기

1. grep

grep root anaconda-ks.cfg

파일 내에서 특정 문자열이 있다면 해당 행을 출력

2. cat

전체 내용을 화면에 출력

3. less/more

3. head/tail

tail의 경우에는 실시간으로 특정 파일의 내용/로그 등을 확인할 때 유용하다

tail -3f /var/log/httpd/access_log 
systemctl restart httpd 

일반적로 로그는 /var/log에 위치한다

ls /var/log 

ls /var/log/httpd 

windows에서 http://211.183.3.201 점속

cat /var/log/httpd/access_log 

실습 시나리오

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

  1. ip 점검
ifconfig ens32 
ping -c 3 www.google.com 

ip 주소가 정상적임에도 외부와 통신이 되지 않는다면
1) ens32 비활성화 -> 활성화

ifdown ens32 
ifup ens32

2) vmware 쪽 문제일 수 있으므로 윈도우 이더넷 설정 vmnet10 비활성화 -> 활성화

3) sysconfig 확인

cat /etc/sysconfig/network-scripts/ifcfg-ens32 
  1. ssh 동작 상태 확인하기
systemctl restart sshd 
systemctl status sshd

-> active인지 확인

  1. ssh를 위한 설정 파일 확인하기
vi /etc/ssh/sshd_config 

38째 줄) permitrootlogin yes -> 보안 상 좋지 않음
43째 줄) pubkeyauth -> yes로 설정
65쨰 줄) passwdauth -> no로 설정
47째 줄) authorizedkeysfile -> 퍼블릭키 등록되어 있는 곳

  1. 계정 생성하기
useradd ec2-user 
passwd ec2-usr 
[설정할 패스워드 입력]

su ec2-user
cd 
  1. 키페어 만들기
ssh-keygen -q -f ~/.ssh/0720.pem -N "" 
ls .ssh 

0720.pem[개인키] 0720.pem.pub[공개키]

cat 0720.pem.pub > authorized_keys
head authorized_keys 

cat 0720.pem 

전체 복사

윈도우 배경화면에 새 텍스트 파일 생성 후 붙여넣어 0720.pem이라고 저장

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

107~110째 줄)
wheel 그룹 사용자들은 루트 권한 가능하나 sudo 명령 시 패스워드를 요구 받는다
-> 107째 줄은 주석처리하고, 110째 줄은 주석 해제하기

usermod -aG wheel ec2-user 

ec2-usr를 기존 그룹은 유지하면서 새로운 그룹인 wheel에 가입시킨다. wheel은 sudo 명령을 하여 루트의 권한으로 명령 실행이 가능하되, 패스워드는 요구하지 않는다.

  1. putty를 이용한 원격 접속
cd /home/ec2-user/.ssh 
cdmod 644 authorized_keys

puttygen 실행
conversions -> import key
바탕화면에 0720.ppk 파일 생성

kex -> 디피헬만 14가 맨 위, 디피헬만 1이 두 번쨰에 위치하도록 위치 변경

auth -> browse -> 0720.ppk 선택

session -> ssh -> 211.183.3.201

sudo systemctl restart mariadb

root 패스워드 입력 없이도 실행됨

[ssh 연결 과정]
1. 서버 인증: 클라이언트가 서버를 인증
2. 사용자 인증: 서버가 정상적인 사용자인지 여부를 확인한다.

passwd 방식 -> 대칭키
key-pair 방식 -> 비대칭키

DataCenter에서의 ssh 연결
1. 템플릿 이미지를 준비한다.
2. 이미지 수정하기
public key 인증 불가를 활성화시키기, 사용할 계정 미리 만들어두기
3. key-pair 만들기 (bastion host에서 만든다)
4. public key를 기본 이미지에 추가적으로 부착한다.

virt-customize 
    -a test.qcow2
    --upload mykey.pem.pub:/root/.ssh/autorized_keys 
  1. private key는 사용자에게 보여준다. 또는 다운로드 해 준다. 이후 개인키는 삭제한다.
  2. 템플릿 이미지를 인스턴스로 실행한다.
  3. 생성된 인스턴스의 정보는 DB에 저장한다. (인스턴스의 IP, CPU, RAM, HOST[zone])
  4. 사용자는 관리 페이지에서 IP를 확인하고 접속한다.
ssh -i mykey.pem [IP주소] 

또는 ppk 파일을 putty와 연결하여 접속한다.

[파일의 내용 수정하기]
gedit는 runlevel 5에서 동작하는 애플리케이션이다. 따라서 그래픽 환경이 없다면 동작하지 않는다.
gedit는 편집 기능이 부족하다.

편집기

  • 행 단위 편집기: 프롬프트 상에서 파일을 편집하고 해당 내용을 파일로 전송하는 형태, sed
  • 화면 단위 편집기: 직접 파일을 화면에 모두 열어두고 편집하는 형태 -> emacs(전문가용), vi(m)
grep root anaconda-ks.cfg 
sed -i 's/root/hello/g' anaconda-ks.cfg  

anaconda-ks.cfg 파일에서 root를 hello로 변경

-i: inplace
root로 시작(s/)하는 것을 hello로 변경, globally하게
/g가 없다면 딱 한 번만 변경
/g가 있으면 모두 변경

edit=hi 
sed -i "s/hello/$edit/g" anaconda-ks.cfg 

hello를 hi(edit 변수의 값)로 변경

grep Listen /etc/httpd/conf/httpd.conf 

vi로 파일을 열 필요 없이 행 편집하기

sed -i 's/Listen 80/Listen 8888/' /etc/httpd/conf/httpd.conf 
grep Listen /etc/httpd/conf/httpd.conf 

systemctl restart httpd 

-> failed
-> selinux가 포트 변경을 허가하지 않음

방화벽: originated, terminated, transit(forwarded)
SELinux: 내부 자원으로의 접근

getenforce 

selinux가 켜져있음

selinux 끄기

setenforce 0 
cat /etc/selinux/config | grep SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl restart httpd

윈도우에서 http://211.183.3.201:8888/ 로 접속된다

[vi]
vi는 내부적으로 sed가 내장되어있다.
다른 배포판에서는 vim이 설치되어있지 않은 경우가 있다. 이 경우에는 vim을 설치하고 .bashrc에서 alias vi='vim'을 설정하는 것이 편하다.

명령모드

이동하기
gg -> 첫 번째 행으로 이동
G -> 마지막 행으로 이동
10G -> 10 번째 행으로 이동
$ -> end 키
^ -> home 키

삭제하기
dd -> 한 줄 삭제
u -> 실행 취소
ctrl + r -> 다시 실행
2dd -> 두 줄 삭제
dgg -> 현 위치부터 첫 행까지 삭제
dG -> 현 위치부터 마지막 행까지 삭제

복사/붙여넣기
yy -> 한 줄 복사
p-> 붙여넣기
2yy -> 두 줄 복사
3p -> 세 줄 붙여넣기

마지막행 모드

줄 번호 표시
:set nu

검색하기
/
n -> 다음 단어
N -> 이전 단어

입력모드

입력하기
:i -> insert
:o -> 바로 밑에 한 줄을 띄우고 입력

웹서버 설정 변경하기

vi /etc/httpd/conf/httpd.conf 

/8888 -> 8888 검색
Listen 80으로 변경

/index.html -> index.html 검색
DirectoryIndex index.jsp index.html main.html 로 변경
-> index.jsp가 없으면 index.html을 확인하고 없으면 main.html을 확인

/var/www/html/index.html -> main.html로 파일 이름 변경하기

mv /var/www/html/index.html /var/www/html/main.html
systemctl restart httpd 

윈도우에서 211.182.3.201 점속 -> 잘 표시된다

NFS

centos7(nfs sever) ----> centos8(nfs client)

  1. 공유 폴더 생성
    [centos7]
mkdir /public 
  1. 접근 제어. 소유주, 그룹, 그 외 일반 사용자 모두 다 /public에 접근하여 파일 업로드 다운로드
chmod 777 /public
touch /public/test.txt 

[centos7, 8]

yum -y install nfs-utils  
  1. 서버 설정
    [centos7]
vi /etc/exports
/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

[centos8]

showmount -e 211.183.3.201 

mkdir /remote 
mount -t nfs 211.183.3.201:/public /remote

-t: type
211.183.3.201(server, centos7)의 /public을 /remote(client, centos8)와 연결

ls /remote 
echo "hello" > /remote/test.txt

파일에 "hello"라고 내용 작성

[centos7]

cat /public/test.txt 

-> client(centos8)에서 쓴 텍스트 파일 서버에서도 보인다

[multi node architecture]

https://docs.oracle.com/cd/E65465_01/html/E57770/archover.html
클라우드는 controller node, compute node, storage node, network node 등의 multi node로 이루어져있다.

user

[사용자]

  • 리눅스는 multi-user/multi-tasking system 이다.
  • super-user(root) vs normal user(일반 사용자)
  • 리눅스의 모든 사용자들은 최소한 1개의 그룹(primary group)에 포함되어야 한다.
  • 모든 사용자들은 생성과 동시에 자신의 이름으로 그룹이 만들어지고, 해당 그룹에 자동 포함된다.
  • 사용자 생성(기본)
useradd -D 

ls /etc/skel/ 
mkdir /etc/skel/public_html
echo "<h1>hello</h2>" > /etc/skel/public_html/index.html

useradd gildong 
passwd gildong
[패스워드 설정]
cat /etc/passwd | grep gildong

groups gildong 

그룹 바꿔보기

usermod -G user1 gildong 
groups gildong

cat /etc/group

user1에 gildong에 추가되었음

더 간단하게 user 생성

useradd testuser1 
echo 'testuser1:test123' | chpasswd 

더 더 간단하게 user 생성

useradd testuser1 && echo 'testuser1:test123' | chpasswd 
su gildong 
ls 

public_html 폴더 안에 public_html 파일이 있음
-> skel에 넣어놨던 것

사용자 삭제
ec2-usr, user1만 남기고 모두 지우기

cat /etc/passwd | grep bash

userdel -r user10 

Vhosting

웹서비스 중에서 vhosting(가상 호스팅)을 이용하여 각 사용자별로 별도의 홈페이지를 사용하고 싶다. 어떻게 해야할까?

vhosting -> 하나의 웹서버에서 여러 이름의 웹사이트를 운영할 때 쓰인다.

httpd 가상 호스팅 설정

vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80

include /etc/httpd/conf/vhost.conf

<Directory "/home">
        AllowOverride None
        Require all granted
</Directory>

위 코드 추가

vi /etc/httpd/conf/vhost.conf
<VirtualHost *:80>
        DocumentRoot /home/gunwoo
        ServerName gunwoo.com
        ServerAlias www.gunwoo.com
#       ErrorLog logs/dummy-host.example.com-error_log
#       CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

<VirtualHost *:80>
#       ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /home/gunwoo2
        ServerName gunwoo2.com
        ServerAlias www.gunwoo2.com
#       ErrorLog logs/dummy-host.example.com-error_log
#       CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>                   
mkdir /home/gunwoo
mkdir /home/gunwoo2

웹페이지 경로 생성

echo "<h1>gunwoo</h1>" > /home/gunwoo/index.html 
echo "<h1>gunwoo2</h1>" > /home/gunwoo2/index.html 

웹페이지 index.html 생성

systemctl restart httpd 

웹서버 재시작

가상 호스팅 테스트

C:\Windows\System32\drivers\etc\
hosts 파일 수정

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
211.183.3.201 gunwoo.com
211.183.3.201 gunwoo2.com
211.183.3.201 www.gunwoo.com
211.183.3.201 www.gunwoo2.com

결과)
gunwoo.com 접속

gunwoo2.com 접속

vhosting 참고
https://server-talk.tistory.com/3
https://verdana1012.tistory.com/entry/Linux-Apache-%EA%B0%80%EC%83%81%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%84%A4%EC%A0%95Apache-virtual-host
https://velog.io/@lijahong/0%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-Linux-%EA%B3%B5%EB%B6%80-%EA%B0%80%EC%83%81-%ED%98%B8%EC%8A%A4%ED%8C%85

profile
take a look

0개의 댓글