我觉得这个问题很奇怪。我获得了我正在处理的站点的 FTP 访问权限,但似乎存在权限问题。在 FileZilla 中,如果我尝试编辑文件并重新上传到服务器,我会收到错误Permission denied
,但同时编辑后的文件的内容会在服务器上被删除!所以我最终处于远程文件损坏(所有内容都被删除 - 0B!)的情况,但我没有权限修复它。
大多数文件夹的权限设置为 775,文件的权限设置为 664。
- 为什么我会收到
permission denied
错误?我的权限有什么问题? - 如果我确实没有被授予写入文件的权限,为什么它的内容会被删除?
我在这里附加了两个 FileZilla 日志,其中一个已关闭调试:
10:32:02 Status: Connecting to [IP.ADD.RE.SS:PORT]...
10:32:05 Status: Connected to [IP.ADD.RE.SS]
10:32:05 Status: Retrieving directory listing...
10:32:05 Status: Listing directory /
10:32:06 Status: Directory listing of "/" successful
10:32:12 Status: Connecting to [IP.ADD.RE.SS:PORT]...
10:32:14 Status: Connected to [IP.ADD.RE.SS]
10:32:15 Status: Starting download of /wp-config.php
10:32:15 Status: remote:/wp-config.php => local:/tmp/fz3temp-1/wp-config.php
10:32:16 Status: File transfer successful, transferred 3.4 KB in 1 second
10:32:29 Status: Starting upload of /tmp/fz3temp-1/wp-config.php
10:32:30 Command: put "/tmp/fz3temp-1/wp-config.php" "wp-config.php"
10:32:30 Error: /wp-config.php: open for write: permission denied
10:32:30 Error: File transfer failed
10:32:30 Status: Starting upload of /tmp/fz3temp-1/wp-config.php
10:32:30 Status: Retrieving directory listing of "/"...
10:32:30 Status: Listing directory /
10:32:39 Status: Skipping upload of /tmp/fz3temp-1/wp-config.php
10:32:39 Status: File transfer skipped
10:33:39 Status: Disconnected from server
和其他正在调试的
10:46:32 Status: Connecting to [IP.ADD.RE.SS:PORT]...
10:46:32 Trace: Going to execute /usr/bin/fzsftp
10:46:32 Response: fzSftp started, protocol_version=6
10:46:32 Trace: CSftpControlSocket::ConnectParseResponse(fzSftp started, protocol_version=6)
10:46:32 Trace: CSftpControlSocket::SendNextCommand()
10:46:32 Trace: CSftpControlSocket::ConnectSend()
10:46:32 Command: open "gqwp@[IP.ADD.RE.SS]" [PORT]
10:46:32 Trace: Server version: SSH-2.0-mod_sftp/0.9.7
10:46:32 Trace: We believe remote version has SSH-2 RSA padding bug
10:46:32 Trace: Using SSH protocol version 2
10:46:32 Trace: Doing Diffie-Hellman group exchange
10:46:33 Trace: Doing Diffie-Hellman key exchange with hash SHA-256
10:46:33 Trace: Server also has ssh-dss host key, but we don't know it
10:46:33 Trace: Host key fingerprint is:
10:46:33 Trace: ssh-rsa 2048 [LO:NG:SSH:FI:NG:ER:PR:INT]
10:46:33 Trace: Initialised AES-256 SDCTR client->server encryption
10:46:33 Trace: Initialised HMAC-SHA1 client->server MAC algorithm
10:46:33 Trace: Initialised AES-256 SDCTR server->client encryption
10:46:33 Trace: Initialised HMAC-SHA1 server->client MAC algorithm
10:46:33 Trace: Pageant is running. Requesting keys.
10:46:34 Trace: Pageant has 1 SSH-2 keys
10:46:34 Trace: Attempting keyboard-interactive authentication
10:46:34 Trace: Using keyboard-interactive authentication. inst_len: 0, num_prompts: 1
10:46:34 Command: Pass: **************
10:46:34 Trace: Access granted
10:46:34 Trace: Opening session as main channel
10:46:34 Trace: Opened main channel
10:46:34 Trace: Started a shell/command
10:46:34 Status: Connected to [IP.ADD.RE.SS]
10:46:35 Trace: CSftpControlSocket::ConnectParseResponse()
10:46:35 Trace: CSftpControlSocket::ResetOperation(0)
10:46:35 Trace: CControlSocket::ResetOperation(0)
10:46:35 Trace: CFileZillaEnginePrivate::ResetOperation(0)
10:46:35 Trace: CSftpControlSocket::FileTransfer(...)
10:46:35 Status: Starting upload of /tmp/fz3temp-1/wp-config.php
10:46:35 Trace: CSftpControlSocket::SendNextCommand()
10:46:35 Trace: CSftpControlSocket::ChangeDirSend()
10:46:35 Command: cd "/"
10:46:35 Response: New directory is: "/"
10:46:35 Trace: CSftpControlSocket::ResetOperation(0)
10:46:35 Trace: CControlSocket::ResetOperation(0)
10:46:35 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:35 Trace: CSftpControlSocket::FileTransferSubcommandResult()
10:46:35 Trace: CSftpControlSocket::SendNextCommand()
10:46:35 Trace: FileTransferSend()
10:46:35 Command: put "/tmp/fz3temp-1/wp-config.php" "wp-config.php"
10:46:35 Error: /wp-config.php: open for write: permission denied
10:46:35 Trace: FileTransferParseResponse(2)
10:46:35 Trace: CSftpControlSocket::ResetOperation(2)
10:46:35 Trace: CControlSocket::ResetOperation(2)
10:46:35 Error: File transfer failed
10:46:35 Trace: CFileZillaEnginePrivate::ResetOperation(2)
10:46:35 Trace: CSftpControlSocket::FileTransfer(...)
10:46:35 Status: Starting upload of /tmp/fz3temp-1/wp-config.php
10:46:35 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:35 Trace: CSftpControlSocket::FileTransferSubcommandResult()
10:46:35 Status: Retrieving directory listing of "/"...
10:46:36 Trace: sftpcontrolsocket.cpp(836): List called from other command caller=0x7f3db4003080
10:46:36 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:36 Trace: CSftpControlSocket::ListSubcommandResult()
10:46:36 Trace: state = 1
10:46:36 Trace: CSftpControlSocket::SendNextCommand()
10:46:36 Trace: CSftpControlSocket::ListSend()
10:46:36 Trace: state = 3
10:46:36 Command: ls
10:46:36 Status: Listing directory /
10:46:37 Trace: CSftpControlSocket::ListParseResponse()
10:46:37 Trace: CSftpControlSocket::ResetOperation(0)
10:46:37 Trace: CControlSocket::ResetOperation(0)
10:46:37 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:37 Trace: CSftpControlSocket::FileTransferSubcommandResult()
10:46:41 Trace: CSftpControlSocket::SendNextCommand()
10:46:41 Trace: FileTransferSend()
10:46:41 Command: put "/tmp/fz3temp-1/wp-config.php" "wp-config.php"
10:46:41 Error: /wp-config.php: open for write: permission denied
10:46:41 Trace: FileTransferParseResponse(2)
10:46:41 Trace: CSftpControlSocket::ResetOperation(2)
10:46:41 Trace: CControlSocket::ResetOperation(2)
10:46:41 Error: File transfer failed
10:46:41 Trace: CFileZillaEnginePrivate::ResetOperation(2)
10:46:41 Trace: CSftpControlSocket::FileTransfer(...)
10:46:41 Status: Starting upload of /tmp/fz3temp-1/wp-config.php
10:46:41 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:41 Trace: CSftpControlSocket::FileTransferSubcommandResult()
10:46:41 Status: Retrieving directory listing of "/"...
10:46:41 Trace: sftpcontrolsocket.cpp(836): List called from other command caller=0x7f3db4003080
10:46:41 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:41 Trace: CSftpControlSocket::ListSubcommandResult()
10:46:41 Trace: state = 1
10:46:41 Trace: CSftpControlSocket::SendNextCommand()
10:46:41 Trace: CSftpControlSocket::ListSend()
10:46:41 Trace: state = 3
10:46:41 Command: ls
10:46:41 Status: Listing directory /
10:46:42 Trace: CSftpControlSocket::ListParseResponse()
10:46:42 Trace: CSftpControlSocket::ResetOperation(0)
10:46:42 Trace: CControlSocket::ResetOperation(0)
10:46:42 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:42 Trace: CSftpControlSocket::FileTransferSubcommandResult()
10:46:42 Trace: CSftpControlSocket::SendNextCommand()
10:46:42 Trace: FileTransferSend()
10:46:42 Command: put "/tmp/fz3temp-1/wp-config.php" "wp-config.php"
10:46:42 Error: /wp-config.php: open for write: permission denied
10:46:42 Trace: FileTransferParseResponse(2)
10:46:42 Trace: CSftpControlSocket::ResetOperation(2)
10:46:42 Trace: CControlSocket::ResetOperation(2)
10:46:42 Error: File transfer failed
10:46:42 Trace: CFileZillaEnginePrivate::ResetOperation(2)
10:46:42 Status: Retrieving directory listing of "/"...
10:46:42 Trace: CSftpControlSocket::ParseSubcommandResult(0)
10:46:42 Trace: CSftpControlSocket::ListSubcommandResult()
10:46:42 Trace: state = 1
10:46:42 Trace: CSftpControlSocket::SendNextCommand()
10:46:42 Trace: CSftpControlSocket::ListSend()
10:46:42 Trace: state = 3
10:46:42 Command: ls
10:46:43 Status: Listing directory /
10:46:43 Trace: CSftpControlSocket::ListParseResponse()
10:46:43 Trace: CSftpControlSocket::ResetOperation(0)
10:46:43 Trace: CControlSocket::ResetOperation(0)
10:46:43 Status: Directory listing of "/" successful
10:46:43 Trace: CFileZillaEnginePrivate::ResetOperation(0)
答案1
检查 FileZilla/PuTTY 源代码,很明显 FileZilla 在尝试打开文件进行写入时确实收到了“权限被拒绝”错误。
如果尽管出现错误但文件内容仍被删除,那么这一定是 SFTP 服务器的错误/配置错误。