以具有 root 權限的使用者身分執行腳本

以具有 root 權限的使用者身分執行腳本

由於掛載磁碟機上的權限衝突且不斷變化(由於程式的開發結構而無法輕易解決),因此有一個腳本必須以root權限執行。

這可以完成sudo /usr/serverm1/lsintd並提供良好的結果。但是,我們希望在啟動時自動執行該腳本。

由於權限不足,在啟動時在主用戶下執行腳本會導致核心轉儲。因此,我們認為我們可以在 crontab 中將其設為@reboot /usr/serverm1/lsintd(按照建議這裡,但是這會使用根目錄(不存在)的設定和配置來運行它。

TLDR:我們如何運行該腳本,就像sudo /usr/serverm1/lsintd在啟動時使用命令運行一樣?

我也嘗試應用於chmod u+x二進位文件,但這仍然導致核心轉儲,就像使用常規權限運行一樣(想法取自讓使用者以 root 權限執行腳本)。

邊註:我承認這在某種程度上是一個 XY 問題,但是由於我們伺服器上其他一些服務的開發結構緩慢且組織不良,我們無法解決根本問題,必須解決這個問題。

答案1

一種方法是建立一個 systemd 單元。
您可以在這裡找到所有可能的選項:www.freedesktop.org/.../systemd.unit.html 但我將舉一個簡單的例子:

1.讓我們建立一個bash腳本,它將每次系統啟動的日期和時間寫入檔案:/root/file
只有root使用者有權寫入和編輯/root目錄中的檔案。
我要將用戶切換到rootsudo su -
我們建立一個腳本/root/timelog.sh並使其可執行chmod +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

相關內容