共计 1769 个字符,预计需要花费 5 分钟才能阅读完成。
今天给大家分享的文章是一篇关于服务器安装的文章,作者在将服务器放在内网之后通过堡垒机和外界相连,在这个过程中遇到一些问题并将其解决,很适合大家学习。
最近帮实验室装了两台服务器,计算用的服务器放在内网,通过一台堡垒机与外界相连。碰到很多小问题,在这里记录一下。
组建内网
这一部分没有太多好说的,堡垒机需要有两块网卡,一块对外一块对内,内网服务器一块就够了。组网的时候根据情况可以手工指定 IP 也可以 DHCP。如果内网只有一台机器的话可以找一根网线直连两台机器,如果机器多的话还是买个路由器吧,最好找高级一点的,可定制的功能多一点,否则会很坑。
端口转发
从外面访问内网服务器的时候有三种方法:
- 最简单的办法是先 ssh 到堡垒机,再 ssh 到内网的服务器。这样做的问题是需要同时在堡垒机和内网服务器上创建账号,而有的时候我们并不希望用户访问堡垒机,堡垒机对用户应该是透明的。
- 第二种办法是 ssh 隧道,我们可以通过堡垒机建立隧道,把外面的请求转发到内网。但建立隧道本身也比较麻烦。这篇博客 对于 ssh 隧道讲得非常清楚。
- 最方便解决办法就是端口转发:将堡垒机上的端口与内网服务器需要访问的端口建立映射关系,例如将堡垒机的 1234 端口映射到内网服务器的 22 端口,这时
ssh -p 1234 <bastion server IP>
实际登录到的就是内网服务器。端口转发的本质是把堡垒机当成了路由器。这篇博客对于端口映射讲得非常清楚。
时间校准
一个与世隔绝的服务器时间往往不准,有时候是设置问题,有时候是 BIOS 上的时钟本来就不准。想要校准的话,最方便的当然是手工设置,但这样无法保证精度,而且过一段时间可能又会产生偏差。比较好的办法是用 NTP 在线校准时间,但是内网无法访问公共 NTP 服务器。这时可以把堡垒机配置成一个 NTP server,然后让内网的服务器都跟堡垒机校准。
当然我们也可以给内网服务器指定一个网关(堡垒机),然后打开堡垒机的转发功能,这样内网服务器就可以直接上网了。但有时候我们并不想这么做。
用户管理
用户管理涉及到批量添加 / 删除用户,用户分组,权限控制,磁盘限额,限时登录等等。
批量添加 / 删除用户
下面是我写的一个小脚本,需要读取一个记载了用户名和登录密码的文本文件,然后依次创建每一个用户。
需要注意,通过 useradd
的 -p
参数指定密码时候一定要给出 crypt 加密后的密码,不是原始密码。在 CentOS 7 上,crypt 加密后的密码可以由 openssl passwd -crypt $password
生成,$password
代表原始密码。mkpasswd
这个命令似乎也可以。
限制用户磁盘空间
在前面的脚本里也看到了,可以通过 quota
命令限制每个用户(或每个用户组)使用的磁盘空间。但如果你的文件系统是 xfs,就需要用 xfs_quota
。为了支持磁盘限额,首先内核要足够新(Linux 2.4 以上),其次分区挂载的时候需要加上 usrquota
和 grpquota
两个参数(在 /etc/fstab
里)。
限制用户登录时间
我们的服务器是教学用的,学生可以通过预约获得使用权限。我们需要控制学生只能在预约的时间段登录,这个时间段之外,不仅不能登录,如果有这个用户的进程还要杀掉。限制用户登录时间有很多办法,例如写一个 crontab,预约时间结束就用 passwd
或者 usermod
把用户账户置为锁定状态,到下一次预约时间再解锁。但这样相当于一次预约要写两行 crontab,对于我这种懒人很不友好。
我选择的办法是用 PAM 里的时间模块,这种办法首先要编辑 /etc/security/time.conf
,在里面写入允许(或禁止)用户登录的时间,然后再编辑 /etc/pam.d/login
在 auth
条目后加入 account required pam_time.so
。这种办法有一个局限,只能指定周几,不能指定具体的日期。不过我们的预约正好也是以周为单位,所以无所谓了。
杀死某个用户的所有进程
有两个方便的命令 killall
和 pkill
。当然也可以用 ps
、grep
、kill
等命令组合起来,实现更复杂的功能。