私はpythonスクリプトをいくつかのJavaアプリケーションを起動するスクリプトを書きました。私はそれらのPIDを/var/run/coma
にファイリングしたいので、スクリプトを書いて与えましたit777パーミッションを最初にテストするだけです。
-rwxrwxrwx 1 root root 3575 Feb 12 18:20 coma-startup.py
このスクリプトを別のユーザーとして起動し、コードを実行して上記のディレクトリにファイルを作成すると、次のようになります。
PermissionError: [Errno 13] Permission denied: '/var/run/coma/coma-system.pid'
分かりませんか?私の意見では、スクリプトはroot権限で実行する必要があります。ここで何がわからないのですか?
スクリプトの所有者とグループをroot
に設定しても、root
として実行されるわけではありません。ユーザーjoe
が実行可能ファイルを実行する場合、設定されたUID(joe
)ビットが有効になっていない限り、実行コンテキストのアクセス許可を定義するために使用されるUIDはsuid
のUIDです。 suid
が有効になっている実行可能ファイルは、ファイル所有者のUIDで実行されます。
ただし、suid root
実行可能ファイルはセキュリティ上のリスクがあるため、アプローチは慎重に検討する必要があると思います。悪意のあるユーザーは、特権を悪用することで特権を昇格させることができます。それが処理する必要がある唯一のファイルである場合は、代わりにそのアクセス許可で作業するか、ユーザーにSudo
の使用を要求する必要があります。 suid root
実行可能ファイルは、非常に特殊な場合の最後の手段となるはずです。
注:@ psusiがコメントで述べたように、suid
はスクリプトでは機能しません。これは answer がsuid
スクリプトの問題と、カーネル3.x以降では機能しない理由を説明しています。したがって、特定の状況では、作業する必要があるファイル/フォルダーの権限を変更するか、Sudo
を使用するオプションしかありません(最初のオプションの方が推奨されます)。
権限の問題はスクリプトに関連しているのではなく、スクリプトが作用するファイルに関連しています。
/var/run/coma/coma-system.pid
chmod 777 /var/run/coma/coma-system.pid
をお試しください