在没有目录 777 权限的情况下在托管服务器上使用 mysqldump
Using mysqldump on hosted servers without directory 777 permision
我正在尝试创建一个 cron 将访问的 php 文件。该文件将创建它所连接的数据库的备份。为此,它使用 PHP 的 exec()
和 mysqldump
这一切都很好,但是,它只有在它正在写入的目录具有权限时才有效0777
。我已经用不同的权限进行了测试,似乎只有世界数字需要是 7。(或者至少我认为是读写)
问题是,我不希望服务器以外的任何人都能看到这个备份,因为它包含用户信息! (即使此信息已加密)
我试过在目录上使用 chmod
仅在写入文件时将其设为 0777,但它无法更改权限,这可能是另一个安全风险。
有什么方法可以将此文件写入具有 0700
权限的目录吗?或者有没有其他我现在没有看到的方式...
源代码:
<?php
backup('notecms', 'root');
function backup($name, $user, $pass = NULL) {
$filename='/note_db_backup_'.date('G_a_m_d_y').'.sql';
if ($pass == NULL) {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -r '. $filename . ' 2>&1', $output, $return_var);
}
else {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -p='. $pass .' -r '. $filename . ' 2>&1', $output, $return_var);
}
if($return_var == 0){
//return 0;
if (!chmod($filename, 0600)) {
die('could not change backup permissions');
}
deleteold();
}
else {
print_r($output);
global $backup_output;
$backup_output = $output;
//return 1;
}
}
function deleteold() {
$filecount = count(scandir("../backup/")) - 2;
if ($filecount > 5) {
$files = glob( '../backup/*' );
array_multisort(
array_map( 'filemtime', $files ),
SORT_NUMERIC,
SORT_ASC,
$files
);
unlink($files[0]);
}
}
?>
权限没有理由是0777
。您需要执行脚本的用户具有对该目录的 read/write 访问权限,因此请确保该用户拥有该目录并且您只需要 0700
.
您的脚本必须 运行 作为目录的所有者,或者能够对该所有者执行 sudo 运行 脚本。由于您需要在许多服务器上完成它,您应该与系统管理员联系以让他们进行设置。
他们可以将其设置为只为该任务工作,并且可能有一种方法可以将其推送到所有服务器..
我正在尝试创建一个 cron 将访问的 php 文件。该文件将创建它所连接的数据库的备份。为此,它使用 PHP 的 exec()
和 mysqldump
这一切都很好,但是,它只有在它正在写入的目录具有权限时才有效0777
。我已经用不同的权限进行了测试,似乎只有世界数字需要是 7。(或者至少我认为是读写)
问题是,我不希望服务器以外的任何人都能看到这个备份,因为它包含用户信息! (即使此信息已加密)
我试过在目录上使用 chmod
仅在写入文件时将其设为 0777,但它无法更改权限,这可能是另一个安全风险。
有什么方法可以将此文件写入具有 0700
权限的目录吗?或者有没有其他我现在没有看到的方式...
源代码:
<?php
backup('notecms', 'root');
function backup($name, $user, $pass = NULL) {
$filename='/note_db_backup_'.date('G_a_m_d_y').'.sql';
if ($pass == NULL) {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -r '. $filename . ' 2>&1', $output, $return_var);
}
else {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -p='. $pass .' -r '. $filename . ' 2>&1', $output, $return_var);
}
if($return_var == 0){
//return 0;
if (!chmod($filename, 0600)) {
die('could not change backup permissions');
}
deleteold();
}
else {
print_r($output);
global $backup_output;
$backup_output = $output;
//return 1;
}
}
function deleteold() {
$filecount = count(scandir("../backup/")) - 2;
if ($filecount > 5) {
$files = glob( '../backup/*' );
array_multisort(
array_map( 'filemtime', $files ),
SORT_NUMERIC,
SORT_ASC,
$files
);
unlink($files[0]);
}
}
?>
权限没有理由是0777
。您需要执行脚本的用户具有对该目录的 read/write 访问权限,因此请确保该用户拥有该目录并且您只需要 0700
.
您的脚本必须 运行 作为目录的所有者,或者能够对该所有者执行 sudo 运行 脚本。由于您需要在许多服务器上完成它,您应该与系统管理员联系以让他们进行设置。
他们可以将其设置为只为该任务工作,并且可能有一种方法可以将其推送到所有服务器..