• ベストアンサー

sambaのsmbmount使用時のパスワード自動入力方法

c言語でsambaのsmbmountを使用し、各クライアントの共有フォルダをmountし、linuxからでも閲覧するようなプログラムを作成しています。 現在、system()関数を使用し、smbmountまでは動作確認しているのですが、smbmount後のpasswordの自動入力のプログラム記述が分からない状況です。 popenやfopenなどの関数を使用してみましたが、問題は解消できませんでした。 すみませんが、ご教授よろしくお願いいたします。

  • 996
  • お礼率38% (5/13)

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

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

smbmountのコマンドラインオプション"-o password=xxxx"でパスワードを指定できるのは分かっているんですよね.それだとpsコマンドなんかでパスワードが見えてしまうから,パイプか何かでsmbmountに食わせたいと. ああいうパスワード取得プログラムは,直接/dev/tty(そのプロセスに接続されている制御端末)からパスワードを取得します.標準入力を経由しないんでパイプでは通常は無理です.ただ,多くのプログラムはttyのオープンに失敗した後,標準入力からパスワードを取得するという作戦をとります.ですから,ttyをオープンできないようにしてやればパイプでパスワードを取れるようになる場合があります. で,ttyをオープンできないようにするには,制御端末から切り離してしまえばOKです.それにはまず/dev/ttyをオープンしてから,そのファイルディスクリプターをioctl()で指定して,TIOCNOTTYコマンドで切り離します.↓ int main ( int argc, char **argv ) { int pfd[2]; int pid; int fd; char pswd[] = "xxxxxxx\n"; pipe (pfd); if ( (pid = fork ()) == 0 ){ /* 子プロセス */ /* パイプを標準入力につなぐ */ close (pfd[1]); close (0); dup (pfd[0]); /* /dev/ttyをオープン */ fd = open ("/dev/tty", O_RDONLY); /* 制御端末切り離し */ ioctl (fd, TIOCNOTTY); system ("smbmount //srv/rsc /mntpnt"); exit (0); } /* 親プロセス */ close (pfd[0]); write (pfd[1], pswd, strlen(pswd)); exit(0); } こうすると,子プロセスをpsコマンドで見るとTTYの項目が?になっていて,制御端末から切り離されます.smbmountが上記の作戦にしたがうならこれでいけます.ちなみにうちではOKでした.sambaのバージョンによってはもしかしたらだめかも.

996
質問者

お礼

ありがとうございます。 大変に参考になりました。

関連するQ&A

  • sambaでLinuxからWindowsフォルダマウント時のフォルダ権限

    turbo linux 6.5からWindows2000上の共有フォルダを smbmount でマウントし、参照できるようにしました。 このときマウントしたフォルダの権限がマウント前は777なのに、755になってしまいます。 root権限をもたないユーザから、共有フォルダ上に ファイルを作成したいのですが、このためにできません。 smmountのオプションにdmask=777を付加してもだめです。 swatでsambaのパラメータに directory mask=0777 force directory mask=0777 も設定(再起動)してみましたが、やはり755になってしまいます。 ウィンドウズからのlinux上の共有フォルダへのアクセスもできています。 なにか、見落とし、勘違いなどありましたら、ご指摘ください。 よろしくお願いします。

  • smbmount&quota

    VineLinuxにsamba導入、ワークグループ上のwindowsの共有フォルダを、"smbmount"でマウントしました。 次にそのマウント下にsamba用に各ユーザの共有フォルダを作成し、アクセス権限等の設定は問題なく行え、クライアント(Windows)からのアクセスも出来ています。 そこで各ユーザへのディスク使用量制限の設定をしようと/etc/fstabの該当マウントに"usrquota"を追記したのですが、"edquota (ユーザ名)" で『Quota file not found or has wrong format.』となります。 同じ手順でLinuxマシン上のマウントで試すとOKです。 "smbmount"&"quota"って出来ないのでしょうか? 宜しくお願いします。

  • namazu の インデックス作成中のエラーを無視したい

    Debian Linux4.0からWindowsの共有サーバーをsmbmountし、namazuで全文検索しようとしています。 バージョン:Namazu 2.0.17RC4 ところが、mknmz でインデックス作成中、smbmount時に使用しているuserid,passwordでアクセス権がないファイルがあるとエラーになり、mknmzが停止してしまいます。 普通のファイルだとアクセス権がないものはスキップすると思うのですが、smbmount しているため、read 権限が着いているように見えております。 これらのファイルが見つかった場合、そのままスキップしてインデックス作成を続けるにはどうしたらいいでしょうか。

  • sambaって起動しないでも

    使えるのでしょうか? FedoraCoreのパソコン(IP:192.168.0.2,name:linux) のNICと 95(IP:192.168.0.9,name:win,c:\を共有名Cで共有) のNICをクロスケーブルでつないで sambaが停止中にFedoraCoreの端末上で [root]# mkdir /C [root]# smbmount //win/C /C とするとマウントができsambaコマンドが使え95のファイルを読み書きできるのです Linux側からはsambaを起動しなくてもWindows上のデータを自由に読み書きでいるのでしょうか?

  • C言語でプロセスを処理するプログラムを考えています。

    C言語でプロセスを処理するプログラムを考えています。 popenを使ってプロセスを起動しようとしたですが、popenが未定義の関数とエラーが出てコンパイルできません。 ヘッダにstdio.hはおいてあります。 コンパイラはborlandを使用しています。 よろしくお願いします。

  • 変数の使用方法

    ファイルを読み込み、 任意の文字列だけを変数にするプログラムを記述したのですが、 sscanfでその文字列を各変数に代入し、 if((fd = popen("smbmount cause /mnt/date -o username=user","r")) != NULL){ の行で展開させようとしたのですが、 確認したところ、取得した値が代入していませんでした。 printf("%s\n", cause);の場合は、実行後、画面に表示するのですが、 変数型に問題があるのでしょうか。 すみませんが、何が問題なのかご教授よろしくお願いいたします。 FILE *fp; FILE *fd; char string[MAX_LEN]; char cause[256],point[256],user[256],passwd[256]; char id[256]; while ((fgets(string, MAX_LEN, fp)) != NULL) {  string[strlen(string) - 1] = '\0'; if(sscanf(string, "connect cause = %s", &cause) == 1){  }else if(sscanf(string, "connect point = %s", &point) == 1){  }else if(sscanf(string, "username = %s", &user) == 1){    if((fd = popen("smbmount cause /mnt/date -o username=user","r")) != NULL){    }    pclose(fd);   } } fclose(fp);

  • sambaの共有名が文字化け

    Linuxのsambaサーバにwindowsクライアントからアクセスすると共有フォルダ名が文字化けする場合があります。クライアントのOSにより発生する場合としない場合とがあります。 ・Windows95,98:文字化けしない ・WindowsNT,2000:文字化けする サーバは、TurboLinuxServer6.0で、samba2.0.7-ja-2.2を使用しています。 smb.confはSJISで記述し(ているつもり)、coding system=SJIS,client code page=932としています。 samba2.0.5の時は問題なかったのですが... そもそも、サーバ側の設定の問題なのか、クライアント側の設定の問題なのかさえわかりません。 解決方法をご存じの方がいらっしゃいましたら、よろしくお願いします。

  • Sambaで排他制御状態の確認方法について

    Windowsサーバーでは共有ファイルを現在使用しているユーザーを確認することができますが LinuxのSambaにCIFSでアクセスしている場合、共有ファイルを現在使用しているユーザーを 確認することはできますでしょうか。 Windowsのように排他制御の状態(共有ファイルにアクセスしているユーザー、ロック、オープンモードなど)を確認する方法はりますでしょうか。 ------------------------------------------------------------------------------------- 共有ファイルを現在使用しているユーザーを特定する方法 http://www.atmarkit.co.jp/fwin2k/win2ktips/083opened_net_file/083opened_net_file.html -------------------------------------------------------------------------------------

  • popen関数について

    C言語にお詳しい方、ご回答お願いします。 popen関数の具体的な使用法(プログラム)と解説をお願いいたします。いろいろなサイトで探したのですが、なかなかわかりやすい解説がなく、「他のアプリケーションにパイプをつなぐ」ということぐらいしかわかりませんでした。 よろしくお願いします。

  • LINUXのSAMBAの設定で2つのディレクトリを共有にしたい場合

    VINE LINUX2.0のPCをサーバーにしています。クライアントはWindowsXPです。 ディレクトリフォルダを共有にしたいのですが、SAMBAの設定のところに、共有にしたいディレクトリを指定するところがありますが、(例えば、path=/etc/samba/else/public )2つのディレクトリを共有にしたい場合はどのようにしたら良いでしょうか?