이름 바꾸기는 허용하지만 다른 디렉터리로 이동하지 않음

이름 바꾸기는 허용하지만 다른 디렉터리로 이동하지 않음

사용자는 서버를 통해 파일을 업로드/삭제/이름 바꾸기할 수 vsftp있으며 디렉터리 간에 파일을 이동할 수도 있다는 점을 제외하면 모든 것이 잘 작동합니다.

파일 이름을 바꾸지만 이동할 수는 없도록 허용할 수 있습니까?

예,

/ftp/work/xls/list.xls # can be deleted/renamed but should not moved to ie. 'doc'
/ftp/work/doc/list.doc # same thing, should not be moved elsewhere

답변1

다음과 같이 플레이해 볼 수 있습니다.

  • 허용된 cmd

    이 옵션은 허용되는 FTP 명령의 쉼표로 구분된 목록을 지정합니다(로그인 후. USER, PASS, QUIT 등은 로그인 전에 항상 허용됩니다). 다른 주문은 거부됩니다. 이는 FTP 서버를 잠그는 정말 강력한 방법입니다. 예: cmds_allowed=PASV,RETR,QUIT 기본값: (없음)

  • cmds_deny

    이 옵션은 거부할 FTP 명령의 쉼표로 구분된 목록을 지정합니다(로그인 후. USER, PASS, QUIT 등은 로그인 전에 항상 허용됩니다). 이 명령과 cmds_allowed 모두에 명령이 나타나면 거부가 우선적으로 적용됩니다. (v2.1.0에 추가됨).

예를 들어 RNTO 명령을 차단합니다.

답변2

내가 말하려는 것은 유닉스 모델은 당신이 원하는 디렉토리(예: /home/mpaec)에 쓰기를 허용하고 필요에 따라 특정 디렉토리에 대한 액세스를 비활성화한다는 것입니다.

답변3

readlink경로 정규화 스위치를 지원하는 스위치가 있다면 -e사용자가 이를 사용하는 것을 완전히 방지하고 대체 mv스위치를 직접 작성하는 것이 좋습니다 mv. 어쩌면 다음과 같은 것일 수도 있습니다.

#!/bin/bash

[ $# -ne 2 ] && echo "Only a two-argument mv is allowed" && exit 1

src="$1"
dst="$2"

srcdir="$(readlink -e "$(dirname "$src")")"
dstdir="$(readlink -e "$(dirname "$dst")")"

[ "$srcdir" != "$dstdir ] && echo "Cross-directory mv is forbidden" && exit 2
[ "$(basename "$src")" = "$(basename "$dst")" ] && echo "Source and destination are the same. Nothing to do." && exit 3

cp -p "$src" "$dst" && rm -f "$src"

일반 와 달리 이동된 파일의 inode 번호가 변경된다는 점에 유의하세요 mv.

답변4

파일을 이동하려는 디렉토리에 +rw 권한이 활성화되어 있습니까?

노력하다:

  1. 루트 모드

  2. mount -o remount,rw dir (dir은 파일을 이동할 디렉터리입니다)

관련 정보