Linuxのマスクされたサービスとは何か?そしてそれをどのように管理するのか? - TechRepublic

Linuxのマスクされたサービスとは何か?そしてそれをどのように管理するのか? - TechRepublic
画面上のシステムログ
画像: inimma/Adobe Stock

Linux でコマンドを使用してサービスを開始または停止しようとしたときに、systemctl次のような警告が表示されたことはありませんか?

Failed to start postgresql.service: Unit postgresql.service is masked

PostgreSQLデータベースサーバーをインストールし、正常に動作していたはずなのに、なぜかサービスを制御できなくなってしまいました。全く管理できません。一体何が起こったのでしょうか?

まず、マスクはサービスを無効にする別の方法です。違いは次のとおりです。 でサービスを無効にするとsudo systemctl disable、そのサービスのすべてのシンボリックリンクが削除されます。サービスをマスクすると、シンボリックリンクは移動され、/dev/nullを指すようになります。サービスを単に無効にするだけでは、手動で起動できますが、サービスをマスクすると、手動で起動できなくなります。つまり、サービスをマスクすると、マスクを解除するまでそのサービスは永久に使用できなくなります。

これは潜在的なセキュリティ上の問題を引き起こす可能性があります。例えば、systemd サービスを使ってソフトウェアをインストールしたところ、そのサービスに脆弱性があることがわかったとします。アプリケーションを削除したくないかもしれませんが、脆弱性が修正されるまでは実行させたくはありません。そのような場合は、サービスをマスクし、脆弱性が修正されるまで待ち、ソフトウェアにパッチを適用してから、サービスのマスクを解除するという方法があります。

参照: Linux 30周年: オープンソースオペレーティングシステムを祝う (無料 PDF) (TechRepublic)

一つ理解しておくべきことは、別のソフトウェアのインストールによってサービスがマスクされてしまう場合があるということです。では、サービスがマスクされているかどうかを確認するにはどうすればよいでしょうか?以下のコマンドを使うことができます。

systemctl list-unit-files | grep masked

上記のコマンドを実行すると、システム上でマスクされているサービスの多さに驚かれることでしょう。私のPop!_OSデスクトップインスタンスでは、23個のマスクされたサービスが見つかりました。そのうちの1つがmysql.serviceでした。このマシンでMySQLを使用するには、まずこのサービスのマスクを解除する必要があります。

Linuxでサービスをマスクする方法

まず最初に、Linuxでサービスをマスクする方法を学びましょう。MySQLの例を見てみましょう。ターミナルウィンドウを開き、次のコマンドでMySQLサービスをマスクします。

sudo systemctl mask mysql

MySQLがまだマスクされていない場合は、コマンドを再度実行するとマスクされた状態で表示されますsystemctl list-unit-files | grep masked。この時点では、MySQLサービスは自動でも手動でも起動できません。以下のコマンドでサービスを起動してみてください。

sudo systemctl start mysql

次のエラーが表示されます:

Failed to start mysql.service: Unit mysql.service is masked.

Linuxでサービスのマスクを解除する方法

サービスをマスクしたら、どうやってマスクを解除するのでしょうか?おそらくご想像の通り、コマンドは以下のようになります。

sudo systemctl unmask mysql

これで、MySQL を起動すると期待どおりに動作するようになります。

これで、Linuxでマスクされたサービスを管理するために必要な知識はほぼすべて網羅されました。このスキルは毎日必要になるわけではないかもしれませんが、いざという時に役立てていただけるはずです。

Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。

Tagged: