Linux

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

  • December 17, 2020

由於掛載的驅動器上的權限衝突且不斷變化(由於程序的開發結構而無法輕易解決),因此必須使用root權限執行腳本。

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

由於權限不足,在啟動時在我們的主使用者下執行腳本會導致核心轉儲。因此,我們認為我們可以在 crontab 中將其設置為@reboot /usr/serverm1/lsintd(如此處所建議,但是這會使用 root 的設置和配置執行它(這是不存在的)。

TLDR:我們如何才能像在啟動時使用命令一樣執行腳本sudo /usr/serverm1/lsintd

我也嘗試應用chmod u+x到二進製文件,但是這仍然會導致核心轉儲,就像使用正常權限執行一樣(想法來自讓使用者執行具有 root 權限的腳本)。

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

一種方法是創建一個 systemd 單元。

您可以在此處找到所有可能的選項:www.freedesktop.org/…/systemd.unit.html 但我將展示一個簡單的範例:

1.讓我們創建一個bash腳本,它將每次系統啟動的日期和時間寫入文件:/root/file

只有root使用者有權在/root目錄中寫入和編輯文件。

我將使用者切換到rootwithsudo 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

引用自:https://serverfault.com/questions/1046523