Samba is the unix SMB daemon of choice.

Commands

/usr/bin/net

Samba has a generically named binary file called net, which matches the windows command. It's used to manage Samba and CIFS servers.

testparm

testparm - check an smb.conf configuration file for internal correctness. This is great for having a heavily commented main file, like smb.conf.master, then generating the bare smb.conf from that file using testparm -s smb.conf.master > smb.conf.

smbtree

The smbtree tool will print out a tree list of all the reachable samba shares.

Tips

get info from winbind

wbinfo

Clear name resolution cache

net cache flush

Get a remote rpc shell

net rpc shell -U $user_name -S $host_name

Show open sessions on local server

net status shares

Show open files on remote server

net rpc file -S $server_name

Mount a samba share on a linux client

mount -t smbfs -o username=$user_name //$server_name/C$ $local_share_name

Mount a remote share

mount_smbfs "//domain_name;username@hostname/groups" asdf

Kill all Samba sessions for a given user, hence forcing refresh of their group memberships

net status sessions | grep johndoe | awk '{print $1}' | xargs sudo kill

Join domain in ads security mode

net ads join -U dhoherd@DOMAIN.EXAMPLE.COM

Leave domain:

net ads leave -U dhoherd@DOMAIN.EXAMPLE.COM

Upgrading Supermicro firmware

Supermicro iKVM can only mount ISOs that are hosted on Samba shares... 🙄 In my experience they also only support the old and vulnerable SMBv1 protocol. (wannacry used SMBv1.) In order to host ISOs for use with iKVM, it's useful to run Samba in Docker so it is isolated and only running while you are using it.

This example uses the docker image dperson/samba to start a Samba server sharing one passwordless /public share which mounts $HOME/isos from outside the container.

docker run \
  --name "$USER-samba" \
  --rm \
  -d \
  -p 139:139 \
  -p 445:445  \
  -v $HOME/isos:/public  \
  -d dperson/samba \
  -s "public;/public" \
  -g "server min protocol = NT1" \
  -g "log level = 3"