상세 컨텐츠

본문 제목

[Linux] Linux Ubuntu 설치

Operating System (OS) & Network & VCS/Linux

by 찌니씨 2022. 10. 18. 17:58

본문

Linux Ubuntu 설치 & 환경설정 

 


sudo: 현재 계정에서 root 권한을 이용하여 명령어를 실행할 때 사용

    따라서 root 계정으로 로그인했을 경우에는 굳이 명령어 앞에 sudo를 사용하지 않아도 된다

    현재 블로그의 내용은 해당 명령어를 실행했을 당시 로그인 계정이 root가 아닐 경우를 대비하여 간간히 "sudo"를 붙여서 사용하였다.

    (서버 재시작 했을 경우 등)


버전 확인

//Linux check version
$ uname -a

//Ununtu check version
$ cat /etc/issue

//하드용량 체크
$ df -h

//메모리 체크
$ free -m

//CPU 코어수 확인
$ cat /proc/cpuinfo | grep processor | wc -l

$ cat /proc/cpuinfo | grep processor
$ cat /proc/cpuinfo

 

root 계정 활성화

$ whoami // 현재 계정 확인

$ sudo passwd root // root계정 비밀번호 설정

$ su - root // root 계정으로 전환. 활성화

$ exit // 종료

 

사용자 계정 (user) 생성 및 활성화

$ adduser username //username 추가 (ubuntu라서 가능)
$ useradd username // username 추가 (표준 명령어)

$ userdel -r username // username 삭제

$ passwd username //username 비밀번호 변경

$ cat /etc/user //사용자 변경할 수 있는 파일 수정
$ cat /etc/passwd  //비밀번호 변경할 수 있는 파일 수정

 

group: jiniss

user: jini

 

$ sudo mkdir /www/jini
$ sudo mkdir /www/jiniss
$ sudo mkdir /www/jiniss/jini

$ chown [option] user[:group] file(s) //소유자 변경
$ sudo chown -R user:group folder
$ sudo chown -R jini:jini /www/jini // -R (Recursive) 재귀적으로, 하위의 모든 폴더도 함께
$ sudo chown -R jiniss:jini /www/jiniss
$ sudo chown -R jiniss:jini /www/jiniss/jini

$ usermod [option] user //user's new login directory
$ sudo usermod -m -d /www/user user // user 홈 디렉토리 설정과 동시에 디렉토리 이동
$ sudo usermod -m -d /www/jiniss jini
$ sudo usermod -m -d /www/jini jini

 

네트워크 설정 

// ifconfig는 설치

$ ip addr show

$ vi /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
    network: version: 2
    renderer: NetworkManager
        ethernets:enp1s0: # 환경에 따라 다르게
            dhcp6:no
            addresses: [192.144.67.36/24]
            gateway4: 192.144.67.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]

 

$ sudo netplan apply // 새 설정 적용

 

방화벽 설정 (Network File system - NFS)

 

$ yum install portmap nfs-utils* libgssapi //NFS 서버 패키지 설치

$ vi /etc/exports //NFS 서버 exports 설정
    /www/jini *(rw,sync,no_subtree_check) // /www/jini 폴더를 공유한다. 모든 ip(*)에 개방한다.

$ service iptables stop //방화벽 해제

//NFS 실행
$ /etc/init.d/rpcbind start
$ /etc/init.d/portmap start
$ /etc/init.d/rpcidmapd start
$ /etc/init.d/nfs start

rw : 읽기, 쓰기 가능

ro : 읽기만 가능

secure : 클라이언트 마운트 요청시 포트를 1024 이하로.

noaccess : 액세스 거부

root_squach : 클라이언트의 root가 서버의 root 권한을 획득하는 것을 막는다.

no_root_squash : 클라이언트의 root와 서버의 root를 동일하게 한다.

sync : 파일 시스템이 변경되면 즉시 동기화한다.

all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정.

no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정. 

 

NFS 클라이언트 설정

 

 //NFS 클라이언트 설정
$ yum install nfs-utils

//NFS 클라이언트 실행
$ /etc/init.d/rpcbind start 
$ /etc/init.d/rpcidmapd start

//NFS 서버 마운트
$ mount -t nfs 192.168.59.128:/home/ /home/

//NFS 마운트 확인 (nfs의 IP와 디렉토리를 확인)
$ df -h

 

Port 설정

 

$ vi /etc/ssh/sshd_config

$ ESC + :/22 + n // 22검색

#Port 22 //주석처리
Port 20022 // 10000 이상의 번호로 변경 (다른 포트와의 충돌을 방지하기 위함)

$ ESC + :/sftp-server + n // 22검색

#Subsystem sftp /usr/lib/openssh/sftp-server //해당부분 주석처리
Subsystem sftp internal-sftp //추가 (하지 않으면 ssh는 사용가능하고 sftp는 사용불가)

//아래부분 SHIFT + INSERT로 추가

//Chroot 적용할 사용자
Match User testuser
     ChrootDirectory /www/jini
     ForceCommand internal-sftp
     X11Forwarding no
     AllowTCPForwarding no

////Chroot 적용할 그룹
Match Group testgroup
     ChrootDirectory /www/jini
     ForceCommand internal-sftp
     X11Forwarding no
     AllowTCPForwarding no

$ ESC + :wq! //저장하고 종료

$ service ssh restart
$ service sshd restart
chroot 가 적용될 디렉토리는 root 권한의 755여야 한다.
$ chown root /www/jini //소유자 root
$ chmod 755 /www/jini //권한 755

 

기본 Port    
HTTP (WWW) 80  
localhost 8080  
FTP (제어 채널) 20  
FTP (데이터 채널) 21  
SFTP 22  
TELNET 23  
SMTP 55  
DNS 53  
portmap 111  
TLS/SSL HTTPS 443  
rlogin 513  
rsh 514  
MySQL 3306 https://www.mysql.com
MS-SQL 1433, 1434 https://www.microsoft.com/ko-kr/sql-server/
Oracle 1521, 1522 https://www.oracle.com/kr/database/technologies/
mariaDB 3306 https://mariadb.org
PostgreSQL 5432 https://www.postgresql.org
MongoDB 27017 , 27018 , 27019 , 28017 https://www.mongodb.com
Sybase 5000 https://www.sap.com/products/acquired-brands/what-is-sybase.html
DB2 50000 https://www.ibm.com/kr-ko/products/db2-database

Iptable 설정

 

$ vi /etc/sysconfig/iptables

 -A INPUT -m state –state NEW -m tcp -p tcp –dport 20022 -j ACCEPT //port 22번을 20022로 변경

$ service iptables restart

 


Hostname 설정

 

$ vi /etc/hostname
$ hostname -F /etc/hostname

 


도메인 설정

 

도메인 구입

가비아, cafe24 등


 

DNS 서버 설정

 

네임서버 구축

 

$ sudo apt install bind9 dnsutils //bind9, DNS 유틸 설치
$ vi /etc/bind/named.conf.local

	//추가
    zone "jiniss.com" {
    type master;
    file "/etc/bind/db.jiniss.com";
    };
    
$ sudo /etc/init.d/bind9 restart //추가한 내용을 적용하기 위해 재실행

$ nslookup [조회 도메인] [DNS 서버] //test
$ nslookup www.jiniss.com 1.2.3.4

 


메일 발송 프로그램 설치

 

$ apt-get install sendmail
$ vi /etc/mail/local-host-names

 


시스템 시간 설정

 

$ dpkg-reconfigure tzdata

 

 


패키지(라이브러리) 확인 및 설치

 

$ apt update
$ apt-get update

$ apt-get -y udate
$ apt-get upgrade

 


web 설치

 

ex) Apache2

 

$ apt-get install apache2
$ apache2 -v // check version

$ apt-get update
$ apt-get upgrade

 

ex) PHP

 

$ apt-get install php
$ apt-get install libapache2-mod-php7.0 //PHP 아파치 연동모듈 설치
$ apt-get install php-mcrypt //암호화 모듈
$ apt-get install php-mbstring //다국어 처리 모듈
$ apt-get install php-gd //이미지 처리 모듈
$ apt-get install php-curl php-xml //원격지 정보 불러오는 모듈

$ service apache2 restart //아파치 재시작
 
$ php -v //php check version

 


Database 설치

 

//mariadb
$ apt-get install mariadb-server

//mysql
$ sudo apt-get install mysql-server

$ /usr/bin/mysql_secure_installation //초기화
$ apt-get install php-mysql //DB 연동모듈 설치

 

Database 설정

 

$ sudo root //root 계정으로 접속

$ sudo mysql -u root //root 계정으로 sql 접속

$ sudo mysql -u root -p //비밀번호 설정 후 root 계정으로 sql 접속

> use mysql; //mysql database 사용

//비밀번호 설정
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwd'
> SET USER 'root'@'localhost' = PASSWORD('passwd');
> UPDATE mysql.user SET authentication_string=PASSWORD('passwd') WHERE User='root' AND Host='localhost';

// Database 생성 
> CREATE DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; //MySQL 5.7 이상
> CREATE DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ; //MySql 8

//User 생성
> CREATE USER 'user'@'host' IDENTIFIED BY 'passwd' PASSWORD EXPIRE NEVER; //host에서 접속 가능한 user 비밀번호는 passwd

 //권한 설정
> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'host';
> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'locahost';	//localhost
> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'%';	//모든곳

//권한 확인
> SHOW PRIVILEGES FOR 'user@host';

//권한 회수
> REVOKE 권한(select, insert, update, delete) ON database.table FROM 'user@host'

> flush privileges; //변경사항 즉시 반영
> exit;

 

MariaDB

//mariadb 설정 (character-set)
$ mariadb -V //mariadb check version
$ vi /etc/mysql/mariadb.conf.d/50-server.cnf 

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

$ : + ESC + G // vi 편집기 명령 라인 모드 - 파일의 맨 마지막줄로 이동

//위의 내용을 SHIFT + INSERT 로 추가

$ : wq! //저장하고 종료

$ service mariadb restart //변경사항 적용하기 위해 재시작

$ systemctl list-units --type service --all //현재 실행중인 service 확인

 

MySQL

 

//mysql 설정 (외부연동)
$ mysql -V //mysql check version

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf //mysql설정파일
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf //mariaDB 설정파일

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address 		= 127.0.0.1
bind-address 		= 0.0.0.0

$ : + ESC + G // vi 편집기 명령 라인 모드 - 파일의 맨 마지막줄로 이동

//위의 내용으로 변경

$ : wq! //저장하고 종료

$ service mariadb restart //변경사항 적용하기 위해 재시작

 

PHP 권한 설정

 

$ apt-cache search mpm-itk

$ apt-get install libapache2-mpm-itk

$ chmod 711 /www
$ chmod -R 700 /www/*

 

PHP 실행 확장자 변경

 

$ vi /etc/apache2/mods-available/php7.0.conf

<FilesMatch ".+\.ph(p3|p4|p5|p7|t|tml)$">
    Require all denied
</FilesMatch>

$ service apache2 restart //재시작

 

Apache2 환경설정 생성

 

https://webmaster.cafe/tools/apache-conf-generator/

 

Apache2 환경설정 생성기 | 웹마스터카페

webmaster cafe

webmaster.cafe

$ apt install ssl-cert //임시 인증서 패키지 설치

$ apt install certbot //발급 프로그램 설치

//cerbot 도메인 인증 및 인증서 발급
$ certbot certonly --webroot --webroot-path=/www/jini -d jiniss.com -d www.jiniss.com -d www.jini-is.com
$ vi /etc/apache2/sites-available/jini.conf
<VirtualHost *:443>
    ServerName jiniss.com
    ServerAlias www.jiniss.com
    ServerAlias www.jini-is.com

    DocumentRoot /www/jini

    <Directory /www/jini>
        Options FollowSymLinks MultiViews
        AllowOverride All
        require all granted

        # upload_max_filesize and post_max_size must have the same value.
        php_value upload_max_filesize 10M
        php_value post_max_size 10M

        # Enhance session security.
        php_value session.cookie_httponly 1
        php_value session.use_strict_mode 1

        # php_value memory_limit 128M
        # php_value max_execution_time 30
        # php_value max_input_time 60
    </Directory>

    AssignUserID jini jini

    ErrorLog ${APACHE_LOG_DIR}/jiniss.com-error.log
    CustomLog ${APACHE_LOG_DIR}/jiniss.com-access.log combined

    Header always set Strict-Transport-Security "max-age=31536000"

    SSLEngine on

    SSLProtocol all -SSLv2 -SSLv3

    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    SSLHonorCipherOrder on
    SSLCertificateFile "/etc/letsencrypt/live/jiniss.com/cert.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/jiniss.com/privkey.pem"
    SSLCertificateChainFile "/etc/letsencrypt/live/jiniss.com/chain.pem"

    # Turn on OCSP stapling
    SSLUseStapling on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off

</VirtualHost>

 

 

Apache 추가 보안 설정

$ vi /etc/apache2/conf-available/charset.conf //UTF-8부분 주석 제거

$ vi /etc/apache2/conf-available/security.conf //아래부분 주석 제거
    
    <Directory/>
        AllowOverride None
        Require all denied
    </Directory>
    
    ServerTokens Prod
    
    ServerSignature Off
    
    TraceEnable Off
    
    Header Set X-Content-Type-Options: "nosniff"
    
    Header set X-Frame-Options: "sameorigin"
    
$ service apache2 reload //아파치 설정 다시불러오기

 

추가, 업데이트 중입니다.

 

 

참고

https://developefeel.tistory.com/m/29

 

[리눅스마스터] 리마1급 실기 대비용 리눅스 명령어 정리, 리눅스 네트워크 표기법

다 외울필요없이 기출 위주로 준비하면서 참고하는 용도 네트워크 표기법 (괄호안의 설정파일은 한번만 작성했음) 127.132.1 sendmail(access) 127.132.1. apache(httpd.conf), samba(smb.conf). tcp_wrapper(hosts.allow/deny

developefeel.tistory.com

https://blog.lael.be/post/73

 

한번에 끝내는 Ubuntu 웹서버세팅 (우분투 서버세팅)

Last updated : 2018-05-18 Ubuntu 18.04 LTS 에서 설치하는 방법은 이곳에 :  Ubuntu 14.04 LTS 에서 설치하는 방법은 이곳에 : 글 비밀번호는 ubuntu 입니다.  이 글은 Ubuntu 16.04 LTS 에 맞추어 작성되었습니다. #1

blog.lael.be

https://studyforus.tistory.com/m/243

 

SFTP(Chroot 완벽설정) 사용자 상위폴더 접근 못하게 하는 두가지 방법

SFTP 퍼미션 조정 및 Chroot 설정으로상위폴더 접근 제한하기 SFTP를 설정하고 나서 생각지도 못한 부분이 하나 있었는데, 그것은 일반 FTP와는 다르게 root 권한을 가지지 않는 계정이라도 SFTP를 이용

studyforus.tistory.com

https://www.happyjung.com/lecture/2994

 

DB (Database) 기본 포트 (Port) > 기술자료 | 해피정닷컴

Database(DB) Port 정리자료 입니다. 제조사제품명홈페이지기본 사용 포트MicrosoftSQL (MS-SQL)https://www.…

www.happyjung.com

https://hiseon.me/linux/dns-server-setup/

 

DNS 서버 구축 방법 (리눅스) - HiSEON

DNS 서버 구축 우분투 리눅스 환경에서 bind9 패키지로 DNS 서버 구축 방법에 대해서 설명드립니다. 도메인 구입 후 설정방법과 DNS 데몬 설치 후, DNS 레코드 설정방법과 nslookup 명령어로 테스트 방법

hiseon.me

 

관련글 더보기

댓글 영역