、chrootの道
[root@localhost ~]# chroot --userspec "nginx:nginx" "/" sh -c "whoami"
nginx
[root@localhost ~]# chroot --userspec "kibana:kibana" "/" sh -c "whoami"
kibana
kibana例を開始するKibanaユーザー:
chroot --userspec "kibana:kibana" "/" sh -c "/usr/share/kibana/bin/kibana -c /etc/kibana/kibana.yml" >> /var/log/kibana/kibana.stdout 2>> /var/log/kibana/kibana.stderr &
# Run the program!
chroot --userspec "$user":"$group" "$chroot" sh -c "
cd \"$chdir\"
exec \"$program\" $args
" >> /var/log/kibana/kibana.stdout 2>> /var/log/kibana/kibana.stderr &
二、デーモン関数形
参照https://stackoverflow.com/questions/17956151/how-to-run-a-command-as-a-specific-user-in-an-init-script
RHELシステムでは、は/etc/rc.d/init.d/functionsのスクリプトは、あなたが望むものに似て提供することを意図しています。あなたのinitスクリプトの先頭にそれを調達した場合、それのすべての機能が利用可能になります。
これを支援するために提供される特定の機能があります
daemon
。あなたは、デーモンのようなプログラムを起動するためにそれを使用しようとしている場合は、簡単な使い方は次のようになります。daemon --user=username command
それはあまりにも強引に必要なもののためであれば、そこにされた
runuser
(参照man runuser
の完全情報のため、いくつかのバージョンが必要になることがあり-u
、ユーザー名の前に):/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
elasticsearch起動スクリプトの例:
#
# Source function library.
#
if [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
cd $ES_HOME
echo -n $"Starting $prog: "
# if not running, start it up here, usually something like "daemon $exec"
daemon --user elasticsearch --pidfile $pidfile $exec -p $pidfile -d
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval