Linux服务器组建与管理
部署并配置DNS服务器
yum install bind bind-utils -y
再编辑/etc/named.conf
修改 listen-on port 53 { any; };
allow-query { any; };
创建并编辑正向区域文件 /var/named/cyxcyxcyx.com.zone
创建并编辑反向区域文件 /var/named/80.168.192.in-addr.arpa.zone:
编辑 /etc/named.rfc1912.zones 文件,添加正向和反向区域的引用:
启动并设置开机自启
systemctl start named
systemctl enable named
在另外一台服务器上添加一个dns解析地址,解析到这台服务器
vi /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.80.128
在另一台主机上测试是否能解析
在测试是否可以解析到ftp服务器和samba服务器
安装ftp服务我使用脚本
#!/bin/bash
# 全局变量定义
VUSER_HOME="/data/ftp"
VUSER_CONF_DIR="/etc/vsftpd/vsftpd_user_conf"
VUSER_DB="/etc/vsftpd/vsftpd_login.db"
VUSER_LIST="/etc/vsftpd/vusers.list"
SYSTEM_USER="vuser"
# 函数定义
log_info() { echo -e "\033[34m[INFO] $1\033[0m"; }
log_error() { echo -e "\033[31m[ERROR] $1\033[0m"; }
check_command() { command -v $1 >/dev/null || { log_error "$1未安装,安装失败!"; exit 1; } }
# 环境检查
log_info "开始环境检查..."
check_command yum
check_command db_load
# 一、安装依赖包
log_info "开始安装vsftpd及依赖..."
yum install vsftpd libdb libdb-utils -y >/dev/null
if [ $? -ne 0 ]; then
log_error "yum安装失败,请检查网络连接或系统状态!"
exit 1
fi
# 二、关闭防火墙和SELinux
log_info "关闭防火墙..."
systemctl stop firewalld >/dev/null
systemctl disable firewalld >/dev/null
log_info "关闭SELinux..."
setenforce 0 >/dev/null
if ! grep -q "SELINUX=disabled" /etc/selinux/config; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi
# 三、创建虚拟用户
log_info "创建虚拟用户列表..."
cat > "$VUSER_LIST" <<EOF
oppic
123456
userA
123456
userB
123456
EOF
# 四、生成虚拟用户数据库
log_info "生成认证数据库..."
db_load -T -t hash -f "$VUSER_LIST" "$VUSER_DB" >/dev/null
if [ $? -ne 0 ]; then
log_error "数据库生成失败,请检查$VUSER_LIST格式!"
exit 1
fi
chmod 600 "$VUSER_DB"
# 五、配置PAM认证
log_info "配置PAM认证..."
mv /etc/pam.d/vsftpd{,.bak} >/dev/null 2>&1
cat > /etc/pam.d/vsftpd <<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF
# 六、创建系统映射用户
log_info "创建虚拟用户主目录..."
mkdir -p "$VUSER_HOME"/{oppic,userA,userB}
chmod 755 "$VUSER_HOME"
log_info "创建系统映射用户..."
useradd -d "$VUSER_HOME" -s /sbin/nologin "$SYSTEM_USER" >/dev/null 2>&1
if [ $? -ne 0 ]; then
log_error "用户$SYSTEM_USER创建失败,请检查权限!"
exit 1
fi
chown -R "$SYSTEM_USER":"$SYSTEM_USER" "$VUSER_HOME"
# 七、配置vsftpd主文件
log_info "配置vsftpd主文件..."
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=$SYSTEM_USER
allow_writeable_chroot=YES
chroot_local_user=YES
user_config_dir=$VUSER_CONF_DIR
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
EOF
# 八、配置用户独立权限
log_info "创建用户独立配置..."
mkdir -p "$VUSER_CONF_DIR"
cat > "$VUSER_CONF_DIR/oppic" <<EOF
local_root=$VUSER_HOME/oppic
write_enable=YES
virtual_use_local_privs=YES
EOF
cat > "$VUSER_CONF_DIR/userA" <<EOF
local_root=$VUSER_HOME/userA
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
write_enable=YES
virtual_use_local_privs=YES
EOF
cat > "$VUSER_CONF_DIR/userB" <<EOF
local_root=$VUSER_HOME/userB
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
write_enable=YES
virtual_use_local_privs=YES
EOF
# 九、启动服务
log_info "启动vsftpd服务..."
systemctl restart vsftpd >/dev/null 2>&1
if [ $? -ne 0 ]; then
log_error "服务启动失败,请检查配置文件!"
exit 1
fi
systemctl enable vsftpd >/dev/null
# 十、验证测试
log_info "开始验证测试..."
FTP_SERVER_IP=$(hostname -I | awk '{print $1}')
echo -e "open $FTP_SERVER_IP\noppic\ntoppic\nexit" | ftp -n >/dev/null 2>&1
if [ $? -eq 0 ]; then
log_info "\n安装成功!\n虚拟用户:oppic/userA/userB\n密码:123456/123456/123456"
log_info "服务器地址:ftp://$FTP_SERVER_IP"
log_info "被动模式端口范围:30000-30999"
else
log_error -e "\n安装失败,请检查以下内容:"
log_error "1. 确认SELinux已完全关闭"
log_error "2. 检查$VUSER_DB权限是否为600"
log_error "3. 检查防火墙是否已关闭"
fi
结果测试
挂载一块新磁盘分别创建PV、卷组和逻辑卷,将磁盘分区格式化后挂载到/data目录
部署samba服务并设置开机自启
yum install -y samba samba-client
systemctl start smb
systemctl enable smb
挂载一块新磁盘/dev/sdb,分区并格式化(xfs)
开机自动挂载到/data目录
john用户属于manager经理组,对/data/manager目录拥有读写权限
mike用户属于market市场组,对/data/market目录拥有读写权限
admin用户属于管理员组,对上述两个目录均拥有读写权限
#!/bin/bash
#Samba本地用户认证共享配置脚本
#使用系统本地用户+组认证
#保持DNS服务器配置
#定义变量
DOMAIN="cyxcyxcyx.com"
DNS_SERVER="192.168.80.129"
SHARE_GROUPS=("manager" "market" "admin")
SHARE_USERS=(
"john:manager"
"mike:market"
"admin:admin"
)
#安装必要软件包
yum install -y samba samba-client policycoreutils-python-utils
#配置DNS指向
cat > /etc/resolv.conf << EOF
search $DOMAIN
nameserver $DNS_SERVER
EOF
#配置Samba主文件
cat > /etc/samba/smb.conf << EOF
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[shared]
path = /data/share
valid users = @users
writable = yes
browseable = yes
create mask = 0664
directory mask = 0775
[manager]
path = /data/manager
valid users = @manager, @admin
writable = yes
browseable = yes
create mask = 0664
directory mask = 0775
force group = manager
[market]
path = /data/market
valid users = @market, @admin
writable = yes
browseable = yes
create mask = 0664
directory mask = 0775
force group = market
EOF
#创建系统用户和组
for group in "${SHARE_GROUPS[@]}"; do
groupadd -f $group
done
for user_info in "${SHARE_USERS[@]}"; do
IFS=':' read -ra user_data <<< "$user_info"
user=${user_data[0]}
group=${user_data[1]}
useradd -M -s /sbin/nologin -G $group $user
echo "为 $user 设置SMB密码:"
smbpasswd -a $user
done
#创建共享目录并设置权限
mkdir -p /data/{share,manager,market}
chmod 2775 /data/share /data/manager /data/market
chown :manager /data/manager
chown :market /data/market
chown :users /data/share
#配置SELinux
setsebool -P samba_export_all_rw=1
semanage fcontext -a -t samba_share_t "/data/share(/.*)?"
semanage fcontext -a -t samba_share_t "/data/manager(/.*)?"
semanage fcontext -a -t samba_share_t "/data/market(/.*)?"
restorecon -Rv /data
#防火墙配置
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
#重启服务
systemctl restart smb
systemctl enable smb
#验证命令提示
echo "配置完成!验证步骤:"
echo "1. 检查共享列表: smbclient -L localhost -U%"
echo "2. 访问共享示例:"
echo " - 经理共享: smbclient //$(hostname)/manager -U john"
echo " - 市场共享: smbclient //$(hostname)/market -U mike"
echo " - 管理员测试: smbclient //$(hostname)/manager -U admin"
测试结果
在/data/manager目录创建测试文件sa.txt,并写入“samba test.”内容 将/var/log/secure文件复制到/data/market目录下
在客户端上使用john和admin用户访问”\\samba.abc.com”,查看测试文件sa.txt
在客户端上使用mike用户mount挂载到本地的目录,“mount -t cifs //samba.abc.com/market /opt/market -o username=mike,password=123456”,查看测试文件secure