ルート権限を持つユーザーとしてスクリプトを実行する

ルート権限を持つユーザーとしてスクリプトを実行する

マウントされたドライブの権限が競合し、常に変更されるため (プログラムの開発構造により簡単に解決できない)、ルート権限で実行する必要があるスクリプトがあります。

これは で実行できsudo /usr/serverm1/lsintd、良好な結果が得られます。ただし、起動時にこのスクリプトを自動的に実行したいと考えています。

起動時にメインユーザーでスクリプトを実行すると、権限不足のためコアダンプが発生します。そのため、crontabで次のように設定できると考えました@reboot /usr/serverm1/lsintd(提案されているようにここただし、これはルート (存在しない) からの設定と構成を使用して実行されます。

sudo /usr/serverm1/lsintdTLDR:起動時にコマンドを実行するのとまったく同じようにスクリプトを実行するにはどうすればよいでしょうか?

バイナリに適用することも試してみましたchmod u+xが、通常の権限で実行した場合と同様にコアダンプが発生しました(アイデアはユーザーがルート権限でスクリプトを実行できるようにする)。

サイドノート:これはある意味 XY 問題であることは認めますが、サーバー上の他のサービスの開発構造が遅く、組織化されていないため、根本的な問題を解決する方法がないため、代わりにこれを回避する必要があります。

答え1

1 つの方法は、systemd ユニットを作成することです。
可能なすべてのオプションは、こちらで確認できます。www.freedesktop.org/.../systemd.unit.html しかし、ここでは簡単な例を挙げます。

1.システム起動時の日付と時刻をファイルに書き込むbashスクリプトを作成しましょう。ディレクトリ内のファイルの書き込みと編集の権限を持つのはユーザー/root/file
だけです。ユーザー を切り替えて スクリプトを作成し、実行可能にします。root/root
rootsudo su -
/root/timelog.shchmod +x /root/timelog.sh

   #!/bin/bash

   if ! [ /root/file ]; then touch /root/file; fi 
   echo $(date) >> /root/file

2.次に必要なSystem Unitファイル:/etc/systemd/system/timelog.service

[Unit]
Description=timelog.service

[Service]
Type=oneshot
ExecStart=/root/timelog.sh

[Install]
WantedBy=multi-user.target

3. 最後のタスクは、システムで起動することを確認することです。

systemctl enable timelog

関連情報