当前位置: 首页 > article >正文

Linux 企业项目服务器组建(附脚本)

一、架构概述​

本方案旨在为企业搭建一套高效、安全的 Linux 服务器架构,包含一台 DNS 服务器,以及一台同时承载 FTP 和 Samba 服务的服务器,满足公司在域名解析、图片存储与共享、文件共享等方面的业务需求。​

二、服务器部署​

DNS 服务器​

选用一台独立的 Linux 服务器作为 DNS 服务器,安装 Bind 软件实现域名解析服务。在配置文件中,设置正向和反向解析区域,将公司局域网内的主机域名和 IP 地址进行映射,保证各主机能够通过域名访问 FTP 及 Samba 服务器。​

FTP 与 Samba 服务器​

另一台 Linux 服务器同时部署 FTP 和 Samba 服务。安装 vsftpd 作为 FTP 服务器,通过配置文件设置不同用户的访问权限:公司 UI 设计师拥有上传和下载权限,外包人员仅能上传和浏览图片。安装 Samba 服务,配置共享目录,赋予公司员工直接修改服务器文件的权限,实现文件共享服务。​

三、安全配置

系统账号安全​

限制不必要的用户登录,定期清理无用账号。为用户设置复杂、高强度的密码,并定期更换。​

系统引导和登录安全​

启用 GRUB 密码保护,防止非法修改系统引导参数。配置 PAM 模块,增强登录安全,如限制登录失败次数等。​

弱口令检测​

使用工具定期检测服务器上的账号,发现弱口令账号立即通知用户修改,降低安全风险。​

通过上述架构搭建和安全配置,企业不仅能实现高效的网络服务,还能有效保障服务器的安全性,为公司业务的稳定运行提供有力支持。​

完成示例:

DNS:

#!/bin/bash
#DNS主域名服务
#user li 20250325# 检查是否为root用户
if [ "$USER" != "root" ]; thenecho "错误:此操作需要root权限,请使用root用户执行脚本。"exit 1
fi# 防火墙与高级权限
if systemctl stop firewalld && systemctl disable firewalld; thenecho "防火墙已成功关闭并禁用。"
elseecho "防火墙关闭或禁用失败,请检查防火墙服务状态。"exit 1
fi# 安装BIND相关工具
if yum install -y bind; thenecho "BIND工具安装成功。"
elseecho "BIND工具安装失败,请检查网络或软件源配置。"sleep 5exit 1
fi# 设置变量
read -p "请设置DNS区域名(例如:xiaomao.com):" a
read -p "请输入本机IP地址:" b
read -p "请输入反向解析的IP地址前缀(例如:1.168.192):" c
ip="$b"
d=$(echo "$ip" | cut -d '.' -f 4)# 配置BIND主配置文件
cp /etc/named.conf /etc/named/conf.bak
if [ $? -ne 0 ]; thenecho "备份BIND主配置文件失败,请检查文件权限。"exit 1
fised -i 's/listen-on port 53 { 127.0.0.1; };/listen-on port 53 { any; };/g' /etc/named.conf
sed -i 's/allow-query     { localhost; }/allow-query     { any; }/g' /etc/named.confcat << EOF >> /etc/named.rfc1912.zones
zone "$a" IN {type master;file "/var/named/$a.zone";
};
zone "$c.in-addr.arpa" IN {type master;file "/var/named/$c.rev";
};
EOF# 创建正向解析区域文件
cat << EOF > /var/named/$a.zone
\$TTL 86400
@   IN  SOA  ns.$a. admin.$a. (2025032501 ; Serial3600       ; Refresh1800       ; Retry604800     ; Expire86400      ; Minimum TTL
)
@   IN  NS   ns.$a.
$a. IN  A       $b
ns       IN  A       $b
EOF# 创建反向解析区域文件
cat << EOF > /var/named/$c.rev
\$TTL 86400
@   IN  SOA  ns.$a. admin.$a. (2025032501 ; Serial3600       ; Refresh1800       ; Retry604800     ; Expire86400      ; Minimum TTL
)
@       IN  NS   ns.$a.
$d     IN  PTR  $a.
EOF# 调整权限
if chown named:named /var/named/$a.zone /var/named/$c.rev && chmod 640 /var/named/$a.zone /var/named/$c.rev; thenecho "区域文件权限设置成功。"
elseecho "区域文件权限设置失败,请检查文件权限。"exit 1
fi# 启动BIND服务并设置为开机自启
if systemctl enable named && systemctl start named; thenecho "服务启动成功"
elseecho "DNS服务启动失败,十秒后退出"sleep 10exit 1
fi

FTP:

#!/bin/bash# 检查是否为 root 用户
if [ "$USER" != "root" ]; thenecho "错误:非 root 用户,权限不足!"exit 1
fi# 防火墙与高级权限
if systemctl stop firewalld && systemctl disable firewalld; thenecho "防火墙已经关闭"
elseecho "防火墙关闭或禁用失败,请检查防火墙服务。"exit 1
fi# 定义变量
read -p "创建虚拟账号名:" Lain
read -p "设置虚拟账号密码:" xiaochanmao
read -p "创建虚拟用户的映射账号:" coke
read -p "创建 ftp 的根目录:" /ftp# 安装 vsftpd
if ! yum install -y vsftpd; thenecho "vsftpd 安装失败,请检查网络或软件源。"exit 1
fi# 创建映射的系统用户
mkdir -p "$a"
useradd -d "$a" -s /sbin/nologin "$zhao"
if [ $? -eq 0 ]; thenecho "创建成功"
elseecho "创建失败,请检查目录或用户是否已存在。"sleep 5exit 1
fi
chmod og+rw "$a"# 创建虚拟用户数据库
echo "$laodi" > /etc/vsftpd/vusers.list
echo "$xiaomao" >> /etc/vsftpd/vusers.list
if ! db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vusers.db; thenecho "虚拟用户数据库创建失败,请检查相关文件权限。"exit 1
fi
chmod 600 /etc/vsftpd/vusers.db# 配置 PAM 文件
cat > /etc/pam.d/vsftpd-virtual <<EOF
auth    required    pam_userdb.so db=/etc/vsftpd/vusers
account required    pam_userdb.so db=/etc/vsftpd/vusers
EOF# 配置 vsftpd
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
listen=YES
listen_ipv6=NO
## 使用虚拟用户
guest_enable=YES
guest_username=$zhao
virtual_use_local_privs=YES
## PAM 配置
pam_service_name=vsftpd-virtual
## 用户目录
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=$a
## 日志配置
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
## 被动模式端口范围
pasv_min_port=30000
pasv_max_port=31000
EOF# 启动和设置开机自启
if systemctl restart vsftpd && systemctl enable vsftpd; thenecho "FTP 服务已配置完成,使用用户名 '$Lain' 和密码 '$xiaochanmao' 登录"
elseecho "FTP 服务启动或设置开机自启失败,请检查服务配置。"exit 1
fi

Samba:

#!/bin/bash# 判断系统类型,选择合适的包管理器安装Samba
if [[ -f /etc/redhat-release ]]; thenPACKAGE_MANAGER="yum"
elif [[ -f /etc/lsb-release ]]; thenPACKAGE_MANAGER="apt"
elseecho "不支持的Linux发行版,请手动安装Samba。"exit 1
fi# 安装Samba
echo "开始安装Samba..."
if [ "$PACKAGE_MANAGER" == "yum" ]; thensudo $PACKAGE_MANAGER install -y samba samba-client
elif [ "$PACKAGE_MANAGER" == "apt" ]; thensudo $PACKAGE_MANAGER updatesudo $PACKAGE_MANAGER install -y samba
elseecho "安装失败,未知的包管理器。"exit 1
fi
echo "Samba安装完成。"# 创建共享目录
SHARE_DIR="/home/samba_share"
sudo mkdir -p $SHARE_DIR
sudo chmod 775 $SHARE_DIR
echo "共享目录 $SHARE_DIR 创建完成。"# 备份Samba配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
echo "Samba配置文件已备份。"# 添加共享配置
SHARE_NAME="my_shared"
CONFIG_CONTENT="[${SHARE_NAME}]
path = ${SHARE_DIR}
writeable = yes
browseable = yes
guest ok = no"
echo -e "$CONFIG_CONTENT" | sudo tee -a /etc/samba/smb.conf > /dev/null
echo "共享配置已添加。"# 添加Samba用户(假设已有系统用户testuser)
USERNAME="testuser"
sudo $PACKAGE_MANAGER install -y expect
(
echo -e "add\n${USERNAME}\npassword\npassword\n"
) | sudo smbpasswd -a -s $USERNAME
echo "Samba用户 $USERNAME 添加完成。"# 重启Samba服务
if [ "$PACKAGE_MANAGER" == "yum" ]; thensudo systemctl restart smb nmb
elif [ "$PACKAGE_MANAGER" == "apt" ]; thensudo systemctl restart smbd
elseecho "无法重启Samba服务。"exit 1
fi
echo "Samba服务已重启,配置生效。"

相关文章:

Linux 企业项目服务器组建(附脚本)

一、架构概述​ 本方案旨在为企业搭建一套高效、安全的 Linux 服务器架构&#xff0c;包含一台 DNS 服务器&#xff0c;以及一台同时承载 FTP 和 Samba 服务的服务器&#xff0c;满足公司在域名解析、图片存储与共享、文件共享等方面的业务需求。​ 二、服务器部署​ DNS 服…...

Linux 2021韩顺平网课笔记:shell编程

基本介绍 Shell是一个命令行解释器&#xff0c;它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序&#xff0c;用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell脚本的执行方式 格式要求 脚本以 #!bin/bash 开头&#xff0c;表明以bashell…...

软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理

文章目录 4、操作系统基本原理4.1 、进程管理**4.1.1 、进程同步机制****4.1.2 、进程互斥机制****4.1.3 、信号量机制****4.1.4 、PV操作实现前驱操作****4.1.5 、死锁**4.1.6 、银行家算法 4、操作系统基本原理 进程管理 存储管理 文件管理 设备管理 微内核操作系统 操作系…...

大模型和AIGC同质化浪潮下的信息困局与破局之道,面向未来的认知革命

欢迎来到涛涛聊AI。看到网上太多雷同的内容有感后&#xff0c;让AI批判下AI。 一、技术趋同引发的信息生态危机 当前互联网正被海量AI生成内容淹没&#xff0c;这种现象的根源在于技术底层的高度同质化。全球主流大模型90%以上基于相同算法架构开发&#xff0c;采用近似的训练…...

⼆、Kafka客户端消息流转流程

这⼀章节将重点介绍Kafka的HighLevel API使⽤&#xff0c;并通过这些API&#xff0c;构建起Kafka整个消息发送以及消费的主线流程。 Kafka提供了两套客户端API&#xff0c;HighLevel API和LowLevel API。 HighLevel API封装了kafka的运⾏细节&#xff0c;使⽤起来⽐较简单&…...

es 3期 第28节-深入掌握集群组建与集群设置

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…...

如何在 SwiftUI 视图中使用分页(Paging)机制显示 SwiftData 数据(三)

概述 小伙伴们都知道,自从有了 SwiftData 的加持,现在 SwiftUI 可以非常惬意的利用描述型命令创建以数据驱动为本的视图了。这在测试或演示小项目中工作的完美无缺,不过真实世界要“残酷”的多。 实际情况是,我们无法一次性将海量数据统统拉入内存以便在 SwiftUI 中显示,…...

git和VScode

游戏存档保存的是游戏的进度 git保存的是代码的进度 Vscode和git 要正常的使用git首先要设置姓名和邮箱 要配合gitee&#xff08;也可以是其他平台&#xff0c;以gitee举例&#xff09;使用&#xff0c;首先创造一个gitee账号&#xff0c;复制邮箱和用户名 在VScode中找到…...

Linux Vim 编辑器的使用

Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器&#xff0c;相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...

NLP语言模型训练里的特殊向量

1. CLS 向量和 DEC 向量的区别及训练方式 (1) CLS 向量与 DEC 向量是否都是特殊 token&#xff1f; CLS 向量&#xff08;[CLS] token&#xff09;和 DEC 向量&#xff08;Decoder Input token&#xff09;都是特殊的 token&#xff0c;但它们出现在不同类型的 NLP 模型中&am…...

利用Canvas在紫微斗数命盘上画出三方四正

许多紫微斗数排盘程序都会在命盘上画出三方四正的指示线&#xff0c;便于观察命盘。本文用Canvas在一个模拟命盘上画出三方四正指示线。 模拟命盘并画出“子”宫三方四正的HTML文件如下&#xff1a; <!doctype html> <html lang"en"> <head><…...

传统汽车 HMI 设计 VS 新能源汽车 HMI 设计,有何不同?

一、设计理念与目标的差异 传统汽车HMI设计的核心目标是辅助驾驶&#xff0c;强调功能的简洁性和操作的便捷性。其设计侧重于提供基础的车辆信息&#xff08;如车速、转速、油量等&#xff09;&#xff0c;并确保驾驶员在操作时能够快速获取关键信息。相比之下&#xff0c;新能…...

【JavaWeb】前端基础

JavaWeb 前端三大件&#xff1a;HTML&#xff08;主要用于网页主体结构的搭建&#xff09;&#xff0c;CSS&#xff08;页面美化&#xff09;&#xff0c;JavaScript&#xff08;主要用于页面元素的动态代理&#xff09; 1. HTML 1.1 html概述 HTML&#xff1a;Hyper Text …...

SpringMVC组件解析

SpringMVC的执行流程 ① 用户发送请求至前端控制器DispatcherServlet。 ② DispatcherServlet收到请求调用HandlerMapping处理器映射器 ③ 处理器映射器找到具体的处理器(可以根据xm|配置、注解进行査找)&#xff0c;生成处理器对象及处理器 拦截器(如果有则生成)一…...

使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例

1. 使用 Provider 实现局部刷新 示例 1&#xff1a;ChangeNotifier Consumer 通过 ChangeNotifier 和 Consumer 实现局部刷新。 import package:flutter/material.dart; import package:provider/provider.dart;void main() {runApp(ChangeNotifierProvider(create: (_) &g…...

数据结构C语言练习(两个栈实现队列)

一、引言 在数据结构的学习中&#xff0c;我们经常会遇到一些有趣的问题&#xff0c;比如如何用一种数据结构去实现另一种数据结构的功能。本文将深入探讨 “用栈实现队列” 这一经典问题&#xff0c;详细解析解题思路、代码实现以及每个函数的作用&#xff0c;帮助读者更好地…...

Java 基础-28- 多态 — 多态下的类型转换问题

在 Java 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是面向对象编程的核心概念之一。多态允许不同类型的对象通过相同的方法接口进行操作&#xff0c;而实际调用的行为取决于对象的实际类型。虽然多态提供了极大的灵活性&#xff0c;但在多态的使用过程中&#xf…...

nextjs使用02

并行路由 同一个页面&#xff0c;放多个路由&#xff0c;&#xff0c; 目录前面加,layout中可以当作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…...

第2.6节 iOS生成全量和增量报告

2.6.1 简介 在采集了覆盖率数据后&#xff0c;就需要生成对应需求的全量和增量覆盖率报告&#xff0c;以便对测试进行查漏补缺。IOS系统有两种开发语言&#xff0c;所以生成报告的方式也不相同&#xff0c;下面就分别介绍一下Object C和Swift语言如何生成覆盖率报告。 2.6.2 O…...

应用分享 | AWG技术突破:操控钻石氮空位色心,开启量子计算新篇章!

利用AWG操作钻石中的氮空位色彩中心 金刚石中的颜色中心是晶格中的缺陷&#xff0c;其中碳原子被不同种类的原子取代&#xff0c;而相邻的晶格位点则是空的。由于色心具有明亮的单光子发射和光学可触及的自旋&#xff0c;因此有望成为未来量子信息处理和量子网络的固态量子发射…...

前端开发学习路线完整指南

前端开发学习路线完整指南 前端开发是一个不断发展的领域&#xff0c;涉及多个技术栈。本文将为你提供一条系统的前端学习路线&#xff0c;帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前&#xff0c;了解一些基础知识会对你的学习过程有很大帮助。 计…...

linux服务器专题2------vim编辑器如何设置显示行号

在 Vim 编辑器中&#xff0c;可以通过以下步骤来显示行号&#xff1a; 临时显示行号 打开 Vim 编辑器&#xff0c;输入如下命令&#xff1a; :set number这将临时启用行号显示。关闭 Vim 后&#xff0c;行号设置将丢失。 永久显示行号 如果希望在每次启动 Vim 时都显示行号…...

Jmeter触发脚本备份

JMeter 在以下情况会触发脚本备份&#xff1a; 手动保存测试计划时&#xff1a;如果测试计划有未保存的修改&#xff0c;当用户手动保存测试计划&#xff08;脚本&#xff09;时&#xff0c;JMeter 都会自动将当前脚本备份到${JMETER_HOME}/backups文件夹下。 关闭 JMeter 时…...

【视觉与语言模型参数解耦】为什么?方案?

一些无编码器的MLLMs统一架构如Fuyu&#xff0c;直接在LLM内处理原始像素&#xff0c;消除了对外部视觉模型的依赖。但是面临视觉与语言模态冲突的挑战&#xff0c;导致训练不稳定和灾难性遗忘等问题。解决方案则是通过参数解耦方法解决模态冲突。 在多模态大语言模型&#xf…...

重建二叉树(C++)

目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 3 代码实现 4 代码解析 4.1 初始化 4.2 递归部分 4.3 主逻辑 5 总结 1 问题描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序…...

VLAN、QinQ、VXLAN的区别

1、技术本质与封装方式 技术OSI层级封装原理标识位长度拓展性VLAN数据链路层L2在以太网帧头插入802.1Q Tag&#xff08;单层VLAN标签&#xff09;12位&#xff08;4094个&#xff09;有限&#xff0c;仅支持单一网络域内隔离QinQ数据链路层L2在原始VLAN标签外再封装一层802.1Q…...

保姆级教程:synchronized 同步方法 vs 同步代码块,看完彻底懂锁!

一、同步方法&#xff08;锁住整个方法&#xff09; 1. 代码示例 public class Counter {private int count 0;// 同步方法&#xff1a;锁住整个方法public synchronized void add() {count;}// 同步方法&#xff1a;锁住整个方法public synchronized void subtract() {coun…...

10乱码问题的解释(1)

在计算机中,一个汉字,占几个字节? 针对这个问题,只要你回答出一个具体的数字,就一定是错的!! 前提条件: 当前中文编码使用的是哪种方式(字符集) 计算机存的其实是二进制数字~~ 英文字母,怎么表示的?? ASCII 码表~~ 规定了每个字符,都有一个对应的数字来表示~~ 只是表示英文,…...

短视频文案--钓鱼女和滑板女

短视频文案 第一个文案&#xff1a; 1标题&#xff1a;风萧萧兮易水寒&#xff0c;美女钓鱼兮不复还 2内容&#xff1a; 我站在池边的微风中&#xff0c;再也看不到曾经快乐的少女了。 风很凉&#xff0c;凉得心不知前往何处。 水很清&#xff0c;清得深知这里没鱼群。 芦苇…...

算法设计学习3

实验目的及要求&#xff1a; 1.加强对结构体的应用。 2.熟悉字符计数排序。 实验设备环境&#xff1a; 1.微型计算机 2.DEV C(或其他编译软件) 实验步骤&#xff1a; 任务&#xff1a;要求使用自定义函数来实现 输入一段文本&#xff0c;统计每个字符出现的次数&#xff0c;按…...