カテゴリーアーカイブ Linux

著者:杉浦

アンドロイド用SSHクライアントJuiceSSHの紹介

 GNSS関連の開発を行っていると外に出ての作業が増えてきます。衛星の信号を受信するには天頂に障害物のない外が一番なためです。一方で外に出ると開発用の道具を持ち運びにくいです。ノートPCならばぎりぎりですが、それでもそこそこ重く危険です。その点スマホならば全然問題ありません。JuiceSSHはAndroid上で開発を行うための便利なアプリの一つです。
 JuiceSSH – SSH Client – Google Play のアプリ
 使い方は正直アプリを見ながらポチポチするだけで大体わかります。サーバにつないでサーバ内部でいつも通り色々やるだけです。スマホのまま色々やれるのは結構便利です。
 一見分かりにくく重要だったのがスクリーンショットで囲った特殊キー群です。文字入力時に文字入力部の上をタップすると現れます。スマホのままでは扱いにくい部分全般(パイプとか区切りとかスクリーンやエディタ絡みとか補完入力とか)をカバーしてくれます。

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

Linux上でコマンドを数秒おきに実行させる方法

Linuxを使用していると、各リソースの使用率やストレージやマシンの温度などの推移をCUI上でリアルタイムで確認したいときがあります。

そんな時は、watchコマントを使用すると便利です。

watchコマンドの使い方は下記の通り。

watch -n 秒数 定期実行したいコマンド

下の画像は、マザーボードから送られてくる各温度センサーの値を表示する”sensors”コマンドを実行した場合の画面です。

テキストがどんどん追記されていくようなイメージかと思ったら、(htopのような)一画面分のバッファを丸々書き換えるような感じの動作になっていました。

更新日時(最後にwatchコマンドによってコマンドが実行された時間)なども表示されるのでわかりやすいですね。

簡単にモニタリングを行いたい場合はおすすめです。

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

CentOS 8 + Gnome Shell環境でVBoxGuestAdditionをインストールする方法

Cent OS 8 をGUI+開発ツール込みでVirtual Boxへインストールしてある環境で、Guest Additionをインストールしようとしたのですが、エラーが発生してカーネルモジュールのビルドに失敗しインストールにこけるという問題が発生しました。

インストーラー上では原因が表示されないため、

/var/log/vboxadd-setup.log

という名前から始まるファイル名のログファイルを確認する必要があります。

今回は下記の内容のエラーが落ちていました。

Makefile:958: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel".  Stop.
make: *** [/tmp/vbox.0/Makefile-footer.gmk:111: vboxguest] Error 2

libelf-devel という名前のパッケージが足りていないようです。

ディストリごとにパッケージ名が異なるため調べる昼用がありますが、CentOS 8 の場合は

elfutils-libelf-devel

という名前になっていました。

このパッケージをdnf(yum)でインストールします。

sudo dnf install -y epel-release
sudo dnf install -y elfutils-libelf-devel

これで無事VBoxGuestAdditionのカーネルモジュールのビルドができました。

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

CentOS 8 でWaylandを無効化する方法

先日リリースされたばかりのCent OS 8ですが、今までGUIの描画サーバー(ディスプレイサーバー)として使われていたX.orgに変わり、Waylandが採用されるように変更となっています。

このWaylandですが、まだ出たばかりだからなのか、なかなか厄介な問題がいくつかあります。

まず、NVIDIA社のGPUが動作しません。

つまり、Waylandを用いた状態ではそもそもGeForceなどのグラフィックボードを動かすことができない状態になっているようです。

他にも一部のLinuxアプリがWaylandでは動作しなかったり、などの互換性問題も発生しているようですので、安定するまではX.orgに戻したい…という場合もあるかと思います。

今回はディスプレイサーバーをWaylandからX.orgに戻す方法をご紹介します。

“/etc/gdm/custom.conf”を開き、中の[daemon]セクションが次のようになるように変更します。

...
[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false #falseに変更
...

この変更を行った後、一度ログアウトします。

ログイン画面に戻ったら歯車をクリックすると

このように、X11 ディスプレイサーバーのログインオプションが表示されるようになります。

この(X11 ディスプレイサーバー)と出ている選択肢のいずれかを選択したうえでサインインすることで、WaylandではなくX11が使用されるようになります。

最近のLinux主要ディストリでは、新しい枠組みが出てくると足並みをそろえて導入・置き換えをしようとする動きが多いですが、従来のものと比較してまだデメリットが多いものを導入するのは時期尚早な気がします。

先進的なディストリであっても、こういった基本的な部分に係る変更についてはもう少し慎重になってほしいですね…

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

CentOS 8 をインストールしてみた

先日9/5、Linuxディストリの一つであるCentOSの最新版として、CentOS 8 がリリースされました。

CentOS-8 (1905) リリースノート – CentOS WiKi

CentOS 8 は、CentOS 7に次ぐメジャーバージョンアップとなり、Cent OS 6から 7になった時と同様にいくつかのOSのコンポーネントが別のものに置き換えられているなどの大きな変更が加えられています。

具体的にはパッケージマネージャのyumがdnfへ置き換えられていたり(コマンドは名前が変わってる以外基本的なものはほぼ一緒)、Firewalldのバックエンドがiptablesからnftablesへ置き換えられるなどどいった変更が加えられています。

詳細はこちらを確認してください。

RHEL 8.0 第1章 概要 – RedHat Customer Portal

今回は、さっそくVirtualBoxにCentOS 8 をインストールしてみたので、簡単にレビューしてみたいと思います。

まずはインストールしてみます。

CentOS Project 公式サイトからインストールディスクのイメージファイルを入手します。

“The following mirrors in your region”にリストされているリンクが自分のPCからネットワーク的に近いサーバーになりますので、この中から一つからダウンロードすればOKです。

個人的にはIIJのサーバー( http://ftp.iij.ad.jp/pub/linux/centos/…… )がおすすめです。

あらかじめマシンを作成したうえで、ダウンロードしたISOファイルを、仮想マシンのディスクドライブにセットします。

詳細な手順はこちらのサイトを参照してください。

windows10にvirtualBoxにてCentOS7.0をインストール – Qiita
※CentOSのバージョンは違いますが、仮想マシン作成までは手順はほぼ一緒です。

この状態で起動すると

カーソルキーで一番上の”Install CentOS Linux 8.0…”を選択します。

インストーラが起動すると、まず言語選択画面が出てきますので、日本語を選択すると、すべての表示が日本語に書き換わります。

続行をクリックするとインストール設定メニューが表示されます。

パッケージの設定

ディスクの設定

そしてネットワークの設定。

ネットワーク設定については、常に使用するNICは右下の”設定”から、”この接続が利用可能になったときは自動的に接続する”にチェックを入れておかないと、インストール完了後にインタ―ネットにつながっていない状態で起動してしまいます(;´∀`)

この後、インストール開始をクリックすればインストール作業が開始されます。その際、rootユーザーのパスワードと一般ユーザーのidとパスワードを設定する画面が表示されるので、適宜設定します。

インストール時の詳しい設定については、先程ご紹介したQiitaの記事を参考にしてください。

インストールが完了し、再起動をするとログイン画面が出てきますのでインストール中に設定したパスワードを入力すると…

デスクトップが表示されました…!

CentOS7ではgnome-shellがフォールバックモードで立ち上がるのがデフォルトだったかと思いますが、CentOS8 ではフルバージョンのgnome-shellが立ち上がってきました。

見た目もかなりスタイリッシュですね…

ちなみに画像ではVirtualBoxのGuestAdditionが導入済みになってますが、これをインストールする際少々追加でインストールするものが必要になってましたので、またセットアップ方法をご説明できればと思います。

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

UNIX系OSのsudoコマンドにsudoersファイルの制限を無視してroot権限でコマンドが実行できる脆弱性が発覚

最近のUNIX系のOSにおいて、直接rootユーザーとしてログインする代わりに、1コマンド単位でroot権限に昇格できるコマンドとしてsudoが用意されています。

現在では、rootユーザーとしてログインするよりも一般ユーザーでsudoを使用した方が安全といわれていますが、そんなsudoに先日、ちょっとマズい脆弱性が発覚しました。

Linuxの「sudo」コマンドにroot権限奪取の脆弱性。ユーザーID処理のバグで制限無効化 – engadget 日本版

sudoには特定のコマンドのみroot権限で実行可能とするような、各ユーザーに対するコマンド単位での制限を設定することができます。

例えば、設定ファイルやサービスの起動・停止はできるようにしたいが、サーバー自体の再起動・停止はさせないようにしたい…などどいった場合は、対象のユーザーに対してのみshutdownコマンドなどをroot権限で実行することを制限することができます。

ところが今回、sudoコマンドでrootユーザーではなく特定のユーザーとして実行すると、sudoersで指定された制限を無視して、すべてのコマンドをroot権限として実行できてしまう現象が発見されました。

sudo で UID に「-1」または「4294967295」を指定すると root 権限でコマンド実行出来る脆弱性 – らくがきちょう

詳細は上記のリンクを参照いただきたいのですが、一部のコマンドのみsudo経由で実行できるように許可されたユーザーにおいて、ユーザーidが”-1″、もしくは” 4294967295″のユーザーを指定した場合にsudo のバグで制限なくroot権限が発動できてしまう、というのが今回判明した現象です。

なお、もともとsudoを使用する権限が一切ないユーザーについては上記のユーザーidのユーザーとして実行しようとしてもはじかれる為、管理者でない一般ユーザーが管理者権限を行使できてしまう、といったことはないようです。

自分でも更新前のsudoで試してみましたが、昇格はできませんでした。

 sudo -u#-1 service nginx reload
[sudo] password for testuser: 
testuser is not in the sudoers file.  This incident will be reported.

基本的にsudoは完全な管理者として昇格する以外の使い方はあまりされていない印象なので、おそらく影響を受けたユーザーはさほど多くないかと思いますが、もしコマンド単位での制限をかけている場合は、早急にsudoのアップデートを適用すべきでしょう。

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

【Linux】xxdコマンドでバイナリファイルを16進数で表示、16進数からバイナリファイルを構築

 バイナリファイルを扱う時、特に面倒なのは読み書きにバイナリ専用の道具が必要になることです。16進数表記のテキストにすることで一気に操作しやすくなります。Linuxのコマンドを用いるならば次のようにこれを実現できます。リンクはDebianですが大体同じ感じで他の色々なLinuxデストリにも入っているようです(手元のGit Bashでもできました)。
xxd(1) — xxd — Debian unstable — Debian Manpages

xxd -p ファイル名

 これを使うだけで次の様にバイナリファイルが16進表記で表示されます。これを読みやすい様2^n文字区切りにして保存すればそれでOKです(自分の場合、リダイレクトでファイル化→手元のサクラエディタで弄る、としています)。そうすればバイナリファイルのフォーマットのリファレンスと快適ににらめっこして作業を進められます。

 似たような16進表記用コマンドにhexdump, odというものもあります。
 編集した後の16進表記ファイルをバイナリファイルに再構築する必要もあります。これは次のコマンドでできます。

xxd -r -p 16進表記ファイル名 出力されるバイナリファイル名

 オプションもろくに覚える必要もなく実に簡単です。

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

Certbotで証明書の更新後に自動で特定の処理をさせる方法

無料でSSL証明書を発行してもらえるサービスであるLet’s Encryptですが、同時に更新とSSL証明書の設定の自動化を行うCertbotという仕組みを提供しているのも特徴です。

このCertbotですが、いくつかプラグインがあり、ワイルドカード(任意のサブドメインに適用できる)SSL証明書を取得しない場合、メインで使用しているWebサーバー向けのCertbotプラグインを使用すると、自分の方で細工しなくても、Webサーバーを停止することなく自動で取得時の認証や証明書の適用を行ってくれます。

ただ、ワイルドカード証明書の場合はDNS-01という、ドメインを登録しているDNSサーバーを使用した認証方法に限定されてしまうため、上記のようなWebサーバー向けのプラグインを使用することができません。

この場合、ワイルドカード証明書を取得時、もしくは更新時にSSL証明書のインストールや差し替えは行われますが、Webサーバーへの自動適用は行われません。

この状態のままだと、せっかくSSL証明書を自動で更新できても、自動でWebサーバーに読み込まれないため、”いつの間にか期限切れになってた…”なんて状況が発生してしまうことになります。

そこで、僕の場合はSSL更新時に合わせてWebサーバーを自動的に再起動できるように、スクリプトを次のようにしていました。

/usr/bin/certbot renew --force-renew >> /var/log/letsencrypt/ssl-renew.log 2>&1 && service webサーバーのサービス名 restart >> /var/log/letsencrypt/ssl-renew.log 2>&1

ただこの方法では、まれにSSL更新とWebサーバーの再起動のタイミングが悪く、Webサーバーの再起動が失敗してしまうことがありました。

SSL更新からWebサーバー再起動の間で数秒間マージンを置くことで一応はちゃんと動作するようになったのですが、あくまで固定した秒数待つだけで、SSLの更新状態のチェックなどは行っていないため、必ずしも対策できているとはいいがたい状況でした。

さてどうやればうまくできるかなーと考えていたところ、実はCertbot自体に、処理完了後に特定のコマンドを実行させることができる機能があることを知りました。

例えば、証明書取得時のコマンドに

sudo certbot certonly --manual \
-d example.com -d *.example.com -d ...  \
-m mail@example.com \
--agree-tos \
--manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory

のようにするかと思いますが、このコマンドに

--post-hook="実行したいコマンド"

のようなオプションを付加することで、SSL取得処理終了後に指定したコマンドを実行してくれます。

例えば、証明書取得終了後にnginxを再起動させたい場合は

sudo certbot certonly --manual \
-d example.com -d *.example.com -d ...  \
-m mail@example.com \
--agree-tos \
--manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory
--post-hook="service nginx restart"

のようにすると、SSL取得処理が終了した時点でnginxを再起動させることができます。

取得時に指定したオプションはcertbotの設定ファイルに記録されるため、2回目以降の更新時では

sudo certbot renew

とするだけでpost-hookも含めて処理してくれるようになります。

なお、このpost-hookはssl証明書の処理が完了したら、失敗・成功にかかわらず実行する、という指定になってますが、処理前に実行させたり、証明書更新が行われた後のみ実行、といった指定も可能となっているようです。

Let’s EncryptのSSL証明書更新時にサービスを再起動する – Qiita

このあたりの設定をうまく使えば、運用がより楽になりそうですね。

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

CentOS 8 rel.

先日9月24日に CentOS 8 の正式リリースの案内がありましたね。

[CentOS-announce] Release for CentOS Linux 8 and CentOS Streams

https://lists.centos.org/pipermail/centos-announce/2019-September/023449.html

CentOS-8 (1905) リリースノート

主な変更点

ネットワーカーな部分としては iptables → nftables と変化しているあたりは見ておこうと思います。

CentOS 7 自体はあまり触る機会がないまま CentOS 8 を使う事になりそうです。

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

LinuxでCPUやマザーボードから温度を取得する方法

Linuxでは標準で(マシンのマザーボードやCPUなどが対応していれば)簡単に温度センサーの値にアクセスできる仕組みがあるようです。

cat /sys/class/thermal/thermal_zone数字/temp

などとすると、マザーボード上に存在する何かしらの温度センサーの値を拾うことができるようです。

ただし、センサーの値が読み取れるファイルの位置やディレクトリ構造などはマシンによって異なるため、じぶんでそれっぽい場所を探す必要があります。

$ cat /sys/class/thermal/thermal_zone0/temp
27800

上記の例の場合は、27800と出ていますが、これは27.800℃を表しているようです。

自分の環境の場合は

$ cat /sys/class/thermal/thermal_zone0/temp
27800
$ cat /sys/class/thermal/thermal_zone1/temp
29800
$ cat /sys/class/thermal/thermal_zone2/temp
44000

といった形で3か所のセンサーの値を読み取ることができました。

ただ、どの値がどの部分の温度なのかはマニュアル等を見ないと知ることができないのが難点です。

CPUの温度を知る方法もありました。

$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_label 
Package id 0
$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_input 
44000

$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_label 
Core 0
$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input 
42000

$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_label 
Core 1
$ cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input 
43000

こちらはlabelも用意されていたため、どの温度なのかわかりやすかったです。

なお、どのセンサーが存在しているのか、どの温度がどの部分のものなのかを正確に知りたい場合はLinux向けの温度チェックツールを使うとわかりやすそうです。

lm_sensors – Arch Linux

参考サイト:

LinuxでCPUの温度を取得する – Qiita

LinuxでCPUの温度やファンの回転数を取得する – パソコン鳥のブログ

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