最終更新時間:2025年02月28日 17時00分27秒
Samba
バージョン確認
> smbd -V
設定
/usr/local/etc/smb4.conf のサンプル
[global] workgroup = Workgroup netbios name = Samba server string = Samba security = User map to guest = Bad User guest account = nobody nt acl support = no ; unix の パーミッション(rwx)を使う wide links = yes ; ディレクトリのシンボリックリンクがクライアントから見えるように(セキュリティ上よくない) unix extensions = no ; 同上 [public] comment = FreeBSD Samba hosts allow = 192.168.0.1, 192.168.0.2 path = /home/samba guest ok = yes guest only = yes read only = no browseable = yes create mask = 0777 force create mode = 0777 directory mask = 0777 vfs objects = recycle recycle:maxsize = 2000000 recycle:exclude = *.tmp [share$] ; 隠し共有 path = /home/hidden invalid users = taro, hanako [printer01] ; プリンタ printable = yes printer name = lp ; /etc/printcap printing = BSD use client driver = yes ; エラーを無視するために必要 path = /tmp guest ok = yes guest only = yes
設定ファイルの確認
# testparm
/etc/rc.conf
samba_server_enable="YES"
使い方
> smbcontrol smbd shutdown # 終了 > smbcontrol smbd reload-config # 設定の再読み込み > smbcontrol smbd close-share share1 # オープン中の共有をデーモンの再起動なしに閉じる
> smbclient -L //192.168.0.30 # 共有一覧 > smbclient -Utaro%passw0rd //192.168.0.30 -D share1 -c 'prompt; mget *.zip; exit' > smbget -qRr -u guest -p '' smb://192.168.0.30/ほげフォルダ
※ windows 側でユーザにパスワードを設定しているか,
コンパネ>ネットワークと共有センター>共有の詳細設定の変更 から
パスワード保護共有を無効にしていなければ,アクセスできない.
対話的に再帰的にいただく
smb:> prompt smb:> recurse smb:> mget *.png
smb4.conf の説明
ユーザ関連
ゲストユーザを使いたいとき
map to guest = Bad User guest ok = Yes
は最低必要で,ゲストユーザのみにしたい場合は
guest only = Yes
を追加.
ユーザ認証を行いたいときは,基本は unixユーザを作り,同じ login-id の sambaユーザを作る
> useradd # pw useradd は覚えるのがダルイのでユーティリティ useraddを使う > pdbedit -a -u taro
空パスワードは許されない(認証が失敗する)が,smb4.conf で
null passwords = Yes
すれば可.
一時的に共有したくない場合は,コメントアウトが面倒なので
available = No
にしておけばよい.
unix と samba のパスワードは違ってもよいので,
unix にログインさせない場合(ログインシェルが nologin),
unix ユーザ作成時にパスワードは空にしてもよい.
アクセス権
基本
共有アクセスについては Samba接続時のユーザ(Sambaユーザ)の権限で行われるが,
force user や force group パラメータで 強制的に特定のユーザ権限で行うようにできる.
guest only = Yes で強制的にゲストユーザ権限にできる.
ファイルとディレクトリを作成するときのデフォルトのパーミッションは,
それぞれ 744(rwxr--r--) と 755(rwxr-xr-x).
ユーザ単位のアクセス制御は
例えば invalid users = root, @sys で root や sys グループを駄目にする.
グループ指定のキーワード
+ unix ユーザを検索 & NIS ユーザを検索 &+ NIS ユーザを検索 のち unix ユーザを検索 +& unix ユーザを検索 のち NIS ユーザを検索 @ &+ と同義
デフォルトで Samba 共有は read only
writeable = Yes が read only = No と同義
write list と read list でユーザ,グループ単位で読み書きを設定できる
write list / read list は writeable パラメータより優先される
→ 読込専用のファイル共有に対して例外的に読書きできるユーザを指定したいときに便利.
最終的には unixユーザのパーミッションにて決定される.
[homes] セクションがあると,各ユーザのホームディレクトリが自動的に共有される.
path = %H/smbdir
など,ホーム以下を指定すると ドットファイルが見えないので便利かも
browsable = no ; homes そのものは見えないように valid user = %S ; 本人意外はアクセス禁止
ユーザ管理コマンド
pdbedit コマンドのオプション
pdbedit -L ; すべてのユーザを表示 pdbedit -a -u john ; 作成 pdbedit -x -u bob ; 削除
# pdbedit -a -u taro ; インタラクティブ # echo -e "pswd\pswd" | pdbedit -a -t -u taro ; バッチ的
こまかいこと
指定したファイルを非表示にし 読取を禁止する.
veto files = /.*/ ; なぜか表示はされないが 書込はできてしまうのは仕様 delete veto files = Yes ; フォルダごと削除したいときは 削除できるようにする
読取権限のないファイルの表示/読取を禁止する.
hide unreadable = Yes ; なぜか書込はできてしまうのは仕様
書込権限のないファイルの表示/読取を禁止する.
hide unwriteable = Yes ; ディレクトリは表示される
ディレクトリを空に見せる.
dont descend = /bin,/dev,/lib
利用するインターフェースを指定する.
interfaces = eth0 192.168.10.1 bind interfaces only = Yes
Windows から別のユーザでログインするためには一旦接続を解除する.
バッチファイルに書いておくと便利
C:\> net use \\192.168.0.2 /delete C:\> start \\192.168.0.2 C:\> net use \\192.168.0.2 /user:taro taropw
NFS
サーバ側(ex 192.168.0.2)
/etc/rc.conf
nfs_server_enable="YES" rpcbind_enable="YES" mountd_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES"
/etc/exports
/usr/home/share 192.168.0.3
クライアント側(ex 192.168.0.3)
/etc/rc.conf
nfs_client_enable="YES"
$ showmount -e 192.168.0.2
$ mount 192.168.0.2:/usr/home/share /mnt/nfs