(O+P)ut

(O+P)ut

インフラエンジニアの (O+P)ut → OutPut → アウトプット

【AIX】ulimitのfsizeを変更する

事象/原因/解決策

事象

AIX環境にて巨大ファイルを作成しようとしたところ、

ファイルは ulimit によって設定された値より大きくできません。

上記メッセージでエラーとなる。

原因

limitsファイルに記載されているfsizeの値に抵触。

解決策


chuser fsize=-1 ユーザ名

として値を変更し、再ログインを行い反映させる。

補足

現状値を確認

/etc/security/limitsには各ユーザに対して制限値が記述されており、記述されていないユーザはdeefaultとして扱われています。

ためしに中身を見てみます。以下のようなフォーマットで記載されています。

default:
        fsize = 2097151
        core = 2097151
        cpu = -1
        data = 262144
        rss = 65536
        stack = 65536
        nofiles = 2000

fsizeは2097151ブロックと記載されています。

1ブロックは512byteなので約1GBを超えるファイルは作成できないことになります

ちなみにulimitコマンドを確認すれば、現在のユーザの値を確認できます。

$ ulimit -a
time(seconds)        unlimited
file(blocks)         2097151
data(kbytes)         131072
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

現状値を変更

ユーザ名testuserの上限を以下のように外しました。

$ sudo chuser fsize=-1 testuser

-1無制限を指します。

コマンド実行後、/etc/security/limitsを確認すると、以下の記載が追記されています。

testuser
        fsize = -1

一方で、ulimit - a では未変更です。

$ ulimit -a
time(seconds)        unlimited
file(blocks)         2097151
data(kbytes)         131072
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

実際、ulimit -a で変更が確認できない状態だと制限がまだ効いています

よって、再度ログインし直して設定を読み込ませます。

ログイン後、以下のように変更されていることを確認できました。

$ ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         131072
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

この状態になれば、冒頭の制限に引っかかることなく巨大ファイルを作成できます。

以上、AIX環境での備忘録でした。

SSHで2048がプレイできる

2048とは?

『2048』は2014年3月に公開されたパズルゲーム。App StoreGoogle Playで無料公開されており、オープンソースとされている
4×4のマスに数字が書かれたタイルがあり、スライドさせるとそれらはマスの端まで移動し、同時に新たなタイルが出現する。同じ数字のタイルがぶつかると数字が足し合わされていき、2048のタイルを作成できればゲームクリアとなる。

SSHで2048をプレイする

サーバに接続した直後に2048がはじまるように設定されているようです。
特にパスワード不要で接続できます。

投入コマンド
# ssh play@ascii.town

執筆当事ですが、以下のメッセージが出力されます。

The authenticity of host 'ascii.town (2604:a880:800:10::3a0b:9001)' can't be established.
ECDSA key fingerprint is SHA256:Td42Nu9skzncUOsgYFJIqSo4gwa3tWp4FCubN9njEmQ.
Are you sure you want to continue connecting (yes/no)? yes
プレイ画面

f:id:mtiit:20190117101036p:plain
キーボードの矢印キーで操作します。

「qキー」を押す または ゲームオーバーになると、トップスコアのユーザが表示されます。
そこで「Enterキー」などを押下すればセッションが切断された旨が表示されて元の画面に戻ります。

This program is AGPLv3 Free Software!
Code is available from <https://code.causal.agency/june/play>.
Connection to ascii.town closed.

https://code.causal.agency/june/play
上記のURLを見に行くと、Cで書かれたコードも公開されています。

main関数の頭を抜粋。

int main(void) {
	curse();
	FILE *file = scoresOpen("2048.scores");

#ifdef __FreeBSD__
	int error = cap_enter();
	if (error) err(EX_OSERR, "cap_enter");

	cap_rights_t rights;
	cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_SEEK, CAP_FLOCK);

	error = cap_rights_limit(fileno(file), &rights);
	if (error) err(EX_OSERR, "cap_rights_limit");
...

プログラミングの学習教材にいいかもしれません。

以上、ご参考ください。

【UNIX】ディレクトリをtar.gzにして分割する

目的 と その手順

やりたいこと

ディレクトTest_dirを別サーバに送付したい。
ただし、容量が巨大なため、分割して送りたい。

やりたいことを実現する手順
  1. ディレクトリTest_dirをファイルtest.tar.gzにまとめる
  2. ファイルtest.tar.gzを分割
  3. 別サーバに送付
  4. 別サーバで分割されたファイルを結合
  5. test.tar.gzを解凍しディレクトリTest_dirに戻す

順を追って記載します。自環境はCygwinです。

ディレクトリをファイルにまとめる

ディレクトTest_dirが存在しています。

まずは、duコマンドでファイルのサイズを見てみます。

$ du -s Test_dir
2341907 Test_dir

$ du -sh Test_dir
2.3G    Test_dir

sオプションをつけることでディレクトリ全体の集計(summarize)結果が出力でき、
hオプションをつけることで人間が読みやすい(human-readable)単位に変換してくれます。

ディレクトリ全体で約2.3GBですね。

これをtar.gzファイルにします。

tar cvfz test.tar.gz Test_dir

cオプションをつけることでアーカイブを新規に作成(create)を行い、fオプションをつけることでファイル名(file)を指定します。
vオプションをつけることで処理したファイルの一覧を標準出力に表示(verbose)します。このオプションは省略可能です。
zオプションをつけることで、アーカイブしつつgzip形式(zip)にて出力できます。

容量も小さくなっています。

$ du test.tar.gz
1809176 test.tar.gz

$ du -h test.tar.gz
1.8G    test.tar.gz

ちなみに、zオプションをつけずにtarにするとファイルサイズは2340540と微減していた程度でした。

ファイルを分割

今回は、ファイルtest.tar.gzを100MB単位に分割しました。

$ split -b 100m -a 2 test.tar.gz test_p_

この見方ですが、
-b 100mで100MB単位で分割することを指定しています。
-a 2 にてファイル名をaaから始まるアルファベットに指定しています。
他の分割方法に関しては割愛しますが、最後に指定した「test_p」の後ろに分割された分だけ名前をつけられてファイルが作成されます。

分割されているかを確認します。

$ ls -l | grep test_p_
-rw----r--+ 1 ..  104857600 .. test_p_aa
-rw----r--+ 1 ..  104857600 .. test_p_ab
-rw----r--+ 1 ..  104857600 .. test_p_ac
-rw----r--+ 1 ..  104857600 .. test_p_ad
-rw----r--+ 1 ..  104857600 .. test_p_ae
-rw----r--+ 1 ..  104857600 .. test_p_af
-rw----r--+ 1 ..  104857600 .. test_p_ag
-rw----r--+ 1 ..  104857600 .. test_p_ah
-rw----r--+ 1 ..  104857600 .. test_p_ai
-rw----r--+ 1 ..  104857600 .. test_p_aj
-rw----r--+ 1 ..  104857600 .. test_p_ak
-rw----r--+ 1 ..  104857600 .. test_p_al
-rw----r--+ 1 ..  104857600 .. test_p_am
-rw----r--+ 1 ..  104857600 .. test_p_an
-rw----r--+ 1 ..  104857600 .. test_p_ao
-rw----r--+ 1 ..  104857600 .. test_p_ap
-rw----r--+ 1 ..  104857600 .. test_p_aq
-rw----r--+ 1 ..   70014907 .. test_p_ar

最後の切れ端だけ100MB以下になりますが、想定通り分割されています。

$ du -h test_p_aa
100M    test_p_aa

別サーバに送付

Cygwinであればscpコマンド等を使えば送付できます。

分割されたファイルの結合

splitコマンドで分割したファイルの結合に関しては、おなじみのcatコマンドで行えます。

$ cat test_p_* > test2.tar.gz

今回は、わかりやすいようにファイル名test2.tar.gzにしています。

$ du test2.tar.gz
1809176 test2.tar.gz

ファイルサイズも一致しています。

解凍して元のディレクトリに戻す

圧縮した時のcxに変更すれば解凍(extract)できます。

tar -zxvf test2.tar.gz

解凍により、元のディレクトリ名に戻ります。正式にいえば、そのディレクトリのルートのディレクトリ名です。*1

ファイルサイズを確認し、変化がないことがわかります。

$ du -s Test_dir
2341947 Test_dir


以上、圧縮して分解して結合して解凍する流れの備忘録でした。

*1:解凍する環境でtarがzに対応していない場合はgunzip -d でまずはgzを外します

【ストレージ入門】ATA/SATA/SCSI/SASの用語整理

ストレージの規格でよく耳にする以下の4つを整理しました。

どれもコンピュータとストレージの通信規約で、コネクターの形状や電気信号の形式などを定めています。

4つの関係を整理

f:id:mtiit:20190114105838p:plain

ジャンルで分けると、

サーバで利用

SCSISAS

パソコンで利用

ATASATA

パラレル通信

SCSIATA

シリアル通信

SATASAS

で綺麗に分かれています。

ちなみに、各用語の簡単な補足です。

ATA

Advanced Technology Attachmentの略。
IDEという用語がありますが、これはATAと同等の意味です。現在はSATAに置き換わりつつある。

SATA

Serial ATAの略。
パラレル転送方式の問題点である「クロストーク」「スキュー」を解決するためにATAの後継仕様として登場。

SCSI

Small Computer System Interfaceの略。
コマンドをマルチスレッドで処理できることから、性能が重視されるサーバー用途で利用される。

SAS

Serial Attached SCSIの略。
シリアル通信による転送速度の高速化だけでなく、接続台数など拡張性も高い。


以上、4つの用語に関する入門記事でした。

【メモ】はてなブログをHTTPSに切り替え

無料はてなブログHTTPS化する

実際に行った流れとアクセス増減なんかをメモがてら残しておきます。

HTTPS化する前の見え方

例えば、WebブラウザであるFirefoxで私のブログのトップページを見てみると、
URL欄は以下のようになっています。
f:id:mtiit:20190109141815p:plain

iマークを押下すると、以下のように不審な赤字が表示されます。
f:id:mtiit:20190109141250p:plain

ここに表示された
Connection Is Not Secure
という文言は、「記事の内容に誤りがある」とかそんなことを指しているのではなくて単にSSLサーバ証明書が配置されていないことを指してます。それにより、暗号化通信が行われていません。

別に、何かユーザに入力を求めてどうするものでもないので暗号化が必須とは思えないのですが、以下の記事のようにHTTPSに関する技術記事を書いた手前、せっかくなのでHTTPS対応にします。

HTTPSに関する技術記事

mti.hatenablog.com

HTTPS化

やり方

はてなブログの詳細設定から
f:id:mtiit:20190112113951p:plain
右側のUpdateボタンをポチッと押せば
f:id:mtiit:20190112114233p:plain
あっさりHTTPS化対応完了です。

HTTPS化した後の見え方

URL欄は以下のようになっています。
f:id:mtiit:20190112120021p:plain
中を見ると

Verified by: COMODO CA Limited

署名しているのはアメリカにあるセキュリティ会社みたいです。

気になるアクセスの増減

98%は検索流入の本ブログですが、
f:id:mtiit:20190109143920p:plain

月~水 HTTP
木曜日 0:00頃 HTTPS化
木~金 HTTPS

ということでアクセス増減はどうだったでしょうか。

結果は以下です。
f:id:mtiit:20190112114546p:plain

変化なし。

後から効いてくるんですかね?今後明確な変化があれば別途更新します。

HTTPS化した後にしたこと

記事の修正は何もしていないです。

ネットを見ると画像のリンクがhttpだとどうのこうの..という記述もありましたが、古い記事も閲覧自体は問題なさそうだったので気づいた時に混合していれば直そうと思ってます。

そうは言ってもしたこと

トップ画面での遷移設定見直し

本ブログですが、トップ画面を記事一覧にしています。

やり方は詳細設定の「Add elements to head」という箇所に以下の記述をして飛ばしています。

<script type="text/javascript">
 if( location.href == 'http://mti.hatenablog.com/'){
 location.href='http://mti.hatenablog.com/archive';
}
</script>
<noscript>
<p><a href="http://mti.hatenablog.com/archive">(O+P)ut</a></p>
</noscript>

ここがhttpのままだと、動作しなかったのでhttpをhttpsに置換しました。

GoogleAnayticsとGoogleSearchConsoleに登録してあるURLを変更

GoogleAnalyticsは設定でURLをhttpsにするだけで完了。

GoogleSearchConsoleは、新たにプロファイルを作成する必要があるらしくhttpsバージョンで作成しました。

所感

ワンクリックでHTTPSにできて助かりました。
はてなブログの技術スタッフの方々、ありがとうございました。

【UNIX】/etc/shadowのアスタリスクとびっくりマークの違い

/etc/shadowの「!!」と「*」の違い

/etc/shadowとは

/etc/passwdはパスワードに関する情報が記述されているファイルで、形式はコロン区切りです。

例えば、RHEL環境で先頭数行を見てみると以下のようになっています。

# head -n 2 /etc/shadow
root:$6$2JiRy.....::0:99999:7:::
bin:*:17421:0:99999:7:::

この項目の中で、パスワードが有効か無効かを判断する際にチェックするのが、2列目です。

ここには長い文字列またはアスタリスクまたはびっくりマークが記載されています。

長い文字列は、文字通りパスワードを暗号化したものです。
パスワードが短くても、ここの部分は長い文字列となります。

問題は、アスタリスクやびっくりマークの意味です。

アスタリスク=「* 」はパスワードが無効化されている

ユーザbinのところに「*」が入っています。
これは、明示的にパスワードを無効化していることを指します。

パスワードが無効化されている場合、一般的にはrootユーザからスイッチをする必要があります。
ただし、rootにスイッチせずともSSHにて公開鍵/秘密鍵の認証で当ユーザにてログインすることも可能です。

びっくりマーク=「 !!」はアカウントがロックされている

ロックと書くと「パスワードを連続で間違えた場合」などを想定されるかと思いますが、
実はユーザ作成時にもデフォルトでロックされます。

確かに、どちらもパスワードでログインできない状態という意味では同じ状態です。

ユーザ作成後、
パスワードを与えてあげれば暗号化パスワードを意味する長い文字列となり、
パスワードを消去してあげれば無効を意味するアスタリスクとなります。

まとめ

アスタリスクとびっくりマークの違いですが、
パスワードを無効化している状態 と アカウントがロックされている状態 の違いです。

ただし、ややこしいのはユーザ作成の初期状態でもアカウントがロックされている状態となっていることです。

パスワードを無効化するのであれば、明示的にパスワードを無効化してあげましょう。

以上、ご参考になれば幸いです、

【入門】pkcs7について

pkcs7とは?

PKCSとはPublic Key Cryptography Standardsの略で、公開鍵暗号の標準規格です。
その中でも#7は証明書周りの規格です。

認証局SSLサーバ証明書の発行を依頼した際に、納品物としてpkcs7形式の証明書が送付されることがあります。

ある認証局サーバ証明書の発行を依頼した際に、例えば「CRT形式とPKCS7形式」の二種類で送付されたとします。

それらのファイルサイズを見ると、PKCS7形式の方が大きいはずです。

なぜPKCS7形式は大きいのか

pkcs7の特徴は中間証明書やルート証明書までひとつのファイルで配布できることにあります。
crtは自らのサーバ証明書のみとなるので、pkcs7と比べてファイルサイズが小さいということです。

例えばAapacheで読み込む場合は証明書の結合を明示的に行い、中間証明書を連結させる必要があります。
mti.hatenablog.com
それと同じようなことをpkcs7ではすでに行われているということです。

pkcs7の中身を見てみる

pkcs7と言えど、中身はPEM形式のテキストファイルです。
配布された二つのファイルをcert.pkcs7とcert.crtとして、比較のためにcert.crtを同じようにPEM形式に変換します。(cert.pem)

まずは、それぞれの先頭行と末尾の行を確認します。

$ head -n 1 cert.pem
-----BEGIN CERTIFICATE-----

$ tail-n 1 cert.pem
-----END CERTIFICATE-----

$ head -n 1 cert.plcs7
-----BEGIN CERTIFICATE-----

$ tail-n 1 cert.pkcs7
-----END CERTIFICATE-----

どちらも同じ形式
BEGIN CERTIFICATEEND CERTIFICATEで囲まれた文字列であることが分かります。

ちなみに、plcs7の方はBEGIN CERTIFICATE等が一度ずつしか登場しないので区切りがわかりづらくなっています。

ファイルサイズよりも分かりやすい、ファイルの行数等を比較すると、以下のようにpkcs7が大きいことが分かります。

# wc cert.pem
 34 36 2016 cert.pem

# wc cert.pkcs7
83   85 5275 cert.pkcs7


そんなpkcs7ですが格納されている証明書群は以下のコマンドで確認できます。

$ openssl pkcs7 -in cert.pkcs7 -print_certs
subject=...
issuer=...CN="中間認証局名"
-----BEGIN CERTIFICATE-----
MIhkiG9w0BA..
...
...ZU8zBVLvCrmnRiQ
-----END CERTIFICATE-----

subject=...CN="中間認証局名"
issuer=...CN="ルート認証局名"
-----BEGIN CERTIFICATE-----
MDIGA1UEChM..
...
...E0pEYS8oWpQ==
-----END CERTIFICATE-----

subject=...CN="ルート認証局名"
issuer=...CN="ルート認証局名"
-----BEGIN CERTIFICATE-----
MIIFJADKfkaILA....
...
...E2gcrEEYS2oincw=
-----END CERTIFICATE-----

配布する認証局によっては、ルート認証局の証明書が含まれなかったりもしますが、署名のチェーンが一目瞭然で確認できます。
最後のルート証明書は自己署名ですね。

以上、pkcs7の入門記事でした。

スポンサーリンク4選