sudoing中に特定の所有者(ユーザー/グループ)でファイルとディレクトリを作成する


22

wget何かする必要があります(cwdで圧縮ファイルが生成されます)。それを抽出し、コピー/移動/変更などを行い、最終的に(ダウンロードしたアーカイブから)スクリプトを実行する必要があります。

現在、これらすべてのタスクは、直接(wget、抽出など)または間接的に(スクリプトを実行)、ファイルとディレクトリを作成します(すべて現在の作業ディレクトリにあります)。私はこのようなことをすべて行いますroot(最終的な、希望するユーザーでそれを行う方法はありません)。

問題は、プロセスで作成されたものはすべて、rootまたはsudoユーザーが所有していることです。完了したら(場合によっては途中で)、一連のコマンドchmodchownコマンドを発行して、物事を正しくしなければなりません。

「これからは、rootとしてコマンドを発行するときに作成するファイルまたはディレクトリを、そのような所有権とアクセス許可で作成する」と何らかの形でシステムに伝えることができれば便利です。

回答:


26

sudo -u username touch filenameスクリプトはいつでも実行できますroot。通常、sudoers構成に応じてパスワードは必要ありません。

または、を実行しsu username -c touch filenameます。追加の引数はユーザーのシェルに提供され、シェルの-cオプションは指定されたコマンドを慣例により実行します。


一部のコマンド(などmkdir)は、許可を指定する引数をサポートしています。

mkdir -m 0700 foo

デフォルトでは、ファイル操作umaskはシェルのセットを尊重します。どの許可が拒否されるかを定義ます。たとえば、A umaskはグループやその他のユーザーに書き込み権限を設定0022しませ。に設定する0077と、グループや他のユーザーが許可を取得できなくなります。


setgidonディレクトリを設定して、グループ内のすべてのファイルがグループメンバーシップを継承するように作成できます。

chmod g+s someDir

一部のUnix は()に対して同じ動作をサポートしていますが、Linuxではサポートしていません。setuidchmod u+s


1
あなたが求めているものに対する献身的なサポートはないと仮定するのは安全だと思います。スーパーユーザーのみがchown別のユーザーにファイルを保存できます。このようにデフォルトを設定すると、ユーザーがミスする可能性があり、rootユーザーが気付かないうちに他のユーザーに権限を付与します。
ダニエルベック

10

別の方法がありますが、かなりエレガントだと思います。install(1)を使用する

たとえば、zabbix-agentdでは/ var / run内にサブフォルダーが必要ですが、最近のディストリビューションでは/ var / runにtmpfsが使用されているため、ディレクトリは再起動後も存続しません。以下を含むファイル/ etc / sysconfig / zabbix-agentdを作成することで解決しました。

install -g zabbix -o zabbix -d /var/run/zabbix

1
-m 0700インスタンスも追加します。答え。
リングØ16年

3
installディレクトリを作成して、所有者/グループを変更します。そのため、ディレクトリに指定された所有者/グループがない短い時間があります。状況によっては重要な場合があります。
user368507

これはAlpine Linuxで動作します
MauricioSánchez

3

Unixライクシステムでは、新しく作成されたファイルとディレクトリは、それらを作成したプロセスの所有者が所有します。通常、標準ユーティリティには、作成されたファイルの所有者を変更するオプションがありません。

元のユーザーのUIDおよびGIDを持つ変数

いくつかのコマンドを繰り返し実行する場合、変数$SUDO_UIDを使用して、$SUDO_GID呼び出したユーザーを参照できますsudo

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

作成されたファイルとディレクトリのリストを自動的に取得する

作成された(および場合によっては変更された)ファイルとディレクトリのリストを自動的に取得する場合straceは、ptrace()syscallに基づく監視下でコマンドを実行できます。

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

または、たとえばメカニズムに基づいたInstallwatchを使用できますLD_PRELOAD

今後の作業のアイデア

上記の方法に基づいて、作成/変更されたファイルの所有者と、場合によってはアクセス権を自動的に変更するツールを作成することができます。次のように簡単に使用できます。

sudo watch-chown do_something
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.