ローカルに書き込むファイルをダウンロードするためにrsyncする必要があるbashスクリプトがあり、所有者をapacheに設定し、グループを特定のユーザーグループ(apacheはメンバーではない)に設定する必要があります。
rsyncプロセスによって書き込まれているときに、これらの所有権を持つファイルを作成する方法はありますか? chmodを使用して、事後にそれらを調べて変更する必要はありませんか? ファイルが非常に多いため、後でそれらを処理するのにかかる時間は法外です。
複数のユーザーグループに対してこれを行う必要があるため、これらのグループにApacheを追加するべきではなく、すべてをデフォルトグループにすることはできません。
言い換えると、XがYのメンバーでない場合に、rootがユーザーXおよびグループYとしてファイルを作成する方法はありますか?
runuserを使用してみましたが、グループを設定できません(おそらく、apacheがグループに属していないためです)。
chmodを使用して権限を変更し、ユーザーとグループの組み合わせを追加できることを知っています。私が求めているのは、書き込み用にファイルを開いて、作成中にユーザーとグループの組み合わせを使用する方法があるかどうかです。
sudoの使用を試みます:
[[email protected] tmp]# groups angelo
angelo : angelo wheel
[[email protected] tmp]# groups apache
apache : apache
[[email protected] 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
[[email protected] tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[[email protected] tmp]# sudo -u angelo -g angelo touch angelo-file
[[email protected] tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file
承認された回答:
chown
を使用せずに、特定のユーザーおよびグループとしてファイルを作成する場合 、sudo
を使用できます ユーザーとグループを指定します:
sudo -u #49 -g #58 touch /tmp/something
指定するユーザーには、これを試みるディレクトリへの書き込み権限が必要であることに注意してください。
または、グループを別のグループに設定して、現在のユーザーとしてシェルを起動することもできます:
sudo runuser "$USER" -g somegroup
私はこれをVagrantボックスで試しましたが成功しました:
[[email protected] ~]$ sudo runuser "$USER" -g floppy
[[email protected] ~]$ touch testfile
[[email protected] ~]$ ls -l testfile
-rw-r--r--. 1 vagrant floppy 0 Nov 9 15:57 testfile
[[email protected] ~]$
これは、「気まぐれな」ユーザーが「フロッピー」グループに属していないにもかかわらずです。
関連:Php:image2wbmp —画像をブラウザまたはファイルに出力します