AlmaLinux部署Samba服务
1. 安装Samba
sudo dnf update
sudo dnf install samba samba-client samba-common
2. 创建系统用户和Samba用户
创建系统用户(不设置登录权限)
# 创建系统用户组
sudo groupadd smbusers
# 创建系统用户(不创建home目录,不设置登录shell)
sudo useradd -M -s /sbin/nologin -g smbusers pokes
创建Samba用户数据库目录
sudo mkdir -p /etc/samba/private
3. 配置Samba使用tdbsam后端
备份原始配置文件
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
编辑Samba主配置
sudo vi /etc/samba/smb.conf
添加以下内容:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = almalinux-samba
security = user
passdb backend = tdbsam:/etc/samba/private/passdb.tdb
# 日志设置
log file = /var/log/samba/log.%m
max log size = 50
# 性能优化
socket options = TCP_NODELAY
# 共享设置
hosts allow = 192.168.1.
guest account = nobody
map to guest = bad user
# 创建共享目录
[shared]
comment = Shared Folder
path = /srv/samba/shared
browseable = yes
writable = yes
guest ok = no
valid users = @smbusers
create mask = 0664
directory mask = 0775
[public]
comment = Public Folder
path = /srv/samba/public
browseable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0664
directory mask = 0775
4. 创建共享目录并设置权限
# 创建共享目录
sudo mkdir -p /srv/samba/shared
sudo mkdir -p /srv/samba/public
# 设置目录权限
sudo chown -R smbuser:smbusers /srv/samba/shared
sudo chmod -R 2775 /srv/samba/shared
sudo chown -R nobody:nobody /srv/samba/public
sudo chmod -R 2777 /srv/samba/public
这里我们没有开启SELinux,所以没有SELinux部分的配置.
如果SELinux是开启的,需要配置SELinux上下文:
sudo semanage fcontext -a -t samba_share_t “/srv/samba(/.*)?”
sudo restorecon -R /srv/samba
5. 创建和管理Samba虚拟用户
创建Samba用户
smbpasswd -a pokes
系统会提示你设置密码2次
将用户添加到smbusers组
usermod -aG smbusers pokes
常见的报错解决:
如果这一步你出现了“usermod: user ‘pokes’ does not exist”的报错?
错误是因为系统用户pokes不存在。
在使用Samba虚拟用户时,需要先创建系统用户,然后再创建Samba用户。
6. 管理Samba用户
#查看所有Samba用户
sudo pdbedit -L
#查看用户详细信息
sudo pdbedit -L -v
#禁用用户
sudo pdbedit -x username
#启用用户
sudo pdbedit -e username
#修改用户密码
sudo smbpasswd username
7. 配置防火墙
# 启用Samba服务通过防火墙
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
8. 启动和启用Samba服务
# 检查配置文件语法
sudo testparm
# 启动服务
sudo systemctl start smb
sudo systemctl start nmb
# 重启服务
sudo systemctl restart smb
sudo systemctl restart nmb
# 设置开机自启
sudo systemctl enable smb
sudo systemctl enable nmb
# 检查服务状态
sudo systemctl status smb
sudo systemctl status nmb
9. 给员工创建账户
sudo useradd -M -s /sbin/nologin -g smbusers pokes # 创建系统用户(不创建home目录,不设置登录shell)
smbpasswd -a pokes #创建samba用户
usermod -aG smbusers pokes #加入到smbusers组内
脚本1:基础版
#!/bin/bash
# Samba用户创建脚本
# 使用方法: ./create_samba_user.sh <用户名>
if [ $# -eq 0 ]; then
echo "错误: 请指定用户名"
echo "使用方法: $0 <用户名>"
exit 1
fi
USERNAME=$1
echo "开始创建Samba用户: $USERNAME"
# 1. 创建系统用户
echo "步骤1: 创建系统用户..."
sudo useradd -M -s /sbin/nologin -g smbusers "$USERNAME"
if [ $? -ne 0 ]; then
echo "错误: 创建系统用户失败"
exit 1
fi
# 2. 将用户添加到smbusers组
echo "步骤2: 将用户添加到smbusers组..."
sudo usermod -aG smbusers "$USERNAME"
if [ $? -ne 0 ]; then
echo "错误: 添加到用户组失败"
exit 1
fi
# 3. 创建Samba用户
echo "步骤3: 创建Samba用户..."
sudo smbpasswd -a "$USERNAME"
if [ $? -ne 0 ]; then
echo "错误: 创建Samba用户失败"
exit 1
fi
echo "用户 $USERNAME 创建完成!"
脚本2:增强版本脚本
#!/bin/bash
# 增强版Samba用户创建脚本
# 使用方法: ./create_samba_user.sh <用户名> [用户组]
# 颜色定义
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[1;33m'
NC='33[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查参数
if [ $# -eq 0 ]; then
log_error "请指定用户名"
echo "使用方法: $0 <用户名> [用户组]"
echo "示例: $0 pokes"
echo "示例: $0 pokes smbusers"
exit 1
fi
USERNAME=$1
GROUP=${2:-smbusers} # 如果未指定组,使用默认组smbusers
# 检查是否以root运行
if [ "$EUID" -ne 0 ]; then
log_warn "建议使用root权限运行此脚本"
read -p "是否继续? (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
log_info "开始创建Samba用户: $USERNAME (组: $GROUP)"
# 检查用户组是否存在
if ! getent group "$GROUP" > /dev/null; then
log_warn "用户组 $GROUP 不存在,正在创建..."
sudo groupadd "$GROUP"
if [ $? -ne 0 ]; then
log_error "创建用户组 $GROUP 失败"
exit 1
fi
log_info "用户组 $GROUP 创建成功"
fi
# 检查用户是否已存在
if id "$USERNAME" &>/dev/null; then
log_warn "用户 $USERNAME 已存在"
read -p "是否继续设置Samba密码? (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 0
fi
else
# 1. 创建系统用户
log_info "步骤1: 创建系统用户..."
sudo useradd -M -s /sbin/nologin -g "$GROUP" "$USERNAME"
if [ $? -ne 0 ]; then
log_error "创建系统用户失败"
exit 1
fi
log_info "系统用户创建成功"
fi
# 2. 确保用户在正确的组中
log_info "步骤2: 验证用户组..."
if ! id -nG "$USERNAME" | grep -q "$GROUP"; then
sudo usermod -aG "$GROUP" "$USERNAME"
log_info "用户已添加到 $GROUP 组"
else
log_info "用户已在 $GROUP 组中"
fi
# 3. 创建Samba用户
log_info "步骤3: 创建Samba用户..."
sudo smbpasswd -a "$USERNAME"
if [ $? -ne 0 ]; then
log_error "创建Samba用户失败"
exit 1
fi
# 4. 验证用户创建
log_info "步骤4: 验证用户创建..."
if sudo pdbedit -L | grep -q "^$USERNAME:"; then
log_info "Samba用户验证成功"
else
log_error "Samba用户验证失败"
exit 1
fi
echo
log_info "=========================================="
log_info "用户 $USERNAME 创建完成!"
log_info "=========================================="
echo "用户名: $USERNAME"
echo "用户组: $GROUP"
echo "系统用户: $(id "$USERNAME")"
echo "Samba用户: $(sudo pdbedit -L | grep "^$USERNAME:")"
脚本3:批量创建版本
#!/bin/bash
# 批量创建Samba用户脚本
# 使用方法: ./batch_create_samba_users.sh
USERS=("user1" "user2" "user3" "user4")
GROUP="smbusers"
for USER in "${USERS[@]}"; do
echo "创建用户: $USER"
sudo useradd -M -s /sbin/nologin -g "$GROUP" "$USER"
sudo usermod -aG "$GROUP" "$USER"
echo "请为用户 $USER 设置Samba密码:"
sudo smbpasswd -a "$USER"
echo "用户 $USER 创建完成"
echo "------------------------"
done
使用方法:
保存脚本:
vim create_samba_user.sh
#在nano中粘贴脚本内容,保存退出
chmod +x create_samba_user.sh
运行脚本:
# 创建单个用户
./create_samba_user.sh pokes
# 创建用户并指定组
./create_samba_user.sh pokes mygroup
或者直接使用一行命令:
bash create_samba_user.sh pokes
10.再扩展一个部门共享
# 创建部门组-销售
sudo groupadd xiaoshou
# 创建部门用户
sudo useradd -M -s /sbin/nologin -g xiaoshou xiaoshou01
# 创建Samba用户
sudo smbpasswd -a xiaoshou01
# 将用户加入到xiaoshou组内
usermod -aG xiaoshou xiaoshou01
创建部门共享目录
sudo mkdir -p /srv/samba/01-xiaoshou
# 设置目录权限
sudo chown -R root:xiaoshou /srv/samba/01-xiaoshou
# 设置SGID位,新建文件自动继承组权限
sudo chmod -R 2770 /srv/samba/01-xiaoshou
验证步骤
smbclient //127.0.0.1/01-销售 -U xiaoshou01
故障解决步骤:
执行
的输出执行
id xiaoshou01的输出执行
getent group xiaoshou的输出Windows连接时显示的具体错误信息Samba日志中的相关错误信息
sudo pdbedit -L | grep xiaoshou01
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END






![[C++探索之旅] 第一部分第十一课:小练习,猜单词 - 鹿快](https://img.lukuai.com/blogimg/20251015/da217e2245754101b3d2ef80869e9de2.jpg)










暂无评论内容