カテゴリーアーカイブ Linux

takahashi 著者:takahashi

再起動しなくてもUbuntu OSアップデートが自動適用できる! “Canonical LivePatch”

今までOSのアップデートを適用する際、とくにカーネルのアップデートなどは必ず再起動が必要となっていました。
しかし、Linuxカーネル4.0からライブパッチ機能が正式に実装され、再起動を行うことなく更新が取り込めるようになりました。

Linux 4.0リリース候補版にライブパッチ機能が導入 – ZDNet Japan

しかし、この機能は飽くまで”カーネルに機能として存在している”形で、ユーザーが簡単に利用できるようになるかどうかはディストリビュージョン次第、となっています。

そんな中、UbuntuのCanonicalがUbuntu向けに”Canonical LivePatch”の提供を開始しました。

この機能はUbuntu16.04から利用可能となり、18.04からGUIインターフェースが用意され、インストール時やインストール後に、ユーザーが簡単に設定できるようになりました。(※Ubuntu Oneへの登録が必要。無料ユーザーは3マシンまで)
有効化方法などは下記のサイトを見ていただければ分かりやすいかと思います。

【Ubuntu18.04】新機能 LivePatchについて – ガジェット好きの日記

自分も自宅で仮想でサーバーマシンを動かしており、そのホストOSとしてUbuntuを利用しています。
ホストOSを再起動するためには、複数台動作している仮想OSをすべて停止しないといけないためかなり大変でした。

今回のLivePatchサービスのリリースで、再起動することなくセキュリティパッチの修正を受けられるのは非常にありがたいです。
ちなみに、適用するとSSHなどでログインした際に

このように表示され、正常に動作していることが確認できます。

  • この記事いいね! (0)
takahashi 著者:takahashi

Apacheをどう設定しても403になる時はSELinuxを疑え!

ここ最近、サーバーを構築する機会が何度かあったのですが、Apacheの構築中しばしば同じところでハマることがあったので備忘録。

Apacheでは通常、公開するディレクトリ(ドキュメントルートとするディレクトリ)のアクセス権限を下記のように与えてやれば、Webブラウザからのアクセスが可能になります。
例えば、

#2.2系
<Directory /var/www/html>
Order Deny,Allow
Deny from All
</Directory>
または
#2.4系
<Directory /var/www/html>
Require all granted
</Directory>

とすれば
/var/www/html
配下がアクセス可能になるはずです。
勿論、OS側のアクセス権限も調整する必要がありますが、Directoryディレクティブを設定し、なおかつOS側のファイルアクセス権限も問題ないはずなのに、ブラウザで開くと何故かステータスコード403(Forbidden)が返され、コンテンツが見えない、といった事情が起こりました。

ドキュメントルートのディレクトリよりもさらに上のディレクトリに、実行権限がついてるかどうかを確認したり、権限を一括で書き換えたりなど行いましたが、一向にアクセスできず。

いろいろ調べたところようやく原因に多とりつきました。

SELinuxです。

SELinuxはアクセス制御を行うモジュールで、米国NSAがオープンソースで提供しています。

非常に強力なのですが、サーバーのように一般的によくアクセスされる場合は障害になることも多いので、基本的には無効にします。
ただ最近は、インストール時に既に無効になっているものも多いのですが、今回使ったCentOSの場合はデフォルトで有効になっていたようで、SELinuxが動いていることに気づかずにそのまま作業してしまっていました。

SELinuxの設定の確認は

getenfotce

とすると確認ができます。

無効化すは

setenfotce 0

でできますが、これだけだとOSを再起動した際に復活してしまうので、

/etc/selinux/conf

SELINUX=enforcing

の記述を

SELINUX=permissive

に変更しておきます。
これで、再起動時もSELinuxが無効のままにしておくことができます。

なんど設定しなおしてもうまくいかない…!という方は一度SELinuxの設定を確認してみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

MariaDBでDBをテーブル単位で暗号化する方法

最近、何かと情報流出のニュースって多いですよね。
基本的にはサーバに不正侵入させないのが第一ではあるのですが、攻撃が巧妙化してくると、なかなか簡単には防御できないこともあり得ます。
そういう場合も想定して、万が一サーバに第三者が不正に侵入してきたときの保険として、データそのものを暗号化してしまう方法があります。

Webサービスなどでは、データの保存先としてよくデータベースを利用しますが、最近このDBエンジン自体が暗号化機能を持っているものが出てきました。

今回はMariaDBというMySQL互換のDBエンジンで暗号化設定をしてみました。
(使用OS:CentOS 7)

まずはmariaDBをインストールします。
mariaDB自体はCentOSのepelリポジトリにも存在しているのですが、実はepel版MariaDBはバージョン5系のものとなっており、暗号化がサポートされるのが10.1からとなっています。
そのため、公式リポジトリのMariaDBでは暗号化することができません。

バージョン10.1以上のMariaDBはMariaDB公式のリポジトリから入手できるので、今回はこちらを使います。

折角なら最新版をということで、現時点の安定板の最新版 v10.3 をインストールします。

sudo vi /etc/yum.repos.d/mariadb.repo

などどして、下記の内容でMariadbのリポジトリファイルを作成します。

# MariaDB 10.3 CentOS repository list - created 2018-07-04 11:06 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

ファイルを作成したらyumでmariadbをインストールします。

#MariaDBをインストール
sudo yum install MariaDB-server MariaDB-client

MariaDBを立ち上げる前に、暗号化の設定を先に行っておきます。
まずは暗号化に使うキーを生成します。

openssl enc -aes-256-cbc -k パスワード -P -md sha1

下記のような内容が表示されます。

salt=英数字
key=英数字
iv =英数字

新しくファイルを作成し、表示された英数字を次のように記載します。

暗号化・復号化する際の鍵番号(1以上の数字を任意に指定);ivの値;keyの値

鍵ファイルを暗号化します。

openssl enc -aes-256-cbc -md sha1 -k パスワード2 -in 先程つくった鍵ファイルのパス -out 暗号化後ファイルの保存先

/etc/my.cnf.d/server.cnf
を管理者権限で開き、[mysqld]セクションのすぐ下に、下記の設定を追記します。

plugin-load-add=file_key_management.so
file_key_management
file_key_management_filename = 先程作成した鍵ファイルのパス
file_key_management_filekey = 鍵ファイルにかけたパスワード
file_key_management_encryption_algorithm=AES_CBC

これで準備ができたので、早速MariaDBを立ち上げます。

sudo systemctl start mariadb #mariadb起動
sudo systemctl enable mariadb #mariadbの自動起動を有効化

これで暗号化が有効になったはずです。
それでは早速、暗号化されたテーブルを作ってみます。

CREATE DATABASE hoge;
use hoge;
CREATE TABLE test (id INT) ENCRYPTED=YES ENCRYPTION_KEY_ID=先程の鍵に指定した鍵id;

テーブルにデータを入れます。

#例
INSERT INTO hoge(id) VALUES (1);

この状態でselectをかけると通常通りデータが出力されますが、最初に編集した
/etc/my.cnf.d/server.cnf
の今回の変更部分をすべてコメントアウトした状態でmariaDBを再起動、再びhogeテーブルをSELECTすると…

ERROR 1932 (42S02): Table 'hoge.test' doesn't exist in engine

のように表示され、中のデータが見れなくなっていることがわかるかと思います。

このようにしておけば、MariaDBのデータ本体を抜かれても、キーファイルが漏れていても、そのパスワードが漏れなければデータの中身を見られる心配はありません。
ただし、/etc/my.cnf.d/server.cnfにパスワードを直書きしてしまっているので、このファイルを漏れないように気を配る必要はありそうです。

今回のMariaDBのように、暗号化する仕組みをはじめから備えていて、簡単に設定できる環境も増えてきています。
これからもし情報が洩れてはいけないようなサービスを作ろうと考えられている方がいましたら、是非参考になれば幸いです。

  • この記事いいね! (0)
takahashi 著者:takahashi

Ubuntu 18.04に xrdpをインストールしてみる

最近、サーバーOSとしてUbuntu 18.04をGUI付きで使い始めました。
SSHでCUI上でフルコントロールができるとはいえ、やはりリモートでGUIで操作したいときもたまにあります。(GUIアプリケーションの操作など)

そういう時にリモートからGUIを操作する手段はいくつかあるのですが、今回はXRDPという、Windowsのリモートデスクトップクライアントから接続できるようにする方法を試してみました。

まず、aptでxrdp本体をインストールします。

sudo apt install -y xrdp

Ubuntuの場合、基本的にこれだけで動作するのですが、このままだとログイン後にエラーが発生してうまくつながらないので、追加の設定を行います。

#new_cursorsの無効化
sudo sed -e 's/^new_cursors=true/new_cursors=false/g' \
 -i /etc/xrdp/xrdp.ini

#xrdpサービスの再起動
sudo systemctl restart xrdp

#xsessionファイルの作成
D=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
cat <<EOF > ~/.xsessionrc
 export GNOME_SHELL_SESSION_MODE=ubuntu
 export XDG_CURRENT_DESKTOP=ubuntu:GNOME
 export XDG_DATA_DIRS=${D}
 export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF

#Authentication Requiredダイアログの回避
cat <<EOF | \
   sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla
 [Netowrkmanager]
 Identity=unix-user:*
 Action=org.freedesktop.color-manager.create-device
 ResultAny=no
 ResultInactive=no
 ResultActive=yes
EOF

sudo systemctl restart polkit

詳細についてはこちらを参照してください。
Ubuntu 18.04: GNOMEデスクトップ環境にXRDPで接続する – Narrow Escape

あとはWindowsのリモートデスクトップでWindowsに接続するのと同じ方法で接続します。

認証情報が間違っている場合はこちらの画面が表示されます。
ここで正しい情報を入力すればそのままログインできます。

ログイン後の画面。
ちゃんとデスクトップが表示されました(/・ω・)/

Windowsにはよくリモートデスクトップで繋げているけど、めんどくさいのでLinuxにも同じ方法で繋げたい!という方にはおすすめです。

  • この記事いいね! (2)
takahashi 著者:takahashi

Google Chromeがv67からPWAに対応。Twitterなどの対応サイトで利用可能に。

最近、Windows10 AprilUpdateでMicrosoft EdgeベースのPWAに対応したニュースがありましたが、Google Chromeも、Chrome67からPWAに対応したようです。

Google Chrome 67安定版リリース、「サイト分離」機能やセンサー用API「Generic Sensor API」を搭載 – Gigazine

Twitter LiteなどのPWA対応サイトをChromeブラウザ経由でも、アプリとしてインストールしておくことが可能となりました。

ただ、現在はまだデフォルトで無効になっているようですので、
chrome://flags
から有効にする必要があります。
chrome://flagsにアクセスしたら、検索バーに”PWA”と入れます。

Desktop PWAs をDefautからEnableに変更します。

再起動を求められるので、Chromeを再起動を行えば、PWAが有効になります。

Twitterの公式アプリが自分の環境で動かない、アプリがない、という方は是非試してみてはいががでしょうか。

  • この記事いいね! (0)
takahashi 著者:takahashi

主要Linuxディストリに追加された新しいパッケージ形式”Snaps”とは

恥ずかしながら最近初めて知ったのですが、最近の主要ディストリでは、RPMやDEB形式ではない新しいアプリケーションパッケージシステム(パッケージマネージャー)である”Snaps”(Snap、Snappyとも呼ばれる)が実装されているらしいです。

Linuxの新しいパッケージフォーマット、Ubuntu生まれのSnapsは、小アプリケーション群のためのコンテナのようだ – Tech Crunch

最初”なぜ今更あたらしいパッケージマネージャーなんて…”と思ったのですが、記事を読んでなるほど納得がいきました。

パッケージは端的に言ってしまうとWindowsでいう所謂”Windowsインストーラ”にあたります。本来、Linuxではアプリケーションをインストールするときに”ビルド”という手動の作業が必要だったのですが、従来のRPMやDEBなどどいったパッケージマネージャーは、パッケージを”インストール”することによって、初期設定も含めて全自動でアプリをインストールしてくれるという非常に便利なシステムです。


debパッケージ


rpmパッケージ

ただし、Windowsインストーラと異なるのはそのパッケージ単体をインストールするだけではアプリは動作しないという点。
Linuxの場合、一つのアプリを動作させるためには、そのアプリが動作するのに必要となるライブラリ群をあらかじめOSにインストールしておく必要があります。
アプリとアプリが必要とするライブラリの関係を”依存関係”とよび、パッケージにはアプリが必要とする依存関係も登録されています。

ところが、この依存関係というのが非常に厄介な存在です。
実はDEBやRPMといったパッケージマネージャーは飽くまで依存関係にあるアプリがインストールされているかのチェックのみで、足りない依存関係を自動で満たす機構はもっていません。
もっとも現在ではyumやaptなどといったコマンドを使えばこの依存関係の自動補完も行ってくれますが、あくまで外部のツールが補完しているのであり、DEBやRPM本体の機能でないことには注意が必要です。

さらに、インストールするアプリが要求するライブラリなどによっては、使用しているOSや、登録しているリポジトリで提供していないものがある場合が考えられます。
この場合、たとえaptやyumを用いたとしても、アプリをインストールすることができません。

さらに、DEBとRPMには互換性がなく、DEBパッケージマネージャーを採用しているOSでRPMパッケージはインストールできないし、逆にRPMパッケージマネージャーを採用しているOSでDEBパッケージはインストールできません。
一応、パッケージ形式を相互変換してくれる”alien”コマンドはあるのですが、自分が試した限りでは上手く動作しませんでした。

今回のSnapsパッケージは、そんな従来のパッケージマネージャーの欠点を解決してくれそうなシステムになっているようです。

 

Snapsは、最近はやりの仮想化技術である”コンテナ”のような仕組みになっており、Snapsパッケージ内にアプリとそのアプリが必要とするライブラリ群もすべて含まれているとのこと。
また、Snaps内のアプリはアップデートもロールバックも行えるようになっているようで、より柔軟な使い方ができるようになりそうです。

つまり、同じLinuxでありながら使用できるアプリが異なっていた各ディストリ上でも、Snapsをサポートしているバージョンであれば、debian系LinuxであろうとRedHat系Linuxであろうと、同じパッケージをインストールすることができるようになります。Linuxアプリ開発者は今までdeb形式とrpm形式のパッケージを準備する必要がありましたが、今後はSnapsパッケージ一つ作るだけで両方のLinuxユーザーから利用してもらえるようになります。とても画期的ですね。

現時点ですでにSnaps形式のパッケージが出回りつつあるようですが、まだ日本語化されていなかったりするパッケージも多いようで、快適に利用できるようになるまではもう少し時間がかかりそうです。

Snapcraft

  • この記事いいね! (0)
takahashi 著者:takahashi

自宅のPCにUbuntu 18.04 LTS をインストール

Linuxディストリビューションの一つであるUbuntuの最新版、Ubuntu 18.04 LTSを自宅のPCにインストールしてみました。

16.04 LTS までデフォルトになっていたデスクトップ環境Unityですが、UbuntuのモバイルOS進出断念に伴い開発が終了されました。

UbuntuのCanonical、「Unity 8」開発打ち切りを発表 スマホの取り組みも終了 – ASCII.jp

という経緯で18.04ではGnome 3がデフォルトになっていました。

個人的にGnome3はGnome2とくらべてかなり操作感が変わりわかりづらくなっていたので、[Gnome3かー」と思ってはいたのですが、18.04に搭載されているバージョンのGnome3のUIは以前触ったときに比べてかなり操作しやすくなっていました。

まだ使い始めたばかりで、どんなところが変わっているのかなどまだ把握できていない点が多いので、また少しづつまとめていけたらと思います。

  • この記事いいね! (1)
著者:杉浦

screenとshutdown

 2018/4/16本日、screenからexitするつもりがscreen中でshutdownコマンドを実行してサーバを落とす事故を起こしてしまいました。そんなわけでlinuxのscreenコマンドとshutdownコマンドについて書くことにしました。screenについてはこちらの記事こちらの記事で詳しく話されています。
screen
 screenは端的に言えば別画面を作るコマンドです。ターミナルと同じ機能を持つ別のプロセスが走り出すような感じです。
参照:SCREEN Quick Reference
よく使う操作

新たにscreenを作る screen
名前を付けてscreenを作る screen -S <name>
現在存在しているscreenをリストアップ screen -ls
指定した<id|name>のscreenに移動 screen -rx <id|name>
screenを動作させたまま抜け出す screen中でCtrl-a d
screenを消して抜け出す screen中でexit

 
shutdown
 シャットダウンを行うコマンドです。ただ命令するだけでも問答無用でshutdownコマンドが実行され出しますがコンピュータのシャットダウンが行われるまで多少猶予があります。CentOS7.4.1708のデフォルト設定におけるオプションなしの猶予は1分でした。特に覚えておきたい大事な操作は’shutdown -c’で実行できるshutdown処理の中断命令です。shutdownはCtrl+zやCtrl+cを打ち込んでも走り続けるため、シャットダウンを中止するためにはshutdown -cを入力する必要があります。一応shutdownを実行した際に「use ‘shutdown -c’ to cancel」と文面がでますが、焦り出す上に英語に親しくない私みたいな人は読み取れないことがあると思います。気を付けましょう。

  • この記事いいね! (0)
takahashi 著者:takahashi

気になる端末:GPD Pocket

持ち運びに特化したノートPC:ネットブックが一時期大流行しましたが、最近はその数をかなり減らし、タブレット型PCやキーボードと画面が分離するコンバーチブルPCが目立ってきています。

持ち運びに重点を置くのなら確かにタブレット型で、キーボードは必要な時に着ける形の方が理にかなっている気はします。ただ、個人的にはキーボードとタブレットを別々で持ち運ぶというのにもちょっとわずらわしいのでは…と思うときがあります。

やっぱり、ノートPCにはハードウェアキーボードがついていてほしい…でもかさばってほしくない….

そんなわがままを叶えてくれるのがネットブックだったので、少なくなってしまったのはちょっと残念に思っていました。

そんな中、彗星のごとく現れたのが、

中国・深センのデバイス製造メーカーGPDが発売した「GPD Pocket」という機種です。
大きさはなんと7インチという極小サイズ。電子書籍と見間違うほどの小ささなのですが、スペックはIntel Atom x7-Z8750、ストレージ128GB、RAMも8GBあります。
CPUを除けばMacBookAirとさほど変わらないスペックです。

ポートもUSB3.0、イヤホンジャック、USB Type-Cなど、主要なものは一通りそろえています。
OSもWindows 10 Home入りですが、Ubuntuも公式にサポートしている点はガジェット通な人の心をつかみそうです。

使用感はこちらのかたのブログでよくまとめられています。

7インチの極小ノートパソコン「GPD Pocket」と過ごした1ヵ月まとめ – goodegg.jp

昔は2番煎じ、3番煎じ間の強かった中華製ガジェットですが、最近は国内や主要メーカーよりもより痒いところに手が届く”一番手”なハードが増えてきた気がします。
是非今後も注目していきたいですね。

参考:
UMPCを忘れられないあなたへ 超小型パソコン『GPD Pocket』を日本でも – Makuake

7インチの極小ノートパソコン「GPD Pocket」と過ごした1ヵ月まとめ – goodegg.jp

  • この記事いいね! (0)
takahashi 著者:takahashi

Linux(Unix)のscreenの外からコマンドを実行する方法

LinuxやUnixでSSHにつなぎながら作業する際、時間のかかる処理を行わせたりでしばらく放置しておく機会と言うのはしばしばあります。

そんなときに、途中でインターネット接続が切れてしまうと最悪です。また、トラブル以外でもは会社の業務終了時間になって退社する時するなどでマシンの電源を落とさないといけない場面があったりします。

そんなときにscreenコマンドは便利です。
サーバー側に仮装のターミナルを作成し、そこで様々な処理を実行することが出来ます。
途中でSSHが切断されてしまっても、screenはサーバーの中で動作しているので、処理も続行されます。途中で処理させながらscreenターミナルから抜けることも、再度入ることも可能です。

また、スクリプトを簡易的にデーモンっぽく動作させる使い方もできます。

このscreenコマンドですが、実は外部からコマンドや文字列を与えることができるのはご存知でしょうか。

例えば、s1という名前でスクリーンを作成し、

$ screen -S s1

s1スクリーン内でpythonのプロンプトを起動しておきます。

$ python

Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

このs1スクリーンに、外からs1の標準入力に対して文字列を入力したい場合、
まず、ctrl+a d でスクリーンをデタッチした後で、

$ screen -S s1 -X stuff 'print "Hello world!"
'`echo -ne '\015'`

とした後、再度screen -r s1 でアタッチすると

>>> print "Hello world!"
Hello world!
>>> 

と表示されているはずです!

これは例えば、screenで実行中のプログラムに文字列を渡したい時や、特定のscreenでのみ定期的にプログラムを実行したいときに有効です。

予めシェルスクリプトにしておけば、cronで回すことも出来ます。
便利なので、ぜひ一度試してみてはいかがでしょうか?

参考サイト:
Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する – 純規の暇人趣味ブログ

別ターミナルで動いているscreenに外部からコマンド実行 – 戯術者の日記

  • この記事いいね! (0)