それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sshサーバーに ユーザー名&IPアドレスで制限を掛ける

ユーザーのssh のアクセス制限をIPアドレスで掛けたい。

IPアドレスからのパスワード・アクセスを許可したり、ユーザーごとに許可したりは、Match条件できる。

Match User apache
    PasswordAuthentication yes
Match Address 192.168.10.*
    PasswordAuthentication yes

上記のようにしたらできる。

特定のIPからの指定のユーザーだけを許可するのはどうするのか

結論から言うと、こう書くといい。

AllowUsers apache@172.10.0.0/16

この例だと、指定したIPからのみ、ユーザー名Apacheがログインできる。よく使いそうなユーザー名 www-data や apache などは /sbin/nologin で守ることもできるけど、どうしても使いたいなってときだけに、このようにすることで特定ユーザーの制限されたIPからのみに限定できる。

And条件などが使えないので、具体的には、このように書くしかないんですね。

大胆に、指定IPだけ、SSHを許可する

iptables でやれって話なんですが。うまく使えば、指定IPからだけのSSH接続を許可するっていう使い方ができる。

AllowUsers *@172.10.0.0/16

逆に、拒否するときとか

DenyUsers *@172.10.0.0/16

いちおうman には載ってるんだけど、結構悩んだのでメモしておく。

間違ってハイフン付きのファイル名を作ってしまって消せないときの対応

間違ってハイフンがついたファイルを作ってしまった。

[takuya@ki www]$ ll .
total 1313532
-rw-rw-r--   1 takuya takuya       2926 Dec 10 17:37 backup.php
-rw-rw-r--   1 takuya takuya   31806188 Dec 26 20:09 -C
drwxr-xr-x.  2 apache apache       4096 Jun 20  2018 cgi-bin

あかん、コレめんどくさいやつや。

これは出来ない。

こういうファイルを作ってしまうと、通常の操作では、ファイルを閲覧することが出来ない。

[takuya@ki www]$ ll  -C
ls: cannot access -C: No such file or directory

エスケープはうまく動かない。

いろいろ試してみたけど、すべてが ls のオプションとして解釈される。

[takuya@ki www]$ ll  \-C
[takuya@ki www]$ ll  \'-C'
[takuya@ki www]$ ll  '-C'

ぐぬぬ

現実的な解決方法

パスを指定する

[takuya@ki www]$ ll  ./-C

ハイフンをつなげる。

[takuya@ki www]$ ll -- -C

これらで解決することができる

nologin 指定されたユーザにsu したりする。無理ログイン

apache ユーザーで bash を起動する

apache ユーザーなど /sbin/nologin のユーザーでは suは出来ない。

[takuya@ki data]$ sudo su apache
This account is currently not available.

/etc/passwdを見てみる

するとログインできなくなっている。

apache:x:48:48:Apache:/var/www:/sbin/nologin

無理矢理にログインしてみる

要は、このユーザーでbashを起動すればいいのだから、こんな事ができる。

[takuya@ki data]$ sudo su -s /bin/bash apache
bash-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)

sudo su するくらいなら sudo だけでもできる。

[takuya@ki data]$ sudo -u  apache  /bin/bash
bash-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)

シェルを起動することはできる。

できるけど、あまり勧められた方法ではない。

連続してコマンドを起動しない限りは、シェルスクリプトファイルをつくってやりたいことを1つにまとめて起動するほうがいいと思う

sudo -u apache /path/to/script

tcpdumpでDHCPv6の近傍探索やリレーのパケットを見る

dhcpv6 を見たい。

tcpdump でやるには次のようにする。

tcpdump -n -vv ‘(udp port 546 or 547) or icmp6’

ここで、UDP の 546, 547 は、v6のDHCPv6で使われる。

リレーエージェントが、DHCPv6 をリレーするのに、547 あてに送信する、送信元は546 だったか。

オプションの -n は逆引きをさせないようにするもので、まぁV6のパケットとアドレスを見たいときに使うだろうし、つけたほうがいいかなって。

参考資料

man tcpdump

MacのFinderでカットペース(ファイルの移動)をする

Mac のファインダでカットペーストをしたい

コピーペーストはできるんだろうけど、カットペーストはちょっとコツが必要。

option + command + V:移動:クリップボードに配置したファイルを、元の場所から現在の場所に移動します。

コピーして貼り付けるときに、移動して貼り付けになる。 先にカットしないところがポイント。

参考資料

support.apple.com

certbotの更新でCloudflareプラグインを使ってDNSの認証を楽にする

目的と背景

certbotワイルドカードについて

2018 年からCertbotワイルドカード発行が可能になっている。

ワイルドカードを使うことで、サブドメインをまるっとTLS化できて便利。

ワイルドカードの証明書の作り方

ワイルドカードのやりかたは以前書きました。 http://takuya-1st.hatenablog.jp/entry/2018/10/25/163040

前回、作成した証明書から90日くらい経過して、更新が必要になったので、さらなる進化を目指します。

今回やること:DNSのTXT認証の省力化

ワイルドカード証明書の発行には、TXTレコードの書き換えが必要です。

これを各API経由で自動化することができます。

準備するもの

今回は、これに加えDebianのAPTのCertbotと競合しないようにVirtualEnvを使うことにしました。

準備

最新版のCertbotを持ってきます。

git clone https://github.com/certbot/certbot
cd certbot

virtualenv 環境に入ります。

virtualenv certbot-test
source ./certbot-test/bin/activate

もしvirtualenv がない場合は pip でインストールします。 pip install --upgrade pip && pip install virtualenv

わたしは pyenv 環境で作っているのでpyenv コマンドとvirtualenvを使っています。

acme をインストール

cd acme
python setup.py install
cd ..

certbot をインストール

cd certbot
python setup.py install
cd ..

dns プラグインをインストール。今回は cloudflare を採用します。

cd certbot-dns-cloudflare
python setup.py install
cd ..

これで、Certbot側の準備は終了です。

api キーを用意します。

Cloudflareにログインし、プロフィールを表示、Global API Key を閲覧しコピーします。

api キーを保存しました。

/etc/letsencrypt/cloudflareapi.cfg

dns_cloudflare_email =  takuya**************@gmail.com
dns_cloudflare_api_key = *********************

キーが不用意に閲覧されなようパーミッションを設定しておきます。

sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg

これで、APIとキーの準備は終わりです。

起動テストを行います。

mydomain=example.com
sudo /home/takuya/certbot/certbot-test/bin/certbot  \
  certonly \
 -n --dry-run \
 --cert-name $mydomain \
 --dns-cloudflare \
 --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \
 --server https://acme-v02.api.letsencrypt.org/directory \
  -d "*.$mydomain"  \
  -d $mydomain

Certbot を使ってワイルドカード証明書を発行します。

mydomain=example.com
sudo $( which certbot )  \
  certonly \
  --cert-name $mydomain \
  --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \
  --server https://acme-v02.api.letsencrypt.org/directory \
   -d "*.$mydomain" \
   -d $mydomain

最後にWEBサーバーを再起動して終了です

sudo service nginx restart

複数枚を作るときは

次回以降は次のようにすると早いですね

cd ~/certbot
git pull
virtualenv certbot-test
source ./certbot-test/bin/activate
suod ./certbot-test/bin/certbot certonly 

まとめ

ワイルドカード証明書は管理コストが減って便利。

ワイルドカード証明書

こんかいは、Virtualenvを使ったのでsystemd に登録される自動更新のプログラムが使えないので、数ヶ月ごとに手作業で実行する必要はある。

この辺はそのうちAptレポジトリに含まれるCertbotが更新されるであろうから大丈夫だと思う。

ワイルドカードの証明書を使うのもいいけど、自動更新もあるわけだしランダムなドメイン名を無数に使わないなら、ワイルドカードは使わないで、Certbot-autoで自動更新のほうがいいかもしれない。

複数のドメインの証明書を1枚にすると同時にワイルドカードもまとめられたら嬉しい。試してみたい。

2019-03-27

記述追加

参考資料

ipコマンドで、ifconfig down/up やifdown/ifup 的な操作を行う方法

インターフェースのリンクアップとリンクダウン

iproute2 以前なら、何も考えずに、次のようなコマンドを打ち込んでいたところではある。

ifconfig eth0 down &&  ifconfig eth0 up

ip コマンドになって一番困ったのがこれ。

NICを切断と接続をipコマンドでやる

ip link set eth0 down 
ip link set eth0 up

これで、ネットワークのインターフェースを指定した再起動ができます。

省略形も使えます。

ip l set eth0 up

link は l に省略できます。 ip a が ip addr の略なのと同じです。

dhcpを更新したいだけなら

sudo dhclient -v -r eth0

なととしてもいいわけです。

ip コマンド地味に困る

iproute2 で検索したいので、みんなip コマンドじゃなくて iproute2 で記事書いてほしい

nmcli でもいいんだろうけど、あっちはMacのnetworksetup みたいに接続名で識別するからめんどくさそう.

takuya@:~$ nmcli connection show '有線接続 1'
takuya@:~$ nmcli connection down '有線接続 1'
takuya@:~$ nmcli connection up '有線接続 1'

nmcli は更に使いにくいな。。。ifconfig で良かったんじゃ・・・感

参考資料

Linux Force DHCP Client (dhclient) to Renew IP Address - nixCraft

tcpdump で ipv6 のパケットを見る

tcpdump のパケットで、v6だけにフィルタする。

tcpdump -v ip6

ip6 と書きます。 ipv6 だけど、ipv6とは書きません。

ping6のように、tcpdumpipv6 専用コマンド tcpdump6 があるわけででもないです。

ubuntu(gnome3) のキーリピートを変更する

ubuntu のキーリピートが遅い

設定は、アクセシビリティ→ タイピング。(( まぁUbuntuのことだから、 18.04 ではこうだけど、すぐ場所変わるんだろうけど)

ちょっとわかりにくいUIだけど、これで調整する

f:id:takuya_1st:20190108021907p:plain

上部はウエイト

上部は、キーリピートが開始するまでの時間。つまりリピートウエイト

左に行くほど時間間隔が小さい、つまり左ほど早い

下部はリピート間隔

下部は、キーリピートが発生するまでの時間。つまりリピート間隔

左に行くほど時間間隔が小さい、つまり左ほど早い。したがって左に行くほど入力回数が多くリピートが多い

右に行くほど、時間間隔が大きい。つまり右ほど遅い。したがって右に行くほど入力回数が少ないキーリピートが少ない。

わかりにくいUI

左に行くほど大きいと思いがちなので、一瞬混乱する。→に行くほど時間が大きい。

つまり「右=遅い」

f:id:takuya_1st:20190108022837p:plain

ubuntu 18.x なので

たぶんGNOMEのデスクトップでも同様だと思います。

2019-01-17

DebianGnome で確認した。同じでした。

f:id:takuya_1st:20190117152438p:plain

UbuntuのLive CD/DVD/USBで使用中にaptでソフトウェアをインストール

Live DVDで使用中にaptでソフトウェアをインストール

UbuntuインストーラーのUSBディスクで起動して、なにかやりたときにどうするか。

たとえば、SSD/HDDをリカバリしたいとか、ちょっとつかいたときにコマンドがなくて困ったりする。

Ubuntu/Debian などをUSBディスクにインストールしてもっておけばいいんだろうけど、そこまではめんどくさいし、とりあえずDVDやインストールUSB一つで済ませたいよね。

ddrescue がない

ddrescue がUbuntuのインストールメディアには搭載されてないのでそれをインストールしたい。

そうしておけば、HDDのコピーが行なえますよね。

apt install を可能にする。

ターミナルを開いて、universeを有効にしてあげると

sudo add-apt-repository universe

これで準備が完了

たとえばddrescue をいれる。

sudo add-apt-repository universe
sudo apt install gddrescue 

コマンドを覚えておけば、ubuntu のインストールUSBをひとつ作っておくだけで、ちょっとしたメンテ作業も楽なるに違いない。

参考資料

macのソフトウェアをアップロードをCLI(コマンド)から実行する。

ソフトウェアアップデートが必要なんですが、AppStore開くのがめんどくさい

takuya@~$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

そういえば、しばらくソフトウェアの更新をしてないと思いました。でもapt に慣れきった身体には、Mac App Storeを開いて更新するのがめんどくさいんです。

softwareupdateコマンドがあった。

コマンドから出来ないのかなと思って調べてたら、こんなものを見つけた

takuya@~$ softwareupdate -i -r
Software Update Tool

Finding available software

Downloading Safari
Downloading セキュリティアップデート2018-003

AppStoreの表示と一致するので安心。

f:id:takuya_1st:20181213170505p:plain

参考資料

https://stackoverflow.com/questions/34617452/how-to-update-xcode-from-command-line

aria2c でダウンロードの楽をする。

サーバーにごめんなさいしながら使う。aria2c 通称 aria または aria2

aria2c で同時多重ダウンロードをする。 物理回線以上には早くならないけど、回線の限界まで速度を上げる。

私は、単なるダウンローダー代わりに使っている

ダウンローダートして使う。

なにもオプションつけないと、単なる curl -LJO と同じ。

takuya@Desktop$ aria2c  https://example.com/out.50MB.img

12/06 16:38:14 [NOTICE] Downloading 1 item(s)

12/06 16:38:15 [NOTICE] Allocating disk space. Use --file-allocation=none to disable it. See --file-allocation option in man page for more details.
[#378d63 5.9MiB/50MiB(11%) CN:1 DL:167KiB ETA:4m28s]

適当にレジュームできる機能が好き

Ctrl-C で接続を止めたり、不意に再起動しちゃったりとかの場合でも、「同じマンドを再度実行すると、レジュームされる。

Status Legend:
(INPR):download in-progress.

aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.

TCP セッションを2本でダウンロード

takuya@Desktop$ aria2c  -x2 https://example.com/out.50MB.img

2本でダウンロードするので1本より早くなる。

速度は期待しないほうがいいかも

TCPの帯域を専有すると少し早くなりますね。かといって、本数を大きくしすぎると却って遅くなる気がする。

企業が展開するミラーサーバとかCDNとか強いサーバー相手なら遠慮なく言ってもいいと思うけど、ボランタリーベースで行われてるサーバーに深かけるの良くない。

インストール

sudo apt install aria2

2019-08-27

追記

参考資料

次世代ダウンロードツールAria2とWEB-UIのセットアップ - Qiita

日常から使えるUnix系OS業務効率up技 - Qiita

ip コマンドで IPv6のアドレスだけを表示する

ip コマンド で v6 のアドレスだけに搾って表示

v6のIPアドレスだけを見たい時がある。ipアドレスをズラズラっと表示されるとめんどくさいので。

 ip -6 addr show br0   # v6 のみ

以前まとめたけど忘れてたので、再度メモ

以前のエントリ

IPv6 での定番ネットワークコマンド(dig/nmap/curl/ip) - それマグで!

apt パッケージ名のnox の意味について

apt search していると、時々見かける nox の意味は何なの?

たとえば、次のようなパッケージに使われている。

apt install vlc-nox
apt install vim-nox

このように、nox と付くものがある。このsuffix(接尾子)は何の意味があるのか。

nox とは

nox とは no require X の略である。

なるほど

つまり、 X window を必要としないCLIでコマンドで動作するものですね。

参考資料

What is vlc-nox? - Ask Ubuntu

ext4 のファイルシステムを拡張して確認する。

ext4 の容量を拡張する

raspi などで resize して expand file system と書かれているアレ

gdisk で容量拡張

sudo gdisk /dev/whatyouwant

resize2fs で容量拡張した部分へextを拡張

sudo gdisk /dev/whatyouwant

情報を更新

sudo partprobe

結果を確認

lsblk

partprobeしないと反映されない。

この辺はよくわかってないけど、lsblk で確認する情報は、partprobeを回さないと、更新されない。

関連資料