BackupPC

From ArchWiki
Revision as of 01:04, 1 March 2019 by Kusakata (talk | contribs) (カテゴリ変更)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

BackupPC は Unix, Linux, Windows, macOS の PC やデスクトップあるいはノートパソコンからサーバーまで様々なディスクをバックアップすることができる構成なエンタープライズ級のシステムです。BackupPC は細かい設定ができる上にインストールや管理が簡単になっています。

ハードディスクや RAID システムの費用は下がっているとはいえ、マシンのデータをサーバーのローカルディスクやネットワークストレージにバックアップすることは実践的かつ費用対効果からみても利益のあることです。完全なバックアップソリューションとして、またはサーバーを定期的にバックアップするアーカイブとして利用することができます。

インストール

backuppc パッケージをインストールしてください。rsync を使って転送したい場合、rsyncperl-file-rsyncp もインストールしてください。

インストールしたら systemdbackuppc デーモンを起動してください。起動時に自動的に実行したい場合は有効化してください。

設定

Apache の設定

BackupPC には簡単に制御することができるウェブインターフェイスが備わっています。Apache と mod_perl を使用するか C のラッパーを使用して使うことができます。lighttpd など他のウェブサーバーでも動作します。

apache パッケージをインストールしてください。

Apache の設定の編集

BackupPC のウェブ UI は backuppc ユーザーで動作させる必要がありますが、通常 Apache は http ユーザーで動作します。ユーザーを変更する方法は複数あります。BackupPC の UI を表示するためだけに Apache を使用する場合と、通常の http ユーザーで他のウェブサイトも公開する場合の例を以下に示します。

単一目的で Apache を設定する方が簡単ではありますが柔軟性に欠けます。

一般的な設定

/etc/backuppc/config.pl を編集して管理者の名前を設定してください:

$Conf{CgiAdminUsers} = 'admin'; 

そして users ファイルを追加して管理者のパスワードを設定してください:

# htpasswd -c /etc/backuppc/backuppc.users admin

BackupPC-Webfrontend は最初ローカルホストからしかアクセスできないように設定されています。ネットワーク内の全てのマシンからアクセスできるようにしたい場合、/etc/httpd/conf/extra/backuppc.conf を編集してください。以下の行を:

Require ip 127.0.0.1

以下のように変更:

Require ip 127.0.0.1 192.168.0

192.168.0 はアクセス権を与えたい適切な IP アドレスに置き換えてください。以下のセクションのどちらかの設定を行ったら、Apache のサービスを(再)起動してください。

単一目的の Apache の設定

mod_perlAUR パッケージをインストールしてください。

Apache の設定ファイルを編集して mod_perl をロードし、backuppc ユーザーで Apache を実行して /etc/httpd/conf/extra/backuppc.conf を読み込みます:

/etc/httpd/conf/httpd.conf
LoadModule perl_module modules/mod_perl.so
User backuppc
Group backuppc
Include conf/extra/backuppc.conf
多目的の Apache の設定

上記のように Apache のユーザーとグループを全体的に変更するのではなく、BackupPC の CGI スクリプトだけを backuppc ユーザーで動作させて他のファイルはデフォルトユーザーを使うようにします。外部の mod_perl を使うかわりに mod_cgi を使って C で書かれたラッパーを呼び出します。ラッパーから BackupPC のスクリプトを実行するのに perl をインストールする必要があります。

Apache が CGI プログラムを動作させることができる状態であることを確認して、/etc/httpd/conf/extra/backuppc.conf を読み込んで BackupPC の設定を使用するようにしてください:

/etc/httpd/conf/httpd.conf
LoadModule cgi_module modules/mod_cgi.so
...
Include conf/extra/backuppc.conf
ウェブサーバーのユーザーと suid の問題

現在の BackupPC の設定だと、ウェブサーバーを backuppc ユーザーで動作させる必要があり、他の用途でウェブサーバーを使っている場合に問題になります。昔は Perl スクリプトに suid を設定していましたが、セキュリティの問題が原因で数年前に禁止されました。回避策として perl-suid を使う方法がありましたが、同じく最近になって禁止されました。suid ビットを使ってスクリプトを安全に動作させることは不可能です。ランチャーとして suid を使うシンプルなバイナリプログラムを使うことで適切なユーザーで backuppc の Perl スクリプトを実行できます。Perl スクリプトが別環境に分離されるため安全です。

オリジナルの backuppc の CGI を以下の C コードプログラムに置き換えて backuppc の CGI は別の場所に移動する必要があります。

実際の CGI である /usr/share/backuppc/cgi-bin/BackupPC_Admin は lib ディレクトリの /usr/share/backuppc/lib/real-BackupPC_Admin.cgi に移動してください。

以下のコードを wrapper.c というファイル名で保存してください (必要に応じて CGI のパスを修正してください):

#include <unistd.h>
#define REAL_PATH "/usr/share/backuppc/lib/real-BackupPC_Admin.cgi"
int main(ac, av)
char **av;
{
   execv(REAL_PATH, av);
   return 0;
}

そして以下のコマンドでコンパイルしてください:

$ gcc -o BackupPC_Admin wrapper.c

作成されたバイナリ BackupPC_Admin を cgi-bin ディレクトリに配置してバイナリ CGI の所有者を backuppc:http に変更して suid ビットを設定してください:

# chown backuppc:http /usr/share/backuppc/cgi-bin/BackupPC_Admin
# chmod 4750 /usr/share/backuppc/cgi-bin/BackupPC_Admin

元の Perl スクリプトに suid ビットを設定していた場合は解除してください:

# chmod 0755 /usr/share/backuppc/lib/real-BackupPC_Admin.cgi

これでウェブサーバーを通常ユーザーで実行しつつバックアップを適切に実行できるようになりました。

nginx の設定

fcgiwrap をインストールして fcgiwrap.socket起動有効化してください。

以下のサーバー設定を作成:

/etc/nginx/sites-available/backuppc
server {
  listen <your_server_port>;
  server_name <your_server_name>;

  root  /usr/share/backuppc/html;
  index /index.cgi;

  access_log  /var/log/nginx/backuppc.access.log;
  error_log   /var/log/nginx/backuppc.error.log;

  location / {
      allow 127.0.0.1/32;
      # allow 192.168.0.0/24;
      deny all;

      # auth_basic "Backup";
      # auth_basic_user_file conf/backuppc.users;
  }

  location /backuppc {
      alias /usr/share/backuppc/html/;
  }

  location  ~\.cgi$ {
      include fastcgi_params;
      fastcgi_pass unix:/run/fcgiwrap.sock;

      fastcgi_param REMOTE_ADDR     $remote_addr;
      fastcgi_param REMOTE_USER     $remote_user;
      fastcgi_param SCRIPT_FILENAME /usr/share/backuppc/cgi-bin/BackupPC_Admin;
  }
}

上記のファイルを作成したら sites-enabled に対してシンボリックリンクを作成してください:

# ln -s /etc/nginx/sites-available/backuppc /etc/nginx/sites-enabled

systemd の fcgiwrap.service ファイルを編集して fcgiwrap の実行ユーザーを backuppc に変更してください。

lighttpd の設定

/etc/lighttpd/lighttpd.conf
server.port             = 81
server.username         = "backuppc"
server.groupname        = "backuppc"
server.document-root    = "/srv/http"
server.errorlog         = "/var/log/lighttpd/error.log"
dir-listing.activate    = "enable"
index-file.names        = ( "index.html", "index.php", "index.cgi" )
mimetype.assign         = ( ".html" => "text/html", ".txt" => "text/plain", ".jpg" => "image/jpeg", ".png" => "image/png", "" => "application/octet-stream" )

server.modules = ("mod_alias", "mod_cgi", "mod_auth", "mod_access" )

alias.url               = ( "/BackupPC_Admin" => "/usr/share/backuppc/cgi-bin/BackupPC_Admin" )
alias.url               += ( "/backuppc" => "/usr/share/backuppc/html" )

cgi.assign              += ( ".cgi" => "/usr/bin/perl" )
cgi.assign              += ( "BackupPC_Admin" => "/usr/bin/perl" )

auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/passwd"
auth.require = ( "/BackupPC_Admin" => ( "method" => "basic", "realm" => "BackupPC", "require" => "user=admin" ) )
/etc/lighttpd/passwd
admin:yourpassword

ログファイルを作成:

# touch /var/log/lighttpd/error.log
# chown backuppc:backuppc /var/log/lighttpd/error.log

管理ページへアクセス

管理ページにアクセスするまえに BackupPC の設定を編集できるユーザーやグループを指定する必要があります:

/etc/backuppc/config.pl
$Conf{CgiAdminUserGroup} = '<authorized groups>';
$Conf{CgiAdminUsers}     = '<authorized users>';  # <-- set to '*' if the webserver is not autenticating users

設定したら http://localhost/BackupPC_Admin あるいは http://your_backuppc_server_ip/BackupPC_Admin を開いてください。

トラブルシューティング

ウェブサイトの表示がおかしい

Apache のディレクティブが原因でウェブインターフェイスが正しく表示されない場合があります。そのような場合、クライアントから .htaccess や .htpasswd を見えないようにしている /etc/httpd/conf/httpd.conf の設定を変更するか、/usr/share/backuppc/html ディレクトリの名前を /usr/share/backuppc/files に変更して新しいパスにあわせて /etc/httpd/conf/extra/backuppc.conf を以下のように更新してください:

/etc/httpd/conf/extra/backuppc.conf
Alias           /BackupPC/images        /usr/share/BackupPC/files/

参照