처음 실행할 경우 crontab을 편집하기 위한 editor를 선택할 수 있는 메뉴가 뜬다. 일단은 nano를 사용했다.
3) 자동 재부팅 작업 등록
editor가 실행되면, 자동화 작업을 등록한다. 작업이 수행될 routine과 작업내용을 입력하는 형식이다.
00 05 * * * reboot
나는 '매일 05:00 AM에 재부팅'하는 작업을 하고자 했으므로 위와 같이 입력하였다.
reboot 앞에 5가지 인수를 넣을 수 있는데, 각 의미는 다음과 같다.
1. minute (00~59)
2. hour (00~23)
3. day of month(dom) (01~31)
4. month (01~12)
5. day of week(dow) (0~6)(0이 일요일)
작업을 입력했으면 저장하고 editor에서 빠져나간다.
4) 작업 등록 확인
sudo crontab -l
작업이 잘 등록되었는지 확인한다.
# crontab -u 유저명 -l no crontab for 유저명 # crontab -e no crontab for root - using an empty one crontab: installing new crontab # crontab -l 00 04 * * 6 reboot --매주 토요일 04:00에 재부팅 설정
이 글에서는글 작성 시각 현재 최신버전인 4.5.2를 설치할 것이다. phpmyadmin 은 매우 견고하게 만들어진 프로그램으로써 4.5.2를 설치해도 보안취약점이 있지는 않겠지만최신버전을 설치하는 습관을 기르도록 하자. (혹시나 말하지만, Alpha나 Beta 같은 개발자-최신버전을 설치하라는 뜻이 아니라 널리 사용되어 검증된 Release Channel 최신버전 를 사용하라는 것이다.)
만약기본사이트 이외의 사이트에 설치하고 싶다면/var/www/html위치 대신/home/myuser1/www 같은 곳에 phpmyadmin 코드를 넣도록 하자.
http://111.222.333.444/dbmyadmin/
[TIP]간혹 방금 설치한 디비의 root 비밀번호가 기억이 안나는 분들도 있을 것이다. 이 경우에는 다음의 명령어를 사용하여 mariadb 를 재설치 하도록 하자. - 제거 # apt-get purge mariadb-server - 설치 # apt-get install mariadb-server
- 재부팅
복잡한 세팅이 끝났으니 한번 숨을 고르고 가자.
# reboot
재부팅 후에 phpinfo 페이지와 phpmyadmin 가 잘 실행된다면 “재부팅이 가능한 서버” 라고 볼 수 있다.
16) Apache 추가 보안 설정
- 기본 언어셋 설정
#vi /etc/apache2/conf-available/charset.conf
기본 언어값 UTF-8 에 대해서 주석처리되어 있을 텐데 주석(#)을 제거해 준다.
- 추가 보안 설정
#vi /etc/apache2/conf-available/security.conf
매우 권장하는 보안설정이므로 Ubuntu Apache 패키지 제작자가 미리 써두었다. 이미 다 쓰여 있으니까 주석(#) 만 제거하자.
- 아파치 설정 다시 불러오기(적용을 위해)
#service apache2 reload
옵션) SSH 기본 포트번호 변경
#이 작업은 무작위 대입공격(Brutu force attack)의 시도를 차단해줍니다. 보통 IP주소 : 22번 포트를 스캔해서 ssh와 연결되면 무작위 로그인 시도를 하는 프로그램이 엄청 많은데, 포트번호만 바꾸어주어도 방어가 되거든요.
!!IPTABLES방화벽,SSH 포트번호 변경,Fail2ban중에서하나만적용하세요!!
1) 나는KS 클라우드 or 아마존 클라우드를 사용하고 있어! ->클라우드 방화벽 쓰세요!! 2) 나는허용된 IP만 서버에 접속하게 할거야 ->IPTABLES!! 3) 나는 사용자의 IP를 특정지을 수 없는데 무차별대입 공격은 방어할거야 -> Fail2ban !! 4) 나는 나만 아는 포트번호로 서버에 접속할 거야 -> SSH 포트변경!!
[개인 프로젝트,회사의 서비스 -> IPTABLES] [웹호스팅 -> Fail2ban 또는 SSH 포트변경]
SSH 기본 포트번호인 22번을 다른 번호로 바꿉니다. 기억하기 쉬운 숫자로 변경하세요.
#vi /etc/ssh/sshd_config
Port 22 를 찾아서 임의의 숫자 : 10022, 34522 등 기억하기 쉬운 숫자로 설정.
포트번호는 10000번 이상의 숫자를 선택하시길 권장합니다.
#service ssh restart
옵션) 방화벽 적용하기
방화벽의 중요성을 알고 싶다면
# tailf /var/log/auth.log
를 입력해보도록 하자. (Control + C 를 눌러 프로그램 종료)
별도의 방화벽 설정이 없었다면 벌써 중국에서 서버에 로그인 시도를 하고 있을 것이다.
이러한 무차별 로그인 시도를 다음 중 어느 하나를 사용해서 막을 수 있다.
가장 편한 것은 fail2ban 이다. (한줄만 타이핑하면 방어됨) (https://blog.lael.be/post/858#fail2ban) 로 이동해서 설정하세요. *접속자의 IP 가 고정되어 있으면 방화벽 설정을 통해, 특정 아이피에서만 서버에 접속할 수 있도록 설정해주세요.
현재 방화벽 설정 보기. (List)
#iptables -L
INPUT (서버로 들어오는 것 관리), FORWARD (서버에서 내부망으로 연결관리;잘 안씀), OUTPUT (서버에서 나가는 것 관리) 로 이루어져 있다.
보통 FORWARD와 OUTPUT은 건들이지 않고 INPUT 만 수정한다. policy ACCEPT라는 뜻은 아무 조건도 해당하지 않았을 때 ACCEPT 하라는 것이다.
먼저 현재 방화벽 설정을 파일로 저장한다. 언제든 현재의 상태로 되돌릴 수 있기 위해서 이다.
>>설정 시작. 규칙 : 아이피 111.222.111.222 에 대해서 destination port 가 22 이면 ACCEPT 하여라.
#iptables -A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
아이피 바꾸지 마시고 위의 예시 (111.222.111.222) 그대로 입력하세요.
#iptables -L
이제 현재 상태에 대해서 방화벽 설정파일을 다시 생성해보도록 하자.
#iptables-save > 151214.rules
SFTP나 vi, cat 으로 해당 151214.rules 를 열어보자.
열고나서 코드의 뜻을 대충 해석해보아라. (간단하다.)
하단 *filter 부분에
-A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
가 보이는가?
여러분은 이곳에 아래의 코드를 집어넣어야 한다.
순서가 중요하다. IF-ELSE 같이 동작하기 때문에 조건에 맞으면 바로 지정된 동작을 한다.
211.105.192.168 아이피만 지정하고 싶을 때 -> -s 211.105.192.168/32
211.105.192.* 아이피 그룹을 지정하고 싶을 때 -> -s 211.105.192.0/24
211.105.*.* 아이피 그룹을 지정하고 싶을 때 -> -s 211.105.0.0/16
목적지 포트가 22번(ssh) 포트일 때 -> -dport 22
목적지 포트가 80번(http) 포트일 때 -> -dport 80
목적지 포트가 443번(https) 포트일 때 -> -dport 443
아래는
1. 이미 연결된 것은 허용 2. ping 허용 3. loopback 허용 4. 111.222.111.222 의 22번 포트 접근 허용 5. 123.111.123.111 의 22번 포트 접근 허용 6. 80 포트 접근 허용 (-s 옵션이 없으므로 누구나 허용) 7. 443 포트 접근 허용 (-s 옵션이 없으므로 누구나 허용) 8. 차단 9. FORWARD 차단
의 코드이다.
아까 생성한 .rules 파일을 열어서아래의 코드를그림과 같이코드를 추가하여라. 이때 반드시당신의 아이피를 추가하여라.
추가가 잘못되어도 어차피1번의 조건에 의해서당신의 연결이 끊기지는 않겠지만 새로운 연결은 차단될 것이다.
1
2
3
4
5
6
7
8
9
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 123.111.123.111/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#iptables-restore < 151214.rules #iptables -L
!!!반드시현재 쉘 연결을 끊지 말고!!!
현재 연결은 1번 조건에 의해서 반드시 허용이기 때문에 괜찮다.
새로 연결창 띄워서테스트해 보아라.
만약 원하는대로 동작하지 않는다면 다시 .rules 파일을 수정하고 iptables-restore 하여라.
방화벽 설정이 머리가 아프다면
# iptables -F
로초기화하고 내일 다시 시도해 보아라.
이 설정은 재부팅이 되면 초기화 된다.
설정을 지속시키도록 하자.
iptables-persistent 설치
#apt-get install iptables-persistent
Yes (엔터), Yes (엔터)
/etc/iptables 라는 폴더가 생성되고
rules.v4, rules.v6 가 생성된다.
부팅시 실행되는 파일을 갱신하자.
#iptables-save > /etc/iptables/rules.v4
ipv6 차단하기
#vi /etc/sysctl.conf
맨 밑에
1
2
3
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
추가.
설정파일 적용
#sysctl -p
검사
#cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1 이면 disable 된 상태이다.
재부팅
#reboot
재부팅 후에 방화벽 규칙이 유지가 되면 성공이다.
#iptables -L
옵션) 계정별 트래픽 양 제한하기. Apache Mod Cband install.
- 2015.06.01.Ubuntu 14.04 LTS테스트 완료. - 순간속도(대역폭), 총 전송량(쿼터), 동시접속연결을 제한하는 모듈입니다. 장애가 일어날 것 같은 값들을 Hard Boundary 로 정해놓으면 장애가 일어날 것 같은 환경에서 서버가 잘 돌아가는 것을 볼 수 있을 것입니다.
저도 서버 서비스의 장애를 막기 위해서 실 서비스에 이것을 사용하고 있습니다. 다만 저 같은 경우 분산처리를 해 두었기 때문에 개별 서버에 적용한 제한치보다 실제 서비스는 더 높은 처리를 보여줍니다. (100의 제한을 건 서버 5대에 분산처리하면 전체적으로 500의 제한이 걸린 것 처럼 보이겠죠?)
Mod Cband는Apache2 모듈입니다.
다음의 기능이 가능합니다.
1) 대역폭 제한 (Bandwidth limit) 2) 동시 접속자 제한 (Concurrent user) 3) 트래픽 제한 (Transfer quota) 통계 용도로만 사용할 수도 있다.
VNC is a system that allows you to remotely control another computer. It allows you to relay your mouse and keyboard inputs as if you were physically sitting in front of the system, when in fact you could be on the other side of the world.
In this guide, we will go over the steps to setup a VNC server on yourUbuntu 20.04system. When we're done, you'll be able to access your system remotely from anywhere, provided that your client system and the VNC server have an internet connection.
In this tutorial you will learn:
How to install and configure TightVNC Server
How to install and configure XFCE desktop manager
How to connect to our VNC server with TightVNC Viewer
How to tunnel VNC connections through SSH
How to manage multiple VNC desktops with a Systemd script
Connecting to a VNC server
Software Requirements and Linux Command Line ConventionsCategoryRequirements, Conventions or Software Version Used
Privileged access to your Linux system as root or via thesudocommand.
Conventions
#- requires givenlinux commandsto be executed with root privileges either directly as a root user or by use ofsudocommand $- requires givenlinux commandsto be executed as a regular non-privileged user
Install VNC server
Looking for Linux Systems Analyst !
The UAF Geophysical Institute, is looking for an experienced Linux Systems Analyst to join their team of research cyber infrastructure analysts and engineers. LOCATION:Fairbanks, Alaska, USA
We'll need to install a few packages first. There are multiple options for VNC server software, but we'll be going with TightVNC Server for this tutorial. Along with VNC, we also need a graphical desktop.XFCEis a good choice, so that's what we'll be covering here.
Start byopening a terminaland entering the following command to install TightVNC server and the XFCE desktop manager core files: $ sudo apt install tightvncserver xfce4 xfce4-goodies
After the packages are done installing, we need to configure a username and password that will be used to connect to the VNC server by a client. Create a password with this command:$ vncpasswd
Next, let's configure VNC to start the XFCE desktop environment when a client connects. Use nano or the text editor of your preference (ex.Atom,Sublime) to create the following file: $ nano ~/.vnc/xstartup
$ systemctl set-default graphical.target
Insert the following few lines and then save your changes and exit the file:
With those changes made, edit the permissions of the file to make it executable:$ chmod +x ~/.vnc/xstartup
Start VNC server
VNC runs as a service on your system. In order for clients to connect, the VNC server must obviously be running and listening for incoming connection attempts. With our configuration complete, we are ready to start VNC server with the following command:
$ vncserver
If your terminal returns some output like in the screenshot below, your VNC server is running correctly.
Launch VNC server
VNC will use a new port for every remote desktop that is created. At this point, your system should be listening on port5901for incoming VNC connections. You can see this for yourself with thess -ltncommand:
$ ss -ltn
VNC listening on port 5901
If you have theUFW firewall enabled, you'll need to open port5901so it doesn't block incoming VNC connections:
$ sudo ufw allow from any to any port 5901 proto tcp Rule added Rule added (v6)
Looking for Linux Systems Analyst !
The UAF Geophysical Institute, is looking for an experienced Linux Systems Analyst to join their team of research cyber infrastructure analysts and engineers. LOCATION:Fairbanks, Alaska, USA
There are a lot of choices in the way of VNC clients and any of them should be capable of connecting to your newly launched VNC server. If you don't already have a preferred client to use, follow along with us as we cover the instructions for connecting to the VNC server with the TightVNC Viewer.
Start by installing thextightvncviewerpackage on your Ubuntu client system:$ sudo apt install xtightvncviewer
Once the VNC client is installed, you can use thevncviewercommand, followed by either the hostname or IP address of the VNC server, in order to connect to it.$ vncviewer linuxconfig.org:1 Enter your password that we created previously when setting up VNC Server. If all went well, you will be presented with a XFCE desktop session running on the remote VNC server Ubuntu system:
Connect to VNC server
Tunnel VNC through SSH
For extra security, you can tunnel the VNC connection through SSH on your VNC server. Of course, this is assuming that you have SSH access on the VNC server. If you'd like the added security, follow along with these steps:
If you don't already have SSH installed, that's a pretty obvious prerequisite for this to work:$ sudo apt install ssh
Next, create an SSH tunnel on a local port 5901 leading to a remote port 5901 on your VNC server. In the following command, make sure you replaceuser1andlinuxconfigwith the username and hostname of your VNC server:$ ssh -L 5901:127.0.0.1:5901 -N -f -l user1 linuxconfig The above command will open a local port5901on a localhost loopback network interface127.0.0.1:
Next, use the local port5901to connect to a remote VNC server via the SSH tunnel:$ vncviewer localhost:1
VNC server system startup script
While this configuration works, you may have a scenario where you need to manage multiple VNC desktop sessions. In that case, creating a systemd startup script can facilitate that.
Use nano or another text editor to create the following file:
Once you have the file opened, insert the following lines while replacing theuser1username with the username of your VNC user onLine 7andLine 10. Optionally, change the screen resolution settings and apply othervncserveroptions or arguments:
The UAF Geophysical Institute, is looking for an experienced Linux Systems Analyst to join their team of research cyber infrastructure analysts and engineers. LOCATION:Fairbanks, Alaska, USA
deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /
이제 다음 명령어를 입력하여 설치를 마무리합니다.
sudo apt update
sudo apt install systemd-genie
3. VNC 환경설정
다음 명령어를 입력하여 비밀번호를 설정해줍니다.
선택 옵션에서는 n을 입력하여주세요.
vncpasswd
다음 명령어를 입력하여 한번 더 반복해주세요.
sudo vncpasswd
마지막입니다.
한번 더 반복해주세요.
sudo -u gdm vncpasswd
이제 기존의 X를 Xvnc로 대체해주겠습니다.
다음 명령어를 입력하여 Xorg스크립트를 백업해주세요.
sudo mv /usr/bin/Xorg /usr/bin/Xorg_old
이제 다음 명령어를 입력하여 새로운 Xorg 스크립트를 만들어줍니다.
sudo nano /usr/bin/Xorg
만들어진 스크립트에 다음 내용을 붙여넣기 해줍니다.
#!/bin/bash
for arg do
shift
case $arg in
# Xvnc doesn't support vtxx argument. So we convert to ttyxx instead
vt*)
set -- "$@" "${arg//vt/tty}"
;;
# -keeptty is not supported at all by Xvnc
-keeptty)
;;
# -novtswitch is not supported at all by Xvnc
-novtswitch)
;;
# other arguments are kept intact
*)
set -- "$@" "$arg"
;;
esac
done
# Here you can change or add options to fit your needs
command=("/usr/bin/Xvnc" "-geometry" "1024x768" "-PasswordFile" "${HOME:-/root}/.vnc/passwd" "$@")
systemd-cat -t /usr/bin/Xorg echo "Starting Xvnc:" "${command[@]}"
exec "${command[@]}"
우분투 18.04 설치하고 사용하고 계신 분들은 아시겠지만, 이전 LTS 버전과 가장 큰 차이점 중에서 하나가 바로 네트워크 설정 방법 변경된 것일 겁니다. 사실 Netplan은 우분투 18.04 이전 버전인 17.10 버전부터 네트워크 설정을 관리하기 위해서 사용되었습니다. Netplan은 기존의 우분투 네트워크 인터페이스를 관리하기 위해서 사용되는 파일들(/etc/network/interfaces)을 대체하기 위한 툴입니다. 우분투 18.04 LTS 버전 부터는 기존의 설정 파일이 아닌, /etc/netplan/*.yaml 를 사용해 주셔야합니다.
새로운 인터페이스 설정파일들은 /etc/netplan 디렉터리에 존재하며, 크게NetworkManager와 networkd 으로 renderer 값을 갖습니다.
NetworkManager: 데스크탑 컴퓨터에서 사용됩니다. 이 값이 renderer로 사용되었을 경우 NetworkManager GUI를 통해서 네트워크 인터페이스가 관리되게 됩니다. 직접 Netplan 설정 파일을 통해 네트워크 설정을 하는것이 아니고 NetworkManager의 GUI를 통해서 설정되게 됩니다.
networkd: 주로 서버에서 사용되는 renderer입니다. 이 글에서는 networkd의 renderer 값으로 설정 방법을 설명드리도록 하겠습니다.
Netplan 설정 파일 구조
설정 파일의 최상위 노드 정보는 network 입니다. network는 “version: 2” (Curtin에서 사용되는 YAML), 그리고 renderer 등이 정의 됩니다. 그리고 renderer 값에 따라 “ethernets:”, “wifis:”, “bridges:” 와 같은 디바이스 정의 그룹이 추가 정의되게 됩니다. 각각의 디바이스 블럭은 map 형태로 세부적인 형태로 정의가 이뤄지게 됩니다. 보다 자세한 내용은 아래의 설정 파일을 통해서 설명드리도록 하겠습니다.
우분투 18.04 네트워크 설정
설정 파일 만약 우분투 18.04 데스크탑 버전을 설치하신 경우, /etc/netplan 디렉터리의 설정파일을 확인하시면 아래와 같은 내용이 있습니다.
# Let NetworkManager manage all devices on this systemnetwork:version:2renderer:NetworkManager
NetworkManager을 renderer으로 사용한다는 내용으로, NetworkManager의 GUI를 이용하여 네트워크 설정이 이뤄지게 됩니다.
이더넷 DHCP 설정
아래의 설정 내용은 이더넷 enp6s0 인터페이스를 DHCP 방식으로 설정하는 내용입니다.
서버로 사용하기 위해서느 원격 접속이 필수인데, 지난 번 포스팅처럼 xrdp를 이용하면 Windows에서는 접속이 가능하지만 스마트폰 같은 다른 운영체제에서는 프로토콜 에러라는 메세지와 함께 접속이 안되는 문제가 있다. 그래서 rdp가 아닌 vnc를 이용한 원격접속 방법을 시도했다. rdp를 이용하면 로컬에서는 접속이 끊기고 원격지에서만 PC를 제어하지만 VNC는 로컬 시스템에 사용자가 로그인되어 있어야하고, 같은 화면을 보면서 PC를 제어하게 된다. 스마트폰 초창기에 유행한 크레이지 리모트나, 팀뷰어를 생각하면 된다.
우분투 최신 LTS 버전인 18.04 기준
Windows에서 원격 데스크톱 허용하듯이 이렇게만 설정해주면 리눅스끼리의 원격 접속은 문제없지만, 다른 운영체제에서 접속하는데는 암호화 관련 문제가 있다. 그래서 관련 설정을 꺼주어야 한다. 아래 명령어로 dconf 에디터를 설치해준다.
apt install dconf-editor
dconf-editor 실행 후 /org/gnome/desktop/remote-access 항목으로 들어가서 require-encryption 옵션을 꺼준다.
Play 스토어에서 VNC로 검색을 하고 제일 위에 있는 앱을 설치해봤다. VNC는 기본포트로 5900을 사용하는데, 암호화 기능도 끈 상태이기 때문에 다른 포트로 바꿔서 사용하는게 좋을 것 같다.
그 동안 우분투에서도 잘 써왔다고 생각했던 WOL(Wake On Lan) 기능이 얼마전부터 잘 작동되지 않는다. 그래서 이번에도 검색을 해보니 메인보드 바이오스의 설정 외에도 운영체제에서 랜카드 설정이 필요하다고 한다. Windows나 우분투 16.04 PC를 사용할 때는 별도 설정이 없어도 대부분 잘되었기 때문에 신경쓰지 않던 부분인데 아마 우분투 18.04를 새로 설치하면서부터 뭔가 변경되었나보다.
1.ethtool 설치 : ethtool이라는 명령어를 통해서 PC가 꺼졌을때 랜카드가 대기하도록 해야한다. sudo apt install ethtool 를 입력해서 ethtool을 먼저 설치한다.
2. ifconfig를 통해서 랜카드 정보를 확인한다. enp6s0라고 쓰여있는 부분을 기억해둔다. 사용자에 따라 약간씩 다를 수 있다. sudo apt install net-tools 를 입력해서 설치 후에 ifconfig 사용이 가능하다.
ethtool 명령으로 랜카드의 상태를 확인해본다. Wake-on: g 라고 되어있으면 wol 기능이 활성화된 것이다. d는 비활성화(disabled)를 의미한다. 스크린샷은 활성화 상태로 만든 후에 찍은 것이라 g로 나와있다.
sudo nano /etc/rc.local
나노 에디터를 이용해서 /etc 디렉토리에 rc.local 이라는 파일을 만들고 아래 내용을 입력한다. rc.local은 Windows의 시작프로그램과 같은 역할이라고 보면 된다.
#!/bin/bash ethtool -s enp6s0 wol g exit 0
나노 에디터는 Ctrl + O로 저장, Ctrl + X로 종료해준다.
sudo chmod +x /etc/rc.local
좀전에 만든 rc.local 파일을 chmod +x 명령어로 실행파일로 만들어준다.
sudo /etc/rc.local 실행 후,
sudo ethtool enp6s0 명령으로 Wake-on: g 로 되어 있는지 확인한다.
Virtual Network Computing, or VNC, is a connection system that allows you to use your keyboard and mouse to interact with a graphical desktop environment on a remote server. It makes managing files, software, and settings on a remote server easier for users who are not yet comfortable with the command line.
In this guide, you’ll set up a VNC server withTightVNCon an Ubuntu 20.04 server and connect to it securely through an SSH tunnel. Then, you’ll use a VNC client program on your local machine to interact with your server through a graphical desktop environment.
On macOS, you can use the built-inScreen Sharingprogram, or can use a cross-platform app likeRealVNC.
On Linux, you can choose from many options, includingvinagre,krdc,RealVNC, orTightVNC.
Step 1 — Installing the Desktop Environment and VNC Server
By default, an Ubuntu 20.04 server does not come with a graphical desktop environment or a VNC server installed, so you’ll begin by installing those.
You have many options when it comes to which VNC server and desktop environment you choose. In this tutorial, you will install packages for the latestXfcedesktop environment and the TightVNC package available from the official Ubuntu repository. Both Xfce and TightVNC are known for being lightweight and fast, which will help ensure that the VNC connection will be smooth and stable even on slower internet connections.
After connecting to your server with SSH, update your list of packages:
sudoapt update
Now install Xfce along with thexfce4-goodiespackage, which contains a few enhancements for the desktop environment:
sudoaptinstall xfce4 xfce4-goodies
During installation, you may be prompted to choose a default display manager for Xfce. A display manager is a program that allows you to select and log in to a desktop environment through a graphical interface. You’ll only be using Xfce when you connect with a VNC client, and in these Xfce sessions you’ll already be logged in as your non-root Ubuntu user. So for the purposes of this tutorial, your choice of display manager isn’t pertinent. Select either one and pressENTER.
Once that installation completes, install the TightVNC server:
sudoaptinstall tightvncserver
Next, run thevncservercommand to set a VNC access password, create the initial configuration files, and start a VNC server instance:
vncserver
You’ll be prompted to enter and verify a password to access your machine remotely:
The password must be between six and eight characters long. Passwords more than 8 characters will be truncated automatically.
Once you verify the password, you’ll have the option to create a view-only password. Users who log in with the view-only password will not be able to control the VNC instance with their mouse or keyboard. This is a helpful option if you want to demonstrate something to other people using your VNC server, but this isn’t required.
The process then creates the necessary default configuration files and connection information for the server. Additionally, it launches a default server instance on port5901. This port is called adisplay port, and is referred to by VNC as:1. VNC can launch multiple instances on other display ports, with:2referring to port5902,:3referring to5903, and so on:
Note that if you ever want to change your password or add a view-only password, you can do so with thevncpasswdcommand:
vncpasswd
At this point, the VNC server is installed and running. Now let’s configure it to launch Xfce and give us access to the server through a graphical interface.
Step 2 — Configuring the VNC Server
The VNC server needs to know which commands to execute when it starts up. Specifically, VNC needs to know which graphical desktop environment it should connect to.
The commands that the VNC server runs at startup are located in a configuration file calledxstartupin the.vncfolder under your home directory. The startup script was created when you ran thevncservercommand in the previous step, but you’ll create your own to launch the Xfce desktop.
Because you are going to be changing how the VNC server is configured, first stop the VNC server instance that is running on port5901with the following command:
vncserver -kill :1
The output will look like this, although you’ll see a different PID:
Before you modify thexstartupfile, back up the original:
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Copy
Now create a newxstartupfile and open it in a text editor, such asnano:
nano ~/.vnc/xstartup
Copy
Then add the following lines to the file:
~/.vnc/xstartup
#!/bin/bash xrdb $HOME/.Xresources startxfce4 &
Copy
The first line is ashebang. In executable plain-text files on *nix platforms, a shebang tells the system what interpreter to pass that file to for execution. In this case, you’re passing the file to the Bash interpreter. This will allow each successive line to be executed as commands, in order.
The first command in the file,xrdb $HOME/.Xresources, tells VNC’s GUI framework to read the server user’s.Xresourcesfile..Xresourcesis where a user can make changes to certain settings of the graphical desktop, like terminal colors, cursor themes, and font rendering. The second command tells the server to launch Xfce. Whenever you start or restart the VNC server, these commands will execute automatically.
Save and close the file after adding these lines. If you usednano, do so by pressingCTRL + X,Y, thenENTER.
To ensure that the VNC server will be able to use this new startup file properly, you’ll need to make it executable:
chmod +x ~/.vnc/xstartup
Copy
Then restart the VNC server:
vncserver -localhost
Copy
Notice that this time the command includes the-localhostoption, which binds the VNC server to your server’s loopback interface. This will cause VNC to only allow connections that originate from the server on which it’s installed.
In the next step, you’ll establish an SSH tunnel between your local machine and your server, essentially tricking VNC into thinking that the connection from your local machine originated on your server. This strategy will add an extra layer of security around VNC, as the only users who will be able to access it are those that already have SSH access to your server.
With the configuration in place, you’re ready to connect to the VNC server from your local machine.
Step 3 — Connecting to the VNC Desktop Securely
VNC itself doesn’t use secure protocols when connecting. To securely connect to your server, you’ll establish an SSH tunnel and then tell your VNC client to connect using that tunnel rather than making a direct connection.
Create an SSH connection on your local computer that securely forwards to thelocalhostconnection for VNC. You can do this via the terminal on Linux or macOS with the followingsshcommand:
-L 59000:localhost:5901: The-Lswitch specifies that the given port on the local computer (59000) is to be forwarded to the given host and port on the destination server (localhost:5901, meaning port5901on the destination server, defined asyour_server_ip). Note that the local port you specify is somewhat arbitrary; as long as the port isn’t already bound to another service, you can use it as the forwarding port for your tunnel.
-C: This flag enables compression which can help minimize resource consumption and speed things up.
-N: This option tellssshthat you don’t want to execute any remote commands. This setting is useful when you just want to forward ports.
-l sammyyour_server_ip: The-lswitch let’s you specify the user you want to log in as once you connect to the server. Make sure to replacesammyandyour_server_ipwith the name of your non-root user and your server’s IP address.
Note: This command establishes an SSH tunnel that forwards information from port5901on your VNC server to port59000on your local machine via port22on each machine, the default port for SSH. Assuming you followed the prerequisiteInitial Server Setup guide for Ubuntu 20.04, you will have added a UFW rule to allow connections to your server over OpenSSH.
This is more secure than simply opening up your server’s firewall to allow connections to port5901, as that would allow anyone to access your server over VNC. By connecting over an SSH tunnel, you’re limiting VNC access to machines that already have SSH access to the server.
If you are using PuTTY to connect to your server, you can create an SSH tunnel by right-clicking on the top bar of the terminal window, and then clicking theChange Settings…option:
Find theConnectionbranch in the tree menu on the left-hand side of the PuTTY Reconfiguration window. Expand theSSHbranch and click onTunnels. On theOptions controlling SSH port forwardingscreen, enter59000as theSource Portandlocalhost:5901as theDestination, like this:
Then click theAddbutton, and then theApplybutton to implement the tunnel.
Once the tunnel is running, use a VNC client to connect tolocalhost:59000. You’ll be prompted to authenticate using the password you set in Step 1.
Once you are connected, you’ll see the default Xfce desktop. It should look something like this:
You can access files in your home directory with the file manager or from the command line, as seen here:
PressCTRL+Cin your local terminal to stop the SSH tunnel and return to your prompt. This will disconnect your VNC session as well.
Now you can configure your VNC server to run as a systemd service.
Step 4 — Running VNC as a System Service
By setting up the VNC server to run as a systemd service you can start, stop, and restart it as needed, like any other service. You can also use systemd’s management commands to ensure that VNC starts when your server boots up.
First, create a new unit file called/etc/systemd/system/vncserver@.service:
sudonano /etc/systemd/system/vncserver@.service
The@symbol at the end of the name will let us pass in an argument you can use in the service configuration. You’ll use this to specify the VNC display port you want to use when you manage the service.
Add the following lines to the file. Be sure to change the value ofUser,Group,WorkingDirectory, and the username in the value ofPIDFILEto match your username: /etc/systemd/system/vncserver@.service ----------------------------------------------------------------------------------- [Unit] Description=Start TightVNC server at startup After=syslog.target network.target
TheExecStartPrecommand stops VNC if it’s already running. TheExecStartcommand starts VNC and sets the color depth to 24-bit color with a resolution of 1280x800. You can modify these startup options as well to meet your needs. Also, note that theExecStartcommand again includes the-localhostoption.
Save and close the file.
Next, make the system aware of the new unit file:
sudo systemctl daemon-reload
Enable the unit file:
sudo systemctl enable vncserver@1.service
The1following the@sign signifies which display number the service should appear over, in this case the default:1as was discussed in Step 2.
Stop the current instance of the VNC server if it’s still running:
vncserver -kill :1
Then start it as you would start any other systemd service:
sudo systemctl start vncserver@1
You can verify that it started with this command:
sudo systemctl status vncserver@1
If it started correctly, the output should look like this:
Then make a new connection using your VNC client software tolocalhost:59000to connect to your server.
Conclusion
You now have a secured VNC server up and running on your Ubuntu 20.04 server. Now you’ll be able to manage your files, software, and settings with a user-friendly graphical interface, and you’ll be able to run graphical software like web browsers remotely.
## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. deb http://kr.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse # deb-src http://kr.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. ## This software is not part of Ubuntu, but is offered by Canonical and the ## respective vendors as a service to Ubuntu users. # deb http://archive.canonical.com/ubuntu focal partner # deb-src http://archive.canonical.com/ubuntu focal partner
# This system was installed using small removable media # (e.g. netinst, live or single CD). The matching "deb cdrom" # entries were disabled at the end of the installation process. # For information about how to configure apt package sources, # see the sources.list(5) manual.
7. Language for menus and windows의 스크롤바를 움직여서 한국어가 정상적으로 설치되었는지 확인하고, 재부팅을 합니다.
<그림7> 한국어 설치 확인
8. Setting -> Region & Language로 이동 후에 1번 화살표가 가리키는 버튼을 클릭하면 Add an Input Source 창이 나오게 됩니다. 여기서 Korean을 선택하고 Add 버튼을 누릅니다. 만약 여기에 Korean이 보이지 않는다면 재부팅을 하지 않았다는 것이므로 재부팅 후에 다시 확인하시면 됩니다.
<그림8> 설치된 한국어 입력기 추가
9. <그림9>의 1번 박스를 선택 후에 Add 버튼을 클릭합니다. Korean이나 Korean (101/104 key compatible)를 선택하면 한영 전환이 안되므로 꼭 Korean (Halgul)을 선택해야 합니다.
<그림9> Add an Input Source
10. <그림10>와 같이 표시되면 정상적으로 한글 입력기가 설치된 것입니다.
<그림10> Input Sources
11. 우측 상단의 영문 표시(EN)을 클릭하고 Korean (Hangul)을 선택하면 한글 입력을 할 수 있습니다. 한/영 전환은 Shift+space를 사용합니다.
<그림11> 한글입력기 선택
12. <그림12>은 기본 설치된 웹 브라우저인 파이어폭스에서 네이버에 접속한 후에 검색창에 한글을 입력한 화면입니다.
<그림12> 웹 브라우저에 한글 입력
한/영 전환키 변경 :
IBusHangul 설정은 <그림11>의 입력기 선택 메뉴에서 Setup을 클릭하면 <그림13>과 같은 창이 나오게 됩니다. <그림13>의 Hangul Toggle Key를 보면 Hangul과 Shift+space가 있습니다. 키보드의 한/영 전환 버튼이나 Shift+space 키 중 하나를 이용해서 한/영 전환을 할 수 있다는 뜻인데, VMware에 설치된 우분투의 문제인지는 몰라도 키보드의 한/영 전환 버튼은 동작하지 않습니다. 만약 Shift+space 외 다른 키를 사용하고 싶다면 Add 버튼을 눌러서 추가할 수 있습니다.
<그림13> IBusHangul Setup
<그림13>의 Add 버튼을 누른 후에 <그림14>와 같은 창이 나오면, 한/영 전환키로 사용할 키를 누릅니다. 키 조합이 정상적으로 인식되면 <그림14>의 빨간색 박스 위치에 해당되는 키 조합이 표시되게 되므로, 정상적으로 인식하는 것을 확인하고 OK 버튼을 누르면 한/영 전환키로 추가되게 됩니다.
CentOS6 이전 버전 설치에 따른 yum 업데이트가 수행이 불가하여, /etc/yum.repos.d/CentOS-Base.repo를 아래와 같이 수행 후에 yum -y update 를 수행하였는데, 원격접속이 되지 않아서, 서버 강제 리부팅을 수행하였는데, Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) 이 나타나면서 부팅이 불가하게 되었다.
CentOS-Base.repo
#
The mirror system uses the connecting IP address of the client and the
update status of each mirror to pick mirrors that are updated to and
geographically close to the client. You should use this for CentOS updates
unless you are manually picking other mirrors.
#
If the mirrorlist= does not work for you, as a fall back you can try the
Linux Rescue mode 로 부팅하기 CD/DVD USB 등의 media 를 넣고 부팅 Boot 화면에서 rescue 선택
3rd party driver 등이 필요할 경우 tab 키를 누르고 kernel parameter 수정 If your system requires a third-party driver provided on a driver disc to boot, load the driver with the additional option dd: linux rescue dd
언어 선택 (Korean 이 있으나 Text 모드이므로 선택이 불가하므로 English 를 선택)
KeyBoard Type 선택 Rescue Method 선택(DVD 부팅이므로 기본 Local CD/DVD 선택)
Network 이 필요할 경우 Network 설정 Rescue mode 선택. Local 에 설치된 linux 를 찾아서 /mnt/sysimage 에 마운트하며 시스템을 복구하려면 Read-Write로 마운트해야 한다. Continue 선택.
rescue manager 에는 다음과 같이 3개의 메뉴가 표시됨. shell을 선택하면 shell prompt 가 기동되어 복구 작업을 할 수 있음.
복구 복구할 리눅스 시스템의 루트 암호를 변경하거나 패키지를 설치하는등의 복구 작업을 할 경우 해당 파티션이 root로 마운트 되어야 작업이 가능하므로 다음 chroot 명령어로 루트 파티션을 변경.
chroot /mnt/sysimage
chroot 를 수행했으면 yum 이나 passwd 등 시스템 변경은 복구 대상 시스템을 대상으로 이루어짐.
# # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # #KeepAlive On KeepAlive Off
# # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # #MaxKeepAliveRequests 100 MaxKeepAliveRequests 0
# # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 5
1. 개요 apache 의 keep alive 옵션을 on으로 하면 클라이언트와 apache 간의 tcp 커넥션을 keepalivetimeout 동안 유지하게 된다. keep alive timeout 설정과 관련하여 고려할 사항들을 정리하였음.
2. 정의 KeepAliveTimeout Amount of time the server will wait for subsequent requests on a persistent connection
3. 고려사항 1) 사용자의 요청량 및 사용자수 - 인터넷망에서 일반 사용자를 대상으로 접속자 수가 많고 요청량이 많은 웹서비스를 제공 경우, keep alivetime을 짧게 가져가는 것이 적절하다. (3초~5초) - 60초등과 같이 길게 가져갈경우에는 불필요한 tcp 세션을 유지하게 되고 웹서버의 메모리 사용량이 높아지게 되어 피크시간대에 갑자기 서비스가 안되는 등의 현상이 발생할 수 있다. - 폐쇄망에서 내부 사용자를 대상으로 접속자수가 적고, 요청량이 적은 웹서비스를 제공하는 경우, keepalivetimeout 시간을 30초~60초 길게 잡는 것이 성능상 유리하다. 2) 사용자의 요청간의 간격(think time) - 사용자가 한번 요청을 보내고, 다음번 요청을 보내는 간격을 think time이라고 한다. 이 think time과 keep alive time은 어느정도의 갭이 있어야 한다. 실제 사이트에서 클라이언트 로그상으로는 웹서버로 요청을 보냈는데, 웹서버에는 요청 받은 로그가 없으며, 사용자 요청을 처리하지 못하는 문제가 1주 또는 2주간격으로 불규칙적으로 발생을 하는 경우가 있었다. 원인은 keepalivetimeout 시간이 15초로 되어 있었는데, 사용자가 해당 화면에서 약 15초 정도 생각하고 요청을 보냈기 때문이었다. 클라이언트 요청 패킷이 보내질때, 웹서버에서는 커넥션을 끊는 Fin 패킷이 보내지면서, 요청패킷이 웹서버로 전달이 되지 않고, 웹서버에 로그도 남지 않았던 것이다. 이후 keepalivetime을 길게 조정하여 문제를 해결하였다.
PHP에서 OpenSSL을 이용하여 프로그래밍을 하고 싶지만, PHP 컴파일시 OpenSSL 기능을 disable 시킨 경우, OpenSSL 기능 사용을 재 컴파일이 아닌 모듈로 설치해보자!
시스템 설치 소프트웨어
OS : CentOS 6.0 x86_64(2.6.32-71)
아파치 : apache-2.2.21
PHP : php-5.3.8
고객사의 요청으로 PHP 재컴파일이 아닌 기존 운영되고 있는 서비스에 간단히 OpenSSL 기능을 설치해서 이용하고 싶다고 하여, 확장 모듈 설치 방법을 통해 해결 하였다.
PHP에 포함되어 있는 phpize 명령은 PHP 확장모듈을 위한 빌드환경을 만들기 위해 사용한다. OpenSSL의 확장모듈의 소스는 PHP 소스버전의 {PHP 소스디렉토리}/ext/openssl 이름의 디렉터리 안에 있다.
OpenSSL 확장 모듈 소스에는 phpize를 통해 빌드환경을 만들기 위한 config.m4 매크로 파일이 존재한다. OpenSSL은 이유가 무엇인지 모르지만 config0.m4로 되어 있어 이걸 config.m4로 파일명을 변경한 후에 설치 하면 된다.(config0.m4로 되어 있는 정확한 이유를 아시는 분은 알려주세요.)
OpenSSL 모듈 컴파일 및 설치
$ cd ext/openssl
$ mv config0.m4 config.m4 $ phpize $ ./configure $ make # make install
make install를 이용하여 설치가 완료 되면 modulename.so 파일 형태로 설치가 된다.
설치를 통해 생성된 so 모듈 파일을 php.ini의 환경설정 파일에서 extension 지시자를 통해 로드 하여 이용하면 된다.
설치 완료 후 테스트
설치가 완료 되었다면 아파치를 재시작 하기 보다는 리눅스 shell상에서 php 인터프리터를 이용하여 openssl enable 상태를 확인 할 수가 있다.
php -r "echo phpinfo();" | grep -i openssl
출력내용
OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.0.0-fips 29 Mar 2010 OpenSSL Header Version => OpenSSL 1.0.0-fips 29 Mar 2010 OpenSSL support => enabled
이상으로 PHP의 확장 모듈 설치 방법에 대해 알아 보았다. 기본적으로 설치 소스상에 포함되지 않는 확장 모듈 소스는 PECL 저장소를 통해 이용할 수 있으니 참고하기 바란다.