运维笔记

102 次查看 0 条评论

本文主要以CentOS7.x系统环境记录说明。

1、系统安装&初始化

1.1、系统安装

  1. CentOS 6.X安装
  2. CentOS 7.X安装
  3. Ubuntu 14.x安装
  4. Windows 10安装

1.2、设置主机基本信息

1.2.1、设置主机名和IP地址信息

设置一个方便记忆识别的主机名:

hostnamectl set-hostname xxx

无需重启,下次登录生效。

设置固定IP地址,CentOS7不在使用固定的eth0这样的网卡名,首先使用ip link命令查看有哪些网卡,然后编辑相应配置文件:

ip link
vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改、增加如下格式内容配置固定IP信息:

...
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=114.114.115.115

保存后,重启网卡服务,查看是否已为设置的固定IP信息:

systemctl restart network
ip address

1.2.2、检查时间时区设置,配置时间同步服务

很多业务需要时间信息,时间如果错乱,会导致业务出现严重问题。因此需要保证服务器时区正确,时间准确。

设置时区:

# 查看使用的时区,及检查时间是否准确
[root@docker ~]# date -R
# 发现时区对时,可以重新向导式选择配置
[root@docker ~]# tzselect
# 或者直接这样设置(CentOS7.x)
# 查看有哪些可选时区
[root@docker ~]# timedatectl list-timezones
[root@docker ~]# timedatectl set-timezone Asia/Shanghai

配置时间同步:

[root@docker ~]# yum install ntp
# 从权威授时服务器同步
[root@docker ~]# ntpdate cn.ntp.org.cn
# 配置计划任务定时同步(每10分钟同步一次)
[root@docker ~]# cat << EOF >> /etc/crontab
*/10 * * * * root /usr/sbin/ntpdate cn.ntp.org.cn
EOF

PS:常用授时服务器

1.3、安全加固与审计

通常不使用root账号直接用于生产管理,建一个账号配置允许使用sudo权限。并需要记录用户登录后的操作记录。时刻记住最小权限法则。取消SSH密码登录改为使用密钥验证登录,避免暴力破解。只开放必须的端口,并且尽可能限制源IP范围。

1.3.1、添加一个普通用户

## 查看系统上的所有用户
awk -F : '{ print $1 }' /etc/passwd
## 添加用户
useradd Jack
# 设置随机密码
password=$(openssl rand -base64 8 | cut -c 1-8) && \
echo ${password} | passwd --stdin Jack && \
echo "PassWord:${password}" && \
unset password

设置合适的密码安全策略

1.3.2、赋予普通用户sudo权限

在Linux下,当想赋予普通用户某个特殊权限时,可以通过sudo来精确控制,具体到某个命令。其配置文件是 /etc/sudoers,不过强烈建议不要直接编辑这个文件,而是通过visudo命令来编辑。因为使用visudo编辑保存时会进行语法检查,如果有问题会提示,避免写错导致严重问题。

配置格式一般为:

user    host=(users to be)       commands
user    host=(users to be)       NOPASSWD: commands
  1. 第一列 user 是允许使用 sudo 的用户,可以是组,但组名前面需加上 % 符号;
  2. 第二列 host 表示允许登录时的主机,括号中为通过 sudo 允许变为的用户;
  3. 第三列运行执行的命令列表,其中多个命令使用逗号隔开,使用 ALL 赋予所有权限用,排除权限在命令前加 ! 符号,如果不加上 NOPASSWD: ,则运行 sudo 提权时需要输入当前执行命令账户的密码。

这是一个默认的visudo配置文件内容:

grep -Ev "^$|#" /etc/sudoers

56826-xo3jgzkw2li.png

下面给用户Jack赋予sudo权限,并排除一些特定权限:

visudo
# 在最末尾添加一行如下内容
Jack    ALL=(root)    NOPASSWD: ALL,!/usr/bin/passwd,!/sbin/reboot,!/sbin/shutdown,!/sbin/halt

这里配置用户Jack能使用sudoroot身份免密执行除 passwdrebootshutdownhalt 外所有命令。

现在用户Jack能执行原来需要root权限的命令了,但由于运维、开发等各个人员技术水平、操作习惯都不相同,还是也会因一时失误造成误操作,从而影响系统运行。所以通常还需要配置记录sudo操作日志,以便故障恢复及追责。

CentOS7.x已经默认将 sudo 操作记录在 /var/log/secure 文件中,查看:

grep 'sudo' /var/log/secure

02241-z91uhxzdvdp.png

1.3.3、记录操作日志,方便审计

Linux系统默认将历史操作命令记录在 ~/.bash_history 文件中,并且默认只记录最近的1000条记录。使用 history 命令查看历史记录。但这并不能满足审计需求,一般都会修改配置达到更好的的操作日志记录。

  1. 修改Bash配置以便记录日志
  2. 配置Rsyslog日志服务器记录日志

查看用户登录记录:

last
## 查看系统上用户最后登录信息
lastlog
lastlog -u root
## 查看登录失败记录
lastb

安全日志:

tail /var/log/secure
tail /var/log/messages

1.3.4、禁用Ctrl+Alt+Del组合键重启

默认当用户向主机发送 Ctrl + Alt + Del 组合键信号给主机时,主机会直接重启。根本就不需要登录,只要能接触到机器的人都能这样重启服务器,太不安全了。

# CentOS7.x系统禁止按Ctrl+Alt+Del重启
rm -r /usr/lib/systemd/system/ctrl-alt-del.targetinit
# CentOS7.x系统恢复按Ctrl+Alt+Del重启
ln -s /usr/lib/systemd/system/reboot.target /usr/lib/systemd/system/ctrl-alt-del.target

参考:Linux禁用CTRL-ALT-DEL重启系统 - 简书

1.3.5、利用 chattr 锁定关键文件或目录

## 设置只能追加
chattr +a /etc/passwd
## 设置不能删除,不能更改,不能移动
chattr +i /etc/passwd
## 解除特权
chattr -a /etc/passwd
chattr -i /etc/passwd

查看文件或目录是否有特殊权限:

lsattr /etc/passwd

1.4、磁盘分区

  1. Linux下使用fdisk给磁盘分区
  2. Linux下使用parted给磁盘分区
  3. Linux下磁盘扩容

2、软件安装

Linux发行版CentOS通常使用yum、rpm在线安装,还可以使用源码编译安装。

2.1、使用YUM安装

yum search xxx
yum info xxx
yum install xxx

查找某个命令属于哪个软件包:

yum provides ssh

2.2、使用RPM安装

# 查看系统中所有已经安装的包
rpm -qa
# 查看是否安装nginx软件包
rpm -q nginx
# 接着可以用具体包名查看安装了那些文件到系统
rpm -ql nginx-1.12.2-2.el7.x86_64
# 查看软件包的相关介绍信息
rpm -qi nginx
# 查看一个已安装软件的配置文件
rpm -qc nginx
# 查看一个已经安装软件的文档安装位置
rpm -qd nginx
# 安装一个本地rpm包软件到系统(例如:nethogs-0.8.5-1.el6.x86_64.rpm)
rpm -ivh ./nethogs-0.8.5-1.el6.x86_64.rpm
# 测试安装(通常用于检测依赖)
rpm -ivh --test ./nethogs-0.8.5-1.el6.x86_64.rpm
# 升级软件包
rpm -Uvh ./nethogs-0.8.6-1.el6.x86_64.rpm
# 查看一个软件包的依赖关系
rpm -qpR nethogs-0.8.6-1.el6.x86_64.rpm
# 移除一个包(卸载)
rpm -e nginx
# 查询一个已经安装的文件属于哪个软件包
rpm -qf /usr/share/doc/nethogs-0.8.5/README.md

2.3、编译安装

...

3、自动化运维

强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。

3.1、常用工具

  1. Ansible CentOS安装Ansible及其使用介绍
  2. Jenkins
  3. Zabbix
  4. Docker
  5. Git

3.2、生成随机字符串

在自动化运维中,经常会需要用到随机字符,比如生成随机密码等。

  • 使用mkpasswd命令(推荐,随机杂度好),这个命名属于expect包。
## 首先得安装
yum install -y expect
mkpasswd -l 9
## 自定义复杂度
mkpasswd -l 9 -d 3 -C 2
  • 使用 /dev/urandom 设备
## 方法一
tr -dc "A-Za-z0-9#_@*$()" < /dev/urandom | head -c 9
## 方法二(复杂度低)
head /dev/urandom | cksum | md5sum | cut -c 1-9
  • 使用 openssl 工具
openssl rand -base64 8 | cut -c 1-9

参阅:几种shell生成随机字符串的方法

4、Linux Shell

## 查看当前shell是什么
echo $SHELL
## 查看系统中有哪些shell可用
cat /etc/shells

4.1、Bash shell

Bash的语法是Bourne Shell语法的一个改进版本。在大多数情况下,Bourne Shell脚本可以被Bash正常地运行。

4.1.1、配置文件

  • /etc/profile :系统级的初始化配置文件,定义了一些环境变量,由登录Shell调用执行。
  • /etc/bashrc/etc/bash.bashrc : 不同发行版文件名不完全一致,每个交互Shell系统级别的启动脚本。定义了一些函数和别名。
  • /etc/bash.logout : 系统级的登录Shell清理脚本,当退出登录Shell时执行。部分Linux发行版默认没有此文件。
  • $HOME/.bash_profile$HOME/.bash_login$HOME/.profile : 用户个人初始化脚本。这三个只有一个会被执行,按照该顺序第一个存在的将被执行。
  • $HOME/.bashrc : 用户个人的交互式Shell启动脚本,定义了一些函数和别名。
  • $HOME/.bash_logout : 用户个人的登录Shell清理脚本,登录Shell退出时执行。

4.1.2、定制自己的Bash登录脚本

cat > ~/.bash_profile <<\EOF
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

red="\033[31m"
blue="\033[34m"
green="\033[32m"

# clear
echo -e "${blue}+-------------------------------------------------------------"
echo -e "${green}+         Welcome $(whoami) login bash shell"
# echo -e "+ Last login : $(lastlog -u $(id -un) | tail -n 1)"
echo -e "${blue}+-------------------------------------------------------------"
echo -e "$(uptime)"
echo -e "${blue}+-------------------------------------------------------------"
df -lh | grep -v 'tmpfs' | column -c 6 | awk '{printf "\033[22;32m%s\t%s\t\033[22;31m%s\t%s\t%s\n",$1,$6,$2,$3,$4,$5}'
echo -e "${blue}+-------------------------------------------------------------\n\033[39;49;0m"
EOF

在重定向<<EOF中添加\反斜杠不解析内容中的变量。

参阅:Linux cat 多行写入文件防止变量替换

效果:

94055-vmq4o8v3zd.png

配置不显示登录后的 Last login 提示信息:

修改 /etc/ssh/sshd_config 文件里边的 printlastlog 参数为 no 值即可(不存在直接添加)。

4.1.1、创建和使用别名

Bash的内置命令alias用于创建一个别名,需要注意这个命令创建的别名只在当前退出当前Shell以前有效。需要全局永久有效需要写入全局配置/etc/bashrc文件中,个人的需要写入~/.bashrc文件中。

## 查看当前有哪些别名
alias
## 创建别名格式
alias name='command'
## 例如
alias ll='ls -l'

注意:别名的使用虽然非常简单,但需要非常谨慎地使用别名替换标准命令。

Linux DevOps , 运维

暂无评论