これを行うには 2 つの方法があります。ディレクトリを「誰でも」書き込み可能に設定するか、2 人のユーザー用に新しいグループを作成し、ディレクトリをそのグループに書き込み可能にします。
誰でも書き込み可能にすることは明らかに悪いことなので、2 番目のオプションが望ましいです。
Linux のユーザーは、複数のグループに属することができます。この場合、まったく新しいグループを作成したいので、名前を tomandruser
にしましょう。 :
sudo groupadd tomandruser
グループが作成されたので、2 人のユーザーを追加します。
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
あとは、ディレクトリにアクセス許可を設定するだけです:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
これで、tomandruser グループのメンバーのみが、ディレクトリ内のすべてのものを読み取り、書き込み、または実行できるようになりました。 chmod および chgrp コマンドの -R 引数に注意してください。これは、ターゲット ディレクトリのすべてのサブディレクトリに再帰し、見つかったすべてのファイルとディレクトリを変更するように指示します。
770 を 774
のように変更することもできます。 他の人がファイルを読めるようにしたい場合は、 775
他のユーザーにファイルの読み取りと実行を許可する場合など。グループ割り当ての変更は、ユーザーがログアウトして再度ログインするまで有効になりません。
ユーザーの 1 人がディレクトリ内で作成した新しいファイルをグループ内の他のユーザーが自動的に書き込めるようにしたい (おそらくそうしている) 場合は、こちらを参照してください。
次のスクリプトは、r (read) / w (write) / x (execute)
を与える例を示しています。 指定されたフォルダー パスへのアクセス許可 /path/to/the/directory
USER1
の場合 そして USER2
.書き込みアクセスのみを許可する場合は、rwx
を置き換えてください w
で .
#!/bin/bash
# Block others and people in the same group to do `r/w/x` on the give folder:
sudo chmod 700 /path/to/the/directory
# Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx /path/to/the/directory
# Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx /path/to/the/directory
個人的な回答:
- 共有フォルダを中央の場所に置くのが好きです。他人のホームフォルダではなく、
/srv/common
または(容赦なく短いパスの場合...)/repo
- 新しいグループを定義します (通常は、参加したいすべてのローカル ユーザー用です。ただし、
wwwuser
のような一部のテクニカル ユーザーは除きます)。 、正当な理由がない限り) root
メンバーとして、その共有フォルダの中立的な所有者を持つのは良いことです- setGid は非常に重要です。新しいファイルが共通のグループ メンバーになるため、
frank:common
、frank:frank
ではありません
sudo groupadd -f common
usermod -aG common root
usermod -aG common frank
usermod -aG common mike
# sort of hack for instant group refresh w/o logout
# superuser.com/a/345051
su - frank
# sanity test1:
cat etc/group | grep common
common:x:1008:root,frank,mike
# sanity test2:
groups
frank adm cdrom ... common
sudo chown root:common /repo
# (if you have shareable stuff setting somewhere else,
# copy it to here now)
# no right to the world, the right rights to user and group
chmod -R ug+rwXs,o-rwx $dest
# why uppercase X ? → unix.stackexchange.com/a/416885
# why s ? → superuser.com/a/277785
# as there is no such thing as an uppercase S (directories only)
# settings the s attribute on preexisting content would have to happen
# like so:
# find /repo -type d -exec chmod g+s {} \\\;