web-dev-qa-db-ja.com

Linuxサーバーから直接Windows共有にアクセスしてファイルをコピーできますか

Sambaを使用して作成されたWindows共有があります。

それは私のubunutuサーバー/mnt/user_newにあります/var/www/myproject/files/から/mnt/user_new/filesにファイルをコピーします。これはファイルのバックアップ用です。元のファイルを削除します。

PHPを使用しています。フォームPHP試した

$file = '/var/www/html/bmw/myproject/files/0000000.pdf';
$newfile = '/mnt/user_new/0000000.pdf';

if (!copy($file, $newfile)) {
        echo "failed to copy $file...\n";
} 

しかし、許可拒否エラーが表示されます。

Severity: Warning

Message: copy(/mnt/user_new/0000000.pdf) [function.copy]: failed to open stream: Permission denied

LinuxサーバーからWindows共有にファイルをコピーする方法はありますか。私はアクセスウィンドウ共有のユーザー名とパスワードを持っていますが、ここでそれを使用する方法を知りません。ユーザー名とパスワードを渡す方法はありますか?.

正直に言うと、これはSambaを使用する初めての作業であり、Windows共有はネットワーク管理者によって作成されます。私はこの簡単なコピーに8時間近く費やしました。しかし、できませんでした。

私を助けてください 。前もって感謝します 。

そのため、LinuxサーバーにはローカルディレクトリにマウントされたWindows共有がありますが、どうやらそこに書き込むことはできません。この共有はゲストアクセスとして設定されているため、読み取り専用ステータスになっていると思います。この構成の問題を解決するための出発点として、 windows shareのマウントに関するubuntuドキュメント を参照してください。

当面の回避策として、コマンドラインまたはシェルスクリプトから smbclient を使用してバックアップを実行することをお勧めします。このコマンドは、必要に応じてWindows共有のパスを見つけるのに役立ちます。

$ smbclient -L <hostname>

しかし、コメントで提案したように、FSブラウザー(Gnome、KDE、またはWindowsシェル)から検索する方が簡単かもしれません。このプログラムは、多かれ少なかれSMB/CIFSプロトコル上でftpクライアントのように機能しますが、正確なパラメーターが必要なので、調査する必要があります。たとえば、WindowsサーバーがActive Directoryドメインに属している場合、-kパラメーターをsmbclientに渡して通知する必要があります。また、コマンドラインでユーザー名とパスワードを渡す必要があります。マニュアルページで説明されている他の多くのパラメータがありますが、これは状況に応じて重要になる可能性があります(たとえば、接続を暗号化する必要がありますか?)。

対話モードでは、前述のように、このプログラムはftpクライアントのように機能します。したがって、ftpコマンドに精通している場合は、このツールに慣れているはずです。コマンドラインで一連のftp命令を渡すこともできます。これはおそらく、共有マウントが修正されるまでバックアップを自動化するために使用するものです。

最後に、PHPスクリプトからシェルコマンドを呼び出す必要があるときに便利な system php関数についても言及しました。繰り返しますが、これはすべて、共有が修正されるまで一時的な解決策として使用する必要があります。スクリプトまたはsmbclientからアクセスできるファイル構成ファイルのどこかに資格情報を書き込む必要があります、練習。可能であれば、資格情報がインタラクティブに提供される手動バックアップの作成を試みる必要があります。

2
didierc