BLOGTIMES
«Prev || ... 371 · 372 · 373 · 374 · 375 · 376 · 377 · 378 · 379 ·... | | Next»
2018/04/27

Twitter のアカウントが乗っ取られたときの対処法

twitter  reference  intrusion 

たまに Twitter のアカウントが乗っ取られてレイバン spam などを振りまいてしまっている人を目にしますが、実際に自分がアカウント乗っ取りにあった場合、突然の事態でどうしたらよいか分からないもの。そんなときに役立つ対処法を McAfee が公開していました。

基本的にはパスワードを変更し、連携アプリを削除するだけで終了なのですが、そのあたりを含めた対処法や、自分のアカウントのツイート履歴の確認方法など必要が事柄が網羅されており、緊急時のマニュアルとしては役に立ちそうです。

Twitter乗っ取り被害にあったときの確認方法・解除法の全手順と予防策

知り合いから突然、「SNSが乗っ取られてるよ」と指摘された。あるいは、知人がSNSでいきなり広告をくり返し書き込むようになった。こんなことはありませんか?最近、SNSの乗っ取り被害が増えています。ただし、SNSのIDとパスワードを盗まれて乗っ取られるというケースは少なく、実際には「連携アプリ」が原因のケースがほとんどです。ここでは、Twitterでの乗っ取り被害と確認方法、その予防策について紹介します。


    at 23:23 |
    2018/04/27

    POSIX Message Queue を Python から使う

    posix  python 

    昨日は C 言語から POSIX Message Queue にアクセスしましたが、今日は その続きで Python からアクセスしてみます。

    posix_ipc のインストール]

    今日はライブラリとして posix_ipc を使うので、pip を使ってインストールしておきます。

    pip install posix_ipc

    API のリファレンスについては以下から参照できます。

    サンプルプログラム

    先日の C 言語版とほぼ同等の Python スクリプトはこんな感じでしょうか。
    スクリプト言語なので、C 言語よりすっきりと書くことができますね。

    ちなみにこれらのプログラムは昨日の C 言語とも相互接続ができます

    qsend.py

    #!/usr/bin/env python # -*- coding: utf-8 -*- import posix_ipc as ipc from time import sleep mq = ipc.MessageQueue('/testq', ipc.O_CREAT, 0666, 10, 1024, False, True) cnt = 0 while True: print(cnt) mes = mq.send(str(cnt)) sleep(1) cnt+=1

    qrecv.py

    #!/usr/bin/env python # -*- coding: utf-8 -*- import posix_ipc as ipc mq = ipc.MessageQueue('/testq', ipc.O_CREAT, 0666, 10, 1024, True, False) while True: mes = mq.receive() print(mes[0])

      at 22:11 |
      2018/04/26

      POSIX Message Queue を使ってプロセス間通信をする

      c  posix 

      C 言語から簡単に使える MQ がないかと思って調べてみたら、POSIX Message Queue が恐ろしく便利だったのでメモ。

      動作については Java のBlockingQueueをプロセスを跨いで使えるようなイメージです。

      サンプルプログラム

      今回のプログラムは送信側 qsend と受信側 qrecv の2つに分かれています。

      qsend は 0, 1, 2・・・ というように文字表示しながら、その文字を /testq という Queue に書き込み続けるプログラムになっています。
      対になる qrecv は /testq という Queue から文字を取り出して表示を行います。

      今回は Queue のサイズを 10 に設定しているので、溜まっているメッセージの数が 10 個になると qsend は mq_send() 部分でブロックし、Queue が空くのを待ちます。qrecv は溜まっているメッセージの数が 0 個になると、mq_receive() 部分でブロックし、新しいメッセージの到着を待ちます。

      一見、機能はパイプと大差ない感じに見えるかもしれませんが、このプログラムはどちらから起動しても大丈夫です。
      また、qsend, qrecv 共に複数個起動しても問題なく動作します。

      qsend.c

      #include <mqueue.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #define QNAME "/testq" int main(){ int cnt = 0; int ret; char str[100]; char *buff; mqd_t q; struct mq_attr attr; attr.mq_flags = 0; attr.mq_maxmsg = 10; attr.mq_msgsize = 1024; attr.mq_curmsgs = 0; mode_t omask; omask = umask(0); q = mq_open(QNAME, (O_WRONLY | O_CREAT), 0777, &attr); umask(omask); if ( q == -1 ){ printf("[ERROR]%d: %s\n", errno, strerror(errno)); return 1; } while(1){ sprintf(str ,"%d", cnt++); buff = (char *)calloc(strlen(str) + 1, sizeof(char)); strcpy( buff, str ); printf("%s\n", buff); ret = mq_send( q, buff , strlen(buff) , 0); if ( ret == -1 ) { printf("[ERROR]%d: %s\n", errno, strerror(errno)); return 1; } free(buff); sleep(1); } }

      qrecv.c

      #include <mqueue.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #define QNAME "/testq" int main(){ mqd_t q; struct mq_attr attr; char *buff; ssize_t n; int i; q = mq_open(QNAME, O_RDONLY); if ( q == -1 ){ printf("[ERROR]%d: %s\n", errno, strerror(errno)); return 1; } while(1){ mq_getattr( q ,&attr ); buff = (char *)malloc(attr.mq_msgsize); n = mq_receive( q, buff, attr.mq_msgsize, NULL); if ( n == -1 ) { printf("[ERROR]%d: %s\n", errno, strerror(errno)); return 1; } for (i = 0; i < n; i++) putchar(buff[i]); putchar('\n'); fflush(stdout); free(buff); } }

      コンパイルと実行

      以下のオプションでコンパイルし、./qsend と ./qrecv を好きなだけ起動すれば動作がわかります。

      gcc qrecv.c -lrt -o qrecv gcc qsend.c -lrt -o qsend
      [POSIX Message Queue を使ってプロセス間通信をする の続きを読む]

        at 22:22 |
        2018/04/26

        pgAdmin 4 に移行してみた

        postgresql 
        pgAdmin4 v3 - pgAdmin 4 に移行してみた

        PostgreSQL 用のクライアントソフトである pgAdmin を pgAdmin 3 から pgAdmin 4 に切り替えてみました。

        pgAdmin 4 は pgAdmin 3 までネイティブアプリ路線を捨て、ウェブベースのアプリ作り替えられたため、リリース当初は完成度が恐ろしく低く、「こんなもの使えない」という声が圧倒的でした。それから1年以上経って最近はやっと使えるレベルになっているようです。

        pgAdmin - PostgreSQL Tools

        pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.

        設定を変えると phpMyAdmin のように他の PC からも接続できるようなので、こちらも後で試してみたいと思います。


          at 20:18 |
          2018/04/25

          Python から SystemV IPC 共有メモリを使う

          python  systemv 

          Python から複数プロセスで共有できるメモリが使いたかったので、sysv_ipc.SharedMemory を試してみました。

          まずはセットアップ

          インストールは pip を使うと一撃で完了します。

          pip install sysv_ipc

          サンプルプログラム

          0 と 1 を交互に書き込む処理を書いてみました。
          SHMID は共有メモリを表す ID ですので、他のプログラムと被らない値を設定する必要があります。

          #!/usr/bin/env python # -*- coding: utf-8 -*- import sysv_ipc as ipc SHMID = 128 shm = ipc.SharedMemory(SHMID, ipc.IPC_CREAT, mode=0666, size=1) def toggle(): stat = shm.read() if stat == "1": shm.write("0") print(u"1→0") else: shm.write("1") print(u"0→1") toggle()

          実行例

          $ python toggletest.py 0→1 $ python toggletest.py 1→0 $ python toggletest.py 0→1 $ python toggletest.py 1→0 $ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000080 294915 pi 666 1 0

          制限事項

          あくまでサンプルなので、厳密な排他制御をしていません
          複数プロセスから読み書きする場合には(たぶん)レースコンディションが生じる場合があります

          また、mode を 666 にしてしまっているので、実際に使う場合は適切なパーミッションにする必要があります。


            at 22:22 |

            RPi.GPIO でボタンが押されたことを検出するには

            raspberrypi  python 

            今日はラズパイの定番の処理である、ボタン(スイッチ)による入力を試してみました。
            基本的なやり方については RPi.GPIO に全て載っています。

            今回はブレッドボードを使って GPIO#12 にスイッチをつなぎ、スイッチを押したときに +3.3V がかかるように回路を組んであります。

            以下のプログラムはスイッチを離したとき(GPIO.FALLING)に、コールバック関数(switch_callback())が呼ばれるようになっています。
            bouncetime=300 の部分はチャタリングを防止するために、300ms はボタン入力に反応しないようにする指定です。

            このプログラムはポーリングしないので、CPU の負荷は小さいです。

            btnwatcher.py

            #!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time GPIO_BTN=12 def btn_callback(gpio_no): print(gpio_no) GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_BTN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.add_event_detect(GPIO_BTN, GPIO.FALLING, bouncetime=300) GPIO.add_event_callback(GPIO_BTN, btn_callback) try: while True: time.sleep(1) except KeyboardInterrupt: GPIO.cleanup()

              at 22:08 |
              2018/04/24

              JIS Z 9103 が改定され、安全標識の色がユニバーサルデザインに

              accessibility  standardization  meti 

              安全色及び安全標識に関する JIS Z 9103 が改正され、警告表示等に使われるアイコンの色がユニバーサルデザインになったことがニュースになっていたのでメモ。

              日本工業規格(JIS)を制定・改正しました(平成30年4月分)~安全色及び安全標識などのJISを改正~(METI/経済産業省)

              安全標識は、遠くからでも容易に「禁止」、「安全」などの指示内容が一目で認識できなければなりませんが、その認識性はデザインと色使いに左右されます。対応する国際標準との整合を保ちつつ、多様な色覚を持つ人々の安全標識に対する認識性を向上させるため、色の組み合わせに対する認識性調査により選定した色(ユニバーサルデザインカラー)」を採り入れたJIS Z 9103(図記号-安全色及び安全標識-安全色の色度座標の範囲及び測定方法)の改正を行いました。

              健常者にとっては色の変更は経年劣化程度にしか感じませんが、この少しの差がユニバーサルデザインにとっては重要なのだということがよく分かりますね。

              参考


                at 19:11 |

                Cloudflare を使って Let's Encrypt からワイルドカード証明書取得する

                dns  letsencrypt  ssl  cloudflare  tutorial 

                先月からLet's Encrypt がワイルドカード証明書の発行を開始しているので、重い腰を上げて取得&自動更新を組んでみました。

                今回はサーバは CentOS 7 環境、DNS は Cloudflare であると仮定します。

                Cloudflare の API キーを取得しておく

                Let's Encrypt でワイルドカード証明書を取得する場合には認証方法は DNS-01 を使う必要があり、更新などを自動的に行うためには API 等で動的に変更ができる DNS サーバが必要になります。AWS の Route 53 などでもできると思いますが、今回は Cloudflare を利用しました。

                My Profile を開き、Global API Key のところにある View ボタンを押して API キーを取得しておきます。
                Your API Key - Cloudflare を使って Let's Encrypt からワイルドカード証明書取得する

                必要なソフトウェアのインストール

                epel が有効になっていれば、作業に必要となる certbotpython2-certbot-dns-cloudflare は yum でインストールできます。

                yum -y install certbot python2-certbot-dns-cloudflare

                証明書の取得

                以下のスクリプトで証明書が取得できるはずです。
                証明書は /etc/letsencrypt/live にあるので、必要なものを使ってください。

                BASEDIR=/opt/cloudflare DOMAIN=example.com MADDR=user@example.com APIKEY=0000000000000000000000000000000000000 mkdir -p $BASEDIR chmod 700 $BASEDIR cat <<EOS > $BASEDIR/credentials.ini dns_cloudflare_email = $MADDR dns_cloudflare_api_key = $APIKEY EOS chmod 600 $BASEDIR/credentials.ini certbot certonly \ -m $MADDR \ --agree-tos \ --non-interactive \ --dns-cloudflare \ --dns-cloudflare-credentials $BASEDIR/credentials.ini \ --dns-cloudflare-propagation-seconds 30 \ --server https://acme-v02.api.letsencrypt.org/directory \ -d $DOMAIN \ -d *.$DOMAIN

                証明書がうまく取得できていれば、Cloudflare の Account Settings にあるAudit Log に以下のような TXT レコードを追加して、それを削除したようなログが残っているはずです。
                Audit Log - Cloudflare を使って Let's Encrypt からワイルドカード証明書取得する

                証明書の更新

                以下のようなシンプルなコマンドで証明書は更新できます。
                これは初回の取得時に config ファイルが生成されているためです。

                certbot renew

                cron 等に仕込んで1日1回実行されるようにしておくと良いと思います。


                  at 16:11 |
                  2018/04/23

                  CourierBitmap-ja フォント

                  font 
                  CourierBitmapZS - CourierBitmap-ja フォント

                  フリーで使えるビットマップを含んだ ttf フォントを探していたら CourierBitmap-ja フォントを見つけたのでメモ。

                  Courier なので l と 1 や o と O と 0 などが見分けやすいのがいいですね。
                  特に ZS となっているものについては 0 にスラッシュが入っているので、さらに見分けやすくなっています。


                    at 17:42 |

                    Raspbian を国内のミラーサイトからダウンロード

                    raspberrypi 

                    Raspbian をオフィシャルサイトからダウンロードしようとするとかなり時間がかかります。
                    BitTorrent を使うことができればかなり速くなりますが、仕事場などで P2P が禁止されている場所だとそうもいきません。

                    これが何とかならないかと思っていたら、JAIST にミラーサイトがあることが分かりました。

                    これなら国内サーバなので、あっという間にダウンロードできます。


                      at 12:55 |
                      «Prev || ... 371 · 372 · 373 · 374 · 375 · 376 · 377 · 378 · 379 ·... | | Next»