AlmaLinux 部署 Samba 服务:文件共享快速实现

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
的输出执行
sudo pdbedit -L | grep xiaoshou01
的输出Windows连接时显示的具体错误信息Samba日志中的相关错误信息

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
天生半盲的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容