• 观看《老男孩Linux课程day009》
  • 观看《老男孩Linux课程day010》
  • 观看《老男孩Linux课程day011》
  • 观看《老男孩Linux课程day012》

day009-010 四剑客补充、用户管理体系和堡垒机项目

别名

概述

  给命令设置别名,就是给命令设置一个昵称/爱称。比如经典的ll就不是一个命令,在根目录下找不到这一条命令find / -type f -name 'll',这一条命令实际上是ls -l

  别名应用在:

    1、给常用命令设置一个更简单的昵称;

    2、给危险命令设置一个防护提醒。

查看系统已有的别名

  用alias来查看或创建别名。

# 查看系统已有别名
alias
# 查看ll对应的原命令
alias ll

设置一个别名

  任务:一运行rm,就显示'rm is dangerous'

alias rm='echo rm is dangerous'
# 注意:这里=两边千万不要有空格!!!

  但现在删不了了,那如何删一个文件呢?

  方法一:**加一个反斜线\**(在回车上面),好像一个撬棍,敲一棒子就老实了。

  方法二:找到rm的绝对路径,用绝对路径使用它

# 加撬棍强制使用rm的原意
\rm test.txt
# 使用绝对路径
/bin/rm -f test.txt

  一般命令的别名都是临时的,重启或者重新登录就不起效果了。

  可以修改配置文件/etc/profile来让配置永久生效

# 在/etc/profile的结尾添加一行
tail -1 /etc/profile
# 下面是添加的内容
alias rm='echo rm is dangerouse'
# 退出后让配置文件生效
source /etc/profile
# 进入并注释掉~/.bashrc中rm已经配置的别名
vim ~/.bashrc

用户管理

概述

  Linux是一个多用户系统,大部分操作都用root实现,但所有人都用root容易造成混乱,且不安全。所以未来Linux会有很多用户,每个用户都有自己的用途,甚至为了服务的正常运行,还会有一些虚拟用户。

  Linux的用户都有自己的id,但是这个id有两个,一个是UID一个是GID。一般情况下,UID和GID要唯一。

    UID:用户ID,唯一的标记了每一个用户;

    GID:组ID,唯一的标记了用户属于哪一个用户组。

  按照UID和GID的大小可以对用户进行分类。站在系统的角度,只要UID为0,就认为是root用户

用户分类 分类方法(UID)
root UID=0
普通用户 UID>=1000,centOS7之后默认,需要手动创建,活动范围只有/home/张三//tmp/
虚拟用户 UID<1000,用于管理服务(有些服务的正常运行需要一个用户),对我们来说只是一个摆设

  注意:用UID判断是不是虚拟用户不是唯一标准。

用户相关的文件

用户相关文件 说明
/etc/passwd 存放用户信息
/etc/shadow 存放密码信息
/etc/group 用户组信息
/etc/gshadow 用户组密码信息

  注意:passwd里面不是密码信息!!!shadow里面才是密码信息!!!

/etc/passwd的详细内容

  以为分隔符,一共7列。

b7026c48e09ae01c04219a49f60f26a

  具体含义见下图:

c2def5e08b6cb8250196d2e343a59e2
/etc/shadow详细内容

  第1列是用户名,第2列是密码,第3列及以后是密码过期时间(默认不过期)。

d7860ba66082f156706620a8a7c3650
/etc/group详细内容

  第1列是用户组的名字(默认和用户名一致),第2列是密码,第3列是GID,第4列是空。

7c379782a907552b20e18996bc6ba96

用户管理指令

  就是增删改查用户。

增加

  创建用户第一步:用useradd

useradd选项 说明
-u 指定用户uid
-s 指定命令解释器,默认是/bin/bash
-M 不创建家目录
# 创建用户wang
useradd wang
# 查看etc/passwd、etc/shadow、etc/group中分别增加了什么内容
tail -n2 /etc/passwd /etc/shadow /etc/group
# 创建用户mysql,指定UID为1314,指定命令解释器为/sbin/nologin,不创建家目录
useradd -u 1314 -s /sbin/nologin -M mysql
# 查看mysql的id
id mysql

# 注意:此时如果查看mysql的passwd,会发现依然显示家目录
grep 'mysql' /etc/passwd
# 但实际上只是显示,并不存在,用ll查看会发现不存在这一个目录
ll /home/mysql

  创建用户第二步:修改密码passwd(你看,这里passwd又是密码了)。

# 修改当前用户密码
passwd
# 修改指定用户密码
passwd wang

  上面是交互式修改密码,一问一答,但是有时候要修改100个用户的密码怎么办?这时就要用非交互式的方式来改密码了。

passwd选项 说明
–stdin 非交互式设置密码
# 非交互式修改wang的密码(通过管道)
echo 123456 | passwd --stdin wang

  注意:非交互式只能root使用。

  切换用户用 su - zhangsan(su是switch user)。

# 切换到zhangsan用户
su - zhangsan

  注意:这里-的意思是切换用户的时候,更新用户的配置与环境变量。

  退出当前用户用ctrl+d,也可以试试logout

删除

  尽量避免删除用户,可以通过注释将用户屏蔽。

  删除用户用userdel

# 删除zhangsan用户
userdel zhangsan
# 查看是否还有zhangsan的家目录
ll -d /home/zhangsan/

  虽然我们删除了,但依然会有zhangsan的家目录,这是因为不加参数的userdel并不会删除用户家目录。

  如果想要一并删除家目录,加上-r选项,这个一定要慎重使用!!!

  最好的删除用户的方法:利用root,vim编辑/user/passwd,把不想要的用户给注释掉。

修改

  passwd是修改密码。

  还有一个修改信息的命令usermod,创建的时候设置的信息都可以修改,但是很少用。

# 在root身份下,把wang的解释器改为nologin
usermod -s /sbin/nologin wang
# 在root身份下,把wang的UID改为1024
usermod -u 1024 wang
# 在root模式下,把wang加入root组
usermod -G root wang
# 查看wang属于哪个组
id wang
# 发现wang有两个组,一个自己的,一个root组
# 把root组去掉,用引号把附加组去掉
usermod -G '' wang
id wang
查找
# 查看wang的GID和UID信息
id wang
# 查看当前是哪个用户
whoami
# Linux最短命令,查询系统时间、负载和当前连接用户的基本情况
w

  Linux最短命令:w,没有之一,用来查询谁登录了系统,并且正在干嘛。

8319f1b4a1bc9574f2c8fd606921af1

  图上可以读到,w结果的第一行相当于uptime

  还有lastlastlog两个命令可以查看用户最近的登录情况。

# 显示所有用户每一次的登录情况
last
# 查看所有用户最近一次的登录时间
lastlog

sudo给用户权限

概述

  sudo用来给普通用户授以root权限,授权sudo需要用root用户,使用sudo的是普通用户。

sudo给非管理员精确授权

  利用visudo命令来授权配置sudo,背后本质是用vi修改了/etc/sudoers文件。

# root授权配置sudo
visudo

  然后会打开/etc/sudoers文件的vi窗口,输入set nu显示行号(关闭行号是set nonu),在第100行后可以添加新的用户和对应的root权限命令。

ec5db652b82dd7a750f68bfa4fd4b70
# 给wang用户catheadtail、grep这几个命令的root权限
# 在第100行下面比这第100行输入
wang ALL=(ALL) /bin/cat,/bin/head,/bin/tail,/bin/grep
#检查配置的结果
grep wang /etc/sudoers

  注意:后面写的是命令的路径,一般都在/bin/下,可以用which查询一下。

  之后wang用root身份使用这些命令的时候,需要在前面加上sudo,否则还会提示权限不够。

  并且第一次使用会有提醒。

516d90cee357a48e6049287415476b2

  对于使用者来说,查看自己有哪些sudo权限用sudo -l,返回结果的第二段就是。

sudo给管理员广泛授权

  以上是给非管理员的精确授权,但有时有这样的需求:我是管理员,为了安全避免经常使用root,我需要一个类似root权限的普通用户wang。此时visudo,把最后改成NOPASSWD:ALL,这样以后使用wang用户的所有root级权限都不用输入密码了。

wang	ALL=(ALL)	NOPASSWD:ALL

堡垒机和跳板机

概述
258202a9123d88606733bb0287ee960

  跳板机和堡垒机是未来工作环境中远程连接必备的设备或服务,它要求我们只能先连接堡垒机或跳板机,再操作服务器,用于实现对操作的记录和回放。

  跳板机:简单的跳板工具,用于记录用户的行为,位于用户和服务器之间,不能绕过;

  堡垒机:加入了审计功能的跳板机,可以回放各种操作。

  跳板机/堡垒机可以是自己写的脚本,或者是一个服务软件,也可以是一台虚拟机、一台实体机,甚至是一台专用的设备。

堡垒机产品
开源软件 Jumpserver,Teleport
物理硬件设备 购买
云服务 购买(阿里云、华为云等都有)
teleport安装

  先去官网下载后缀为.tar.gz的安装包,然后上传到服务器安装。

# 检查文件大小
ll -h teleport-server-linux-x64-3.6.4-b3.tar.gz
# 解压
tar xf teleport-server-linux-x64-3.6.4-b3.tar.gz
# 查看解压后的目录
ll
# 进入目录并安装
cd teleport-server-linux-x64-3.6.4-b3/
./setup.sh
# 根据提示进行安装
# 出现set installation path直接回车
# 安装完成会提示ALL DONE
# 检查teleport服务是否运行
/etc/init.d/teleport status
# 出现两个running就对了
# 关闭、开启、重启teleport服务
/etc/init.d/teleport stop
/etc/init.d/teleport start
/etc/init.d/teleport restart

  teleport服务的默认端口:7190。

# 可以用telnet查看端口通不通
telenet ip地址 7190

  之后我们要关闭防火墙和selinux,否则用不了。

# 关闭防火墙
systemctl stop firewalld
systemctl disable fiewalld
# 查看防火墙是否关闭的状态
systemctl status firewalld.service

# 关闭selinux(工作中基本都关闭)
# 先临时关闭
setenforce 0
# 再彻底关闭
vim /etc/selinux/config
# 修改中间那一行没有注释的
SELINUX=disabled
# 保存退出
# 查看是否关闭
getenfore
telport配置

  之后访问ip+端口就可以访问啦!

  初次登访问,需要设置用户id和密码。

d8d58cc2ae965caf61ea9763b0c04b9

  配置完成后刷新一下,就可以进入登录页面了。

22e4656b56d077e2e730690316164b5

  之后可能提示下载一个助手,作用是可以用Windows远程连接来控制堡垒机。

  让teleport去连接别的机器是【资产】,在其中选择【主机与账号】,右上角【添加主机】。

d37b1af8dfc0ea14258ac58718b57e7

  添加了主机之后,在右侧找到【操作】-【管理远程账号】来设置登录Linux的用户和密码。

2ba94729a6bf601ffbf283ccdc960c4

  可以添加多台主机,就是经过堡垒机可以监控多台机器。

  之后在【运维】-【主机运维】里,就可以用ssh来访问了,但是不如让teleport调用Xshell来访问。

  在teleport助手里,找到【本地配置】-【本地SSH客户端配置】,把客服端选择【Xshell】,路径选择Xshell.exe的安装路径,右上角会提示一堆成功,此时再次打开就变成Xshell了。

  teleport真正的功能在左侧的【审计】-【会话审计】,里面记录了所有的连接记录,可以查看日志并回放所有操作。

  配置好了之后,都可以通过堡垒机来访问了。

  问题:Linux会拒绝你其他私自访问,强制要求使用堡垒机吗?

  答:课上没有讲,1)如果是实体的堡垒机或者额外的虚拟堡垒机,应该对Linux进行配置,设置为只允许堡垒机的ip访问自己;

  2)如果是堡垒机软件,比如teleport直接安装在了目标Linux上,此时需要在Teleport中配置访问策略,确保所有对Linux服务器的访问都必须经过Teleport进行认证和授权。(来自AI回答,可行性有待验证)

  具体配置步骤暂时还没有学习到,等以后需要了再去学。

  多想想那个图!!!

day011-012 Linux-12位权限体系

权限管理概述

  Linux通过rwx三个权限控制和保护系统,组成了9位权限。

  Linux权限体系中还有3位特殊权限,组合起来就是12位权限。

  Linux这种简单的权限与用户管理构成了Linux系统的安全防护体系。

Linux权限计算

rwx

权限 含义
r read 可读
w write 可写
x execute 可执行

  并不是每个文件都需要x权限,一般是命令或者脚本才需要。

何为9位权限

  Linux下任何一个文件与用户的关系有三种。

文件和用户的关系 含义
所有者 文件属于该用户
用户组(家庭) 文件属于同一用户组
其他人(陌生人) 文件不属于该用户,也不属于同一用户组

  9位权限在ll等命令中可以显示出来,在第一列的-.之间的9位,比如rwxr-xr-x

19d6a796eb34dd8a5ce478e3cd5413b

如何计算权限

  为了更方便的使用权限,给每个权限设置了数字,未来可以通过数字来表示对应的权限。

权限 含义 数字
r read 可读 4
w write 可写 2
x execute 可执行 1
- 无权限 0

  注意:可读是最常见的权限,对应的最大的数字4。

  每一部分相加之后就是它的权限值,比如上图对应的权限数字就是755。

  数字和字母一一对应,同一权限只能有一个,不可能出现4=2+2的情况。

字母 数字
-rwxr-xr-x 755
-r–r–r– 444
-r-xr-xr– 554
-rwx—— 700

修改权限

  chmod命令:chmod 数字 文件名修改权限。

  chown命令:chown 新的所有者.新的用户组 文件名修改文件所有者和用户组。

# 修改wang.txt的权限为755
chmod 755 wang.txt
# 修改wang.txt的所有者和用户组改为ye ye
chown ye.ye wang.txt

  还有一种按照user、group、others的首字母来分别添加权限的方法。

# 给/etc/rc.d/rc.local的所有用户都加执行权限,以下所有写法效果都一致
chmod +x /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local
chmod ugo+x /etc/rc.d/rc.local
chmod u+x,g+x,o+x /etc/rc.d/rc.local

权限与文件、目录

概述

  权限对于文件和目录的概念是不一样的。

  x对于目录是最低级的,相当于可进入

  x对于文件是执行,需要更低级的r权限;w对于文件是增删改,r是查,都需要更低级的x可进入权限。

权限 文件 目录
r 是否可读取 是否可查看,需要x
w 是否可修改,需要r 是否可增删改,需要x
x 是否可执行,需要r 是否可进入,最低级

测试文件权限

# 测试文件的r权限
cat wang.sh
# 测试文件的w权限
echo 'hi'>>wang.sh
# 测试文件的x权限
./wang.sh

  注意:如果一个文件只有w权限没有r权限(极不推荐),则最好只通过echo的方式写入内容,如果通过vi,强制退出后,原来的内容会被vi的内容全部替代

测试目录权限

# 测试目录的r权限,如果没有r权限,ll后只能显示目录名字,目录的属性信息都是'?'
ll /wang/
# 测试目录的w权限
touch /wang/wang.txt
# 测试目录的x权限
cd wang

  注意:如果要创建、删除或重命名文件,对该文件所在的目录必须要有rwx权限。

系统默认权限

  Linux系统通过umask命令控制文件和目录的默认权限。

# 查看umask
umask
# 一般输出0022,我们取后三位022

  一般来说,普通文件给的权限是666(文件一般不算可执行的,因为可执行的占少数),普通目录给的权限是777。

  文件和目录最大的权限减去umask的值,文件umask的某一位如果是奇数,这一位减去umask后还再要+1。

  root用户创建文件的默认权限:666 - 022 = 644,创建目录的默认权限:777 - 022 = 755。

  umask的值给的越大,系统创建后的权限就越少,也就相对越安全。

# 修改umask为012
umask 012

  如果umask改为012,则root创建一个文件后权限变成了664,创建一个目录的权限是775。

  一定要改回去!!!

Linux权限控制与系统安全

概述

  通过权限控制让系统安全:对于搭建网站来说,服务器权限的设置应该遵守最小化原则,既要保证网站可以正常访问,也要保证网络安全。

  推荐的网站部署权限配置为:文件是644,目录是755。

  网站在运行的时候需要用户,不推荐直接使用root用户,推荐自己创建用户或者虚拟用户,比如nginx。

单台机器

  网站运行的时候常用www用户,网站程序代码在/app/code/www目录中,应该如何设置权限?

  网站核心文件和目录的所有者应改为root/root,文件的权限应为644,目录的权限应为755,避免使用root用户来日常操作。

  对于要上传和更新的目录,例如/app/code/www/upload应把所有者改为www/www,文件权限为644,目录权限为755,使用www来日常维护操作。

# 如果不小心把网站目录所有权限都改为了777,怎么恢复?
find /app/code/www -type f |xargs chmod 644
find /app/code/www -type d |xargs chmod 755
# 如何把网站目录的所有文件和子目录的归属者都改为root/root
chown -R root.root /app/code/www

集群

  集群以后再说。

3个特殊权限

  知晓特殊权限就行,未来工作中不会使用。

1729410616293
特殊权限 判断 含义 例子
set uid(或者是suid) user位上有一个s,对应数字是4 运行这个命令的时候相当于使用了命令所有者的权限 passwd命令
set gid(或者sgid) group位上有一个s,对应数字是2 运行这个命令的时候相当于使用了用户组的权限
sticky(粘滞位) other位上有一个t,对应数字是1 只给目录使用,每个用户都可以在该目录下创建内容,但每个用户只能管理自己的文件 /tmp/
# set uid的例子
# 正常情况下ls命令的权限是755,对于zhangsan,是无法读取wang创建的文件的
# 查看ls命令的权限
ll /bin/ls
# 返回-rwxr-xr-x. 1 root root ...
# ls默认普通用户不能看别人的家目录
# ls命令设置一个suid权限
chmod u+s /bin/ls
# 再次查看ls的权限
ll /bin/ls
# 这是可以发现变成了-rwsr-xr-x. 1 root root ...
# 这时,不管谁执行ls命令的时候相当于是root用户(ls的所有者)在执行了
# 切换到wang用户
su wang
# 进入/tmp/文件夹(这个文件夹下有其他用户的文件)
# 用非root身份查看/tmp/root/下的内容
ls /root
# 发现此时可以查看
# 这是一个非常危险的行为
# 最后一定要回到root把这个去掉
su -
chmod u-s /bin/ls

特殊属性

  应用场景:预防重要文件或命令被修改。

  查看这种属性:lsattr

  修改这种属性:charrt,a属性-append追加,i属性-immutable不灭的。

# 新建一个wang.txt文件
mkdir wang
# 查看特殊属性
lasttr wang
# 增加一个只能追加的特殊属性
chattr +a wang.txt

day012 软件包管理

Linux常见的软件安装方式

  Linux下面的软件包格式为:rpm格式(红帽系列、CentOS、银河麒麟)或deb格式(Debian、Ubuntu)。

软件安装方式 说明 场景
yum (CentOS) / apt (Ubuntu) 最自动化,通过网络下载软件包,替我们安装,如果有依赖会自动下载依赖并安装 联网环境,离线可以自建yum库
rpm (CentOS) /dpkg(Ubuntu) 半自动,下载rpm包后自己本地安装,缺少依赖需要自己解决 离线环境,删除软件包的时候
编译安装 可以自定义安装,漫长,缺少依赖需要自己解决 企业自定义安装的场景,给现在软件增加功能的时候
二进制安装 并非每个软件都有,一般数据库、k8s等用 比编译安装强一点,但是有限考虑yum和rpm安装,其次再考虑二进制,而且软件不一定有二进制安装的方法

rpm安装方式

rpm安装

  参数是-ivh,-i(install安装),-v(显示过程),-h(人类可读)。

# 安装rpm包的案例
# 先创建一个目录
mkdir -p /server/tools
# 再用wget下载
wget --no-chesk-certificate -P /server/tools/ https://mirrors.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.0-1.el7.x86_64.rpm
# 安装
rpm -ivh /server/tools/zabbix-agent2-6.0.0-1.el7.x86_64.rpm
# 报错发现有依赖,依赖也是一样的,要么用yum要么rpm来安装
yum install -y pcre2
# 再次安装
rpm -ivh /server/tools/zabbix-agent2-6.0.0-1.el7.x86_64.rpm
# 检查是否安装成功,rpm -qa是查询所有安装的软件包
rpm -qa | grep zabbix
# 或者下方法,但是必须把软件包名字写全
rpm -qa zabbix-agent2

  wget下载指定内容,默认下载到当前目录,-P 下载到指定目录,–no-chesk-certificate如果下载地址有https,必须加这个选项否则会报错。

rpm升级软件

# 查看已安装的软件装到哪里了
rpm -ql telnet

  升级需要先下载最新的版本。

  升级的选项是-Uvh,会自动把老版本升级到新版本并删掉老版本。

# 下载新版本
wget --no-chesk-certificate -P /server/tools/ https://mirrors.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
# 升级
rpm -Uvh /server/tools/zabbix-agent2-6.0.7-1.el7.x86_64.rpm

rpm删除软件

  这里是删除对应的软件包,建议删除都使用rpm删除,另外非必须不建议删除,把服务关闭就行了。

  删除的参数是-e(erase)。

rpm -e zabbix-agent2

编译安装

概述

  编译安装五步走:安装依赖-配置-编译-安装-测试。

  编译安装用在:1、自定义的情况,2、yum安装不上,rpm又没有包的情况。

  编译安装的本质是:把源代码(c语言)编译成命令。

  编译安装最难的是安装依赖,因为不知道有什么依赖。

上传软件包并安装依赖

  先上传压缩包,然后解压,进入解压后文件夹,然后安装依赖。

# 解压
tar xf cmatrix-1.2a.tar.gz
ll
# 进入目录
cd cmatrix-1.2a/
ll
# 安装依赖
yum -install -y ncures-devel

配置

  配置的命令是./configure

  默认安装到/usr/local/下。

  注意:之后的步骤一定要在代码目录下面运行!!!

# 查看是否有./configure
ls -l ./configure
./configure
# 之后屏幕会输出一堆内容
# 查看是否执行成功
echo $?
# 如果屏幕输出0,则上一步执行成功

编译

  直接运行make命令就行。

make

安装

make install

测试

  运行cmatrix,检查结果

cmatrix

  可以清理掉软件包和解压的目录。