尝试 mv (sudo su userName) 时权限被拒绝

尝试 mv (sudo su userName) 时权限被拒绝

我目前正在编写一个备份脚本,用于登录我的生产服务器并将最新的 SQL 转储拉到我的暂存服务器。我可以轻松拉取 SQL 转储,但将最后的备份文件移动到临时文件夹时会遇到问题。

我的备份脚本用户:mysqlBackupUser

我使用此用户的主目录作为此脚本的位置并存储备份。文件夹结构如下:

/home
   |- mysqlBackupUser
       |- .ssh
       |- backups
       |- bin

我的脚本就位bin,备份已下载到backups目录中

backups目录还有其他文件夹用于组织服务器和备份类型。例如:

/backups
   |-mysql
       |- production1
       |- production2
   |-misc
       |- production1
       |- production2

到目前为止一切都很好,并且按预期运行。问题是当我处于(不限于)以下情况时:

/home/mysqlBackupUser/backups/mysql/production1/

当我创建名为 tmp 的目录_lastBackUp并尝试将我以前的备份移动到其中时,我得到:

find: Failed to change directory: Permission denied

我的代码是:

local tmpBackUpDir="${LOCAL_LOCATION_DIR}/_lastBackUp/"

# Ensure the directory exist
mkdir -p "${tmpBackUpDir}"

# move any previous files to bak
find "${LOCAL_LOCATION_DIR}/" -type f -exec mv -t "${LOCAL_BAKUP_DIR}" {} \+;;

为了清楚起见:

LOCAL_LOCATION_DIR = /home/mysqlBackupUser/backups/mysql/production1
tmpBackUpDir = /home/mysqlBackupUser/backups/mysql/production1/_lastBackUp/

要了解脚本的使用方式:目前我以我的用户身份登录,并且

sudo su mysqlBackupUser

以用户身份。我不确定这是否是问题所在,我无法通过以该用户身份登录进行测试。该脚本将由 cron 运行,并将以该用户的身份(设置密钥以简化该用户的自动化)执行该过程,因此我不确定这是否真的是问题所在。

我已经验证了所有文件夹的所有权和权限,甚至 也_lastBackUpmysqlBackupUser。我甚至将其设置_lastBackUp为 777 进行测试,但仍然被拒绝权限...

我的完整错误是:

find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: failed to restore initial working directory: Permission denied

每个find: Failed to change directory: Permission denied文件都是我要移动到的_lastBackUp

感谢您对此的任何见解。

答案1

看起来错误是由于没有权限改变目录。

  • 验证用户至少拥有r-x指向执行脚本的路径的每个文件夹。
  • 验证用户至少拥有rwx备份所在的文件夹+文件。
  • 验证用户是否有登录 shell,$HOME以及$PATH。如果是,则在开始操作之前将脚本移动cd到某个相关位置。如果没有,则使用以下方法定义所有命令和位置绝对路径。

我想不出任何其他可能的原因。

答案2

如果 mkdir 工作正常(看起来是这样的),那么如果你在父目录上运行 ls -al,那么目录的所有者是谁?在我看来,某个地方的权限出了问题。

相关内容