Category: Linux

  • WebDAV

    https://zetawiki.com/wiki/%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%95%84%ED%8C%8C%EC%B9%98_WebDAV_%EC%84%A4%EC%A0%95

    우연히 WebDAV이 ‘웹 기반의 읽고 쓰는’이라는 구절을 보았다. 혹시나 싶어서 Apache에서 우선 WebDAV이 가능하도록 하였더니 curl 에서 파일이 업로드 된다. 보안 설정을 확인해 보아야 하겠지만, 클라이언트가 통제가 안된다면 차라리 SCP가 좋을 것 같다.

  • 리버스 프록시를 위한 NGINX 구성 – 작성중

    인터넷에도 정보는 많지만, 그래도 신뢰할 수 있는 정보인 책(NGINX HTTP SERVER)을 참고하였다.

    • ssl on; 보다는 listen 443 ssl; 을 이용한다.
    • TLS 버젼: 다음과 네이버는 TLS v1.2가 기본이다. SCI-HUB와 PubMed는 TLS v1.3을 이용한다. v1.2도 충분히 안전하다고는 한다.
    • 암호화 방식: 선택할 수 있는 옵션은 많다. openssl ciphers 명령어를 통하여 사용할 수 있는 목록을 확인할 수 있다. 확실하지는 않은데, 공개키 암호 방식의 대표주자인 RSA가 있는 것 1개와 대칭 열쇠 암호와 관련된 것이 포함되어야 하는 것 같다.
    • allow와 deny: 위에서 아래 순서대로 적용된다. 먼저 언급된 것이 더 큰 범위라면 아래쪽의 범위는 무시된다.
    server {
            listen 443 ssl;
            ssl_certificate test.crt;
            ssl_certificate_key test.key;
            ssl_protocols TLSv1.3;
            ssl_prefer_server_ciphers on;
            ssl_ciphers "TLS-AES-128-GCM-SHA256:ECDHE-RSA-AES128-SHA256";
            location / {
                    allow 190.70.0.0/0;
                    deny all;
                    proxy_pass http://127.0.0.1:3000;
            }
    }
    
  • RESTful API를 이용하여 PostgreSQL 자료 입력

    psycopg2 를 이용하면 편하게 PostgreSQL에 접근하여 자료를 다룰 수 있다. 편하게 이용할 수 있는 방법인 반면에 DB 접속 권한이 노출된다는 단점이 있다.

    따라서, PostgreSQL이 설치된 서버에 RESTful API를 이용하여 자료를 전달하도록 한다. 보안 접속은 차차 구현해 보기로 하고, 기본형으로 시작한다.

    찾아보면 더 좋은게 있을지도 모르겠다. 최근까지 업데이트 흔적이 있고, 스폰서가 있는 PostgREST를 이용해 보기로 했다. 예제는 다음을 참고했다.

    https://postgrest.org/en/stable/tutorials/tut0.html

    설치 파일을 다운 받는다.

    https://github.com/PostgREST/postgrest/releases/tag/v7.0.1

    tar.xz 파일이 이상하게도 압축이 안풀려서 Windows에서 풀어서 설치 파일을 복사해서 사용했다. 환경 설정 파일 없이 실행하면 친절하게 최소한의 옵션에 따라서 환경 설정 파일을 만들라고 한다. 사용자 계정, 계정의 비밀번호, DB 이름, 스키마 이름, role을 지정한다.

    $ nano tutorial.conf
    db-uri = "postgres://user:pass@localhost:5432/dbname"
    db-schema = "public" 
    db-anon-role = "postgres"

    작성 후 실행한다. 적절하게 만들어졌다면 다음과 같이 실행된다. 기본적으로 3000 포트를 이용한다.

    $ ./postgrest tutorial.conf
    Attempting to connect to the database...
    Listening on port 3000
    Connection successful

    curl을 이용해서 테이블을 조회하여 본다. tablename이라는 테이블 내용을 조회하고 싶다면 다음과 같이 실행한다.

    $ curl http://server:3000/tablename

    JSON 포맷으로 tablename 테이블에 자료를 입력(POST)하고 싶다면 다음과 같이 입력한다.

    $ curl http://server:3000/tablename -X POST \
    -H "Content-Type: application/json" \
    -d '{"source_id": "200",
         "person_id": "15258756"}'

    테이블 이름이 tablename이고, col1의 값이 1234인 열의 자료를 조회하고 싶다면 다음과 같이 한다. 연산자는 다음의 링크를 참조한다.

    https://postgrest.org/en/v7.0.0/api.html

    $ curl http://server:3000/tablename?col1=eq.1234

    파이썬에서는 다음과 같이 한다. requests를 이용한다. POST는 다음과 같이 하면 된다.

    >>> import requests
    >>> requests.post('http://server:3000/tablename ', data={'col1': '1234'})

    GET을 하는 방법은 2가지 방법이 있는 것 같은데 일단은 curl을 시도한 것과 유사한 형식으로 하면 된다. JSON 포맷으로 받으려면 다음과 같이 한다.

    >>> tmp = requests.get('http://server:3000/tablename?col1=eq.1234').json()
    >>> tmp[0]['col1'] 
  • USB 메모리 마운트

    왠만한 GUI 가 지원되는 Linux에서는 USB가 자동으로 마운트된다. 안되는 경우에는 직접 마운트시키면 된다. 보통 USB 메모리는 exFAT으로 포맷되어 있는 경우가 많이 있다. exFAT을 리눅스에서 사용하기 위해서는 exfat-fuse, exfat-utils를 설치한다. 그 이후에 마운트하면 된다.