読者です 読者をやめる 読者になる 読者になる

Firejailのメモ

  • 日本語情報はgihyoの記事とarchwikiとkudohさんのスライドだけ。公式のドキュメントを読めないなら撤退するべき。
  • 公式のドキュメントを読んだ上でmanを読むべき。manを読むほうがツライという珍しいソフトだけど。manのほうが情報量多いよねコレ...。
  • firejail softwarename
  • profileは環境に強く依存。githubにあがってるものには俺環でしか動いてたまるか的なものもある。具体的にはwhitelist=/dev/sdc3。見落とすとヤバイ。->セキュリティソリューションとして使うならプロファイルは自分で確認しよう。
  • firefoxとDiscordはfirejail外で起動してあるとそっち呼んじゃう。(ドキュメントの記述は効果なし?)->なんか対処法無いのかこれ。daemonっぽいプロセスが走り出すとそれ呼んで終わる系。もちろんfirejailの効果なんて微塵もない。
  • gentooでは日本語入力が普通にできたのに、ubuntuでは変換確定前の文字列の表示がおかしく。もちろん俺環のみ(Gentooに関しては当たり前だがUbuntuに関してもあっちこっち手が入ってる)。ほかは知らんしわざわざ細かくインプットメソッドとか環境変数とか調べるのも怠いんでパス。要はうちのメイン環境ではきっちり動いてサブ環境では60点ぐらいの動作してるってだけ。過去に一件だけその手の関係のバグ報告あるから何かあればちゃんと扱ってもらえるよきっと。とりあえず、ちゃんと動くやつとビミョーなやつがあるってことが重要かと。XDM周りの環境変数
  • ネットワーク関連の機能が色々あるからそれ目当てで使うのもありっぽい。dnsとかipとか。
  • ログ吐くには--tracelogが必要。これが最近のバージョンの挙動。
  • profileは~/.confog/firejail/に配置
  • Discordのプロセスから開けてるなフォルダ辿ってwhitelist指定入れてもうまく行かなかったが、~/で指定したら動いた。インストール時(つってもtargz開けただけ)から--private=すれば変わるかしら。
  • keepassの鍵の場所はさっと変更できないからwhitelistにぶち込んだほうが楽。firejailの動き方的には/sbinあたりに混ぜれば触らなくなるがしかし(やめろ
  • nonetworkのオプションは名前からしてとても安心感がある。とても。
  • webのドキュメントは古い。manを読め。infoでも良いが。
  • daemonに対しては使ったことない。まあそのうち気が向いたら。

新しいConoHaにGentooを入れてみる

この記事はConoHa Advent Calendar 2016 - Qiitaの9日目の記事です。
中盤辺りなのでネタ記事をどうぞ(最初と最後にはできないこと)

ConoHaのAPIを使うことでisoを挿入し、isoからOSをインストールすることができます。
この機能を使ってGentoo LinuxというOSを入れてみようと思います。ちなみにGentooの記事ではないので、Gentooがらみの細かいとこは割愛します。

OSを入れ替えるための汎用的な作業

VPSの用意

VPSを用意します。既にあるVPSを使っても良いですが、SSDに載ってるデータが全て消えます。今回は512MBプランを使ってみます。OSは入れ替えるのでどれでも良いです。と、思ってましたがどうやらGPTだったりMBRだったりするので、選択肢によっては最後のほうでコケます。ubuntuを選んでおけば問題ないはずです。

isoの挿入

CLIツールで簡単にISOイメージをマウントする|VPSならConoHa に書いてあるconoha-isoをうことで、すぐにisoを挿入することができました。
isoの挿入対象のVPSがactiveだとエラーになるようなので気をつけてください。
今回使ったisoはhttp://distfiles.gentoo.org/releases/amd64/autobuilds/20161124/install-amd64-minimal-20161124.isoです。

起動とインストール

ConoHaのWeb UIからisoを挿入したVPSを起動し、15秒以内にコンソールを開いて何かキーを押します。起動後15秒以内に何か操作しないとSSDから起動してしまいます。他のOSでもisoを挿入してるはずなのにSSDから起動している時には、同じような機能が働いていることをうたがってみてください。

そしておもむろに以下の塊をコピペして実行していくとgentooがインストールされます。
parted -s -a optimal /dev/vda -- mklabel msdos mkpart primary ext4 1 -1 &&
yes|mkfs.ext4 /dev/vda1 &&
mount /dev/vda1 /mnt/gentoo &&
cd /mnt/gentoo &&
wget http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/20161201/stage3-amd64-20161201.tar.bz2 &&
tar xvjpf stage3-amd64-20161201.tar.bz2 --xattrs &&
cp -L /etc/resolv.conf /mnt/gentoo/etc/ &&
mount -t proc proc /mnt/gentoo/proc &&
mount --rbind /sys /mnt/gentoo/sys &&
mount --make-rslave /mnt/gentoo/sys && 
mount --rbind /dev /mnt/gentoo/dev &&
mount --make-rslave /mnt/gentoo/dev &&
chroot /mnt/gentoo /bin/bash 

source /etc/profile &&
emerge --sync &&
echo "Asia/Tokyo" > /etc/timezone &&
emerge --config sys-libs/timezone-data &&
sed -i -e 's/#ja_JP.UTF-8/ja_JP.UTF-8/g' -e 's/#en_US.UTF-8/en_US.UTF-8/g' /etc/locale.gen &&
locale-gen &&
eselect locale set en_US.utf8 &&
env-update && source /etc/profile && export PS1="(chroot) $PS1" &&
emerge sys-kernel/gentoo-sources

で、多分ここでコケます。
なぜか以下の操作なら通るのでとりあえず、続きとして以下の塊をどうぞ。

rm /usr/src/linux* -r ;\
rm /var/tmp/portage/sys-kernel/* -r ;\
cd /usr/portage/sys-kernel/gentoo-sources/ &&
ebuild gentoo-sources-4.4.26.ebuild clean && 
ebuild gentoo-sources-4.4.26.ebuild fetch &&
ebuild gentoo-sources-4.4.26.ebuild unpack &&
ebuild gentoo-sources-4.4.26.ebuild compile &&
ebuild gentoo-sources-4.4.26.ebuild install &&
ebuild gentoo-sources-4.4.26.ebuild qmerge


cd /usr/src/linux-4.4.26-gentoo &&
make localyesconfig

ここでいろいろ聞かれますが、全部Enterで良いです。

make -j2&&
make install &&
make modules_install &&
sed -i -e 's\/dev/BOOT\#/dev/BOOT\g' -e 's\/dev/ROOT\/dev/vda1\g' -e 's\/dev/SWAP\#/dev/SWAP\g' -e 's\/dev/fd0\#/dev/fd0\g' -e 's/ext3/ext4/g' /etc/fstab &&
sed -i -e 's/localhost/nannka/g' /etc/conf.d/hostname &&
echo 'config_eth0="dhcp"' > /etc/conf.d/net &&
cd /etc/init.d &&
ln -s net.lo net.eth0 &&
rc-update add net.eth0 default &&
rc-update add sshd default &&
emerge sys-boot/grub &&
grub-install /dev/vda &&
grub-mkconfig -o /boot/grub/grub.cfg &&
passwd

最後にrootのpasswordを聞いてくるので何か設定しましょう。
そして再起動して15秒以上放置すればGentooが起動します。rootユーザーでログインしてbashが使えるはずです。
sshサーバーは走っていますが公開鍵認証のみなのでコンソールから公開鍵をコピペするなりギフハフから引っ張ってくると良いかと思います。

感想とか

  • 昔のConoHaにはGentooを入れたことがあったのですが、新しいConoHaに入れたのは初めて、というよりこの記事のために新しいConoHaのアカウントを作りました。メモリ500MBの環境なのでもっと苦労するかと思ったのですがたいしたことはなかったです。kernelのソースの展開周りでコケたのはメモリのせいかと睨んではいますが、逆にいうと怪しいのは一箇所です。
  • 昔のConoHaではisoのアップロードが結構めんどくさかったのですが、コマンドで直接isoを習得させて挿入することができるようになったのはとてもうれしいです。昔のConoHaではwebから秘密鍵ダウンロードしてsftp経由で手元のisoを上げる必要がありました。
  • 上記のスクリプト(?)が1時間程度で終わるので、1coreにしては早いのかなぁ、とおもいました。
  • 公開がぎりぎりの時間になってしまってゴメンナサイ(emerge sys-kernel/gentoo-sourcesでコケたことの解決のために4回ほどインストールし直していたら時間かかっちゃいました)
  • 実は上のスクリプトはテストされてませんので誤字があるかもしれません(泣)。この記事を公開したら新しいVPS建てて投げ込みます。テストしたらやっぱりバグってたので書き換えました

履歴

2016/12/10 00:13に追加 スクリプトの最初の二行を追加。
2016/12/10 00:21に訂正 yesをパイプする必要があるものに追加
2016/12/10 00:22に追加 三行目
2016/12/10 00:41に追加 "パーティションの削除と作成" fdisk使わずに設定ファイルを出力させて編集してって手順でやる方法が合った気もするけどとりあえずfdisk
2016/12/10 00:47に修正 wgetするstage3のアドレスが間違っていた
2016/12/10 02:52 スクリプトの全体的な訂正。赤字の追加、"パーティションの削除と作成"の削除(多分動く)

ufwの設定ファイルの説明

原文はUncomplicatedFirewall - Ubuntu Wikiで。man ufw-frameworkでも出る


/etc/default/ufw: high level configuration, such as default policies, IPv6 support and kernel modules to use
high level設定、defaultのポリシーやIPv6サポートと使うカーネルモジュール

/etc/ufw/before[6].rules: rules in these files are evaluated before any rules added via the ufw command
これらのファイル内のルールはufwコマンドによってルールが追加される前に評価される

/etc/ufw/after[6].rules: rules in these files are evaluated after any rules added via the ufw command
これらのファイル内のルールはufwコマンドによってルールが追加された後にに評価される

/etc/ufw/sysctl.conf: kernel network tunables
カーネルネットワーク設定

/var/lib/ufw/user[6].rules or /lib/ufw/user[6].rules (0.28 and later): rules added via the ufw command (should not normally be edited by hand)
ufwコマンド経由で追加されたルールの(通常は手動で編集するな)

/etc/ufw/ufw.conf: sets whether or not ufw is enabled on boot, and in 9.04 (ufw 0.27) and later, sets the LOGLEVEL
ufwを起動時に有功にするかどうか、またubuntu 9.04(ufw 0.27)以降ではログレベルも

/etc/ufw/after.init: initialization customization script run after ufw is initialized (ufw 0.34 and later)
ufwの初期化後に実行されるinitialization costomizationスクリプト(ufw 0.34より新しい)

/etc/ufw/before.init: initialization customization script run before ufw is initialized (ufw 0.34 and later)
ufwの初期化前に実行されるinitialization costomizationスクリプト(ufw 0.34より新しい)

pptpdを使うためには/default/ufwの最後のほうと/etc/ufw/before.rulesを書き換える必要があるみたい。

情報元としてのインターネット

ただのリンク集



コンピュータ関連

速度早そう
秋葉原(主にショップ)
https://twitter.com/_hito_/lists/%E7%A7%8B%E8%91%89%E5%8E%9F
PC Watch
http://pc.watch.impress.co.jp/
http://akiba-pc.watch.impress.co.jp/
マイナビ
http://news.mynavi.jp/pc/
IT media
http://www.itmedia.co.jp/
@IT
http://www.atmarkit.co.jp/
IT pro
http://itpro.nikkeibp.co.jp
技術評論社
http://gihyo.jp/

蹴茶
http://kettya.com/
北森瓦版
http://northwood.blog60.fc2.com/
いくやの斬鉄日記
http://blog.goo.ne.jp/ikunya
2015年 後藤弘茂のWeekly海外ニュース
http://pc.watch.impress.co.jp/docs/column/kaigai/
Distri Watch
http://distrowatch.com/

Security
Security Focus
http://www.securityfocus.com/
JPCERT コーディネーションセンター
http://www.jpcert.or.jp/
セキュリティホール memo
http://www.st.ryukoku.ac.jp/~kjm/security/memo/
piyolog
http://d.hatena.ne.jp/Kango/
IPA
http://www.ipa.go.jp/security/
@police
http://www.npa.go.jp/cyberpolice/
Scan Net Security
http://scan.netsecurity.ne.jp/

Ubuntu
Ubuntu Weekly Newsletter
https://wiki.ubuntu.com/UbuntuWeeklyNewsletter/
Recipe
http://gihyo.jp/admin/serial/01/ubuntu-recipe/
Topics
http://gihyo.jp/admin/clip/01/ubuntu-topics/
twitter(大体二人で十分)
@_hito_ @ikunya



科学

WIRED.jp
http://wired.jp/?utm_source=wiredvision&utm_medium=news
Science Portal(科学技術振興機構)
http://scienceportal.jst.go.jp/
google news(科学+||+サイエンス+||+science 朝日以外入ってる?未確認)
http://news.google.co.jp/news/section?pz=1&cf=all&q=%E7%A7%91%E5%AD%A6+||+%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9+||+science&ict=ln
朝日(信用しないし使わない)
http://www.asahi.com/tech_science/
参考(幻影随想)http://blackshadow.seesaa.net/article/40395181.html

雑誌(読んだことあるやつ)
日系サイエンス
http://www.nikkei-science.com/
ナショナル塩グラフィック
http://natgeo.nikkeibp.co.jp/
Newton
http://www.newtonpress.co.jp/
nature ダイジェスト
http://www.natureasia.com/ja-jp/ndigest/


paper
Physical Review Letters
http://journals.aps.org/prl/
Scientific American
http://www.scientificamerican.com/




ソース(俺のせいじゃ無いと言い張れる系)

あーかいぶ
arXiv.org
虚構新聞
http://kyoko-np.net/


気象庁
http://www.jma.go.jp/jma/index.html
天分台
http://www.nao.ac.jp/index.html
XバンドMPレーダ
http://www.river.go.jp/xbandradar/
JAXA(何でお前go.jpじゃないんだ独立行政法人っつっても行政だろ...)
http://www.jaxa.jp/

ソースにするな慈悲は無い
ロシアの声
http://(ry

?
http://adsabs.harvard.edu/

読み物
発声練習
http://d.hatena.ne.jp/next49/
okkyの銀河制圧奇譚
https://gist.github.com/fumihito/e47b90c4f4b102d8de18
(http://www.dd.iij4u.or.jp/~okuyamak/Documents/)
セキュリティ講座
http://www.npa.go.jp/cyberpolice/server/elearning/index.html
White Hacker
http://www.whitehackerz.jp/blog/



https://www.reddit.com/

このべん第4回に行ってきました。

ソースの下に追記しました。(12/16,08:00)

このべん第4回「ConoHa VPSとHAProxyでロードバランサーを構築してみよう!」 - ConoHa | Doorkeeper

に行ってきました。当日の資料は以下になります。


このべん第4回 ハンズオン手順 - ConoHa

Wi-Fiにつながりにくかったり、反応が遅いVPSがあったりと多少のトラブルはありましたが、ちゃんとWebサーバーとロードバランサーが構築出来ました。

この勉強会の内容を思いつきでFabricに起こしました。解説とかこのべんのレポートとかも書こうかと思いましたが、思ったよりFabricを書くのに時間がかかってしまったため、ひとまずソースをはるだけにしておきます。 WEBサーバーはうまく行きますが、ロードバランサーがうまく構築できてません。後日修正します。とりあえず寝まする。

from fabric.api import run, cd, env
def webserver_1():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.226']
    env.key = ["~/.ssh/fuga.key"]
def webserver_2():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.227']
    env.key = ["~/.ssh/fuga.key"]
def roodbarance():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.225']
    env.key = ["~/.ssh/fuga.key"]
def yum_update():
    run("yum update")
    
#2-3
def test_eth1_1():
    run("ip link")
#2-4
def set_eth1(server_type):
    with cd("/etc/sysconfig/network-scripts"):
        run("echo 'DEVICE=\"eth1\"' >> ifcfg-eth1")
        run("echo 'BOOTPROTO=\"none\"' >> ifcfg-eth1")
        run("echo 'ONBOOT=\"yes\"' >> ifcfg-eth1")
        run("echo 'TYPE=\"Ethernet\"' >> ifcfg-eth1")
        if server_type=="LB":
            local_ip = "192.168.0.11"
        elif server_type=="WEB1":
            local_ip = "192.168.0.12"
        elif server_type=="WEB2":
            local_ip = "192.168.0.13"
        run("echo 'IPADDR=%s' >> ifcfg-eth1" %local_ip)
        run("echo 'NETMASK=\"255.255.255.0\"' >> ifcfg-eth1")
def restart_network():
    run("service network restart")
def test_eth1_2():
    run("ip addr")
#3-1
def set_httpd():
    run("yum -y install httpd")
def start_httpd():
    run("service httpd start")
#3-2
def set_iptables():
    with cd("/etc/sysconfig/"):
        run("sed -e \"9a -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT\" iptables > iptables2")
        run("mv iptables2 iptables")
def restart_iptables():
    run("service iptables restart")
#3-3
def make_webpage():
    with cd("/var/www/html"):
        run("wget https://gist.githubusercontent.com/ConoHa/fb7c783153a37c7a4882/raw/87ea58fb87f1fc7bb0c096b95fff212d9344a73f/index.php")
        run("rm -f index.html")
#5-1
def install_haproxy():
    run("yum -y install haproxy")
#4-2
def set_haproxy():
    run("yum install haproxy")
    with cd("/etc/haproxy"):
        run("rm -f haproxy.cfg")
        run("wget https://gist.githubusercontent.com/ConoHa/859f26b94cd2204adb0a/raw/6847c7724fd4dc3716b607a86406df8c05664dad/haproxy.cfg")
#4-3
def set_iptables_haproxy():
    with cd("/etc/sysconfig/"):
        run("sed -e \"10a -A INPUT -m state --state NEW -m tcp -p tcp --dport 10080 -j ACCEPT\" iptables > iptables2")
        run("mv iptables2 iptables")
        
#4-4
def start_haproxy():
    run("service haproxy start")
def check_haproxy():
    run("tail -f /var/log/httpd/access_log")
#4-5
def set_haproxy_log():
    with cd("/etc"):
        run("sed -e \'2c\\ModLoad imudp\' rsyslog.conf")
        run("sed -e \'3c\\UDPServerRun 514\' rsyslog.conf")
        run("echo 'local2.* /var/log/haproxy.log' >> rsyslog.conf")
def restart_haproxy():
    run("service rsyslog restart")


def dep_WEB_1():
    webserver_1()
    #test_eth1_1()
    set_eth1("WEB1")
    restart_network()
    test_eth1_2()
    set_httpd()
    start_httpd()
    set_iptables()
    restart_iptables()
    make_webpage()
def dep_WEB_2():
    webserver_2()
    #test_eth1_1()
    set_eth1("WEB2")
    restart_network()
    test_eth1_2()
    set_httpd()
    start_httpd()
    set_iptables()
    restart_iptables()
    make_webpage()
def dep_LB():
    #test_eth1_1()
    roodbarance()
    set_eth1("LB")
    restart_network()
    test_eth1_2()
    install_haproxy()
    set_haproxy()
    set_iptables()
    set_iptables_haproxy()
    start_haproxy()
    check_haproxy()
    set_haproxy_log()
    restart_haproxy()


追記 : 昨日は寝落ち寸前だったので(12/16,08:00)

カレンダーもらえました。(おそらく)新規イラストだー、わーい。
クーポンもらったよーそろそろ5桁だー(白目)。渋谷に足を向けて寝れない。ありがとうございました。

Fabricとは:

デプロイツールシェルスクリプトPythonで管理するようなもの。Pythonが書ければ学習コストはほとんど無い。 冪等性を考えるならcuisineも使う必要があるようだ。Fabricについて詳しく知りたい人はGoogleへ。

Fabricのソース:

ネットに上がっていた資料をそのまま関数にしてる。設定ファイル絡みの挙動が怪しい。構築済みのシステムで走らせるとシステムを破壊できる。新規構築用だし、そもそもFabricの練習として書いた。デプロイツールを使う意味がわからない人はConoHaでこれを走らせてみると分かるのかもしれない。1時間かかったことをするのに1~2分しかかからない。その分書き慣れていないと書くのに倍以上時間がかかるわけだが。
使い方 :
Fabricのインストールはpipやeasy_installから行えるようだがあまり詳しくない。そもそもOSごとに違う。Googleへ。
ソースをコピペしてfabfile.pyとして保存し、冒頭のenv.key =
を適宜書き換え(公開鍵SSH認証の知識が必要かと)、fabfile.pyのあるディレクトリで以下を実行

fab dep_WEB1
fab dep_WEB2
fab dep_LB

fab dep_LBは悲しいかなまだちゃんと動かない。dep_WEBも動かなかったりしたら教えて下さい。
お仕事でこーゆーの書いてる人はサーバの設定ファイルどうやって作ってるんだろう。用意しといてgit cloneなりwgetなりするのだろうか。それともシェル芸するのだろうか。

何故か動作の悪かったサーバについて考えてみる:

何故かSSH鍵が2つ目
SSHの処理に時間がかかる
Pingの返答が10msほどほかより遅い
一旦SSHに入れればある程度ちゃんと動く
メモリ使用料が妙に多い。
serviceのstart,restartが遅い
起動してからSSHサーバーがまともに動いて、ログインが完了するまでに3分もかかる(バルス)
Fabric走らせると5分はかかる
OSを入れ直しても(テンプレのCentOS)状況変わらず
真夜中でも状況変わらず

Ubuntuオフラインミーティングで、ちゃんと設計されたOpenStackはこの世に存在するのか、と疑問が投げかけられていた。

結論:よくわからない。基幹が壊れてるのか、Dosが発生してるのか。
とりあえず今後警戒する。
もう少し調べてConoHa送りつけとく。