サービスを開始できません。認証時にパスワードが認識されません。

サービスを開始できません。認証時にパスワードが認識されません。

Linuxサービスを開始しようとしていますが、サービスを開始しようとすると、次の問題が発生します。この問題を解決する方法について助けてください。

ユーザー Test_user は、sudoers ファイルで ALL=(ALL) ALL に設定されます。

Nov 17 11:20:24 systemd[1]: Starting wso2am-4.2.0.service... 
Nov 17 11:20:24 wso2am-4.1.0[171210]: Starting the WSO2 Server ... 
Nov 17 11:20:24 su[171211]: pam_unix(su:auth): auth could not identify
password for [Test_user] Nov 17 11:20:26 su[171211]: FAILED SU (to
Test_user) root on none Nov 17 11:20:27 wso2am-4.1.0[171210]:
Password: Password: su: Authentication failure Nov 17 11:20:27
systemd[1]: wso2am-4.2.0.service: Control process exited, code=exited
status=1 Nov 17 11:20:27  systemd[1]: wso2am-4.2.0.service: Failed
with result 'exit-code'.

スクリプトには以下が含まれます。

#! /bin/sh 
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-2.el8_7.x86_64"
startcmd='/var/wso2am-4.1.0/bin/api-manager.sh start > /dev/null &'
restartcmd='/var/wso2am-4.1.0/bin/api-manager.sh restart > /dev/null &' 
stopcmd='/var/wso2am-4.1.0/bin/api-manager.sh stop > /dev/null &'

case "$1" in 
    start)    
        echo "Starting the WSO2 Server ..."    
        su -c "${startcmd}" Test_user 
        ;; 
    restart)
        echo "Re-starting the WSO2 Server ..."    
        su -c "${restartcmd}" Test_user 
        ;; 
    stop)
        echo "Stopping the WSO2 Server ..."    
        su -c "${stopcmd}" Test_user 
        ;;
    *)    
        echo "Usage: $0 {start|stop|restart}" 
        exit 1 
esac

ベストアンサー1

私はあなたが次のようなものを持っていると思います:

[Unit]
Description="WS02 Server"

[Service]
User=Test_user
ExecStart=sudo /usr/local/bin/wso2am-4.1.0

これにはいくつかの問題があります。

  1. sudo相互作用のためです。その目的は、あなたがスクリプトではなく人間であることを確認することです。
  2. を設定しましたが、User=を使用してsudo変更し、一部を元にroot戻します。User=

次のことができます。

  1. シンプルだがエレガントではありません::NOPASSWDデザインが/etc/sudoersずれているのでお勧めできません。sudo
Test_user  ALL=(ALL) NOPASSWD: ALL
  1. 設定しないでくださいUser=。上記の仮定ではを使用していますが、を使用してTest_userすぐにルートに戻りますsudoTest_userプロセスは実行されなくなりました。この場合は意味がありませんTest_user。次のことをお勧めします。
[Service]
ExecStart=/usr/local/bin/wso2am-4.1.0
  1. 私は上記の仮定が間違っている可能性が高いと思い、あなたは特定のものを強化しようとしています。たぶん、スクリプトを次のように呼び出してTest_userから、そのスクリプト内で小さなコマンドを昇格させることもできます。この場合、それを取り出してプレフィックスをExecStartPre=使用して+高い権限を付与します。
| Service                      | Script                     |
|------------------------------|----------------------------|
| [Service]                    | #!/bin/bash                |
| User=Test_user               | sudo wso2am-4.1.0 update   |
| ExecStart=/path/to/script    | wso2am-4.1.0 run           |

becomes

[Service]
User=Test_user
ExecStartPre=+/usr/bin/wso2am4.1.0 update
ExecStart=/usr/bin/wso2am4.1.0 run

おすすめ記事