私のユーザーアカウントがディレクトリ所有者ではなく、ディレクトリグループ所有者であるグループに属するディレクトリにファイルをコピーしようとしています。私が取ったアクションは次のとおりです。
グループを作成し、グループに私を追加します。
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()
passwd
group
これにより、ターゲットユーザーのgidsリストを設定するのと同じか、そこで使用されていることsudo -u stephen id -Gn
がわかります。同じtest-group
sudo
initgroups()
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
所有してください。stephen
test-group
rw-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の権限とファイルタイプの理解もっと学ぶ。