/etc/samba/smb.confの設定

まずはinstall

aptitude install samba

すると

libconvert-asn1-perl libcrypt-smbhash-perl libcupsys2 libdigest-md4-perl
libio-socket-ssl-perl libjcode-pm-perl libnet-ldap-perl libunicode-map-perl
libunicode-map8-perl libunicode-maputf8-perl libunicode-string-perl samba
smbldap-tools

が入る

Samba Server
The Samba daemon smbd can run as a normal daemon or from inetd.
Running as a daemon is the recommended approach.                                                                                                                   
How do you want to run Samba?
-->daemons
--inetd    

daemonを選ぶ

To be compatible with the defaults in most versions of Windows, 
Samba must be configured to use encrypted passwords. 
This requires user passwords to be stored in a file separate 
from /etc/passwd.  This file can be created automatically, 
but the passwords must be added manually by running smbpasswd and 
be kept up-to-date in the future.
If you do not create it, you will have to reconfigure Samba
(and probably your client machines) to use plaintext passwords. 
See /usr/share/doc/samba-doc/htmldocs/ENCRYPTION.html from the samba-doc package for more details.
Create samba password database, /var/lib/samba/passdb.tdb? 
-->Yes

yesにする。

setting [global]

[global]

Browsing/Identification

workgroup名を変更する

workgroup = MyHome(GROUPなど)

NTで表示されるコメント的なサーバ名表示

  server string = %h server
#<%h >はsambaが動いているマシンのインターネットホスト名

Networking

Debugging/Accounting

Authentication

※ドメイン参加をしている場合、Windowsマシンからsambaのアカウントパスワードを変更出来るようにする
※Alt+Ctrl+Delでパスワード変更を行う

Windowsからの認証を暗号かするかどうか(暗号化パスワードの設定)

encrypt passwords = true

Sambaの認証データベース設定
(標準インストール)

  • smbpasswd->従来からの方法(ファイルのパスを指定)
    例:smbpasswd:/etc/samba/smbpasswd
    ディフォルト:/usr/local/samba/private/smbpasswd
  • tdbsam->TDB形式のデータベース(ファイルのパスを指定)
    例:tdbsam:/etc/samba/smbpasswd.tdb
    ディフォルト:/usr/local/samba/pricate/passdb.tdb
  • ldapam->LDAPサーバ(LDAPサーバのURIを指定)
    例:ldapsam:ldap://ldap.server.com:1389
    ディフォルト:ldap://localhost:389

(追加インストール)

  • ldapsam_compat
  • mysql
  • pgsql
  • xml
passdb backend = tdbsam

Sambaユーザの認証情報の変更に同期してUnixユーザのパスワードも変更するかどうかの設定 (一般userがsambaアカウントの認証情報を変更した際にunixユーザのアカウント変更はroot権限で行われる)

unix password sync = yes

上記と同期する際に設定するUnixアカウント変更の無いよう

  passwd program = /usr/bin/passwd %u
  passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .

&color(red){※passwd chat debug方法}
これを行うとパスワードが平文でlogに記録される。通常は設定しない

passwd chat debug = yes
log level = 100

※PAMを使ったパスワード同期方法
これを設定するとpasswd programで設定した内容は無視される(通常はnoになっている)

pam password change = yes

WindowsユーザとSambaユーザのマッピング

username map = /etc/samba/smbusers
--> /etc/samba/smbusers
 aya = "Aya" "文"
  hoge =  Hogetaro

ゲスト認証

map to guest のパラメータ値
 Never : ゲスト認証を許可しない(ディフォルト値)
 Bad User: sambaサーバが認識できないsambaユーザを指定した認証要求をゲスト認証とみなす
 Bad Password : Sambaユーザに対するパスワードが不一致だった場合にも、ゲスト認証とみなす

Domains

Printing

Misc

Share Definitions

共有ディレクトリ

[share1]
 path = /home/project1

許可されているユーザ(&グループ)
%S(envvar) -> 環境変数 envvarの値

valid users = %S

ファイル共有の基本設定

[project1]
  path = /home/project1

共有一覧画面での表示制御

[project2]
  browsable = No
もしくは
[project2$] <-- $がつく共有名も隠し共有になる

特定のユーザ以外参照出来ない共有

[project1]
  available = No
  => ファイル共有へのアクセス禁止
   include = project1.%g
     => %gはアクセスしてきたgroup名
        例えば:project1.group1のファイル
         available = Yes

共有への同時アクセス数の上限設定

[project2]
  max connections = 12

拡張子の静的なマッピング

mangled map = (*.html *.htm)
=> 実ファイル.html を .htmのように表示させる

強制的にファイルを隠しファイルにする

hide dot files = yes (default)
=> .から始まるファイルは自動で隠される
hide files パラメータで任意のファイルを隠しファイルとして扱い事も可能
(設定方法はveto filesパラメータに準じる)

アクセス権のないファイルの表示、読み取りを禁止する

hide unreadable = yes
=> 例えば 権限が---------のファイルがあった場合、表示されない
hide unwriteable files = yes
=> 書き込み権限がないファイルを非表示する(ディレクトリは常に表示される)

特殊ファイルの表示、読み取りを禁止する

hide special files = Yes
=> FIFO、 ソケットなどの表示、読み取りを禁止する

特定のディレクトリの内容を非表示にする

[pub]
 dont descend = /bin. /dev, /lib, /var
 => delete veto filesパラメーターの影響を受けないので、delete veto files = yesだった場合
でもwindows側からのディレクトリツリーを削除させない事が可能

アクセス制御の手順

  1. プロラットフォームによるアクセス制御(IP/ポート単位)
  2. ホスト単位でのIPアドレスによるアクセス制御(IPアドレス単位での制御;hosts allow, hosts deny)
  3. SMBプロトコルのセキュリティ設定による制御(SMB署名を必須としている場合など)
  4. ユーザ認証
  5. 共有単位でのIPアドレスによるアクセス制限(hosts allow, hosts deny)
    IPアドレス単位のアクセス制御
    hosts allow = 192.168.1.10/255.255.255.0 Except 192.168.1.1
    hosts allow < hosts deny
  6. ファイル共有アクセス時に強制的に指定されるユーザの設定(guest ok, guest only, force user, force group, admin users)
    force user = ftp(user名)
    force group = ftp(group名)
  7. ユーザ単位のアクセス制限(valid users, invalid users, only user)
    先頭に@がついた場合、その名称のUNIXグループに所属するユーザがアクセス制限の対象に含まれる
    + Unixグループに指定されたグループがあるか検索
    & NISネットグループに指定されたグループがあるか検索
    @ NISネットグループ -> UNIXグループの順に指定されたグループがあるか検索
    &+  @と同じ動作
    +& Unixグループ -> NISネットグループの順に指定されたグループがあるか検索
  8. ファイル共有単位のACLによるアクセス制限
  9. 読み書き単位のアクセス制限(read only, read list, write list)
    ディフォルトではSambaの共有は読み取りせんようになっている
    writeable = yes
    ↑これは read only = no と同じ意味 
    例外パラメーター
    write list : 読み取りのみのファイル共有に対して、例外的に書き込み可能なユーザーを指定
    write list = user, @group
    read list : 書き込み可能なファイル共有に対して、例外的に読み取りのみのユーザを指定
  10. UNIXでのファイルシステムでのアクセス権
    d-------- folder

新規作成ファイル、ディレクトリのpermission制御

上位ディレクトリのパーミッションを引き継ぐ(すべてのパーミッションが引き継がれる訳ではない)

inherit permission = no (default)
  1. 上位ディレクトリのpermissionがdefaultとして設定される
  2. security上の理由でsetuidビットが削除
  3. ユーザの書き込み権ビットが設定される
    ファイルに設定する事が可能なパーミッション
    create mask = 0744 (default)
    ファイルに必ず設定されるパーミッション
    force create mode = 0000 (default)
    ディレクトリに設定する事が可能なパーミッション(セキュリティ上700/ディレクトリ作成をgroup=rwで許可させたい場合は、755にする)
    directory mask = 0700
    ディレクトリに必ず設定されるパーミッション
    force directory mode = 0000

ゲスト認証

[global]
  map to guest = Bad User
[share]
  guest ok = yes
  guest account = Unix ユーザ
  guest only = Yes

原則読み取り専用の共有設定

[global]
  map to guest = Bad User
[pub]
  path = /home/ftp/pub
  guest ok = yes
  guest account = ftp
  writeable = no
  write list = @ftpadmin

複数人でファイル共有する為の共有設定

[project1]
  path = /home/project1
  write list = @project1 amori
  (↑こちらも可:valid users = @project1 @project2)
  read only = yes
  create mst = 664
  directory mask = 775
  force group = project1

※後は作成したディレクトリにunix上権限を与える

mkdir /home/project1
chgrp project1 /home/project1
chmod 775  /home/project1

ACLからUnixパーミッションへのマッピング

ACL

  1. フルコントロール/変更/追加/追加と読み取り -> rwx
  2. 読み取りと実行/フォルダ内容の一覧表示 ->r-x
  3. 読み取り -> r--
  4. 書き込み -> -w-

特殊なアクセス許可

  1. フォルダの一覧/データの読み取り(FILE_READ_DATA)
    拡張属性の読み取り(FILE_READ_EA)
    属性の読み取り(FILE_READ_ATTRIBUTES) -> r--
  2. ファイルの作成/データの書き込み(FILE_WRITE_DATA)
    フォルダの作成/データの追加(FILE_APPEND_DATA)
    拡張属性の書き込み(FILE_WRITE_EA)
    属性の書き込み(FILE_WRITE_ATTRIBUTES) -> -w-
  3. フォルダのスキャン/ファイルの実行(FILE_EXECUTE) -> --x

パーミッション変更関連パラメーター
ファイルに設定する事が可能なアクセス権

security mask = 0777

ファイルに必ず設定されるアクセス権

force security mask = 0000

ディレクトリに設定する事が可能なアクセス権

directory security mask = 0777

ディレクトリに必ず設定されるアクセス権

force directory security mode = 0000

例えばディレクトリには必ず実行権を付けたい場合は以下の設定

[global]
 force directory security mode = 111

これらのパラメーターはglobalセクションでも書くファイル共有セクションで書く腐ぃある共有固有の値を指定しても良い

UnixにおけるACLの実装

例えば

user1 -> rwx
user2, user3 -> r-x
groupA -> rwx
groupB -> r-x
その他 -> ---

とする事が出来る

ディレクトリにはディレクトリ自身のACL(access ACL)と、ディレクトリ内に作成されたファイルやディレクトリのACLを設定する(default ACL)がある

ACLの参照方法

getfacl ファイル名(or ディレクトリ名)

出力されるタグの意味

ACL tag:ACL qualifier:access permmission

となっている

  1. ACL tag -> user/group/other/maskのいずれかの値(もしくはその先頭1文字)
    user/groupだと次ぎに続くACL qualifierが名前である事を意味する
  2. ACL qualifier -> 該当エントリが適応されるユーザ名/グループ名。ここが空だった場合、エントリがACLではなくUnixのパーミッションである
  3. access permission -> 伝統的なパーミッションと同様(rwxでアクセス権を表示)

ACLの設定

setfacl -m mask::rwx,user:rumba01:rw-,group:project01:rw-,group:project02:rw- フィル名
-mオプションの後は[,]で区切ったACLエントリを指定する事でファイルにACLを追加する事が可能

ACLの削除

setfacl -x user:rumba01 フィル名

ディレクトリのACL(default ACL)

setfacl -d -m u::rwx,g::r--, o::r-- ディレクトリ名
 => u(ユーザのpermission) g(グループのpermission) o(その他のpermission)
setfacl -d -m m::rwx, u:rumba01:rwx,g:project01:r-x ディレクトリ名
  => m(maskのpermission) u:rumba01(実際のユーザ設定) g:project01(実際のグループ設定)
getfacl -d ディレクトリ名

上記の設定を行ったディレクトリ内にファイルやディレクトリを作成すると、default ACLのエントリが適応される 作成されたファイルに適応されるmaskの値については、umaskの値が影響するので要注意

シンボリックリンクの追跡

シンボリック経由によるファイル共有外へのアクセスを禁止する

wide links = No

Sambaのシンボリックリンクの解釈を全面的に無効とする

follow symlinks = No

DFS(Distributed File System)

dfs作成方法例

cd /user/local/samba/lib/top
ln -s msdfs:sakura\\archive archive

DFS使用の際の設定例

[global]
  host msdfs = Yes
  => ホストベースのDFSを有効にする
 [top]
   path = /user/local/samba/lib/top
   msdfs root = Yes 
    => この共有をDFSルートとして設定する

日本語のDFSリンク名

cd /user/local/samba/lib/top
ln -s msdfs:sakura\\`echo DFS その1$ | nkf -e ` echo 共有1` | nkf -e`

※DFS機構を非ドメイン環境で用いるのは現実的に困難、との事

Homeディレクトリ

[homes]
  comment = %U's Home Directories
  => %U (ユーザ名)
  browseable = no
  => ユーザのホームディレクトリが共有居hcいらんに表示されるので、Noにしておく
  valid users = %S

homeに対しての書き込み許可設定

 writable = no

Net logon

これはコメントアウトにしてドメインのログオン用にする(sambaの設定でドメインコントロール用に設定をする必要がある)

;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
;   guest ok = yes
;   writable = no
;   share modes = no

Profiles direcotry

コメントアウトして、ユーザーのプロファイルディレクトリとして機能させる(上記のNetlogonの設定が必要) 。path先はすべてのユーザにとって書き込み出来る状態である必要がある。profiles directoryは最初にユーザがログインした時に作成される

;[profiles]
;   comment = Users profiles
;   path = /home/samba/profiles
;   guest ok = no
;   browseable = no
;   create mask = 0600
;   directory mask = 0700

Last-modified: 2012-03-12 (月) 17:05:06 (166d)