서버 설정후 localhost에서 접속을 시도하려고
smbclient -L localhost 하는데 에러가 발생했다.

Server requested LANMAN password (share-level security) but 'client lanman auth' is disabled

일단 찾아봐도 딱히 답은 없지만..

아마도 security = SHARE 를 선택했을 경우, smb.conf에
client lanman auth = yes
lanman auth = yes
가 빠져 있으면 생기는 에러로 생각된다.

[링크 : http://sidux.com/PNphpBB2-viewtopic-t-14163.html]
Posted by 구차니
Upgrading from Samba-3.0.x to Samba-3.2.0
Upgrading from Samba-2.x to Samba-3.0.25

요런 내용이 있다.

3.0.25 는 3.0.x 이긴 하지만, 실질적으로 Samba2에 속하고
upgrade 시에 위에 보다시피 Samba2는 3.0.25를 거쳐 3.2.0 으로 업그레이드 가능하다.

Samba-3.0.25 default behavior should be approximately the same as Samba-2.2.x
보다시피 3.0.25는 2.2.x 대와 근원적으로 비슷하지만, 일종의 다리 역활로 samba3 에 속해있는 듯 하다.

[링크 : http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/upgrading-to-3.0.html]
Posted by 구차니
# smbd -S -F
smbd version 3.0.23c started.
Copyright Andrew Tridgell and the Samba Team 1992-2006
Unable to open printcap file /etc/printcap for read!
Unable to open printcap file /etc/printcap for read!
ERROR: Could not determine network interfaces, you must use a interfaces config line

3.2.0 에서는 이런게 없었는데..
아무튼 3.0.23c 에서는
smb.conf의 global 섹션에 interface가 있어야 한다.

[global]
    interface = eth0

[링크 : http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg223269.html]





./samba-3.0.23c/source/ 에서 아래의 명령을 실행하면 테스트 프로그램이 컴파일 된다.
gcc -g -o interfaces lib/interfaces.c -DAUTOCONF_TEST=1 -DHAVE_IFACE_IFCONF=1

[링크 : http://lists.samba.org/archive/samba-technical/2006-February/045430.html]
RE - [링크 : http://lists.samba.org/archive/samba-technical/2006-February/045440.html]
Posted by 구차니
머.. 어짜피 samba3 계열의 중간 다리를 하는 버전들이라 설치방법은 3.2.0 과 동일하다.

./samba-3.0.23c/source/ 에서
$ ./autogen.sh
$ export CC=<cross-compile-gcc>
$ ./configure --host=i686
$ make
$ make DESTDIR=<target_root_path> install

근데, 하다보면 에러난다.

Compiling lib/time.c
lib/time.c: In function `GetTimeOfDay':
lib/time.c:60: error: too few arguments to function `gettimeofday'

검색해보니, vi ./samba-3.0.23c/source/lib/time.c 의 60 라인에
gettimeofday(tval); 부분을
gettimeofday(tval,NULL);  이렇게 수정해주면된다.

  55 void GetTimeOfDay(struct timeval *tval)
  56 {
  57 #ifdef HAVE_GETTIMEOFDAY_TZ
  58         gettimeofday(tval,NULL);
  59 #else
  60         gettimeofday(tval);
  61 #endif
  62 }

이런 소스인데, HAVE_GETTIMEOFDAY_TZ 를 다른 곳에서 선언해주면 문제없이 될 듯 하다.


[링크 : http://www.nabble.com/3.0.21a-cross-compiling-%28uClibc%29-for-mipsel-fails-td2450460.html]
Posted by 구차니
한참을 잊고 있었던 것이 있는데..
삼바는 linux상에서 사용시에, user account(사용자 계정)가 리눅스 상에 존재해야 한다는 것이다.

[링크 : http://www.brennan.id.au/18-Samba.html]

# smbpasswd --help
smbpasswd: invalid option -- -
When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -L                   local mode (must be first option)
  -h                   print this usage message
  -s                   use stdin for password prompt
  -c smb.conf file     Use the given path to the smb.conf file
  -D LEVEL             debug level
  -r MACHINE           remote machine
  -U USER              remote username
extra options when run by root or in local mode:
  -a                   add user
  -d                   disable user
  -e                   enable user
  -i                   interdomain trust account
  -m                   machine trust account
  -n                   set no password
  -W                   use stdin ldap admin password
  -w PASSWORD          ldap admin password
  -x                   delete user
  -R ORDER             name resolve order


/usr/local/samba/private/smbpasswd 라는 파일이 존재한다고 하는데, 버전별로 다른 듯 하다.
FC6의 삼바는 3.0.23 버전으로 smbpasswd 파일이
/etc/samba/passwd에 존재한다.

아무튼 별도로 관리하는 이유는, 해싱함수가 다르기 때문이라고 한다.
[링크 : http://coffeenix.net/doc/samba_guide/node18.html]
Posted by 구차니
속시원한 대답은 아니지만

smbd will not start, with the "ERROR: failed to setup guest info" error
(I have "guest account = guest", which is a valid user with correct info in LDAP):

[링크 : http://lists.samba.org/archive/samba/2006-June/121700.html]


기본값으로 설치한 경로인
/usr/local/samba/var/log.smbd 파일의 내용에 저러한 메시지를 출력하고
ps -ef | grep smbd 에 결과가 나오지 않는다면 guest user의 설정이 잘못된 것이 원인이라고 하는데
이렇게 smbd가 죽는것이 의도된 작동인지 애매모호하다.

smbpasswd -a <userid>

로 추가 가능하나,

Failed to add entry for user <userid>.

라고 나오면서 죽는건 대책이 없다.. 어떻게 해야 하나...
Posted by 구차니
$ tree /usr/local/samba/
/usr/local/samba/
|-- sbin
|   |-- nmbd
|   `-- smbd
|-- bin
|   |-- eventlogadm
|   |-- findsmb
|   |-- ldbadd
|   |-- ldbdel
|   |-- ldbedit
|   |-- ldbmodify
|   |-- ldbrename
|   |-- ldbsearch
|   |-- net
|   |-- nmblookup
|   |-- ntlm_auth
|   |-- pdbedit
|   |-- profiles
|   |-- rpcclient
|   |-- sharesec
|   |-- smbcacls
|   |-- smbclient
|   |-- smbcontrol
|   |-- smbcquotas
|   |-- smbget
|   |-- smbpasswd
|   |-- smbspool
|   |-- smbstatus
|   |-- smbtar
|   |-- smbtree
|   |-- tdbbackup
|   |-- tdbdump
|   |-- tdbtool
|   `-- testparm
|-- include
|   |-- libsmbclient.h
|   |-- netapi.h
|   |-- smb_share_modes.h
|   |-- talloc.h
|   `-- tdb.h
|-- lib
|   |-- auth
|   |-- charset
|   |-- gpext
|   |-- idmap
|   |-- lmhosts
|   |-- lowcase.dat
|   |-- nss_info
|   |-- pdb
|   |-- perfcount
|   |-- rpc
|   |-- smb.conf
|   |-- upcase.dat
|   |-- valid.dat
|   `-- vfs
|-- man
|   |-- man1
|   |   |-- findsmb.1
|   |   |-- ldbadd.1
|   |   |-- ldbdel.1
|   |   |-- ldbedit.1
|   |   |-- ldbmodify.1
|   |   |-- ldbrename.1
|   |   |-- ldbsearch.1
|   |   |-- log2pcap.1
|   |   |-- nmblookup.1
|   |   |-- ntlm_auth.1
|   |   |-- profiles.1
|   |   |-- rpcclient.1
|   |   |-- sharesec.1
|   |   |-- smbcacls.1
|   |   |-- smbclient.1
|   |   |-- smbcontrol.1
|   |   |-- smbcquotas.1
|   |   |-- smbget.1
|   |   |-- smbstatus.1
|   |   |-- smbtar.1
|   |   |-- smbtree.1
|   |   |-- testparm.1
|   |   |-- vfstest.1
|   |   `-- wbinfo.1
|   |-- man5
|   |   |-- lmhosts.5
|   |   |-- smb.conf.5
|   |   |-- smbgetrc.5
|   |   `-- smbpasswd.5
|   |-- man7
|   |   |-- libsmbclient.7
|   |   |-- samba.7
|   |   `-- winbind_krb5_locator.7
|   `-- man8
|       |-- cifs.upcall.8
|       |-- eventlogadm.8
|       |-- idmap_ad.8
|       |-- idmap_adex.8
|       |-- idmap_hash.8
|       |-- idmap_ldap.8
|       |-- idmap_nss.8
|       |-- idmap_rid.8
|       |-- idmap_tdb.8
|       |-- idmap_tdb2.8
|       |-- mount.cifs.8
|       |-- net.8
|       |-- nmbd.8
|       |-- pam_winbind.8
|       |-- pdbedit.8
|       |-- smbd.8
|       |-- smbpasswd.8
|       |-- smbspool.8
|       |-- swat.8
|       |-- tdbbackup.8
|       |-- tdbdump.8
|       |-- tdbtool.8
|       |-- umount.cifs.8
|       |-- vfs_acl_tdb.8
|       |-- vfs_acl_xattr.8
|       |-- vfs_audit.8
|       |-- vfs_cacheprime.8
|       |-- vfs_cap.8
|       |-- vfs_catia.8
|       |-- vfs_commit.8
|       |-- vfs_default_quota.8
|       |-- vfs_dirsort.8
|       |-- vfs_extd_audit.8
|       |-- vfs_fake_perms.8
|       |-- vfs_fileid.8
|       |-- vfs_full_audit.8
|       |-- vfs_gpfs.8
|       |-- vfs_netatalk.8
|       |-- vfs_notify_fam.8
|       |-- vfs_prealloc.8
|       |-- vfs_preopen.8
|       |-- vfs_readahead.8
|       |-- vfs_readonly.8
|       |-- vfs_recycle.8
|       |-- vfs_shadow_copy.8
|       |-- vfs_shadow_copy2.8
|       |-- vfs_smb_traffic_analyzer.8
|       |-- vfs_streams_depot.8
|       |-- vfs_streams_xattr.8
|       |-- vfs_xattr_tdb.8
|       `-- winbindd.8
|-- private
|   |-- passdb.tdb
|   `-- secrets.tdb
|-- share
|   `-- locale
|       `-- de
|           `-- LC_MESSAGES
|               `-- pam_winbind.mo
`-- var
    |-- cores [error opening dir]
    |-- locks
    |   |-- account_policy.tdb
    |   |-- brlock.tdb
    |   |-- browse.dat
    |   |-- connections.tdb
    |   |-- gencache.tdb
    |   |-- group_mapping.ldb
    |   |-- locking.tdb
    |   |-- messages.tdb
    |   |-- mutex.tdb
    |   |-- nmbd-smb.conf.pid
    |   |-- ntdrivers.tdb
    |   |-- ntforms.tdb
    |   |-- ntprinters.tdb
    |   |-- perfmon
    |   |-- printing
    |   |-- registry.tdb
    |   |-- sessionid.tdb
    |   |-- share_info.tdb
    |   |-- smbd-smb.conf.pid
    |   `-- unexpected.tdb
    |-- log.nmbd
    `-- log.smbd

편의를 위해 순서를 약간 변경했습니다.
Posted by 구차니
삼바를 하면서 고생한게 몇개 있는데..

첫째는 크로스 컴파일시에 --target 옵션 넣으면 안된다는 것과
둘째는 설치 경로를 못잡아서 헤맨 것이다.


일단 삼바가 제대로 설정되었는지 확인하기 위한 testparm툴을 삼바에서 제공한다.
이 녀석을 사용하면 무엇이 잘못되었는지 찾는데 도움이 될 것이다.
[링크 : http://forums.debian.net/viewtopic.php?f=5&t=42082]

나의 경우에는 무리하게 Makefile 을 수정해서 생긴문제였는데
testparm을 하면 아래와 같이 출력되었었다.
# testparm
Load smb config files from /etc/smb.conf
creating default valid table
Loaded services file OK.
ERROR: lock directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: state directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: cache directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: pid directory /home/morpheuz/st7109/target/var/locks does not exist
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        netbios name = SMB TEST

Makefile에서
prefix를 /home/morpheuz/st7109/target 으로 했었는데. 이 경우에 컴파일 된 smbd에 저 경로를 이식하는 바람에
타켓 환경에서 엉뚱한 경로를 뒤적이게 되서 이러한 현상이 발생하게 되었다.

이를 해결하기 위해서는
아~~~무런 Makefile 수정없이 아래와 같이 입력하면 된다.

make DESTDIR=/home/morpheuz/st7109/target install

물론 Makefile 내에 DESTDIR이 있지만, 설정상의 문제인지 강제로 저값을 넣어주면
설치중에 엉뚱한 경로가 추가되어 설치에 실패하게 된다.
($(DESTDIR)%(LIBDIR) 사이에 이상하게도 /가 하나더 들어간다 결과적으로
/home/moprheuz/st7109/target//usr/local 경로가 되면서 설치 실패한다.)


아래의 링크는 autoconf의 DESTDIR 과 각종 디렉토리 변수에 대한 gnu 문서이다.
[링크 : http://www.gnu.org/software/autoconf/manual/standards/DESTDIR.html#DESTDIR]
[링크 : http://www.gnu.org/software/autoconf/manual/standards/Directory-Variables.html#Directory-Variables]
Posted by 구차니
$ smbd -d
$ ps -ef | grep smbd

를 했는데 출력되는 메시지가 없는건, smbd가 구동하는데 실패를 했다는 것이다.
이유야 찾아봐야 알겠지만, 에러메시지가 어디에 나오는지 알수가 없으니 막막하다

$ smbd --help
Usage: smbd [OPTION...]
  -D, --daemon                            Become a daemon (default)
  -i, --interactive                       Run interactive (not a daemon)
  -F, --foreground                        Run daemon in foreground (for
                                          daemontools, etc.)
  --no-process-group                      Don't create a new process group
  -S, --log-stdout                        Log to stdout
  -b, --build-options                     Print build options
  -p, --port=STRING                       Listen on the specified ports
  -P, --profiling-level=PROFILE_LEVEL     Set profiling level

Help options:
  -?, --help                              Show this help message
  --usage                                 Display brief usage message

Common samba options:
  -d, --debuglevel=DEBUGLEVEL             Set debug level
  -s, --configfile=CONFIGFILE             Use alternate configuration file
  -l, --log-basename=LOGFILEBASE          Base name for log files
  -V, --version                           Print version

Build-time configuration overrides:
  --sbindir=SBINDIR                       Path to sbin directory
  --bindir=BINDIR                         Path to bin directory
  --swatdir=SWATDIR                       Path to SWAT installation directory
  --lmhostsfile=LMHOSTSFILE               Path to lmhosts file
  --libdir=LIBDIR                         Path to shared library directory
  --modulesdir=MODULESDIR                 Path to shared modules directory
  --shlibext=SHLIBEXT                     Shared library extension
  --lockdir=LOCKDIR                       Path to lock file directory
  --statedir=STATEDIR                     Path to persistent state file
                                          directory
  --cachedir=CACHEDIR                     Path to temporary cache file
                                          directory
  --piddir=PIDDIR                         Path to PID file directory
  --smb-passwd-file=SMB_PASSWD_FILE       Path to smbpasswd file
  --private-dir=PRIVATE_DIR               Path to private data directory

일단 smbd -S 를 하면 stdout(= 모니터)로 출력이 되는데, 백그라운드 모드로는 구동하면 출력이 불가능하다고
아래와 같은 메시지를 출력한다.

 ERROR: Can't log to stdout (-S) unless daemon is in foreground (-F) or interactive (-i)

해달라는 대로 해주면된다.

$ smbd -S -F 혹은
$ smbd -S -i
Posted by 구차니
gnutls - GNU Tranport Layer Seucity Library
[링크 : http://www.gnu.org/software/gnutls/]

SWAT - Samba Web Administration Tool
[링크 : http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html]
웹으로 삼바를 설정하는 웹어플리케이션. 굳이 필요없다면 제외가능

CUPS - Common Unix Printing System
[링크 : http://en.wikipedia.org/wiki/CUPS]
삼바에서 프린터도 공유하는 이유로 CUPS 지원항목이 들어있는 것으로 추측된다.

FHS - Filesystem Hierarchy Standard
[링크 : http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard]
일반적인 리눅스에서 사용하는 RootFS의 구조 / /dev /etc /var 이런 구조를 지칭한다.

talloc - talloc is a hierarchical pool based memory allocator with destructors
[링크 : http://talloc.samba.org/]

winbind - winbind is a component of the Samba suite of programs that solves the unified logon problem. Winbind uses a UNIX implementation of Microsoft RPC calls, Pluggable Authentication Modules (PAMs), and the name service switch (NSS) to allow Windows NT domain users to appear and operate as UNIX users on a UNIX machine.
[링크 : http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/winbind.html]
이 녀석은 있으면 좋고 없으면 그만이다.

tdb - Trivial DB. The directory in which Samba stores the tdb files is determined by compile-time directives.
[링크 : http://www.linuxtopia.org/online_books/network_administration_guides/samba_reference_guide]
[링크 : http://tdb.samba.org/]
Posted by 구차니