社内のユーザー間でファイルを共有するために使用したいLinuxサーバーがあります。ユーザーは、sftpまたはセキュアシェルを使用してマシンにアクセスします。
これが私が持っているものです:
cd /home ls -l drwxrwsr-x 5 userA staff 4096 Jul 22 15:00 shared (他のリストは省略)
スタッフグループのすべてのユーザーが、共有フォルダ内のファイルやディレクトリを作成、変更、削除できるようにしたいのですが。他のユーザーにフォルダへのアクセス権をまったく与えたくありません。
私が持っています:
/ etc/groupを変更し、grpconvを実行して/ etc/gshadowを更新することにより、ユーザーをスタッフグループに追加しました。
Chown -R userA.staff/home/sharedを実行します
Chmod -R 2775/home/sharedを実行します
現在、スタッフグループのユーザーは新しいファイルを作成できますが、ディレクトリ内の既存のファイルを開いて編集することはできません。これは、ユーザーが作成されたときに作成されたグループとして設定されている各ユーザーに関連付けられたプライマリグループIDが原因であると考えられます。したがって、ユーザー「userA」のPGIDは「userA」です。
もし私がそれを手伝うことができるなら、ユーザーのプライマリグループを「スタッフ」に変更したくありませんが、それが最も簡単なオプションであれば、それを検討します。
また、テーマのバリエーションとして、別のディレクトリでも同じことをしたいのですが、Apacheユーザーがディレクトリ内のファイルを読み取ってそれらを提供することもできます。
これを設定する最良の方法は何ですか?
あなたが実際に持っているものは正しいように見えます。ディレクトリにsetgidビットが設定されているため、作成された新しいファイルはstaff
グループを継承する必要があります。ただし、それらはまだ作成者が所有しています。問題は、ユーザーのumask
がデフォルトで022
または077
に設定されているためと思われます。つまり、ユーザーが作成する新しいファイルには、デフォルトでグループ書き込み権限がありません。ユーザー/グループの所有権は正しいが、グループのアクセス許可では、グループの他のメンバーがファイルを書き込む(場合によっては読み取る)ことはできません。
staff
グループのユーザーを選択し、umask
を002
または007
に設定します。これは、新しいファイルが所有者およびグループに書き込み可能であることを意味します。これで問題が修正されると思います:
bash$ umask
0022
bash$ umask 002
bash$ umask
0002
また、staff
グループ外の誰もディレクトリにアクセスできないようにする必要があることにも気付きました。これを行うには、2770
のディレクトリ権限を変更する必要があります。そうしないと、staff
以外のユーザーがディレクトリ内のファイルを読み取ることができます(変更はできません)。
Apache
ユーザーに関する最後の質問の場合、おそらく最も簡単な方法は、そのユーザーをstaff
グループに追加することです。
私は彼の調査結果に同意します。 Fuseファイルシステムデーモンについて。まだ迷路にいる場合に備えて、ユーザー間のこのローカル共有を簡単に http://airkayu.com/node/24 で行う方法の手順を書き直しました。
問題は、sftpデーモンがログインスクリプトを使用せず、グループへの書き込みを許可しないumaskが発生することです。
これを回避するには、umaskを設定してsftpサーバーを実行するスクリプトを作成します。cat/usr/lib/openssh/sftp-server-prot umask 02 exec/usr/lib/openssh/sftp-server
次に、ssh/sshd_configを編集して、上記のラッパースクリプトを使用します。Subsystem sftp/usr/lib/openssh/sftp-server-prot
次に、sshdを再起動します。