LoginSignup
0
0

More than 3 years have passed since last update.

pgpool-Ⅱ 「checking setuid bit of ~」への対処

Last updated at Posted at 2019-10-14

pgpoolを起動した際に、下記のように、「checking setuid bit of ~」という警告メッセージが表示されるケースがある。

DEBUG:  initializing pool configuration
DETAIL:  num_backends: 2 total_weight: 2.000000

DEBUG:  initializing pool configuration
DETAIL:  backend 0 weight: 1073741823.500000 flag: 0000

DEBUG:  initializing pool configuration
DETAIL:  backend 1 weight: 1073741823.500000 flag: 0000

WARNING:  checking setuid bit of if_up_cmd
DETAIL:  ifup[/sbin/ip] doesn't have setuid bit

WARNING:  checking setuid bit of if_down_cmd
DETAIL:  ifdown[/sbin/ip] doesn't have setuid bit

WARNING:  checking setuid bit of arping command
DETAIL:  arping[/usr/sbin/arping] doesn't have setuid bit

postgresユーザでコマンド(/usr/sbin/arpingと/sbin/ip)の実行を試みた際に、rootユーザではないため、実行時に警告が表示されたというもの。

この場合の対処例を記載。


setuid(set user id)を設定して対処

それぞれのコマンドにsetuidをつける。
setuidをつけたコマンドは、実行時に対象のコマンドをファイル所有者で実行する。

つまり、postgresユーザで実行しても、ファイルの所有者がrootであれば、root権限で実行される。

$ chmod u+s /usr/sbin/arping
$ ls -l /usr/sbin/arping
-rwsr-xr-x. 1 root root 23744 Aug  4  2017 /usr/sbin/arping

$ chmod u+s /sbin/ip 
$ ls -l /sbin/ip
-rwsr-xr-x. 1 root root 470592 Aug  8 23:55 /sbin/ip

ただし、上記のように直接対象コマンドにsetuidをつけるのは、セキュリティ的によくないので、実際にはWrapperプログラムを作成し、Wrapperプログラムから該当コマンドを実行するケースが多いようだ。(後述)


実行コマンドにsudoをつけて対処

  • /etc/sudoersに下記の設定を追加

postgresユーザがroot権限のコマンドをパスワード認証不要で実行させるため、visudoコマンドで/etc/sudoersに下記の設定を追加

postgres ALL=(root) NOPASSWD: /sbin/ip
postgres ALL=(root) NOPASSWD: /usr/sbin/arping

1 : 実行パスにsudoを指定して対処する例

下記のようにpgpool.confの実行コマンドに/usr/bin/sudoを指定すると、一時的にrootユーザでの実行が可能となる。

#if_cmd_path = '/sbin'
#if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
#if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
# 以下のように変更↓
#
if_cmd_path = '/usr/bin'
if_up_cmd = 'sudo ip addr add $_IP_$/24 dev eth0 label eth0:0'
if_down_cmd = 'sudo ip addr del $_IP_$/24 dev eth0'

#arping_path = '/usr/sbin'
#arping_cmd = 'sudo arping -U $_IP_$ -w 1'
# 以下のように変更↓
#
arping_path = '/usr/bin'
arping_cmd = 'sudo arping -U $_IP_$ -w 1'

2 : Wrapperプログラムを使用する例

下記のようにWrapperプログラムを作成し、
必ず、rootユーザで実行されるようにする。

  • /sbin/ip_w
#!/bin/bash
echo "Exec ip with params $@ at `date`"
sudo /sbin/ip $@
exit $?
  • /usr/sbin/arping_w
#!/bin/bash
echo "Exec arping with params $@ at `date`"
sudo /usr/sbin/arping $@
exit $?

実行権を付与する

$ chmod 0755 /sbin/ip_w
$ chmod 0755 /usr/sbin/arping_w
if_cmd_path = '/sbin'
if_up_cmd = 'ip_w addr add $_IP_$/24 dev eth0 label eth0:0'
if_down_cmd = 'ip_w addr del $_IP_$/24 dev eth0'

arping_path = '/usr/sbin'
arping_cmd = 'arping_w -U $_IP_$ -w 1'

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0