사용자는 서버를 통해 파일을 업로드/삭제/이름 바꾸기할 수 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 권한이 활성화되어 있습니까?
노력하다:
루트 모드
mount -o remount,rw dir (dir은 파일을 이동할 디렉터리입니다)