우분투(ubuntu)에서 타임존 변경하기

우분투에서 현재 시간 및 날짜 확인하기

  • 명령어에 date라고 입력하면 됩니다.
$ date

우분투에서 Timezone 변경하기 #1

타임존(Timezone) 선택

아래에 나오는 /usr/share/zoneinfo/ 에 보면 대륙과 대륙에 해당하는 국가들이 나와 있습니다.
원하시는 국가를 선택해서 경로를 기억합니다.

타임존(Timezone) 변경

아래는 Asia/Seoul 로 변경하는 예제입니다.

$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

우분투에서 Timezone 변경하기 #2

tzselect

다음과 같이 tzselect 명령어를 통해서 CUI를 통해 세팅이 가능합니다.

$ tzselect

시놀로지 역방향 프록시로 PhotoStation 사용하는 법

SSH 접속이 필수입니다. SSH 사용및 접속할수 있다는 가정하에 설명합니다.

1. 패키지 센터에서 Photo Station을 설치합니다.

2. SSH에 접속해 Root 권한을 가져옵니다.

$ sudo -i 
 password: ***** 
 root# _ 

3. 아래 디렉토리로 이동

 root# cd /usr/syno/etc/www/app.d 

4. 아래 내용을 복사해 파일 2개를 생성.

root# vi PhotoStation.json 
{
   "application": "Photo Station",
   "id": "SYNO.SDS.PhotoStation.Instance",
   "alias": "photo",
   "fqdn": "photo.example.com",
   "https": {
       "hsts": false,
       "http2": false
   },
   "alternatePort": {
     "http": 9130,
     "https": 9131
   },
   "injectable": false,
   "index": "index.php",
   "root": "/var/packages/PhotoStation/target",
   "version": 2
}

root# vi PhotoStation.mustache 
{{#server}}
   location = /index.php {
      return 302 /;
   }
   location / {
      rewrite ^/$ /photo/index.php last;
      rewrite ^/~([^\/]+)$ /photo/index.php last;
      rewrite ^/blog/(.+)$ /blog/$1 last;
      rewrite ^/(.+)$ /photo/$1 last;
   }
   {{> /var/packages/PhotoStation/target/etc/SYNO.SDS.PhotoStation/www.PhotoStation.conf}}
{{/server}}

5. 제어판 -> 응용 프로그램 포털에 들어갑니다.

설정에 없던 Photo Station 항목이 새로 생겼습니다.

6. Photo Station 설정

7. 접속해봅니다. 화면이 잘 뜨면 OK

https://photo.mydomain.com
https://photo.mydomain.com/photo
https://photo.mydomain.com/~userid
https://photo.mydomain.com/~userid/photo 

포토스테이션은 뒤에 무조건 /photo가 붙는데, 상기처럼 그것도 떼고 쓸 수 있게 됩니다.

8. 포토스테이션을 완전 삭제할 때는 역순으로 삭제해주세요.

root# cd /usr/syno/etc/www/app.d 
root# rm PhotoStation.json 
root# rm PhotoStation.mustache 

그리고 NAS를 재시작해주세요.

9. 주의사항

SSH에서 ROOT권한으로 작업하니 주의하면서 명령어 입력해주세요.

다른 파일 삭제하면 재설치해야할수도 있습니다.

MakeFile 만드는법

컴파일 예제

파일 개요

a.c (a.h), b.c (b.h), main.c 파일 생성

파일 코드 내용

a.c, a.h, b.c, b.h, main.c 파일 내용은 아래와 같다.

// a.c
#include 

void foo()
{
    printf("foo\n");
}
// a.h
void foo();
// b.c
#include 

void bar()
{
    printf("bar\n");
}
// b.h
void bar();
// main.c
#include "a.h"
#include "b.h"

int main()
{
    foo();
    bar();

    return 0;
}

컴파일 하기

object 파일 생성

$ gcc -c -o a.o a.c
$ gcc -c -o b.o b.c
$ gcc -c -o main.o main.c

→ -c 는 컴파일, 어셈블 수행, -o 는 파일명을 정하는 옵션임

Makefile 만들기

Makefile 구조

Makefile 은 목표(Target), 의존 관계(Dependency), 명령(command)의 세가지로 이뤄짐

target ... : dependency ...
(tab)command1
(tab)command2

Makefile 작성

exefile : a.o b.o main.o
    gcc -o exefile a.o b.o main.o

a.o : a.c
    gcc -c -o a.o a.c

b.o : b.c
    gcc -c -o b.o b.c

main.o : main.c
    gcc -c -o main.o main.c

clean:
    rm *.o exefile

→ vi Makefile 후 위 내용을 입력

Makefile 실행

$ ls
a.c  a.h  b.c  b.h  main.c  Makefile
$ make
gcc -c -o a.o a.c
gcc -c -o b.o b.c
gcc -c -o main.o main.c
gcc -o exefile a.o b.o main.o
$ ls
a.c  a.h  a.o  b.c  b.h  b.o  exefile  main.c  main.o  Makefile

→ 실행 파일인 exefile 이 make 명령을 통해 새로 생성된 것을 알 수 있다.

실행

$ ./exefile
foo
bar

make clean

$ make clean
rm *.o exefile
$ ls
a.c  a.h  b.c  b.h  main.c  Makefile

→ make clean 명령으로 확장자가 o 인 파일과 exefile 이 삭제된 것을 확인 할 수 있다.

Makefile 간단히 만들기

CC=gcc
TARGET=exefile
OBJECT=a.o b.o main.o

$(TARGET) : $(OBJECT)
    $(CC) -o $(TARGET) a.o b.o main.o

a.o : a.c
    $(CC) -c -o a.o a.c

b.o : b.c
    $(CC) -c -o b.o b.c

main.o : main.c
    $(CC) -c -o main.o main.c

clean:
    rm $(OBJECT) $(TARGET)

윈도우 작업표시줄 아이콘 깨짐현상

윈도우를 사용하다 갑자기 특정 프로그램의 아이콘이 깨져서 보인다.

프로그램 사용상에 그리 불편함은 없으니 아이콘이 없으니 어떤게 어떤 프로그램인지 햇갈린다.

아래 첨부파일을 실행시키면 해결된다.

“아이콘깨짐복구.cmd”

@echo off
taskkill /f /im explorer.exe
attrib "%userprofile%\appdata\local\iconcache.db" -s -r -h
del /q "%userprofile%\appdata\local\iconcache.db"
start explorer.exe
exit

Let’s Encyrpt는 어떻게 SSL인증서를 발급해줄까?

이 글을 읽기 전에 여기를 방문하여 SSL과 CA가 무엇인지에 대해 쉽고 간략한 설명을 먼저 읽어 보시면 큰 도움이 됩니다.

Let’s Encrypt와 ACME 프로토콜은 사람의 개입없이 브라우저 신뢰 인증서를 자동으로 발급하고 HTTPS 서버 설정을 가능하도록 만드는데 목적이 있습니다. 이건 웹서버에서 도는 인증서 관리 에이전트(Certificate management agent)가 있기 때문에 가능한 것이지요.

이 기술이 어떻게 가능한지 이해하기 위해, Let’s Encrypt에서 제공하는 인증서 관리 에이전트를 이용해 https://example.com/ 의 설정 과정을 함께 살펴보기로 하죠.

이 과정을 두 단계로 설명할 수 있습니다.

  • 1단계: 인증 – 에이전트가 CA 에게 도메인이 온전히 웹서버의 통제 하에 있는 것을 증명하는 것
  • 2단계: 발급 – 에이전트가 도메인에 대한 인증서를 요청, 갱신, 폐기하는 것

도메인 검증

Let’s Encrypt는 공개 키로 서버 관리자를 식별합니다. 최초 에이전트 소프트웨어는 Let’s Encyrpt와 통신하여 새로운 키 쌍을 생성하고, Let’s Encrypt CA에게 서버가 하나 또는 그 이상의 도메인의 통제권을 가지고 있는 것을 증명합니다. 이 과정은 지금까지 SSL인증서를 발급을 위해 계정을 생성하고 거기에 도메인을 추가하는 등 CA들이 했던 전통적인 과정과 흡사합니다.

인증서 발급을 위해 에이전트는 Let’s Encrypt CA에게 example.com 도메인이 서버의 통제 하에 있는지 증명하기 위해 필요한 것들을 요청합니다. 그러면 Let’s Encrypt CA는 요청한 도메인을 검증하기 위해 하나 또는 그 이상의 첼린지 셋트를 발급합니다. “너 진짜야? 그럼 내가 퀴즈 낼테니 맞춰봐” 하는 것처럼 요청한 도메인을 테스트하여 검증하려는 것이죠. 이렇게 검증하는 방법을 여기서는 첼린지라고 부릅니다. 이 때 에이전트는 아래 2가지 방법 중 하나를 선택할 수 있습니다.

이런 첼린지와 함께, Let’s Encrypt CA는 에이전트가 키 쌍을 제어할 수 있다는 것을 증명하기 위해 개인 키 쌍으로 서명되길 원하는 임시 파일을 제공합니다. 아래 그림을 한번 보세요.

에이전트가 Let’s Encrypt CA로 부터 요구받은 첼리지를 완료합니다. 두 번째 탐색 방법을 완료할 수 있다고 가정해보겠습니다. 우선 https://example.com 사이트의 특정 경로에 파일 하나를 만듭니다. 에이전트는 제공된 서명용 임시 파일을 개인 키를 이용해 서명합니다. 이 과정을 에이전트가 완료하면 CA에게 검증이 완료되었다고 알립니다.

CA는 이제 첼린지가 성공했는지 체크하고 제공된 임시 파일의 서명을 확인합니다. 그리고 웹서버로 부터 파일을 다운로드하여 제대로 내용이 작성되었는지 점검합니다.

서명이 유효하고 첼린지까지 성공했음을 확인하면, 공개 키로 식별된 에이전트는 example.com의 인증서 관리를 허가받게 됩니다. 이 때 example.com의 키 쌍을 “허가된 키 쌍(authorized key pair)”이라고 부릅니다.


인증서 발급과 폐지

에이전트가 인증된 키 쌍을 가지게 되면 요청, 갱신, 폐지하는 것은 간단한 과정입니다. 인증된 키 쌍을 가지고 메시지에 서명에서 전송하면 끝이죠.

도메인의 인증서를 얻기 위해 에이전트는 Let’s Encrypt에게 지정된 공개키로 example.com 도메인의 인증서 발급 요청을 요구하는 ‘인증서 서명 요구(Certificate Signing Request)’를 만듭니다. 이걸 CSR이라고 부를께요. CSR은 보통 CSR의 공개 키에 해당하는 개인 키의 서명이 포함됩니다. 에이전트는 Let’s Encrypt CA에게 허가 여부를 알리기 위해 example.com의 허가된 키로 전체 CSR에 서명합니다.

Let’s Encrypt CA가 요청을 받게 되면, 양쪽 서명을 모두 확인합니다. 문제가 없으면 CSR의 공개키로 exmaple.com의 인증서를 발급하고 에이전트에게 리턴합니다.

인증서 폐기도 비슷합니다. 에이전트는 example.com의 허가된 키로 인증서 폐기 요청을 하고, Let’s Encrypt CA는 요청이 허가된 것이지 여부를 확인합니다. 맞다면, OCSP와 같은 일반 폐기 채널을 통해 폐기를 진행합니다. 이렇게 하면 브라우저와 같이 신뢰할 수 있는 당사자가 폐기된 인증서를 받아들이면 안된다는 것을 알 수 있게 됩니다.

이 글은 Let’s Encrypt의 How It Works라는 글을 번역한 것입니다.