한 컴퓨터에 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
?
공유 그룹이 있는 세 개의 공유 디렉터리를 설정합니다(사용자가 세 명뿐이므로 u1-u2, u2-u3, u1-u3의 세 가지 다른 그룹이 있습니다). 작업은 이러한 공유 디렉터리에서 수행되므로 복사가 필요하지 않습니다.
답변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을 활성화해야 합니다.