web-dev-qa-db-ja.com

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

ローカルに書き込むファイルをダウンロードするために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
5
Angelo

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 ~]$ 

これは、「派手な」ユーザーが「フロッピー」グループに属していないにもかかわらずです。

9
Wildcard

Bashスクリプトがある場合は、それをrootとして実行し、スクリプト内の所有権を修正します。

1
AndrewQ

昇格された特権でスクリプトを実行する限り、問題は発生しません。例えば:

#!/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
1
terdon
_$ 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_は作成されません。

0
bk-se

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

0
UtahJarhead