- 投稿日:2019-02-27T23:46:47+09:00
Python3でナノ秒の計測をする方法
コード
Pytho処理時間をナノ秒で計測する方法です。
python3.7で追加された、time.clock_gettime_ns()を利用することで実現しています。1#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import time def main(): start = time.clock_gettime_ns(time.CLOCK_MONOTONIC) <処理内容を記載> end = time.clock_gettime_ns(time.CLOCK_MONOTONIC) print('time: {}'.format(end - start)) if __name__ == "__main__": sys.exit(main())
- 結果の単位は、ナノ秒(10^-9)"です。
- time.CLOCK_MONOTONIC"は、単調増加の時間で 表現されるクロックを取得するオプションです。2
補足
"end - start"のオーバーフローが気になる
time.clock_gettime_ns()は、int型を返します(なので上記コードのstart, endはint型)。
int型の場合overflowが気になりますが、python3のint型は仕様上上限なしでメモリサイズに空きがある限り拡大できるようです(python2のlong型がint型になった)
なので、python3の場合はオーバーフロー気にしなくて良さそうですねhttps://docs.python.org/3.1/whatsnew/3.0.html#integers
Integers
PEP 0237: Essentially, long renamed to int. That is, there is only one built-in integral type, named int; but it behaves mostly like the old long type.
PEP 0238: An expression like 1/2 returns a float. Use 1//2 to get the truncating behavior. (The latter syntax has existed for years, at least since Python 2.2.)
The sys.maxint constant was removed, since there is no longer a limit to the value of integers. However, sys.maxsize can be used as an integer larger than any practical list or string index. It conforms to the implementation’s “natural” integer size and is typically the same as sys.maxint in previous releases on the same platform (assuming the same build options).
The repr() of a long integer doesn’t include the trailing L anymore, so code that unconditionally strips that character will chop off the last digit instead. (Use str() instead.)
Octal literals are no longer of the form 0720; use 0o720 instead.
- 投稿日:2019-02-27T21:18:00+09:00
Ubuntuのrootパスワード設定
Ubuntuはインストール直後はrootパスワードが設定されていないので、自身で設定し利用出来るようにする必要があります。
コマンドを忘れないようにメモ。$ sudo passwd root Enter new UNIX password:○○○○○○ ← 設定をしたいrootパスワード Retype new UNIX password:○○○○○○ ← 設定をしたいrootパスワードを再度入力 passwd: password updated successfullyこれでsu -でrootログインが可能になります。
$ su - Password: ○○○○○○ ← 設定をしたrootパスワード #$が#に変わり、無事にroot権限に変わった事を確認する事が出来ました。
- 投稿日:2019-02-27T20:32:48+09:00
「ハッキング・ラボのつくりかた」Metasploit persistence(P259)での「EXE::CUSTOM」誤記について
はじめに
「ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironのFAQがありますので、そちらもご確認頂ければと思います。その他トラブルへの目次
トラブル詳細
4-1 Windows 7のハッキング
P259: Metasploit persistenceでの「EXE::CUSTOM」誤記について
※正誤表には記載がありません(2019/02/24現在)。
persistence
の設定例(P259下図)で、図中下から3行目にEXE::CUSTOM
とありますが、EXE::Custom
のように最後の5文字分は小文字が正解のようです。show advanced
で表示される内容もEXE::Custom
と小文字が混じっているのでおそらく書籍の誤記と思われます。解決方法
#正 msf exploit(persistence) > set EXE::Custom /root/Desktop/evil.exe #誤 msf exploit(persistence) > set EXE::CUSTOM /root/Desktop/evil.exeおわりに
少しでもお役にたてればうれしいです。
- 投稿日:2019-02-27T20:32:11+09:00
「ハッキング・ラボのつくりかた」Virtual Boxマネージャ「IE8-Win7」アイコンに「アクセスできません」が表示されていて起動が行えない
はじめに
「ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironのFAQがありますので、そちらもご確認頂ければと思います。その他トラブルへの目次
トラブル詳細
4-1 Windows 7のハッキング
Virtual Boxマネージャ「IE8-Win7」アイコンに「アクセスできません」が表示されていて起動が行えない
下図のように
IE8-Win7
アイコンにアクセスできません
が表示されWindows7
の起動が行えなくなりました。
解決方法
仮想マシンの設定ファイルから
VirtualBox Guest Additions
に関する設定を削除します。
VirtualBox
は起動せずに削除を行い、削除後、VirtualBox
を再起動してください。
その①で解決しない場合には、その②、その③を試してみてください。その①
VirtualBox Guest Additions
に関する設定を、次の2つのファイルから削除します。
- IE8 - Win7.vbox
- IE8 - Win7.vbox-prev(下図参考)
※
[VirtualBox マネージャ]
-->[Tools]
-->[一般]
-->[デフォルトの仮想マシンフォルダ]
内の[IE8 - Win7]
フォルダに両ファイルがあります。
※両ファイルをコピーしておけばミスした時に復旧が行いやすいかと思います。(その②で記載しますが別フォルダにコピーを作成したほうが良いかもしれません)
その②
その①で解決されない場合、
IE8 - Win7.vbox
とIE8 - Win7.vbox-prev
両ファイルのコピーを元ファイルと同一フォルダ内にコピーしてあることが原因かもしれません。コピーしたファイルを別フォルダに移動してVirtualBox
を再起動してみてください。その③
[VirtualBox マネージャ]
-->[Tools]
-->[一般]
-->[デフォルトの仮想マシンフォルダ]
内のKali-Linux-2018.4-vbox-amd64
にその①と同様ファイルがあります。その①同様にVirtualBox Guest Additions
に関する設定を削除してみてください。補足
私の環境では、その②その③ともに行わないと解決しませんでした。また解決後にその②の手順を無効(コピーしたファイルを元フォルダに戻す)にしてみましたが、トラブル再現しませんでした… なお、あまり深追いはしていません。
おわりに
少しでもお役にたてればうれしいです。
- 投稿日:2019-02-27T20:31:36+09:00
「ハッキング・ラボのつくりかた」Guest Additionsをインストールする項でCDアイコンがデスクトップに現れない
はじめに
「ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironのFAQがありますので、そちらもご確認頂ければと思います。その他トラブルへの目次
トラブル詳細
3-7 VirtualBoxのファイル共有機能を利用する
P153: ③Guest Additionsをインストールする項でCDアイコンがデスクトップに現れない
FAQに記載されていることで基本的には解決するかと思います。しかしながら私の環境では
VBoxLinuxAdditions.run
スクリプト実行前後に再起動してもCDアイコン
は表示されませんでした。解決方法
私のように
CDアイコン
が表示されないこともあるかと思いますが、マウントは成功すると思います。
FAQの解決方法をお試しください。GUI
による解決方法でもCUI
による解決方法のどちらでも大丈夫かと思います。
私はよりLINUX
っぽさを感じるためCUI
による解決方法を試しました。
無事にマウントできていることを下図から確認できるかと思います。
ご参考①
P154下図
中に(途中でyes)
と答えるとありますが下記赤枠上のように表示されるかと思います。またyes
入力後の経過は赤枠下のようになるかと思います。
!おわりに
少しでもお役にたてればうれしいです。
- 投稿日:2019-02-27T20:30:55+09:00
「ハッキング・ラボのつくりかた」Kaliを起動するの項でKali Linuxが起動しない
はじめに
「ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironのFAQがありますので、そちらもご確認頂ければと思います。その他トラブルへの目次
トラブル詳細
2-5 初めてのKali Linux
P44: ①Kaliを起動するの項でKali Linuxが起動しない
Kali Linux
ダウンロード後、VirtualBox
へのインポートを行いKali Linux
を起動すると、VitualBox
からエラーメッセージが表示されたり、Kali Linux
が黒画面のまま先に進まないような状態となりました。
解決方法
Windows10
機能の設定とBios
機能の設定が影響していました。私の環境でKali Linux
が起動した設定内容を記載します。
種類 設定名 設定内容 Windows10 Windows ハイパーバイザプラットフォーム 未チェック BIOS Intel Virtual Technology Enabled
Windows10 - ハイパーバイザプラットフォーム -
[コントロールパネル]
-->[プログラム]
-->[プログラムと機能]
-->[Windowsの機能の有効化または無効化]
から[Windows ハイパーバイザプラットフォーム]
設定を行います。
BIOS - Intel Virtual Technology -
[Windows10起動状態からShiftキー押しながら再起動]
-->[トラブルシューティング]
-->[詳細オプション]
-->[UEFI ファームウェア設定]
-->[再起動する]
からBIOS
に移行させ[Intel Virtual Technology]
設定を行います。
※BIOS起動方法はいくつかあるようですが難なくBIOS起動行えた方法を記載
- Windows ハイパーバイザプラットフォーム と Intel Virtual Technology 設定の関係性
kali Linux 起動結果 Windows ハイパーバイザプラットフォーム BIOS Intel Virtual Technology 状態 OK 未チェック Enabled 正常起動 NG 未チェック Disabled 仮想マシン"Kali-Linux-2018.4-vbox-amd64"のセッションを開けませんでした NG チェック Enabled 黒画面のまま進まない NG チェック Disabled 仮想マシン"Kali-Linux-2018.4-vbox-amd64"のセッションを開けませんでした おわりに
少しでもお役にたてればうれしいです。
- 投稿日:2019-02-27T20:29:55+09:00
「ハッキング・ラボのつくりかた」Kali Linuxをダンロードするの項でダウンロードが行えない
はじめに
「ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironのFAQがありますので、そちらもご確認頂ければと思います。その他トラブルへの目次
トラブル詳細
2-4 VirtualBoxにKali Linuxを導入する
P39: ②Kali Linuxをダンロードするの項でダウンロードが行えない
Microsoft Edge
を使用していないでしょうか?
Microsoft Edge
からKali Linux Vbox 64 Bit Ovaファイルのダウンロードを行うとMicrosoft Edge
はブラウザ上にOVAファイル
の中身を表示してしまいダウンロードが行えませんでした。
解決方法
単純ですが、
Chrome
を利用してダウンロードを行いました。おわりに
少しでもお役にたてればうれしいです。
- 投稿日:2019-02-27T19:58:18+09:00
Linuxユーザの鍵ファイルをまとめて変更・ユーザを一括削除するスクリプト
最近まで課題だったこと
弊社の社内(ぼくが所属する部門)には誰かが作成した公開鍵をまとめて登録し、ユーザも発行してくれるツールがあります。
これはこれで便利なのですが、いかんせん登録することしかできないので、後からPC壊れて鍵の交換が必要になった、と言われた時は手作業での変更作業だったりします。
それが毎回地味にめんどくせってなってるので、ShellScriptでそれなりに動作する仕組みを作りました。そもそもLDAPでやるって方法もあるんですけどネ。
案件が多数あるから結局どこかしらで入れ替えるための方法を検討することになっていたわけでございます。鍵ファイルを変更するスクリプト
既存の登録するスクリプトを見つつ、これならできるんじゃないか感を感じたので別スクリプトで作ってみました。
引数追加して全てをまとめても良かったのですが、分けた方が運用上のミスも避けれるだろう、ということもあって分けました。#!/bin/sh set -eu for data in `cat $1 | grep -v "#"` do user=`echo $data| cut -f 1 -d :` if [ -z $(getent passwd ${user}) ] then echo ${user} does not exist. else echo ${user} exists and pub key is changed. install -m 600 -g xxxx -o ${user} ${user}.pub /home/${user}/.ssh/authorized_keys ls -la /home/${user}/.ssh/authorized_keys fi doneこれは単独では動作しないようになっています。
前提条件
- 変更対象者のユーザ名を一覧にしたファイルがあること。
- 変更対象の鍵ファイルが存在すること。
- 鍵ファイルとユーザ名が一致していること。
という三つの前提条件があります。
書き換え箇所
以下のxxxxと記載している、1箇所を各環境に合わせて書き換えていただくようにお願いします。
install -m 600 -g xxxx -o ${user} ${user}.pub /home/${user}/.ssh/authorized_keys作った感想
たったこれだけで鍵ファイルを交換できるんならもっと早くからやっとくべきだった。
なお、Ansibleからも呼び出せるようになっています。
Ansible側は弊社オリジナルのカスタマイズが入っていますので参考にはならない部分があると思います。Linuxユーザをまとめて削除するスクリプト
と言っても
userdel -r
すれば良いじゃんという話もあるのですが、それやっちゃうとホームディレクトリもごっそり消え、あとあとその人のところにしかなかった!なんてことがあるので、そういうことも防ごうと考えました。
また、弊社は最近はないのですが、出戻りでまた再度入社される方が少なからずいらっしゃいます。
そういうことを諸々考慮したスクリプトを作成しました。それがこちらです。
はい、ドーン!
#!/bin/sh set -eu for data in `cat $1 | grep -v "#"` do user=`echo $data| cut -f 1 -d :` if [ -z $(getent passwd ${user}) ] then echo ${user} does not exist. else echo ${user} exists and retire. userdel ${user} retire_date=`date +"%Y%m%d_%H%M%S"` mv /home/${user} /home/RETIRE/${user}.${retire_date} fi done前提条件
こちらの前提条件も記載しますが、鍵を変更するスクリプトとほぼ同じです。
- 変更対象者のユーザ名を一覧にしたファイルがあること。
- RETIREディレクトリが存在すること
RETIREディレクトリが気に入らなければ別のディレクトリ名として作成いただき、スクリプトも書き換えていただければと思います。
作った感想
これはこれで便利です。
あとでこの人いつ辞めたっけ?がわかりますし、元のディレクトリを使うかどうかも選択できます。
また辞めても同一ディレクトリで上書いてしまうようなこともなく、安全設計です。
この処理に不足があるとしたら、/var/内にmailデータが残ってることですかね。弊社は踏み台などでmailを使うことはないのでさほどの問題じゃないと思っています。
削除処理も合わせて対応できる範囲かと思いますので、ご自由にどうぞーー。まとめ
他にもEC2インスタンスのセキュリティグループを調査するのに作ったスクリプトとかもありますが、ちょっと今回は記載いたしません。
理由としては案件毎にmarkdownでAWSで構築した情報をメモしているのですが、便利なスクリプトになってからアウトプットしても良いかなーと考えています。
- 投稿日:2019-02-27T19:23:16+09:00
Linux(Ubuntu)のルート直下のディレクトリの役割について調べた
UbuntuやMacOSのルートディレクトリ直下に存在するファイルは短縮形で書かれていて,読み方や役割を正確に把握していなかったので,調べてまとめる.
ちなみに実際のルートをtreeコマンドで表示するとこんな感じ(Ubuntu 14).
$ tree -L 1 / . ├── bin ├── boot ├── build ├── dev ├── etc ├── home ├── lib ├── lib64 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── selinux ├── sbin ├── srv ├── sys ├── tmp ├── usr ├── var/bin
読み: ビン (スラ・ビン)
コンピューター全員で用いる基本的なバイナリファイル(実行ファイル)を格納するディレクトリ.binはBinary Codeのこと.OSの働きの根幹に関わるような役割をもつコマンドが入っている.(ユーザが新たにインストールすることは,推奨されていない)類似のディレクトリに,
/usr/bin
,/usr/sbin/
などがある.前者はユーザが一般的に使用するコマンド(git, vim, emacs, etc),後者はシステム管理コマンドを保存する.ログインしているユーザに依存するプログラムやツールを作った時は,
~/bin
($HOME/bin
)に置くことが推奨される.ちなみに,
cd
やpwd
コマンドは,内部コマンドと呼ばれるシェルの機能として提供されている./var
読み: ヴァー
常に変化するファイルを格納するディレクリ./var/log
や/var/spool
など,各種システムログファイルや,プリンターやメールシステムのスプールデータ,キャッシュデータなどが保存される.意味的には/tmp
と同じだが,こちらは再起動しても消去されずに残り続ける./lib
読み:リブ
/bin
や/sbin
のコマンドの実行に必要なファイルが配置されている.共有ライブラリの保存場所.64bit用の共有ファイルは/lib64
というディレクトリにある./lost+found
読み: ロストファウンド
オプション,システムのバックアップや復元用のファイルが格納される.意図しない再起動やシャットダウン時に利用される./boot
読み: ブート
ブートに必要なファイルが格納されている./home
読み: ホーム
オプション.ユーザのホームディレクトリ/proc
読み: プロック
プロセスIDのついたディレクトリが配置される.プロセス独自の情報を格納することからプロセスディレクトリと呼ばれる.psコマンドなど./root
読み:
オプション.root用ホームディレクトリ/sbin
読み: エスビン
再起動やファイルシステムの操作などシステム管理者用のコマンドが配置されている./tmp
読み: テンプ
テンポラリデータの保存場所.メモリ上の一時ファイルを保存する.再起動時に消去される./usr
読み: ユーザー
各ユーザが共通して利用するプログラム,ライブラリのデータを保存する.ソースからコンパイルしたソフトなど.重要./mnt
読み:
一時的なマウントポイント/opt
読み: オプト
パッケージ管理システムのインストール先.複数のユーザで利用する場合に使う?/etc
読み: エトセ
ほとんどの設定ファイルが配置されている.カーネルから追加された各ソフトまでさまざなま設定ファイルが配置されているため,ファイル数が膨大./dev
読み: デブ
デバイスファイルが配置されている.デバイス/ハードウェアをファイルとして扱うUNIXの思想設計からきている??感想
思ったより読みが直球で安心した.
参考にしたページ
- 投稿日:2019-02-27T17:08:30+09:00
Linuxを簡単に理解しよう
未来電子テクノロジーでインターンをしているryota_miraidenshiです。
今回課題でLinuxについて学ぶ機会がありました。
大学でもLinuxを触る機会がありましたが、どのようなものか理解していなかったので今回ここでまとめておきたいと思います。そもそもLinuxとは?
LinuxはMacOSやWindowsなどと同じいわゆるOSの一つで、主にサーバー用として使用されます。
このLinuxですが、他のOSと違ってたくさんあるのが特徴です。
というのもLinuxは大きく分けてLinuxカーネルとLinuxディストリビューションの二つに分けられます。
Linuxカーネルはリーナス・トーバルズ氏が開発した大元で、これを元に派生させたのがLinuxディストリビューションです。
つまり、後者が多くあるということになります。
例えば、Red Hat Enterprise Linux、Fedora、CentOSなどがあります。
(余談ですが、スマホのAndroidはLinuxをベースに新しくGoogleが作ったスマホ用OSです。)Linuxを使うメリット一部
無料
WindowsやMacはそれぞれのOSが入っているPCを購入するか、OS自体をインストールすることはできるが数万円必要です。
一方でLinuxはどのようなPCにも無料でインストールすることができます。中身をいじることができる
Linuxはオープンソースであるため、Windowsなどと違ってOS自体をいじることができます。
何か間違えて重大なエラーになってももう一度インストールし直せばいいだけです。
このように好きなようにできるOSは様々なところで利用されています。
例えば、家電や車、大学の研究、スパコンなどが挙げられます。サーバを自由に建てられる
なぜ自由に建てられるのか。
それはLinuxはどれだけ使っても無料だからです。
クラウド技術もLinuxがあってこそ成り立っています。終わりに
以上を知った上でこれからLinuxの勉強をしていくと整理しやすいはずです。
プログラム初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正しますのでどんどん指摘してください。
- 投稿日:2019-02-27T13:44:37+09:00
Linuxのidコマンドでユーザー情報を確認する
root@vagrant:~# id postgres uid=113(postgres) gid=117(postgres) groups=117(postgres),116(ssl-cert)
- 投稿日:2019-02-27T07:22:08+09:00
jupyterをsystemdで自動起動する
※ 2019/2/28 ユニットファイルがrootでjupyterを起動する設定になっていたので, "user"グループのユーザ名"user"で起動するよう修正
背景
GCPで構築しているので(従量課金なので)使っていないときはサーバを落とすため、OS起動のたびにコンソールから
jupyter notebook
と打つのが面倒だったので環境
- OS: debian 9 stretch
- ユーザ名"user"でAnacondaを導入済み
- 環境名は"seminar"
構築手順
1. ユニットファイル作成
まずはユニットファイルの作成から。細かい設定は正直わからない部分もあった... (WantedBy
ってなんだ?)sudo vim /etc/systemd/system/jupyter.service
ファイル内容は以下の通り
/etc/systemd/system/jupyter.service[Unit] Description=Jupyter Notebook (seminar) [Service] Type=simple WorkingDirectory=/home/user ExecStartPre=. /home/user/anaconda3/etc/profile.d/conda.sh; conda activate seminar ExecStart=/home/user/anaconda3/envs/seminar/bin/jupyter notebook --config=/home/user/.jupyter/jupyter_notebook_config.py User=user Group=user [Install] WantedBy=multi-user.targetAnacondaの環境を切り替えるために
ExecStartPre
を指定しているので、素のjupyterならもっと簡単になると思う。設定ファイル(jupyter_notebook_config.py
)を生成していなければオプション(--config
)は不要。WorkingDirectory
は指定不要な気もしたけど、後で気づいたのでそのままに。。。2. 起動確認
正常に動作するかsystemctl
で確認してみる。sudo systemctl start jupyter sudo systemctl status jupyterこれでエラーっぽいログが出力されず、jupyterにアクセスできればOK
3. 自動起動化
以下のコマンドで自動起動を有効化する。sudo systemctl enable jupyter一応OSを再起動してみてjupyterにアクセスできればOK