rc.localがrootとして実行されている場合、なぜファイルに触れることができないのですか?

rc.localがrootとして実行されている場合、なぜファイルに触れることができないのですか?

私はそれがすべての始まりで使用されることを望みます/etc/rc.local

たとえば、私のスクリプトが呼び出され、startscript.sh保存場所/home/debianは次のようになります。まず、名前付きファイルを生成しようとしたtest.log後、別の操作を実行します。

しかし、起動時にエラーを読みました。touch: cannot touch ‘test.log’: Permission denied

rc.local私の理解によると、rootとして実行されると、実行されるすべてのエントリもrootとして実行される必要があるため、test.logとにかく生成する必要があります。どのようにこれが可能ですか?

startscript.sh:

#!/bin/sh
touch test.log
#... other stuff

rc.localフラグメント:

#!/bin/sh -e
#.. other stuff
sh /home/debian/startscript.sh

ベストアンサー1

このアプローチには2つの問題があります。 1つはルートによって実行されることです。したがって、生成されたすべてのファイルは、実行しrc.localない限りルートが所有します。chown第二に、これはセキュリティ上の脆弱性であり、rootとして実行されたコードはroot権限を持たないユーザーによって修正される可能性があります。

より良い方法は、次を使用することです。@再起動cron権限のないユーザーの時間指定子。すでに持っているなら予約されたことファイルを編集してこの行を追加し、crontab <yourcrontab>コマンドを実行します。または、crontab -eコマンドを使用してこの行を直接入力します。

@reboot /home/debian/startscript.sh

shで始まるので、スクリプトを実行する必要はありません#!/bin/sh

おすすめ記事