別のユーザーとグループでファイルを作成する

別のユーザーとグループでファイルを作成する

ローカルに作成されたファイルをダウンロードするためにrsyncを実行し、所有者をapacheに設定し、グループを特定のユーザーグループ(apacheがメンバーではない)に設定する必要があるbashスクリプトがあります。

rsyncプロセスがファイルに書き込むときにこれらの所有権を持つファイルを生成する方法はありますか?事実を確認して変更するためにchownを使用する代わりに? ファイルが多すぎて、後で検索するのに時間がかかりすぎます。

複数のユーザーグループに対してこれを行う必要があるため、これらのグループにApacheを追加しないでください。確かにすべてのグループをデフォルトグループに設定しないでください。

つまり、XがYのメンバーではない場合、rootはユーザーXとグループYでファイルを生成できますか?

runuserを試してみましたが、グループを設定できません(おそらくApacheがグループに属していないため)。

chmodを使用して権限を変更し、ユーザー/グループの組み合わせを追加できることを知っています。私が尋ねるのは、書き込み用にファイルを開き、ファイルを作成するときにユーザー/グループの組み合わせを使用する方法があるかどうかです。

sudoを試してください:

[root@centos7 tmp]# groups angelo
angelo : angelo wheel
[root@centos7 tmp]# groups apache
apache : apache
[root@centos7 tmp]# sudo -u angelo -g apache touch angelo-file
Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7
[root@centos7 tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[root@centos7 tmp]# sudo -u angelo -g angelo touch angelo-file
[root@centos7 tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file

答え1

ファイルを使用せずに特定のユーザーとグループでファイルを作成するには、そのユーザーとグループをchown使用して指定できます。sudo

sudo -u \#49 -g \#58 touch /tmp/something

指定するユーザーには、この操作を実行するディレクトリに書き込む権限が必要です。


または、現在のユーザーとしてシェルを起動し、グループを別のものに設定することもできます。

sudo runuser "$USER" -g somegroup

私はVagrantボックスでこれを試してみました:

[vagrant@localhost ~]$ sudo runuser "$USER" -g floppy
[vagrant@localhost ~]$ touch testfile
[vagrant@localhost ~]$ ls -l testfile
-rw-r--r--. 1 vagrant floppy 0 Nov  9 15:57 testfile
[vagrant@localhost ~]$ 

これは、「放浪者」ユーザーが「フロッピー」グループに属していないという事実にもかかわらず発生します。

答え2

$ sudo install -o angelo -g apache /dev/null angelo-file

バージョン8.4をインストールすると私に効果的ですcentos 6。ここでのインストールは、/dev/null(常に空であることが知られている)ファイルをターゲットに「コピー」して空のファイルを作成し、ターゲットファイルがrootとして実行されるため、同じ/単一のコマンドでターゲットファイルの所有者とグループを設定します。 sudo 。

詳しくは下記をご覧ください。man installまたはinstall --help。同じ/単一のコマンドでディレクトリを作成し、特権モードを設定できます。 install コマンドは makefile などのビルドツールでよく使用されます。

また、オプションを使用して-Tターゲットがすでに存在しているがディレクトリがある場合は、空のディレクトリを作成するのではなく、エラーで失敗することもありますangelo-file/null

編集:OPがrsyncについて尋ねました。 rsync 3.1.2以降、、、--chmodなど--chown--usermapオプションが表示されます--groupmap。 (centos 6iUSリポジトリから更新されたrsyncを取得できるからです)。

答え3

高い特権でスクリプトを実行する限り、問題はありません。たとえば、

#!/usr/bin/env bash 
touch foobar
chown www-data:sudo foobar

通常のユーザーとして実行すると失敗します。

$ ./foo.sh 
chown: changing ownership of `foobar': Operation not permitted

しかし、rootとして実行するとうまくいきます。

$ sudo foo.sh
$ ls -l foobar
-rw-r--r-- 1 www-data sudo 26M Sep 17 17:34 foobar

答え4

acラッパーで「setuid」を使用してchmodを実行できますが、プログラミングが厳密に制限されていない限り、非常に大きなセキュリティホールであるため、お勧めできません。

関連情報