SAMBA服务
Samba是一种在Linux和Unix系统上实现SMB(Server Message Block 服务器消息块)协议的自由软件。SMB协议是一种网络文件共享协议,允许计算机在网络上共享文件、打印机等资源。Samba允许基于Linux和UNIX的系统作为文件和打印服务服务器出现在Windows网络中,从而实现不同操作系统之间的互操作性。它可以被配置为网络驱动器,允许用户访问和共享文件夹及其中的文件,就像它们是在本地计算机上一样。
1.Samba主要组件
- smbd:提供文件和打印服务的守护进程。它处理文件请求和网络浏览请求。
- nmbd:处理NetBIOS名称服务请求,负责解析网络上的名字到地址。
- winbind:用于集成Windows域,允许Samba服务器识别和验证Windows网络用户和组。
2.安装Samba
[root@Rocky9 ~]# dnf install samba
[root@Rocky9 ~]# systemctl enable --now smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
[root@Rocky9 ~]#
[root@Rocky9 ~]#
[root@Rocky9 ~]# systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2024-04-11 22:25:04 CST; 4s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 31470 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 3 (limit: 10943)
Memory: 10.5M
CPU: 49ms
CGroup: /system.slice/smb.service
├─31470 /usr/sbin/smbd --foreground --no-process-group
├─31472 /usr/sbin/smbd --foreground --no-process-group
└─31473 /usr/sbin/smbd --foreground --no-process-group
Apr 11 22:25:04 Rocky9.0 systemd[1]: Starting Samba SMB Daemon...
Apr 11 22:25:04 Rocky9.0 smbd[31470]: [2024/04/11 22:25:04.451809, 0] ../../source3/smbd/server.c:1746(main)
Apr 11 22:25:04 Rocky9.0 smbd[31470]: smbd version 4.18.6 started.
Apr 11 22:25:04 Rocky9.0 smbd[31470]: Copyright Andrew Tridgell and the Samba Team 1992-2023
Apr 11 22:25:04 Rocky9.0 systemd[1]: Started Samba SMB Daemon
3.管理Samba用户
# 添加samba用户首先需添加系统用户,然后将系统用户变成samba用户
[root@Rocky9 ~]# useradd smb1
[root@Rocky9 ~]# useradd smb2
[root@Rocky9 ~]# useradd smb3
[root@Rocky9 ~]# smbpasswd -a smb1
[root@Rocky9 ~]# smbpasswd -a smb2
[root@Rocky9 ~]# smbpasswd -a smb3
New SMB password:
Retype new SMB password:
Added user smb3.
# 查看当前的samba账号
[root@Rocky9 ~]# pdbedit -L
smb1:8081:
smb3:8083:
smb2:8082:
# 测试连接
# 首先,安装samba的客户端
[root@Rocky9 ~]#yum -y install samba-client
#方法一:
[root@Rocky9 ~]#smbclient -L 10.0.0.107
Password for [SAMBA\root]:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.18.6)
SMB1 disabled -- no workgroup available
[root@Rocky9 ~]#
# 方法二:
[root@Rocky9 ~]#smbclient //10.0.0.107/smb1 -U smb1%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Apr 11 22:44:37 2024
.. D 0 Thu Apr 11 23:20:12 2024
.bash_logout H 18 Mon May 16 20:12:54 2022
.bash_profile H 141 Mon May 16 20:12:54 2022
.bashrc H 492 Mon May 16 20:12:55 2022
anaconda-ks.cfg A 1104 Thu Apr 11 22:44:37 2024
73364480 blocks of size 1024. 71159044 blocks available
smb: \>
4.配置Samba
Samba的主要配置文件是smb.conf
,通常位于/etc/samba/
目录下。这个文件控制了Samba服务器的行为,包括哪些资源共享、权限设置和网络安全等。
# 查看配置文件
[root@Rocky9 ~]# rpm -qc samba-common
/etc/logrotate.d/samba
/etc/samba/lmhosts
/etc/samba/smb.conf
/etc/sysconfig/samba
[root@Rocky9 ~]#
# 建立共享目录,以及共享文件
[root@Rocky9 ~]# touch /data/smbshare1/a.txt
[root@Rocky9 ~]# vim /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
# 查看
[root@Rocky9 ~]#smbclient -L 10.0.0.107 -U smb1%123456
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
share1 Disk
IPC$ IPC IPC Service (Samba 4.18.6)
smb1 Disk Home Directories
SMB1 disabled -- no workgroup available
[root@Rocky9 ~]#
# 经过测试,可以下载,不可以上传(上传要满足两个条件:1.账户对目录要有写的权限 2.samba服务要开启写的配置)
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb1%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Apr 11 23:27:18 2024
.. D 0 Thu Apr 11 23:27:00 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
51290592 blocks of size 1024. 48652740 blocks available
smb: \> get a.txt
getting file \a.txt of size 0 as a.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
smb: \> ls
. D 0 Thu Apr 11 23:27:18 2024
.. D 0 Thu Apr 11 23:27:00 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
51290592 blocks of size 1024. 48652740 blocks available
smb: \> put anaconda-ks.cfg
NT_STATUS_ACCESS_DENIED opening remote file \anaconda-ks.cfg
smb: \>
# 修改文件系统权限
[root@Rocky9 ~]# chmod 777 /data/smbshare1/
[root@Rocky9 ~]# ll /data/smbshare1/ -d
drwxrwxrwx 2 root root 4096 Apr 11 23:27 /data/smbshare1/
[root@Rocky9 ~]#
# 添加配置文件
[root@Rocky9 ~]# vim /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
# 这两项是等价的,写一项就可以了
writeable=Yes
read only=No
# 修改完配置文件客户端重新连接,如若不行,重启服务
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb1%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Apr 11 23:27:18 2024
.. D 0 Thu Apr 11 23:27:00 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
51290592 blocks of size 1024. 48652740 blocks available
smb: \> put anaconda-ks.cfg
putting file anaconda-ks.cfg as \anaconda-ks.cfg (359.4 kb/s) (average 359.4 kb/s)
smb: \> ls
. D 0 Sun Apr 14 21:29:26 2024
.. D 0 Thu Apr 11 23:27:00 2024
anaconda-ks.cfg A 1104 Sun Apr 14 21:29:26 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
51290592 blocks of size 1024. 48652736 blocks available
smb: \>
# 现在希望smb1、smb2可以上传,smb3不可以上传
[root@Rocky9 ~]# vi /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
writeable=no
write list=smb1,smb2
# 测试,smb1,smb2可以上传文件,但是smb3不可以上传文件
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb2%123456
Try "help" to get a list of possible commands.
smb: \> lcd /etc/
smb: \> ls
. D 0 Sun Apr 14 22:43:55 2024
.. D 0 Thu Apr 11 23:27:00 2024
anaconda-ks.cfg A 1104 Sun Apr 14 21:29:26 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
hosts A 158 Sun Apr 14 22:43:55 2024
51290592 blocks of size 1024. 48652732 blocks available
smb: \> put fstab
putting file fstab as \fstab (319.8 kb/s) (average 319.8 kb/s)
smb: \> ls
. D 0 Sun Apr 14 22:46:39 2024
.. D 0 Thu Apr 11 23:27:00 2024
anaconda-ks.cfg A 1104 Sun Apr 14 21:29:26 2024
fstab A 655 Sun Apr 14 22:46:39 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
hosts A 158 Sun Apr 14 22:43:55 2024
51290592 blocks of size 1024. 48652728 blocks available
smb: \>
# smb3
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb3%123456
Try "help" to get a list of possible commands.
smb: \> lcd /etc/
smb: \> ls
. D 0 Sun Apr 14 22:43:55 2024
.. D 0 Thu Apr 11 23:27:00 2024
anaconda-ks.cfg A 1104 Sun Apr 14 21:29:26 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
hosts A 158 Sun Apr 14 22:43:55 2024
51290592 blocks of size 1024. 48652732 blocks available
smb: \> put fstab
NT_STATUS_ACCESS_DENIED opening remote file \fstab
smb: \>
# 设置谁都可以访问 public
[root@Rocky9 ~]# vi /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
public=yes
# 测试,登录成功以后,提示Anonymous匿名登录成功
[root@Rocky9 ~]#smbclient //10.0.0.107/share1
Password for [SAMBA\root]:
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \>
#特定用户可以访问
[root@Rocky9 ~]# vi /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
valid users=smb3
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb3%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Apr 14 22:46:39 2024
.. D 0 Thu Apr 11 23:27:00 2024
anaconda-ks.cfg A 1104 Sun Apr 14 21:29:26 2024
fstab A 655 Sun Apr 14 22:46:39 2024
a.txt N 0 Thu Apr 11 23:27:18 2024
hosts A 158 Sun Apr 14 22:43:55 2024
51290592 blocks of size 1024. 48652728 blocks available
smb: \> exit
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb2%123456
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@Rocky9 ~]#
# 隐藏文件
[root@Rocky9 ~]#smbclient -L 10.0.0.107
Password for [SAMBA\root]:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.18.6)
SMB1 disabled -- no workgroup available
[root@Rocky9 ~]#
# 如果知道它的名字是可以访问的
[root@Rocky9 ~]#smbclient //10.0.0.107/share1 -U smb2%123456
Try "help" to get a list of possible commands.
smb: \>
# 组
[root@Rocky9 ~]# vi /etc/samba/smb.conf
[share1]
path=/data/smbshare1/
valid users=@admins # 或者写成+admins
# 用户单独的配置文件
[root@Rocky9 ~]# vi /etc/samba/smb.conf
[global]
config file=/etc/samba/conf.d/%U
mkdir -pv /etc/samba/conf.d/
#smb1
[root@Rocky9 ~]# vim /etc/samba/conf.d/smb1
[share]
path=/data/share1
# smb2
[root@Rocky9 ~]# vim /etc/samba/conf.d/smb2
[share]
path=/data/share2
# 创建对应目录
mkdir /data/share1
mkdir /data/share2
[root@Rocky9 ~]# touch /data/share1/share1.txt
[root@Rocky9 ~]# touch /data/share2/share2.txt
# 测试
# smb1
[root@Rocky9 ~]#smbclient //10.0.0.107/share -U smb1%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Apr 14 23:32:01 2024
.. D 0 Sun Apr 14 23:31:46 2024
share1.txt N 0 Sun Apr 14 23:32:01 2024
51290592 blocks of size 1024. 48652720 blocks available
smb: \>
# smb2
[root@Rocky9 ~]#smbclient //10.0.0.107/share -U smb2%123456
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Apr 14 23:32:07 2024
.. D 0 Sun Apr 14 23:31:46 2024
share2.txt N 0 Sun Apr 14 23:32:07 2024
51290592 blocks of size 1024. 48652720 blocks available
smb: \>
# 永久挂载
# 首先安装cifs-utils包
[root@Rocky9 ~]#yum -y install cifs-utils
[root@Rocky9 ~]#vi /etc/fstab
//10.0.0.107/share /mnt/share cifs username=smb1,password=123456 0 0
#或者
//10.0.0.107/share /mnt/share cifs credentials=/etc/user.txt 0 0
# 文件需要这么些
[root@Rocky9 ~]#vi /etc/user.txt
username=smb1
password=123456
[root@Rocky9 ~]#chmod 600 /etc/user.txt
[root@Rocky9 ~]#mount -a
[root@Rocky9 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 864456 0 864456 0% /dev
tmpfs 895320 0 895320 0% /dev/shm
tmpfs 358128 10168 347960 3% /run
/dev/mapper/rl-root 73364480 6467832 66896648 9% /
/dev/nvme0n1p1 1038336 270624 767712 27% /boot
/dev/mapper/rl-home 133075472 960992 132114480 1% /home
tmpfs 179064 52 179012 1% /run/user/42
tmpfs 179064 36 179028 1% /run/user/0
//10.0.0.107/share 51290592 2637872 48652720 6% /mnt/share
[root@Rocky9 ~]#
5.相关命令
smbclient
smbclient
是一个Samba客户端程序,可以用来访问SMB/CIFS资源,类似于FTP客户端。它允许用户连接到Samba服务器,浏览共享、上传和下载文件。
当然,这是smbclient命令行工具的一些选项及其含义:
-M, --message=HOST:发送消息到指定的主机。
-I, --ip-address=IP:使用指定的IP地址进行连接。
-E, --stderr:将消息输出到标准错误(stderr)而非标准输出(stdout)。
-L, --list=HOST:列出指定主机上可用的共享资源。
-T, --tar=<c|x>IXFvgbNan:使用命令行tar工具来创建或提取归档,其中参数c表示创建,x表示提取。
-D, --directory=DIR:指定开始操作的目录。
-c, --command=STRING:执行由分号分隔的命令字符串。
-b, --send-buffer=BYTES:更改传输/发送缓冲区的大小。
-t, --timeout=SECONDS:更改每个操作的超时时间。
-p, --port=PORT:连接到指定端口。
-g, --grepable:生成便于grep搜索的输出。
-q, --quiet:抑制帮助消息。
-B, --browse:使用DNS浏览SMB服务器。
帮助选项:
-?, --help:显示帮助信息。
--usage:显示简短的使用信息。
常见的Samba选项:
-d, --debuglevel=DEBUGLEVEL:设置调试等级。
--debug-stdout:将调试输出发送到标准输出。
-s, --configfile=CONFIGFILE:使用另一个配置文件。
--option=name=value:从命令行设置smb.conf的选项。
-l, --log-basename=LOGFILEBASE:日志/调试文件的基本名称。
--leak-report:在退出时启用talloc泄漏报告。
--leak-report-full:在退出时启用完整的talloc泄漏报告。
连接选项:
-R, --name-resolve=NAME-RESOLVE-ORDER:只使用这些名称解析服务。
-O, --socket-options=SOCKETOPTIONS:使用指定的socket选项。
-m, --max-protocol=MAXPROTOCOL:设置最大协议级别。
-n, --netbiosname=NETBIOSNAME:设置主NetBIOS名称。
--netbios-scope=SCOPE:使用指定的Netbios范围。
-W, --workgroup=WORKGROUP:设置工作组名称。
--realm=REALM:设置领域名称。
凭证选项:
-U, --user=[DOMAIN/]USERNAME[%PASSWORD]:设置网络用户名,可选地指定域和密码。
-N, --no-pass:不提示输入密码。
--password=STRING:输入密码。
--pw-nt-hash:提供的密码是NT散列。
-A, --authentication-file=FILE:从文件获取凭证。
-P, --machine-pass:使用存储的机器账户密码。
--simple-bind-dn=DN:用于简单绑定的DN。
--use-kerberos=desired|required|off:是否使用Kerberos认证。
--use-krb5-ccache=CCACHE:Kerberos的凭据缓存位置。
--use-winbind-ccache:使用winbind缓存进行认证。
--client-protection=sign|encrypt|off:为客户端连接配置使用的保护级别。
不推荐使用的遗留选项:
-k, --kerberos:已弃用,请迁移到--use-kerberos。
版本选项:
-V, --version:打印版本信息。
这些选项可以用来控制smbclient的行为,比如连接到服务器、列出共享、传输文件等。在命令行中使用这些选项可以更精确地控制命令的执行和输出。
案例
列出服务器上的共享:
smbclient -L 10.0.0.107 -U smb1%123456
-L
参数用来列出指定服务器上的共享资源,-U
后面指定用户名。
连接到一个共享:
smbclient //10.0.0.107/share1 -U smb1%123456
使用命令行方式上传和下载文件:
上传文件到共享:
smbclient //10.0.0.107/share1 -U 用户名 -c "put 本地文件路径 远程文件名"
从共享下载文件:
smbclient //10.0.0.107/share1 -U 用户名 -c "get 远程文件名 本地文件路径"
pdbedit
pdbedit
是管理 Samba 用户数据库的工具。它可以处理用户账户的创建、删除和编辑。以下是pdbedit
命令的一些选项和它们的含义:
在Samba中,添加一个用户通常是一个两步过程:
- 创建系统用户:首先,需要在宿主操作系统中创建一个用户,这通常通过
useradd
命令完成。这是因为Samba服务通常需要与系统用户账户进行匹配,以便于控制访问和管理文件权限。- 添加Samba用户:然后,为这个系统用户创建一个Samba账户,这通过
smbpasswd -a
命令完成,来添加用户到Samba的数据库,并为其设置一个Samba密码。然而,
pdbedit
命令也可以直接添加Samba用户,但前提是系统用户已经存在。pdbedit
提供了一个更高级的接口来管理Samba用户数据库。使用
pdbedit
,可以更细粒度地控制用户属性。例如,使用pdbedit -a -u username
将添加一个名为username
的用户到Samba数据库中,但这个命令不会在系统用户中创建一个新用户。如果系统中没有一个与之对应的用户,Samba用户是无法正常工作的。简而言之,
pdbedit
可以管理Samba的用户数据库,但它不会管理系统级的用户账户。因此,如果你需要创建一个新的Samba用户,你通常会先创建一个系统用户,然后使用smbpasswd -a
或pdbedit -a
为其添加Samba访问权限。
列出用户和详细信息
-L, --list:此选项列出所有Samba用户数据库中的用户。如果结合-v(详细模式),则可以查看更多详细信息。
用户账户的管理
-a, --create:创建一个新的用户账户。
-x, --delete:删除一个用户账户。
-r, --modify:修改一个现有的用户账户。
设置用户账户属性
-u, --user=USER:指定要操作的用户名。
-N, --account-desc=STRING:设置或修改用户账户的描述。
-f, --fullname=STRING:设置或修改用户的全名。
-h, --homedir=STRING:设置或修改用户的家目录。
-D, --drive=STRING:设置或修改用户的家目录驱动器(在Windows中映射为驱动器字母)。
-S, --script=STRING:设置或修改用户的登录脚本路径。
-p, --profile=STRING:设置或修改用户的用户档案路径(通常是Windows用户的漫游档案路径)。
-I, --domain=STRING:为用户设置或修改域名。
导入导出账户
-b, --backend=STRING:指定不同的密码数据库后端,默认为tdbsam。
-i, --import=STRING:从另一个后端导入账户信息。
-e, --export=STRING:将账户信息导出到另一个后端。
用户SID和机器账户管理
-U, --user SID=STRING:设置或修改用户的安全标识符(SID)。
-M, --machine SID=STRING:设置或修改机器账户的SID。
-m, --machine:表示操作的是机器账户,而不是普通用户账户。
用户策略和控制
-g, --group:与-i和-e结合使用时,操作的是用户组。
-P, --account-policy=STRING:设置特定的账户策略。
-C, --value=LONG:与-P结合使用,指定策略的值。
-c, --account-control=STRING:设置用户账户的控制标志。
--force-initialized-passwords:修复密码数据库中损坏的密码字符串。
-z, --bad-password-count-reset:重置用户的错误密码尝试次数。
-Z, --logon-hours-reset:重置用户的允许登录时间。
密码相关操作
-t, --password-from-stdin:从标准输入中读取密码,而不是交互式提示。
-K, --kickoff-time=STRING:设置用户账户的踢出时间。
--set-nt-hash=STRING:直接使用NT散列值设置密码,而不是明文密码。
帮助和版本信息
-?, --help:显示帮助信息,列出所有选项。
-V, --version:显示pdbedit的版本信息。
通用Samba选项
-d, --debuglevel=DEBUGLEVEL:设置Samba的调试等级。
-s, --configfile=CONFIGFILE:使用指定的Samba配置文件。
--option=name=value:直接通过命令行设置smb.conf的选项。
-l, --log-basename=LOGFILEBASE:设置日志文件的基础名称。
--leak-report:在退出时启用talloc泄漏报告。
--leak-report-full:在退出时启用完整的talloc泄漏报告。
案例
列出所有用户 (-L
)
pdbedit -L
这个命令将列出所有Samba用户的用户名和SID。
详细列出所有用户 (-L -v
)
pdbedit -Lv
添加新用户 (-a -u
)
pdbedit -a -u username
这个命令将添加一个新的用户username
到Samba数据库。在运行此命令后,你通常会被提示输入该用户的密码。
-
修改现有用户的属性
-
设置账户描述 (
-N
)*pdbedit -r -u username -N "Account description"
-
设置全名 (
-f
)pdbedit -r -u username -f "Full User Name"
-
设置主目录 (
-h
)pdbedit -r -u username -h "/home/username"
-
删除用户 (-x
)
pdbedit -x -u username
这将从Samba数据库中删除用户username
。
修改用户密码(从标准输入) (-t
)
pdbedit -r -u username -t
在使用此命令时,它将从标准输入(例如,终端)读取密码,而不是弹出密码提示。
导入/导出用户到不同的后端 (-i
, -e
, -b
)
pdbedit -e tdbsam:/path/to/new/passdb.tdb -i smbpasswd:/path/to/old/passdb.smbpasswd
这个命令会将用户从smbpasswd
格式的文件导入到tdbsam
格式的数据库文件。
设置账户策略和值 (-P
, -C
)
pdbedit -P "maximum password age" -C 60
这将设置最大密码年龄策略的值为60天。
smbpasswd
smbpasswd
是 Samba 提供的一个工具,用于管理 Samba 用户密码。它允许管理员(root 用户)添加、删除和修改 Samba 用户账户,以及更改密码。当普通用户运行时,它允许用户更改自己的Samba密码。下面是smbpasswd
命令的各个选项及其含义:
选项:
smbpasswd 是 Samba 提供的一个工具,用于管理 Samba 用户密码。它允许管理员(root 用户)添加、删除和修改 Samba 用户账户,以及更改密码。当普通用户运行时,它允许用户更改自己的Samba密码。下面是smbpasswd命令的各个选项及其含义:
-L:本地模式,通常用于管理本机上的Samba密码文件。
-h:显示帮助信息。
-s:通过标准输入进行密码提示,常用于脚本中以避免在命令行暴露密码。
-c smb.conf:指定使用特定的smb.conf配置文件,而不是默认位置的文件。
-D LEVEL:设置调试级别。数字越高,输出的调试信息越详细。
-r MACHINE:指定要管理的远程机器,通常与Samba域控制器交互时使用。
-U USER:指定远程用户名,格式为 SAM/用户名。
当由 root 用户或在本地模式运行时的额外选项:
-a:添加用户。如果用户已存在于系统中,但不在Samba的密码数据库中,此选项可添加他们。
-d:禁用用户。将用户标记为禁用状态,但不从数据库中删除。
-e:启用用户。如果用户被标记为禁用,此选项可重新启用他们。
-i:设置为域间信任账户,用于设置与其他域的信任关系。
-m:设置为机器账户,通常用于域加入操作时创建计算机账户。
-n:设置无密码。为用户账户设置一个空密码。
-W:通过标准输入使用LDAP管理员密码,通常用于与LDAP集成时。
-w PASSWORD:指定LDAP管理员密码。
-x:删除用户。从Samba的密码数据库中完全删除用户。
-R ORDER:设置名称解析顺序,如hosts, wins, bcast等。
这个命令在管理Samba用户时非常有用,例如在你设置或维护一个Samba服务器时。需要注意的是,添加Samba用户之前必须确保用户已经存在于系统中,即他们可以通过getent passwd命令找到。在实际使用时,你可能需要结合useradd命令先在系统中创建用户,然后使用smbpasswd -a来为其添加Samba访问权限。
案例
smbpasswd
是 Samba 服务中用于管理用户密码的命令。这个工具不仅用于设置和更改用户的 Samba 密码,而且还可以用来启用、禁用或删除用户的 Samba 账户。
以下是一些 smbpasswd
命令的使用示例:
添加新的 Samba 用户
首先确保系统用户已经存在(例如通过 useradd
命令创建),然后添加他们到 Samba 用户数据库:
smbpasswd -a username
这个命令会提示你为该用户输入密码。-a
选项表示添加用户。
删除 Samba 用户
要从 Samba 用户数据库中删除用户,使用以下命令:
smbpasswd -x username
-x
选项用于删除用户。
禁用 Samba 用户
如果想要禁用一个用户而不是完全删除他们,可以使用:
smbpasswd -d username
-d
选项将用户设置为禁用状态。
启用已被禁用的 Samba 用户
若用户已被禁用,要重新启用他们:
smbpasswd -e username
-e
选项将用户重新启用。
更改用户的 Samba 密码
作为系统管理员,要更改一个用户的 Samba 密码:
smbpasswd username
运行命令后,它会提示输入新的密码。
用户自己更改 Samba 密码
一个用户想要更改他们自己的密码,可以这样做:
smbpasswd
在不带用户名的情况下运行时,smbpasswd
将允许当前登录的用户更改他们自己的密码。
使用配置文件
如果你的 Samba 配置不是存储在默认位置,你可以使用 -c
选项指定配置文件路径:
smbpasswd -a username -c /path/to/smb.conf
这里,-c
选项让你指定一个自定义的 smb.conf 文件。
设置无密码的用户
创建一个不需要密码即可登录的用户账户:
smbpasswd -n username
-n
选项用于创建一个无密码的账户。
请注意,出于安全原因,不建议设置无密码账户或在脚本中明文传递密码。始终确保遵循最佳的安全实践,特别是在处理网络服务和用户凭据时。