いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.275 / 読者数:2830名

超おひさしぶりです、うすだです。

気づいたら、お正月を通り越して、黄金週間を迎えておりました。
半年以上発行していませんでしたが、黄金週間を期に、発行しようとしております。 発行できるのかな。できますよね。

というわけで、何卒よろしくお願いいたします。

ところで、いま、耳鳴りに悩まされています。

普段と違うのは、ぼーっとすることと、耳鳴りで集中できないことくらいです。 が、まあ、それなりには悩みの種となっています。

数年前、突発性難聴と診断されたときは、イソバイドでじんましんを出しながらも、 漢方薬で地道に治しました。

その再発ではないかと思ったのですが、お医者さん曰く、 風邪かなにかで炎症を起こして、耳と鼻の間の管が狭くなっている、とのこと。

確かに、聴覚が低下しているのは低音だけで、耳鳴りの音も低音のため、 突発性難聴とはちょっと違うようです。

診ていただく度に、耳と鼻に管を差し込まれ、ずごごーと薬や風を注入?されます。 これにより、痛みと引き換えに、耳鳴りは一旦消えます。

が、しばらくすると、耳鳴りが復活します。今のところは、 薬を飲んでもあまり…というかほとんど改善していません。

通常は、黄金週間が終わってほしくないと思うのですが、耳のことだけを思うと、 早く終わって病院へ行きたい、という気持ちが強いです。

…いえ、正直に言うと、会社は休みで耳鼻科はやっていたらいいのにな、 と思っています。

そんな夢みたいなことを思いつつ、黄金週間最後の日を迎えていますが、 今回も張り切ってまいりたいと思います。

今回のお題 - Webサーバをファイル転送に使う (レベル:初級)

自動運転に関するお仕事をしていると、地図などのデータや、 センサから収集したログなど、でかいファイルを扱う機会が増えます。

ローカルで扱っている間はよいのですが、外部の人から、そのログを使いたいから送って、 などという依頼が来ると、 数百MB〜GB単位のファイルをどうやってやりとりすればよいのだろう、 という問題にぶち当たります。

ええ、世間には、オンラインストレージやファイル転送のサービスが星の数… ほどではないにしても存在していることは、存じあげております。

ただ、無償で使おうとすると、サイズや期限に制限があり、 実質使えないことが多いように思います。
また、それらのサービスを信じて使ってよいのかどうか、 そもそも相手が受け入れてくれるのか、という問題もあります。
(会社の決まりで使えない、と言われることが少なからずあります。)

じゃあ、比較的安全と思われる方法で、自前でやってしまえばよいのではないか、 ということで、簡易な方法をご紹介したいと思います。

前提

今回、下記を前提としております。ご了承いただけますと幸いです。

  • URLを知っている人は誰でもダウンロードできます。
    そのため、URLにパスワード的な文字を含めて、簡単には推測できないようにします。 が、URLを盗み見られると元も子もありません。
  • ファイルのアップロードは、手動で行う必要があります。
    ちょっとがんばれば自動化できると思いますが、 手動でできるスキルがない人は使わない方がよいと思われるため、手動を貫きます。
  • Webサーバがインターネットに直接つながっていると仮定しています。
    が、ローカルで試すだけなら、インターネットにつながっていなくても問題ないです。 ようは、WebサーバにアクセスできればOKです。
  • Ubuntu16.04 と Raspbian9.3 で動作確認しました。
    いずれも、Apache はパッケージを使用しています。 特殊な設定をしているわけではないため、同等の設定を行えば、 他の環境でも動作すると思います。(Debian系はおそらく同手順で可能と思います。)

念のため、Apacheのインストールから

Apache(正確には Apache HTTP Server)の説明は、まあいいですよね。
ただ、インストールしたことがないという貴兄もいらっしゃると思いますので、 手順を簡単に示したいと思います。

まず、パッケージをインストールします。

  $ sudo apt-get install apache2

…あ、以上でした。

ありがたいことに、パッケージをインストールすると、 デフォルトの設定のままApacheのサービスが動作します。
ブラウザで「http://ApacheをインストールしたマシンのIPアドレス/」を開くと、 比較的シンプルなデフォルトのページが表示されます。
(以降では、ベースとなるURLを「http://Webサーバ/」と表します。)

なお、Apacheの設定ファイル群は、「/etc/apache2/」以下にあります。
おおもとの設定ファイルは「/etc/apache2/apache2.conf」です。これをもとにして、 「/etc/apache2/*-enabled/*.conf」などを読み込みます。

「apache2.conf」によると、DocumentRootは「/var/www/html/」となっています。 前述で表示されたページは、直下にある「index.html」です。

ファイルの置き場所を作る

前述の通り、ファイルのアップロードは手動で行うことにします。
(アップロードの手順は、最後にまとめて示します。)

ベースの置き場所を、「/var/www/html/share」とします。
そして、特定のユーザにのみ許可したいので、「share」というグループを作り、 shareグループに属するユーザだけが、ファイルをアップロードできるようにします。

  $ sudo mkdir /var/www/html/share
  $ sudo groupadd share
  $ sudo chgrp share /var/www/html/share
  $ sudo chmod 730 /var/www/html/share

自分とApacheがアップロードしたファイル等へアクセスできるようにするため、 自分自身のユーザとApacheのユーザ(Debian系の場合「www-data」)を、 shareグループに追加します。

  $ sudo sed -i 's/^\(share:.*:\)$/\1www-data,自分/' /etc/group

本来なら、/etc/groupファイルを直接触るのではなく、 usermodコマンドなどを使って以下のように行うべきです。
が、既存のグループがたくさんあると面倒くさい & 指定の漏れがあると後で問題になる ため、私は上記を選びました。

  $ sudo usermod -G www-data,share www-data
  $ sudo usermod -G 既存のグループ...,share 自分

で、これらを反映するため、いったんログアウトしてログインします。
Apacheも下記の手順で再起動します。

  $ sudo systemctl restart apache2

ファイルを参照できるようにする

ディレクトリを作って、参照できるか確認してみましょう。

  $ mkdir /var/www/html/share/foo

ブラウザで「http://Webサーバ/share/foo」 にアクセスすると、中身が空のインデックスが表示されます。
(表示されなかったら、 エラーログ(/var/log/apache2/error.log)などを確認してみてください。 ヒントが得られるかもしれません。)

ちなみに、share直下は読み込み権限がないため、Forbiddenとなります。
(インデックス表示によりファイルが丸見えになることを防ぐため、 読み込み権限を削っています。が、後述のインデックス表示の無効化を行うと、 読み込み権限があっても表示はされなくなります。ですので、 share自体に読み込み権限をつけるかどうかは、みなさまにお任せします。)

確認し終えたら、不要なので消しておきましょう。

  $ rmdir /var/www/html/share/foo

しかし、foo などという推測しやすいディレクトリ名だと、 辞書攻撃などで参照される恐れがあります。そこで、mktempコマンドを使って、 難解な名前のディレクトリを作成するようにしましょう。

  $ mktemp -d /var/www/html/share/XXXXXXXXXXXXXXXXXXX
  /var/www/html/share/8Qn1YjU0mabSfFaJatL

引数に指定したパスの「X」にランダムな文字が割り当てられます。
Xの個数は任意ですが、なるべく長くした方が推測されにくくなります。

mktempコマンドで作ったディレクトリは自分しか読み書きできないので、 share グループに属する人に、書き込み以外の許可を与えます。

  $ chgrp share /var/www/html/share/8Qn1YjU0mabSfFaJatL
  $ chmod g+rx /var/www/html/share/8Qn1YjU0mabSfFaJatL

ブラウザで「http://Webサーバ/share/8Qn1YjU0mabSfFaJatL」にアクセスし、 インデックス表示されることを確認しましょう。

このディレクトリの下に共有したいファイルを置き、URLをお知らせすることで、 URLを知っている人だけがそのファイルにアクセスできます。

インデックス表示をやめる

ただ、インデックス表示がちょっと気持ち悪いですね。
share以下を、インデックス表示できない設定にしてしまいましょう。
「/etc/apache2/sites-enabled/share.conf」という設定ファイルを作成し、 インデックス表示をやめる設定を追加します。
中身は以下の通りです。

<Location /share/>
  Options -Indexes
</Location>

設定ファイルを作成し終えたら、Apacheをリロードします。

  $ sudo systemctl reload apache2

もう一度、「http://Webサーバ/share/8Qn1YjU0mabSfFaJatL」にアクセスしてみましょう。 Forbidden になるはずです。

ですが、もちろん、ファイルの直接参照は可能です。たとえば、

  $ echo test >l /var/www/html/share/8Qn1YjU0mabSfFaJatL/test.txt

として、「http://Webサーバ/share/8Qn1YjU0mabSfFaJatL/test.txt」にアクセスすると、 test と表示されます。

おわりに

以上、Webサーバをファイル転送に使う方法をご紹介しました。

もろもろを設定した後の、ファイルのアップロード手順をまとめます。

  1. mktempコマンドでディレクトリを作成する。
       $ mktemp -d /var/www/html/share/XXXXXXXXXXXXXX  (Xの個数は任意)
       $ chgrp share /var/www/html/share/ディレクトリ
       $ chmod g+rx /var/www/html/share/ディレクトリ
      
  2. scpコマンドなどでファイルを置く。
       $ scp -p bar.zip Webサーバ:/var/www/html/share/ディレクトリ/
      
  3. ファイルを共有したい相手に、下記のURLを知らせる。
       http://Webサーバ/share/ディレクトリ/ファイル
      

不要になった暁には、以下の手順で消しておきましょう。

  $ rm /var/www/html/share/ディレクトリ/*
  $ rmdir /var/www/html/share/ディレクトリ

消すことを忘れがちなので、findコマンドで、 一定期間を過ぎたファイルやディレクトリを消す設定を、 cronに仕込んだ方がよいかもしれません。

さらに、もう少し安全面を考慮するなら、URLを盗み見られないよう、 SSL(TLS)を使用した方がよいと思います。

宿題の答え

前回の宿題は、

  ネットワークの接続を追加・削除したり変更したりしてみましょう。

でした。

そもそも何の話でしたっけ…というくらい浦島太郎状態ですが、 Network Managerをコマンドラインで操作する「nmcli」で、 接続を追加したり削除したりする方法を調べましょう、ということでした。

そうそう、前回、nmcli であれこれする話をご紹介したのでした。

Vol.274 - Network Managerをコマンドラインで操作する
http://www.usupi.org/sysad/274.html

「nmcli connection」も取り上げたのですが、 しれっと「他にも「add」や「delete」「edit」などがありますが、割愛します」 と書いて、宿題としていました。

 

では、それぞれ書いていきます。まずは追加からです。
add の書式は、以下の通りです。主な引数のみ記載しています。

  add ifname INTF [con-name NAME] [autoconnect {yes|no}] \
    [type TYPE] [ip4 IPADDR/MASK] [gw4 GWADDR]

大文字のところには、具体的な値が入ります。
まず、「ifname」では、対象となるインタフェース(INTF)を指定します。
「con-name」では、接続名(NAME)を指定します。
「autoconnect」では、自動的に接続するかどうかyesかnoで指定します。
「type」では、接続するインタフェースの種類を指定します。 有線LANの場合は「ethernet」、無線LANの場合は「wifi」を指定します。
「ip4」と「gw4」では、自身のIPアドレスとゲートウェイのIPアドレスを指定します。 省略すると、自動(DHCP) に設定されます。

では実行してみましょう。接続名「192.168.11-local」、 インタフェースが有線LANで「enp4s0」、自動接続なし、 アドレス手動(192.168.11.211)の接続を追加するには、以下のように実行します。
(下記はあくまで例です。環境に合わせて値を指定してください。なお、 TABを押すと補完(候補を表示)してくれます。以降も同様です。)

  $ nmcli connection add ifname enp4s0 con-name 192.168.11-local \
    autoconnect no type ethernet ip4 192.168.11.211/24

「connection show」を実行して、できたか確認してみましょう。

  $ nmcli connection show 192.168.11-local
  connection.id:                          192.168.11-local
  connection.uuid:                        (UUIDの値)
  connection.interface-name:              enp4s0
  connection.type:                        802-3-ethernet
  connection.autoconnect:                 no
  ...中略...
  ipv4.addresses:                         192.168.11.211/24
  ipv4.gateway:                           --
  ...後略...

問題なさそうです。

なお、デスクトップ右上にある「nm-applet」の「接続を編集する...」を選んで、 つくりたてほやほやの「192.168.11-local」を「編集」すれば、 GUIで設定内容を確認・編集できます。

 

次に、接続の編集です。
edit では、以下の書式で接続名を実行すると、対話形式で接続の編集を行えます。

  edit id NAME

まずは、実行してみましょう。nmcliのプロンプトが出力されます。

  $ nmcli connection edit id 192.168.11-local
  ...中略...
  nmcli> 

たとえば、192.168.11.211/24 を 192.168.12.211/24 に変更するには、 以下のように実行します。

  nmcli> remove ipv4.addresses 
  nmcli> set ipv4.addresses 192.168.12.211/24
  'ipv4.method' を 'manual' に設定しますか? [yes]:
  nmcli> 

「ipv4.addresses」は複数のアドレスを設定できるため、 一旦「remove」してから「add」しています。

この際、接続名も変えてしまいましょう。

  nmcli> set connection.id 192.168.12-local

「print」で設定した内容を確認できます。
なお、引数なしで実行すると、全部の値を確認できます。

  nmcli> print connection.id
  connection.id: 192.168.12-local
  nmcli> print ipv4.addresses
  ipv4.addresses: 192.168.12.211/24

変更し終えたら、「save」して「quit」します。

  nmcli> save
  接続 '192.168.12-local' (UUID) が正常に更新されました。
  nmcli> quit
  $ 

 

最後に、接続の削除です。
delete では、以下の書式で接続名を実行すると、接続を削除します。

  delete id NAME

割とあっさり消してくれます。

  $ nmcli connection delete id 192.168.12-local 
  接続 '192.168.12-local' (UUID) が正常に削除されました。

今回の宿題

今回の宿題は、

  /var/www/html/shareを別のディレクトリに変更し、かつブラウザから
  は「http://Webサーバ/share/...」のままでアクセスできるようにして
  みましょう。

です。

DocumentRootとは別のパスにトレージがmountされていて、 そっちの方をファイル置き場として使いたい、ということがよくあるように思います。

Apacheの設定で簡単にできます。調べて実際にやってみましょう。

あとがき

スマホを使いこなせていないオールドタイプであることは自覚しており、 使ったほうが便利なところは使っていきたいと、常々思っています。

が、なんでもかんでもスマホにしたほうがよいとは思っていません。

たとえば、PC だったら、とあるサイトで興味深いページがあったとき、 どのように実現されているかなどを、ブラウザの開発ツールで調べたり、 使われている技術を試してみたりすることができます。

ですが、スマホだと、その機能を使用して終わり、になりがちです。
開発ツールをインストールしたり、キーボードをつなぐなどすれば、 可能かもしれませんが…まあ、面倒くさいですよね。

ブラックボックスと思って割り切って使うのもよいですが、 技術者として生きていくなら、中身を知りたいと思ったときに、自分の手を動かして、 調べたり試したりといったことを行っていくべきだと思います。

 

このメルマガを始めようと思ったのは、 システム管理の初心者が中級者になかなかなれない理由が、 何をしていいかわからず途方に暮れているからではないか、 ということに気づいたからでした。

なにかきっかけがあれば、自らの手を動かし、試すことで、 少しだけかもしれないけれど前へ進んでいけるかもしれない、 そのきっかけをメルマガで伝えることで多少でもお役に立てれば、 と思ったからなのでした。
(正直に言うと、お小遣い稼ぎになるかもしれないぞ、 という淡い期待もおおいにありましたが…。)

ここ数年、発行頻度が減っていますが、初心を思い出して、 みなさんが手を動かしたくなるような内容のメルマガを、これからも届けていきたい、 届けていかないといけない、とあらためて思っております。

というわけで、今後とも、何卒よろしくお願いいたします。

 

今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、6月3日の発行をめざします。(依然として歯切れが悪いぞ…)

 

「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://twitter.com/kuriking/ (twitter)
http://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/ (pinterest) https://www.instagram.com/kuri_king_/ (instagram)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本