20190227のLinuxに関する記事は12件です。

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.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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権限に変わった事を確認する事が出来ました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「ハッキング・ラボのつくりかた」Metasploit persistence(P259)での「EXE::CUSTOM」誤記について

はじめに

ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironFAQがありますので、そちらもご確認頂ければと思います。

その他トラブルへの目次

「ハッキング・ラボのつくりかた」体験学習トラブルの記録

トラブル詳細

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

おわりに

少しでもお役にたてればうれしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「ハッキング・ラボのつくりかた」Virtual Boxマネージャ「IE8-Win7」アイコンに「アクセスできません」が表示されていて起動が行えない

はじめに

ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironFAQがありますので、そちらもご確認頂ければと思います。

その他トラブルへの目次

「ハッキング・ラボのつくりかた」体験学習トラブルの記録

トラブル詳細

4-1 Windows 7のハッキング

Virtual Boxマネージャ「IE8-Win7」アイコンに「アクセスできません」が表示されていて起動が行えない

下図のようにIE8-Win7アイコンにアクセスできませんが表示されWindows7の起動が行えなくなりました。
Win7 Vbox Error1.png

解決方法

仮想マシンの設定ファイルからVirtualBox Guest Additionsに関する設定を削除します。
VirtualBoxは起動せずに削除を行い、削除後、VirtualBoxを再起動してください。
その①で解決しない場合には、その②、その③を試してみてください。

その①

VirtualBox Guest Additionsに関する設定を、次の2つのファイルから削除します。

  • IE8 - Win7.vbox
  • IE8 - Win7.vbox-prev(下図参考)

[VirtualBox マネージャ] --> [Tools] --> [一般] --> [デフォルトの仮想マシンフォルダ]内の[IE8 - Win7]フォルダに両ファイルがあります。
※両ファイルをコピーしておけばミスした時に復旧が行いやすいかと思います。(その②で記載しますが別フォルダにコピーを作成したほうが良いかもしれません)
Win7 Vbox Error.png

その②

その①で解決されない場合、IE8 - Win7.vboxIE8 - Win7.vbox-prev両ファイルのコピーを元ファイルと同一フォルダ内にコピーしてあることが原因かもしれません。コピーしたファイルを別フォルダに移動してVirtualBoxを再起動してみてください。

その③

[VirtualBox マネージャ] --> [Tools] --> [一般] --> [デフォルトの仮想マシンフォルダ]内のKali-Linux-2018.4-vbox-amd64にその①と同様ファイルがあります。その①同様にVirtualBox Guest Additionsに関する設定を削除してみてください。

補足

私の環境では、その②その③ともに行わないと解決しませんでした。また解決後にその②の手順を無効(コピーしたファイルを元フォルダに戻す)にしてみましたが、トラブル再現しませんでした… なお、あまり深追いはしていません。

おわりに

少しでもお役にたてればうれしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「ハッキング・ラボのつくりかた」Guest Additionsをインストールする項でCDアイコンがデスクトップに現れない

はじめに

ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironFAQがありますので、そちらもご確認頂ければと思います。

その他トラブルへの目次

「ハッキング・ラボのつくりかた」体験学習トラブルの記録

トラブル詳細

3-7 VirtualBoxのファイル共有機能を利用する

P153: ③Guest Additionsをインストールする項でCDアイコンがデスクトップに現れない

FAQに記載されていることで基本的には解決するかと思います。しかしながら私の環境ではVBoxLinuxAdditions.runスクリプト実行前後に再起動してもCDアイコンは表示されませんでした。

解決方法

私のようにCDアイコンが表示されないこともあるかと思いますが、マウントは成功すると思います。
FAQの解決方法をお試しください。GUIによる解決方法でもCUIによる解決方法のどちらでも大丈夫かと思います。
私はよりLINUXっぽさを感じるためCUIによる解決方法を試しました。
VirtualBox_Kali-Linux-2018.4-vbox-amd64_16_02_2019_14_12_49.png
無事にマウントできていることを下図から確認できるかと思います。
VirtualBox_Kali-Linux-2018.4-vbox-amd64_16_02_2019_20_29_27.png

ご参考①

P154下図中に(途中でyes)と答えるとありますが下記赤枠上のように表示されるかと思います。またyes入力後の経過は赤枠下のようになるかと思います。
!VirtualBox_Kali-Linux-2018.4-vbox-amd64_16_02_2019_19_35_00 - コピー.png

おわりに

少しでもお役にたてればうれしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「ハッキング・ラボのつくりかた」Kaliを起動するの項でKali Linuxが起動しない

はじめに

ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironFAQがありますので、そちらもご確認頂ければと思います。

その他トラブルへの目次

「ハッキング・ラボのつくりかた」体験学習トラブルの記録

トラブル詳細

2-5 初めてのKali Linux

P44: ①Kaliを起動するの項でKali Linuxが起動しない

Kali Linuxダウンロード後、VirtualBoxへのインポートを行いKali Linuxを起動すると、VitualBoxからエラーメッセージが表示されたり、Kali Linuxが黒画面のまま先に進まないような状態となりました。
image.png

解決方法

Windows10機能の設定とBios機能の設定が影響していました。私の環境でKali Linuxが起動した設定内容を記載します。

種類 設定名 設定内容
Windows10 Windows ハイパーバイザプラットフォーム 未チェック
BIOS Intel Virtual Technology Enabled
  • Windows10 - ハイパーバイザプラットフォーム -
    [コントロールパネル] --> [プログラム] --> [プログラムと機能] --> [Windowsの機能の有効化または無効化] から [Windows ハイパーバイザプラットフォーム]設定を行います。
    image.png

  • 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"のセッションを開けませんでした

おわりに

少しでもお役にたてればうれしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「ハッキング・ラボのつくりかた」Kali Linuxをダンロードするの項でダウンロードが行えない

はじめに

ハッキング・ラボのつくりかた」で体験学習を行うにあたり、書籍通りに進めずトラブッたことの詳細内容です。
著者様@ipusironFAQがありますので、そちらもご確認頂ければと思います。

その他トラブルへの目次

「ハッキング・ラボのつくりかた」体験学習トラブルの記録

トラブル詳細

2-4 VirtualBoxにKali Linuxを導入する

P39: ②Kali Linuxをダンロードするの項でダウンロードが行えない

Microsoft Edgeを使用していないでしょうか?
Microsoft EdgeからKali Linux Vbox 64 Bit Ovaファイルのダウンロードを行うとMicrosoft Edgeはブラウザ上にOVAファイルの中身を表示してしまいダウンロードが行えませんでした。
edge ova.png

解決方法

単純ですが、Chromeを利用してダウンロードを行いました。

おわりに

少しでもお役にたてればうれしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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で構築した情報をメモしているのですが、便利なスクリプトになってからアウトプットしても良いかなーと考えています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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)に置くことが推奨される.

ちなみに,cdpwdコマンドは,内部コマンドと呼ばれるシェルの機能として提供されている.

/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の思想設計からきている??

感想

思ったより読みが直球で安心した.

参考にしたページ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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の勉強をしていくと整理しやすいはずです。
プログラム初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正しますのでどんどん指摘してください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxのidコマンドでユーザー情報を確認する

root@vagrant:~# id postgres
uid=113(postgres) gid=117(postgres) groups=117(postgres),116(ssl-cert)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.target

Anacondaの環境を切り替えるために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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む