Skip to content

CentOS7 に TACACS+ サーバをビルドし ACI から認証させる

以前に CentOS7 に RPM パッケージで TACACS+ をインストールする というメモを書きました。 尚、今回作成するパッケージは CentOS7 などでしか利用出来ません。 後述しますが tcp_wrappers-devel が存在しない為、CentOS8 や Rocky8 では利用することが出来ません。 どうしても「CentOS8 や Rocky8 で利用したい場合は TACACS+ サーバの動作する Docker コンテナを作成して利用する」などの代替手段を検討する必要があると思われます。

ビルド済みパッケージ

今回の手順では CentOS7 上で TACACS+ サーバの RPM パッケージをビルドします。 ビルド済みパッケージは以下にアップロードしてありますので、ビルドが面倒であればこちらを利用します。

CentOS7 上でパッケージをビルドする

ビルドする前に依存関係のあるソフトウェアをインストールしておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
yum -y install \
  bison \
  flex \
  gcc \
  m4 \
  pam-devel \
  redhat-rpm-config \
  rpm-build \
  tcp_wrappers \
  tcp_wrappers-devel

GitHub からクローンし、ビルドします。

1
2
3
4
5
6
7
cd ~
git clone https://github.com/facebook/tac_plus.git
cd tac_plus/
mkdir -p ~/rpmbuild/SOURCES
tar cvzf ~/rpmbuild/SOURCES/tacacs-F4.0.4.28.tar.gz tacacs-F4.0.4.28
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
rpmbuild -ba tacacs.spec

CentOS7 へのインストール

作成された RPM パッケージをインストールします。

1
2
3
4
cd ~/rpmbuild/RPMS/x86_64/ 
yum localinstall -y \
  tacacs-F4.0.4.28-6fb.x86_64.rpm \
  tacacs-debuginfo-F4.0.4.28-6fb.x86_64.rpm

CentOS8 / Rocky8 にはインストール不可

CentOS8 や Rocky8 には tcp_wrappers-devel のパッケージが存在しません。 その為、tcp_wrappers-devel に依存している tacacs+ をインストールしようとするとエラーになり、インストールすることが出来ませんでした。

1
2
3
4
5
6
# dnf localinstall -y tacacs-F4.0.4.28-6fb.x86_64.rpm tacacs-debuginfo-F4.0.4.28-6fb.x86_64.rpm
Last metadata expiration check: 2:08:04 ago on Sat Oct 23 15:26:25 2021.
Error:
 Problem: conflicting requests
  - nothing provides tcp_wrappers-devel needed by tacacs-F4.0.4.28-6fb.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

設定例

TACACS+ サーバの設定ファイルは /etc/tac_plus.conf です。 例えば Cisco ACI から以下のパラメータで TCACS+ で認証させるとします。

項目
共有秘密鍵 (キーフレーズ) SECRET
ユーザ名 USER
パスワード PASSWORD
ユーザに割り当てる Security Domains all/admin/

実際の /etc/tac_plus.conf 設定例は以下の通りです。

1
2
3
4
5
6
7
8
9
key = "SECRET"
accounting file = /var/log/tacacs/tac_plus.acct

user = USER {
  default service = permit
  pap = cleartext PASSWORD
  service = exec {
    cisco-av-pair="shell:domains = all/admin/"
}

実際の運用ではグループも設定し、グループ単位で権限制御した方が柔軟性があります。