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

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

ローカルに作成されたファイルをダウンロードするために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 ~]$ 

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

おすすめ記事