ユーザーは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
あなたは遊んでみることができます:
cmds_allowed
このオプションは、許可されるFTPコマンドのコンマ区切りリストを指定します(ログイン後。USER、PASS、QUITなどは常にログイン前に許可されます)。他のコマンドは拒否されます。これは、FTPサーバーを実際にロックダウンするための強力な方法です。例:cmds_allowed = PASV、RETR、QUITデフォルト:(なし)
cmds_denied
このオプションは、拒否されたFTPコマンドのコンマ区切りリストを指定します(ログイン後。USER、PASS、QUITなどは常にログイン前に許可されます)。これとcmds_allowedの両方にコマンドが表示された場合、拒否が優先されます。 (v2.1.0で追加)。
たとえば、RNTOコマンドをブロックします。
UNIXモデルは、必要なディレクトリへの書き込みを許可することです。/home/mpapecおよび必要に応じて特定のディレクトリへのアクセスを禁止します。
パスの正規化のために-e
スイッチをサポートするreadlink
がある場合は、ユーザーが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"
これにより、通常のmv
とは異なり、移動されたファイルのiノード番号が(明らかに)変更されることに注意してください。