私はディレクトリグループのメンバーであるディレクトリにファイルをコピーします。

私はディレクトリグループのメンバーであるディレクトリにファイルをコピーします。

私のユーザーアカウントがディレクトリ所有者ではなく、ディレクトリグループ所有者であるグループに属するディレクトリにファイルをコピーしようとしています。私が取ったアクションは次のとおりです。

グループを作成し、グループに私を追加します。
stephen@pi:~ $ sudo groupadd test-group
stephen@pi:~ $ sudo usermod -a -G test-group stephen
stephen@pi:~ $ grep 'test-group' /etc/group
test-group:x:1002:stephen
ファイルの作成と権限のリスト
stephen@pi:~ $ touch example.txt
stephen@pi:~ $ ls -l example.txt
-rw-r--r-- 1 stephen stephen 0 Feb  9 10:46 example.txt
ディレクトリを作成し、グループの所有者を新しいグループに変更し、ディレクトリの権限を変更して、グループに書き込み権限を付与します。
stephen@pi:~ $ sudo mkdir /var/www/testdir
stephen@pi:~ $ sudo chown :test-group /var/www/testdir/
stephen@pi:~ $ sudo chmod 664 /var/www/testdir/
stephen@pi:~ $ sudo ls -l /var/www
total 8
drwxr-xr-x 2 root    root       4096 Oct 31 12:17 html
drw-rw-r-- 2 root    test-group 4096 Feb  9 10:48 testdir
新しく作成されたファイルをこのディレクトリにコピーします。
stephen@pi:~ $ cp example.txt /var/www/testdir/straight-copy.txt
cp: failed to access '/var/www/testdir/straight-copy.txt': Permission denied

私はこのディレクトリの所有権を持つグループのメンバーであり、グループ権限はrwに設定されています。最終的に、このディレクトリにコピーされたすべてのファイルが親ディレクトリ(/var/www/testdir)の権限を継承したいと思います。

以下を使用してコピーできますsudo

ファイルの所有権/権限のコピーsudoとリスト
stephen@pi:~ $ sudo cp example.txt /var/www/testdir/straight-copy.txt
stephen@pi:~ $ sudo ls -l /var/www/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb  9 11:06 straight-copy.txt

誰かが私に何が起こっているのか説明してもらえますか?

答え1

これを行うとき:

sudo usermod -a -G test-group stephen

/etc/groupグループデータベースのみが変更されます(あなたのコンテンツ)。その gid は、stephenシェルを実行するプロセス (または有効な uid または実際の uid で uid を持つすべてのプロセス) の補足 gid リストに自動的に追加されません。

シェルプロセスを実行するid -Gn(新しいプロセスを開始(uids / gids継承)してid実行)、ps -o user,group,supgrp -p "$$"または(サポートしている場合)リストにない場合は、そのプロセスがリストにないpsことがわかります。test-group

更新されたグループのリスト(またはログインしたセッションの親プロセスのgidリストを設定するためにデータベースを検索するlogin(または他のログインアプリケーション)を呼び出す)を使用して新しいプロセスを開始するには、ログアウトして再度ログインする必要があります。initgroups()passwdgroup

これにより、ターゲットユーザーのgidsリストを設定するのと同じか、そこで使用されていることsudo -u stephen id -Gnがわかります。同じtest-groupsudoinitgroups()sudo zsh -c 'USERNAME=stephen; id -Gn'

返品、別途述べたように、あなたはする必要があります探すx)ディレクトリ権限を使用すると、その項目へのアクセス(生成を含む)が可能です。

したがって、ログアウトして再度ログインしなくても、次のことができます。

# add search permissions for `a`ll:
sudo chmod a+x /var/www/testdir

# copy as the new you:
sudo -u stephen cp example.txt /var/www/testdir/

また、これを使用して、実際の効果的な gidnewgrp test-groupで新しいシェルプロセスを開始し、test-groupそれを補足 gid リストに追加することもできます。

newgrpグループデータベースでグループメンバーシップが付与されているため許可されます。この場合、管理者権限は必要ありません。

または、sg test-group -c 'some command'シェル以外のものを実行します。これの効果は、元の(e)gidの復元中に補足のgidにのみsg test-group -c 'newgrp stephen'追加することです。test-group

このユーティリティを使用して、所有者、グループ、および権限を指定しながらファイルのコピーを作成することもできますinstall

sudo install -o stephen -g test-group -m a=r,ug+w example.txt /var/www/testdir/

をコピーするには、グループと権限でexample.txt所有してください。stephentest-grouprw-rw-r--

コンテンツに加えて、タイムスタンプ、所有権、権限をコピーするには、cp -p.GNUcpもできるだけcp -a多くのメタデータ(の略語)をコピーする必要があります。--recursive --no-dereference --preserve=all

答え2

ディレクトリに対する検索権限が必要です。

chmod 775 /var/www/testdir

ディレクトリに作成されたファイルをそのディレクトリのグループが所有するには、sgidも必要です。

chmod 2775 /var/www/testdir

バラよりUNIXの権限とファイルタイプの理解もっと学ぶ。

関連情報