sambaの共有ディレクトリで特定のホストからの編集ができない問題

このQ&Aのポイント
  • sambaの共有ディレクトリで特定のホストからの編集ができない問題が発生しています。解決策を探していますが、うまくいきません。
  • Fedora 10とWindows 2008 Server、Windows 7(x86)の環境で、sambaの共有ディレクトリの編集に問題があります。特定のホストからの編集ができない状況です。
  • sambaの共有ディレクトリで、特定のホストからの編集ができない問題が発生しています。解決方法を探していますが、まだ解決していません。
回答を見る
  • ベストアンサー

samba の共有ディレクトリで、特定のホストから編集できない場合がある

ここ 2~3 日、トライ&エラーを繰り返してきましたが、 どうにもこうにも解決できませんので、質問させてください。 [環境] Fedora 10  ・Samba 3.2.15 Windows 2008 Server Windows 7(x86) SRV-A(Win2k8)    |    |-smb(samba@Fedora 10)    |    |-PC-A(Win 7)    |    |-PC-B(Win 7)    |    |-PC-C(Win 7) smb や、PC-A、B、C は SRV-A の Active Directory(以下 AD)に参加している状況です。 この AD に foo1 というユーザーを作成し、samba 上のファイルを編集しようとしています。 foo1 は、smb 上のユーザとしても、smb 上の samba ユーザとしても作成しています。 [状況] PC-A に foo1 でログオン。 smb で公開中のディレクトリ hoge をネットワークドライブとして設定。 (この hoge の create mode(mask) は 0764、directory mode(mask)は 755 です) 次に、hoge の中に test.txt というのを作成します。 すると -rwxrw-r-- foo1 foo1 test.txt というのができます(リンクカウント、タイムスタンプなどは割愛)。 当然、foo1 は、PC-A から、この test.txt を編集できます。 しかし、foo1 が、PC-B にログオンし、同一の手順を踏み、hoge ディレクトリを ネットワークドライブに設定しても、この test.txt が編集できません。 但し、PC-B で作成したファイルは編集が可能です。 ただ、同様の作業を、PC-C で行うと、今度は編集が可能です。 read only = no を追加してみたり(もちろん writable = yes にはしているので、 無意味と思われますが)share modes = no にしてみたり、smb に root で ログインし、該当ファイルのパーミッションを 0777 にしてみたりと、 思いついたこと、google 先生に聞いたこと、さまざま試してみましたが、 結局うまくいきませんでした。 まぁ、PC-A と、PC-C の動作が、設定通り (というか期待通り)ですが、PC-B で動かないというのは、PC-B の問題かと 推測するのですが、PC-B に特異な設定をしたわけでもないので、正直お手上げです。 似たような状況にあわれた方、いらっしゃいますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#110816
noname#110816
回答No.1

> しかし、foo1 が、PC-B にログオンし、同一の手順を踏み、hoge ディレクトリを ネットワークドライブに設定しても、この test.txt が編集できません。 「編集できません」とは、具体的には何らかのメッセージが表示されるのでしょうか。 それとも、無反応のままなのですか。 /etc/samba/smbusers に foo1 = foo1 のように追加しても状況に変化ありませんか。 ---補足 私の場合は似た環境で samba-3.5.1-58(fedora13-beta)ですが、そのような状況は発生していません。

pastelpurple
質問者

お礼

再度、補足ってできないのね……。 さて、アドバイスいただいた、 > /etc/samba/smbusers に > foo1 = foo1 ですが、変化ありませんでした。 やはり、上書き保存ができない状況です。 なお、新たに気づいた点が 1 点あるのですが (share modes ばかりに目がいってた所為?) PC-B に foo1 でログオンしているにもかかわらず、webmin の接続状況を 確認すると、samba へ接続しているユーザが foo2 になっていました。 これは、PC-B へは foo1 でログオンしつつも、foo1 に samba の アカウントがなかった為、samba ログインの為に、foo2 のアカウントを 用いて接続(別の資格情報を~のアレです)していたのが、どこかに キャッシュされているからかと思いますが、どうもこれが悪さをしているような……。 推測ですが samba ではなく、Windows 側が原因のようですね。 資格情報の削除などで、再度ぐぐってみたいと思います。

pastelpurple
質問者

補足

frouvaij さま アドバイス有難うございます。 > 「編集できません」とは、具体的には何らかのメッセージが表示されるのでしょうか。 > それとも、無反応のままなのですか。 説明不足で、申し訳ありません。 編集に使用しようとしているエディタの排他処理機能の有無で、 動作が変わってきますが、たとえばメモ帳なら、上書き保存を しようとすると、保存できませんとダイアログが出てきますし、 秀丸ではファイルオープン時に、リードオンリーでなければ開けませんと いった旨のメッセージが表示され、上書きができません。 参考までに webmin の共有ファイルの状況や、smbstatus を確認すると、 開いているファイルの状態は、DENY_WRITE が返ってきますが、 DENY_WRITE になるのは、PC-B のみなので、疑問に思っている次第です。 > /etc/samba/smbusers に > foo1 = foo1 職場の PC なので、土日は試せませんが、月曜になったら、 早速試してみたいと思います。 繰り返しになりますが、アドバイス有難うございました。

関連するQ&A

  • sambaを使った共有ディレクトリのパスがわかりません。

    CentOSカーネルver4.4でsambaを起動し、Windows2000のファイルサーバとしています。Windows2000でVC++を使ってプログラムを作成する際、CentOS側にあるファイルを参照したいのですが、パスの指定方法がわかりません。デスクトップ上からは、ファイルの内容を確認できたので、\\デスクトップ\\マイネットワーク\\ネットワーク全体\\Microsoft Windows Network\\Workgroup\\(CentOSのあるPC名)\\(共有ディレクトリ)\\(ファイル名)としたのですが、うまくいきませんでした。パスの記述の仕方がわかる方がいらっしゃいましたら、教えてください。よろしくお願いします。

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • unixのawkについて

    unixでawkを使ってフルパスからディレクトリとファイル名に分けようと しているのですが、上手くいきません。 例えば ①/aaa/bbb/ccc ②/111/222/333/hoge.txt ③/hoge/foo/bar/dk@0:1 を ①/aaa/bbb と ccc ②/111/222/333 と hoge.txt ③/hoge/foo/bar と dk@0:1 としたいのです。 echo "/111/222/333/hoge.txt" | gawk '{sub(/\/.*$/,"",$0); print}' としてみたのですが、 ディレクトリだけを取り出そうとしたのですが上手くいきません。 よろしくお願いします。 OSは、Solaris、Linuxになります。

  • Unix初心者による初心者シェルプログラミングです。

    Unix初心者による初心者シェルプログラミングです。 以下のようなコマンドを羅列しただけの スクリプトが300行(実質100行ぐらい)が漸くできるようになりました。 これだけで、おばかさんな私は進化してます。が・・・ 対象となる、hoge.txtは、同ディレクトリ内に別名で、200ファイル有ります。 このスクリプトがその別名、200ファイルへと対象になります。 と云う事はファイル名分の200ファイル分スクリプトを編集して用意しなくては いけなくなる。 となると・・・ 別の事をしないといけませんよね。 どうやら、同ディレクトリ内にある、全ての .txt ファイルに対してこの スクリプトを実行させるには・・・ (よくわかりませんが・・・) FILE=`/home/foo/*.txt` みたいな・・・(全然違うと思っていますが、イメージで) /home/foo/ 内の .txt ファイルを一ファイルずつ読み込んで、実行させる方法が あると思うのですが・・・ 全てを教えて貰うつもりはありません。 学習していきます。 でも、疲れてきました。 がしかし、やらなくちゃいけません。 ヒント下さい。 お願いします! > cat hogehoge.sh #!/usr/bin/sh DAY=`/usr/xpg4/bin/date '+%Y/%m/%d%a'` HUMAN=`/usr/ucb/whoami` TIME=`/usr/xpg4/bin/date '+%H:%M:%S'` echo echo "$DAY : $HUMAN : PID $$" echo echo "$0" echo echo "$TIME Let's start!" echo echo "ls -l /home/foo/hoge.txt" ls -l /home/foo/hoge.txt echo echo "cat -n /home/foo/hoge.txt | head -15" cat -n /home/foo/hoge.txt | head -15 echo echo "sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt" sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo echo "cat -n /home/foo/new-hoge.txt | head -18" cat -n /home/foo/new-hoge.txt | head -18 echo echo "sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt" sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt echo echo "ls -l /home/foo/renewal-hoge.txt" ls -l /home/foo/renewal-hoge.txt echo echo "diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt" diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt echo echo "sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt" sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo ・ ・ ・ ・ ・ ・ ・ ・ 300

  • awkの正規表現について

    ディレクトリ名とファイル名の一覧ファイルがあり、その中から特定ディレクトリの1階層下のディレクトリ名とファイル名を取得したいのですが、うまく抽出できません。 ディレクトリ名とファイル名の一覧ファイル(dir.txt)は /foo/ /foo/bar/ /foo/bar/a.txt /foo/bar/sub/ /foo/bar/sub/x.txt /foo/var/ /foo/var/b.txt /usr/ /usr/bar/ で「/foo/」指定すると /foo/ /foo/bar/ /foo/var/ を抽出し 「/foo/var/」を指定すると /foo/var/ /foo/var/b.txt を抽出したいです。 この場合、awk '$1 ~ /^\/foo\/bar\// {print}' dir.txtとすると /foo/bar/ /foo/bar/a.txt /foo/bar/sub/ /foo/bar/sub/x.txt が抽出されてしまいます。 どのような書き方をすれば1階層下のディレクトリとファイルのみを 抽出できるのでしょうか?

  • 正規表現でファイル名の抽出

    社内の掲示板に属するWebアプリケーションを制作しております。 複数のファイルをアップロードするために、<input type="file" ...> で得たファイルのパスを一時的にリストに表示させる仕様になりました。 そこで、javascriptの正規表現オブジェクトで次のようなフルパスから ファイル名のみを抽出することを考えました。  a: c:\hoge.txt  b: \\foo_server\foo_dir\hoge2.txt a,bから、それぞれ hoge.txt hoge2.txt を得るために、/[^\\].*/によって \\を取り除いた後で/\\.*\..*$/ によって欲しい文字列が得られると考えましたら文字列どころか何も 得られませんでした。 /[^\\].*/までは動いているようです。 オブジェクトの使い方が誤っていると考えているのですが、どの様に 扱えばよいのか皆目見当がつかなくなりました。 大変お手数ですが、ご教示願います。

  • 特定のファイルだけをサブディレクトリ以下のファイルをディレクトリを作成してコピーする。

    下のように各フォルダ内にreadme.txtファイルだけを特定のフォルダ内に コピーしたいのですが、ファイル名が同じなので、元のフォルダ階層のように フォルダを作成して、そのファイルだけがコピーされるようなfindを使った 器用な方法はできるのでしょうか? 私は、次の段階で躓いて折ります。 find ./ -name ".forward" execを使い方法は、 find img/ -type d -exec chmod 604 {} \; のようなことは使ったことはありますが、通過したフォルダを作成して、ファイルをコピーする ような方法はどのように記述したらよいか、わかりません。 A +-- a1.txt | a2.txt | readme.txt B +-- b1.txt | b2.txt | readme.txt C +-- c1.txt c2.txt readme.txt

  • awkでスラッシュがある動的変数の抽出について

    2つのテキストファイルがあり、directorylist.txtから1行取り出し、filelist.txtから対応するファイルを抽出したいのですが directorylist.txtに「/」があるため 「正規表現が終端されていません」というエラーがでます。 どのようにしたら、抽出できるのでしょうか? while read LINE; do awk ' $2 = '"$LINE"' { print $1 }' filelist.txt done < directorylist.txt ●filelist.txt [File名] [Directory名] a.txt /home/hoge/ del.txt /home/hoge/ b.txt /home/foo/ ●directorylist.txt [Directory名] / /home /home/hoge

  • Sambaで作るディレクトリ容量の指定 または変更することができますか。

    WindowsPCのデータをバックアップするつもりで、古いPCにCentOS5.2をインストールしてSambaを設定しました。 smb.conf に次のように書いています。 1 [global] 2 dos charset=cp932 3 unix charset=UTF-8 4 5 display charset=UTF-8 6 passwd backend=○○○ 7 8 workgroup=WORKGROUP 9 log level=2 10 log file=/var/log/samba/access.log 11 security = share 12 13 [public] 14 path=/public 15 writable = yes 16 guest ok = yes 17 guest only = yes Windowsから小さなファイルは支障なくアップできますが、少し大きいファイルをフォルダごとアップしようとすると、 「空きディスク領域が足りません」と出てファイルコピーが出来ません。 /publicディレクトリ設定時に容量を指定したり、設定後に容量を増やすことが出来るでしょうか?

  • マクロを書き換えたい。

    こんにちは。 プログラムの保守の請け負いをしています。 #define _SET( __z, __a, __b, __c ) \ { \ Foo foo ;\ \ lpFoo.SetParamA( __a ) ; \ lpFoo.SetParamB( __b ) ; \ lpFoo.SetParamC( __c ) ; \ \ __z <<<<=== foo ; \ } 上記のようなマクロ(説明の便宜上いろいろ省いています)がありまして、 Hoge hoge ; _SET( hoge, 1, 2, 3 ) ; のような使い方をしています。 「<<<<===」ですが、これはHogeクラスが持っている演算子です。Fooクラスをセットするというものです。 なんか見づらいので下記のように書き換えて欲しいと言われたのですが、どう書き換えていいものかわかりません。 hoge <<<<=== _SET( hoge, 1, 2, 3 ) ; マクロの知識がイマイチでして、書き換え可能なのかがわかりません。 個人的にはFooクラスのコンストラクタを拡張して、 #define _SET( __z, __a, __b, __c ) Foo( data0, data1, __a, __b, __c ) くらいにしか思いつかなかったのですが、Fooクラスはいじりたくないそうです。 ご存じの方がいらっしゃいましたら教えていただけないでしょうか。