ローカルに書き込むファイルをダウンロードするためにrsyncが必要なbashスクリプトがあり、所有者をApacheに設定し、グループを特定のユーザーグループ(Apacheはメンバーではない)に設定する必要があります。
それらがrsyncプロセスによって書き込まれているので、それらの所有権でそれらのファイルを作成する方法はありますかchmodを使用して実際に行ってから変更する必要はありませんか?非常に多くのファイルがあります。後でそれらを通過するのにかかる時間は法外です。
複数のユーザーグループに対してこれを行う必要があるため、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
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 ~]$
これは、「派手な」ユーザーが「フロッピー」グループに属していないにもかかわらずです。
Bashスクリプトがある場合は、それをrootとして実行し、スクリプト内の所有権を修正します。
昇格された特権でスクリプトを実行する限り、問題は発生しません。例えば:
#!/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
_$ Sudo install -o angelo -g Apache /dev/null angelo-file
_
_centos 6
_で動作し、バージョン8.4をインストールします。ここでは、インストールは(常に空であることがわかっている)_/dev/null
_ファイルをターゲットに「コピー」して空のファイルを作成しますが、同じ/単一のコマンドでターゲットファイルの所有者とグループを設定します。須藤。
詳しくは、_man install
_または_install --help
_を参照してください。同じ/単一のコマンドで、ディレクトリを作成し、権限モードも設定できます。 installコマンドは、makefileなどのビルドツールで頻繁に使用されます。
オプション_-T
_を使用することもできます。そのため、ターゲットが既に存在しているがディレクトリの場合、エラーで失敗し、代わりに空の_angelo-file/null
_は作成されません。
Cラッパーで 'setuid'を使用してchmodすることができますが、プログラミングで非常に制限されていない限り、これは非常に大きなセキュリティホールであるため、これはお勧めできません。