-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadd_user.sh
More file actions
233 lines (205 loc) · 7.48 KB
/
Copy pathadd_user.sh
File metadata and controls
233 lines (205 loc) · 7.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#!/bin/bash
# 脚本名称:setup_smb_with_homes.sh
# 功能:安装并配置SMB服务,使用[homes]功能,为用户自动创建共享目录
# 用法:sudo bash setup_smb_with_homes.sh [用户名1[:密码1]] [用户名2[:密码2]] ...
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 默认密码
DEFAULT_PASSWORD="123456"
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误:请以root权限运行此脚本:sudo bash $0 [用户名1[:密码1]] [用户名2[:密码2]] ...${NC}"
exit 1
fi
# 检查是否提供了用户名
if [ "$#" -eq 0 ]; then
echo -e "${RED}错误:请提供要创建的用户名:sudo bash $0 [用户名1[:密码1]] [用户名2[:密码2]] ...${NC}"
exit 1
fi
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN}SMB服务配置脚本 (使用[homes]功能)${NC}"
echo -e "${CYAN}========================================${NC}"
# 1. 安装SMB服务
echo -e "${BLUE}[1/6]${NC} 检查并安装SMB服务..."
if ! command -v smbd &> /dev/null; then
echo -e "${YELLOW}SMB服务未安装,正在安装...${NC}"
apt update && apt install samba -y
if [ $? -ne 0 ]; then
echo -e "${RED}安装SMB服务失败,请检查网络连接。${NC}"
exit 1
fi
echo -e "${GREEN}SMB服务安装成功。${NC}"
else
echo -e "${GREEN}SMB服务已安装。${NC}"
fi
# 2. 配置SMB服务
echo -e "${BLUE}[2/6]${NC} 配置SMB服务..."
# 备份原配置文件
if [ ! -f /etc/samba/smb.conf.bak ]; then
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
echo -e "${GREEN}已备份原配置文件:/etc/samba/smb.conf.bak${NC}"
fi
# 检查是否已配置[homes]部分
if ! grep -q "$$\[homes$$\]" /etc/samba/smb.conf; then
# 添加[homes]配置
cat >> /etc/samba/smb.conf << EOF
# 用户主目录共享配置
[homes]
comment = Home Directories
browseable = yes
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
EOF
echo -e "${GREEN}[homes]配置已添加。${NC}"
else
echo -e "${YELLOW}[homes]配置已存在。${NC}"
fi
# 3. 创建用户并设置密码
echo -e "${BLUE}[3/6]${NC} 创建用户并设置密码..."
success_count=0
fail_count=0
for user_info in "$@"; do
# 解析用户名和密码
username=$(echo "$user_info" | cut -d':' -f1)
password=$(echo "$user_info" | cut -d':' -f2)
# 如果没有提供密码,使用默认密码
if [ "$password" == "$username" ]; then
password="$DEFAULT_PASSWORD"
fi
echo -e "${MAGENTA}处理用户:$username${NC}"
# 检查用户名是否为空
if [ -z "$username" ]; then
echo -e "${RED} 错误:用户名不能为空${NC}"
((fail_count++))
continue
fi
user_was_created=0
# 检查用户是否已存在
if id "$username" &> /dev/null; then
echo -e "${YELLOW} 用户 $username 已存在,跳过创建步骤${NC}"
else
# 创建用户
useradd -m -s /bin/bash "$username"
if [ $? -eq 0 ]; then
echo -e "${GREEN} 用户 $username 创建成功${NC}"
user_was_created=1
else
echo -e "${RED} 创建用户 $username 失败${NC}"
((fail_count++))
continue
fi
fi
# 设置Linux用户密码(仅当用户是新创建时)
if [ $user_was_created -eq 1 ]; then
echo "$username:$password" | chpasswd
if [ $? -eq 0 ]; then
echo -e "${GREEN} 用户 $username 的Linux密码已设置${NC}"
else
echo -e "${RED} 设置用户 $username 的Linux密码失败${NC}"
((fail_count++))
continue
fi
else
echo -e "${YELLOW} 用户 $username 已存在,跳过设置Linux密码${NC}"
fi
# 检查用户是否已在SMB服务中
if ! pdbedit -L | grep -q "^$username:"; then
# 将用户添加到SMB服务
echo -e "$password\n$password" | smbpasswd -a "$username"
if [ $? -eq 0 ]; then
echo -e "${GREEN} 用户 $username 已添加到SMB服务${NC}"
((success_count++))
else
echo -e "${RED} 将用户 $username 添加到SMB服务失败${NC}"
((fail_count++))
continue
fi
else
echo -e "${YELLOW} 用户 $username 已在SMB服务中,跳过设置SMB密码${NC}"
fi
done
# 4. 启动并启用SMB服务
echo -e "${BLUE}[4/6]${NC} 启动并启用SMB服务..."
systemctl restart smbd nmbd
systemctl enable smbd nmbd
if [ $? -eq 0 ]; then
echo -e "${GREEN}SMB服务已启动并设置为开机自启。${NC}"
else
echo -e "${RED}启动SMB服务失败。${NC}"
exit 1
fi
# 5. 配置防火墙
echo -e "${BLUE}[5/6]${NC} 配置防火墙..."
if command -v ufw &> /dev/null; then
# 检查防火墙状态
if ufw status | grep -q "active"; then
# 允许SMB服务通过防火墙
ufw allow samba
echo -e "${GREEN}防火墙已配置,允许SMB服务通过。${NC}"
else
echo -e "${YELLOW}防火墙未启用,跳过防火墙配置。${NC}"
fi
else
echo -e "${YELLOW}未安装ufw防火墙,跳过防火墙配置。${NC}"
fi
# 6. 获取服务器IP地址
echo -e "${BLUE}[6/6]${NC} 获取服务器IP地址..."
# 获取服务器IP地址(排除回环地址)
SERVER_IP=$(hostname -I | awk '{print $1}')
if [ -z "$SERVER_IP" ]; then
# 尝试其他方法获取IP地址
SERVER_IP=$(ip addr show | grep -E 'inet [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | grep -v '127.0.0.1' | head -1 | awk '{print $2}' | cut -d'/' -f1)
fi
if [ -z "$SERVER_IP" ]; then
SERVER_IP="服务器IP地址"
echo -e "${YELLOW}无法获取服务器IP地址,请手动替换。${NC}"
else
echo -e "${GREEN}服务器IP地址:$SERVER_IP${NC}"
fi
# 7. 显示配置结果
echo -e "${CYAN}========================================${NC}"
echo -e "${GREEN}SMB服务配置完成!${NC}"
echo -e "${CYAN}========================================${NC}"
echo -e "${MAGENTA}统计信息:${NC}"
echo -e " 成功创建/配置用户数:${GREEN}$success_count${NC}"
echo -e " 失败用户数:${RED}$fail_count${NC}"
echo -e "${CYAN}========================================${NC}"
echo -e "${MAGENTA}使用说明:${NC}"
echo -e " 1. 用户可以通过以下方式访问自己的home目录:"
echo -e " ${YELLOW}Windows:${NC} \\\\\\$SERVER_IP\\用户名"
echo -e " ${YELLOW}Linux:${NC} smb://$SERVER_IP/用户名"
echo -e " 2. 用户列表及密码:"
for user_info in "$@"; do
username=$(echo "$user_info" | cut -d':' -f1)
password=$(echo "$user_info" | cut -d':' -f2)
if [ "$password" == "$username" ]; then
password="$DEFAULT_PASSWORD"
fi
echo -e " ${CYAN}- $username${NC} : ${YELLOW}$password${NC}"
done
echo -e " 3. 请用户登录后修改密码以保证安全。"
echo -e "${CYAN}========================================${NC}"
# 测试SMB服务状态
echo -e "${MAGENTA}测试SMB服务状态...${NC}"
systemctl status smbd --no-pager | grep -E "(Active|Loaded)" | while read line; do
if [[ $line == *"active (running)"* ]]; then
echo -e "${GREEN}$line${NC}"
else
echo -e "${YELLOW}$line${NC}"
fi
done
echo -e "${CYAN}========================================${NC}"
# 检查是否所有用户都成功创建
if [ $fail_count -gt 0 ]; then
echo -e "${YELLOW}警告:有 $fail_count 个用户创建/配置失败,请检查上面的错误信息。${NC}"
exit 1
fi
exit 0