web-dev-qa-db-ja.com

pythonスクリプトには777権限と所有者ルートがありますが、それでもファイルの作成は拒否されます

私は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権限で実行する必要があります。ここで何がわからないのですか?

1
xetra11

スクリプトの所有者とグループをrootに設定しても、rootとして実行されるわけではありません。ユーザーjoeが実行可能ファイルを実行する場合、設定されたUID(joe)ビットが有効になっていない限り、実行コンテキストのアクセス許可を定義するために使用されるUIDはsuidのUIDです。 suidが有効になっている実行可能ファイルは、ファイル所有者のUIDで実行されます。

ただし、suid root実行可能ファイルはセキュリティ上のリスクがあるため、アプローチは慎重に検討する必要があると思います。悪意のあるユーザーは、特権を悪用することで特権を昇格させることができます。それが処理する必要がある唯一のファイルである場合は、代わりにそのアクセス許可で作業するか、ユーザーにSudoの使用を要求する必要があります。 suid root実行可能ファイルは、非常に特殊な場合の最後の手段となるはずです。

注:@ psusiがコメントで述べたように、suidはスクリプトでは機能しません。これは answersuidスクリプトの問題と、カーネル3.x以降では機能しない理由を説明しています。したがって、特定の状況では、作業する必要があるファイル/フォルダーの権限を変更するか、Sudoを使用するオプションしかありません(最初のオプションの方が推奨されます)。

3
IanC

権限の問題はスクリプトに関連しているのではなく、スクリプトが作用するファイルに関連しています。

/var/run/coma/coma-system.pid

chmod 777 /var/run/coma/coma-system.pidをお試しください

4