
1台のコンピュータに3人(またはそれ以上)のユーザーがいる場合、ユーザー間でファイルを共有するための最良の(最も簡単な)方法は何ですか?
問題は、UserXがUserYにファイルを送信できるはずですが、UserZはそのファイルをインポートまたは表示できないことです。そのうち、X、Y、Zは1、2、3になります。
どのユーザーも他のユーザーのパスワードを持っていません。
基本的に私がUser1なら、私ができたくてsend dir/file to User2
User2もできるreceive from User1
。
考えてみましたがnc
、User1がUser2に転送したいからといって実際にUser3に転送しないという保証はありません。
共有ディレクトリが唯一の選択ですか?ファイルが大きく、ユーザーが別の場所でファイルを望む場合は、あまりにも複雑に見えます。
答え1
なぜそれを複雑にしたいのですかnc
?
共有グループを持つ3つの共有ディレクトリを設定します(ユーザーは3人だけなので、u1-u2、u2-u3、u1-u3の3つの異なるグループがあります)。操作はこれらの共有ディレクトリで実行されるため、コピーは必要ありません。
答え2
ACL
ユーザーは自分のファイルに対してを設定する権利を有します。
特定のユーザー()のみがjohn
ファイルを「転送」できるようにするには、次のようにします。joe
john
setfacl -m u:joe:rw file
joe
ユーザーがファイルにアクセスできるようにするために使用されます。もちろん、標準権限はアクセス権を除外する必要がありますjoe
(つまり、joe
グループのグループメンバーではなく、john
アクセス権がありませんothers
)。必要に応じてコマンドを設定しますsetfacl
。簡単なスクリプトを使用して「送信」コマンドを生成するには、次の提案に従ってください。
#!/bin/bash
print_help(){
echo "Usage: sendfile -u <user> file1 file2 ..."
exit 1
}
while getopts "u:h" option
do
case $option in
u) user=$OPTARG
if [[ "$(grep ^${user}: /etc/passwd)" == "" ]]
then
echo "$user not a valid user."
exit
fi ;;
h) print_help ;;
*) print_help ;;
esac
done
if ((OPTIND == 1))
then
echo "No user specified"
exit 1
fi
shift $((OPTIND - 1))
setfacl u:${user}:rw "$@"
もちろん、まずACLを有効にする必要があります。