Linux别名与用户管理体系

568 阅读7分钟

一、别名

1、概述

别名,给命令进行设置

一般用于给命令设置一个昵称/爱称

主要应用场景:

  • 给常用命令设置个快捷方式,使用简单方便
  • 危险命令加上的防护措施

查看系统已有的别名

[root@nanjing ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@nanjing ~]# alias ll
alias ll='ls -l --color=auto'

2、设置别名

例如,企业中比较敏感的rm命令,可以输出提示

echo rm is dangrous,please use mv

设置命令格式:alias 命令=“昵称”

[root@nanjing ~]# alias rm=`echo rm is dangrous,please use mv`
[root@nanjing ~]# rm
rm is dangrous,please use mv
[root@nanjing ~]# alias rm
alias rm='echo rm is dangrous,please use mv'

如果真的需要使用rm,我们又应该如何去取消呢?

1、使用绝对路径

2、使用反斜线 \命令

[root@nanjing ~]# find / -name "rm" 
/usr/bin/rm
[root@nanjing ~]# /usr/bin/rm txt.tar.gz
[root@nanjing ~]# \rm txt.tar.gz 

重新链接就失效了,那么我们如果想要永久失效需要怎么做呢?

一般命令行的操作都是临时,重启或重新登录失效了。

这时候我们要记得让配置永久生效,修改配置文件

/etc/profile 是一个系统级别的 shell 配置文件,通常用于设置全局的环境变量和执行系统范围的初始化任务。这个文件在 Linux 系统中广泛使用。

用户登录后,系统还可能读取用户的个人配置文件(如 ~/.bashrc)来设置用户特定的环境和配置。(~表示当前目录下,比如root /root目录下)

1、修改配置文件 ~/.bashrc(当前用户生效)

2、 /etc/profile(全局)

#修改/etc/profile
vim /etc/profile
#最后一行添加alias rm='echo rm is dangerous.please use mv'#让配置文件生效(source目前只适用于profile文件)
source /etc/profile
​
#检查别名
alias rm
​
--------------------------------
#未来除了rmcpmv命令别名,还要配置下~./bashrc文件,否则不生效
#因为系统还要读取用户的个人配置文件~/.bashrc
​
vi ~/.bashrc
注释掉 #alias rm='rm -i'
​
#测试rm命令

二、用户管理

1、用户管理概述

各种系统中都有用户,win(administrator),Linux系统中是有各种类型的用户的.

未来大部分操作使用root实现,进行系统管理的时候都使用root造成管理混乱。

推荐使用普通用户,提升系统安全。

简单来说:未来Linux系统会有各种的用户,每个用户都有自己的用途,root最高权限用户,普通用户,虚拟用户。

那么Linux是怎么给这些用户做标记的呢?唯一性

  • UID user id 用户的id号,身份证号码
  • GID group id 用户组id号,户口本号码
用户分类分类方法(uid)
rootuid是0
普通用户uid≥1000,手动创建,无法对系统进行更改,只有家目录权限
虚拟用户uid<1000,也叫傀儡用户。用于服务,进程使用的用户,无法直接使用。

2、用户相关文件

Linux下面每创建1个用户,一般会影响下面几个文件

用户相关文件说明
/etc/passwd存放用户信息
/etc/shadow存放用户密码
/etc/group用户组信息
/etc/gshadow用户组密码信息,几乎不会给用户组设置密码

image-20240126205047611

/etc/shadow

第1列是用户名

第2列是密码

第3列及以后是密码过期时间,默认是不过期

/etc/group

root:x:0:

bin:x:1:

第1列是用户组的名字:默认是和用户名一致

第2列是密码

第3列是gid

第4列是空,或者这个组里面有什么额外的用户

[root@nanjing ~]# useradd shishuwu
[root@nanjing ~]# useradd shishu
[root@nanjing ~]# tail -n2 /etc/passwd /etc/shadow /etc/group
==> /etc/passwd <==
shishuwu:x:1000:1000::/home/shishuwu:/bin/bash
shishu:x:1001:1001::/home/shishu:/bin/bash
​
==> /etc/shadow <==
shishuwu:!!:19748:0:99999:7:::
shishu:!!:19748:0:99999:7:::
​
==> /etc/group <==
shishuwu:x:1000:
shishu:x:1001:

3、用户管理指令

1)增加

useradd选项说明
-u指定用户uid
-s指定命令解释器,默认就是/bin/bash
-M不创建家目录
#案例一 创建用户maliy指定uid 1314指定命令解释器/sbin/nologin不创建家目录创建虚拟用户
[root@nanjing ~]# useradd maliy -u 1314 -s /sbin/nologin -M
[root@nanjing ~]# id maliy
uid=1314(maliy) gid=1314(maliy) 组=1314(maliy)

虚拟用户:命令解释器是/sbin/nologin和不创建家目录

passwd选项说明
--stdin非交互式密码
#案例二 非交互式修改密码,用于批量修改密码.(只能root用)
#正常用passwd 用户,需要输入密码,但是要改100个用户的密码非常不方便所以有了
[root@nanjing ~]# echo 1 | passwd --stdin shishu
更改用户 shishu 的密码 。
passwd:所有的身份验证令牌已经成功更新。

su切换用户

su - 用户

-代表切换用户时候,更新用户的配置和环境变量

Ctrl + d退出当前用户

[root@nanjing ~]# su - shishu
[shishu@nanjing ~]$ pwd
/home/shishu

image-20240126214332281

2)删除

尽量避免使用,通过注释这个用户信息实现。⚠️

userdel选项说明
默认不会删除家目录和相关文件,比如邮箱
-r删除用户及家目录 ⚠️
[root@nanjing ~]# userdel shishu 
[root@nanjing ~]# ll -d /home/shishu
drwx------ 4 1001 1001 4096 1  26 21:39 /home/shishu

删除用户推荐做法

[root@nanjing home]# tail -n2 /etc/passwd
shishuwu:x:1000:1000::/home/shishuwu:/bin/bash
maliy:x:1314:1314::/home/maliy:/sbin/nologin
[root@nanjing home]# id maliy
uid=1314(maliy) gid=1314(maliy) 组=1314(maliy)
[root@nanjing home]# vi /etc/passwd
[root@nanjing home]# tail -n2 /etc/passwd
shishuwu:x:1000:1000::/home/shishuwu:/bin/bash
#maliy:x:1314:1314::/home/maliy:/sbin/nologin
[root@nanjing home]# id maliy
id: maliy: no such user

3)修改

passwd 修改密码

4)查看

id 查询用户的uid,gid,用户组信息,检查用户是否存在

whoami 查询当前用户的名字

w 查询谁登录了系统并且正在干啥,系统运行时间,负载信息(代替了uptime命令。tty终端连接,pts是ssh链接)

[root@nanjing home]# uptime
 22:28:57 up 19 days,  6:14,  2 users,  load average: 0.00, 0.03, 0.05
[root@nanjing home]# w
 22:29:04 up 19 days,  6:14,  2 users,  load average: 0.00, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    112.39.72.161    20:02    0.00s  0.09s  0.00s w
root     pts/1    112.39.72.161    20:02    2:26m  7.21s  7.19s top

image-20240126222723560

last 显示所有用户的登录信息。

[root@nanjing home]# last
root     pts/2        111.229.205.81   Fri Jan 26 22:16 - 22:16  (00:00)    
root     pts/1        112.39.72.161    Fri Jan 26 20:02   still logged in   
root     pts/0        112.39.72.161    Fri Jan 26 20:02   still logged in 

lastlog 所有用户最近1次的登录信息。

[root@nanjing home]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/2    111.229.205.81   五 1月 26 22:16:30 +0800 2024
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**

如果异地IP登录服务器,本机用last查看,而云厂商自动配置了异地登录告警

image-20240126223701848

4、故障案例-命令行-bash-4.2$

1)/etc/skel/目录

这个目录是Linux新用户家目录的一个模板。

每当我们创建用户的时候,系统会把/etc/skel/下面所有内容,复制到新用户的家目录下面。

其他应用:创建通知文件,告知每个新用户,禁止使用rm等危险命令。

[root@nanjing ~]# ll -a /etc/skel
总用量 28
drwxr-xr-x.  2 root root  4096 8   7 2020 .
drwxr-xr-x. 95 root root 12288 1  27 11:29 ..
-rw-r--r--   1 root root    18 4   1 2020 .bash_logout
-rw-r--r--   1 root root   193 4   1 2020 .bash_profile
-rw-r--r--   1 root root   231 4   1 2020 .bashrc

2)原因

命令行:
-bash-4.2$
用户家目录没有,用户家目录下面的配置文件没了 ~/.bashrc ~/.bash_profile

3)解决

通过/etc/skel/.bash*复制并解决

/etc/skel 目录所有新用户的家目录的模板

cp /etc/skel/.bash* ~

4)复现

\rm -rf /home/shishuwu/*

5)带不带*的小对比

rm -rf /home/shishuwu/

这个命令会递归地删除 /home/shishuwu/ 整个目录将被完全删除。目录及其所有内容,包括子目录和文件。

rm -rf /home/shishuwu/*

这个命令会删除 /home/shishuwu/ 目录下的所有文件和子目录,但不会删除目录本身。

4)有趣的bug * 身世之谜

遇到了一个GPT都不会的bug——>那就是 * 身世之谜

[root@nanjing ~]# ls -la /etc/skel/
总用量 28
drwxr-xr-x.  2 root root  4096 8月   7 2020 .
drwxr-xr-x. 95 root root 12288 1月  27 11:29 ..
-rw-r--r--   1 root root    18 4月   1 2020 .bash_logout
-rw-r--r--   1 root root   193 4月   1 2020 .bash_profile
-rw-r--r--   1 root root   231 4月   1 2020 .bashrc
为什么这命令可以正确执行cp /etc/skel/.bash* /home/shishuwu/
但是这个命令显示cp /etc/skel/* /home/shishuwu/
cp: 无法获取"/etc/skel/*" 的文件状态(stat): 没有那个文件或目录

突然发现这个问题,我还纳闷cp命令不支持复制隐藏文件吗?

查询定义发现:cp 将会复制目录中的所有文件,包括隐藏文件。这包括子目录、文件和隐藏文件。

那么为啥还有报错「没有那个文件或目录」呢?

百思不得其解,GPT瞎回答,我就Goole了一下,发现了一个博文:

linux cp注意,Linux下Cp命令的注意事项

博主通过实验的方式巧妙的解释了这个问题。

结论:'*'可以代表任意,但是不能代表 '.' 开头的文件

5、sudo权限管理

Linux系统开发人员要看日志,如何创建用户与授予权限?

  • root权限,权限太大
  • 普通用户,权限太小
  • 日志平台没法看
  • 得出:普通用户+尚方宝剑以root权限运行命令

这时候请使用sudo(提权)

这时候可以通过普通用户+sudo权限实现这个目标

授予普通用户以root权限运行,cat,head/tail,more/less,grep

sudo概述: 用于给普通用户配置的命令,配置了sudo权限后普通可以以root权限运行命令。

1)进行sudo授权与使用

授权sudo,需要使用root。

#root授权配置
​
visudo 
#背后修改 vi /etc/sudoers#普通用户使用
sudo + 命令
#案例一 授予shishuwu用户,以root权限运行cat,head,tail,more,less,grep权限
[root@nanjing ~]# visudo
[root@nanjing ~]# cat /etc/sudoers | grep -n shishuwu
101:shishuwu     ALL=(ALL)       /usr/bin/cat, /usr/bin/head, /usr/bin/tail, /usr/bin/more, /usr/bin/less
​
[root@nanjing ~]# su - shishuwu 
[shishuwu@nanjing ~]$ sudo tail /var/log/secure
​
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
​
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
#输入密码
[sudo] password for shishuwu:#查看普通用户拥有的sudo权限
sudo -l 
#查看当前用户有什么sudo权限,关注最后2行即可

运维创建一个自己用

#案例二 授予shishuwu运行所有命令(root)并且不需要输入密码
[root@nanjing ~]# cat /etc/sudoers | grep "SRE"
SRE    ALL=(ALL)      NOPASSWD:  ALL
[root@nanjing ~]# sudo tail /var/log/secure

2)小结

为何使用sudo? 以普通用户权限进行管理,拥有部分的root权限。

如何用? root进行授权: visudo 普通用户下面进行使用: sudo 命令 。

未来还有别的方案可以用(堡垒机/跳板机)。

企业使用:

用一个账户登录机器,切换到root用户

[SRE@nanjing ~]$ sudo su - root
[root@nanjing ~]# #必须是root的所有权限
[shishuwu@nanjing ~]$ sudo su - root
[sudo] password for shishuwu: 
Sorry, user shishuwu is not allowed to execute '/bin/su - root' as root on nanjing.

6、 堡垒机与跳板机

跳板机,堡垒机是未来工作环境中,远程连接必备设备或服务,要求我们只能连接堡垒机或跳板机,然后通过它在对服务器进行管理与控制。

跳板机:简单的跳板工具.

堡垒机:跳板工具+审计功能.

堡垒机茶品
开源软件Jumpserver,Teleport.
物理硬件设备购买
云服务阿里云、腾讯云、华为云

image-20240127163009097

三、实战Teleport

Teleport 堡垒机官网

1、下载安装包,如果下载不是30M左右,本机下载并且上传。

wget --no-check-certificate https://www.tp4a.com/download/get-file/teleport-server-linux-x64-3.6.4-b3.tar.gz

2、解压并安装,--[ ALL DONE ]--结束

tar xf teleport-server-linux-x64-3.6.4-b3.tar.gz
cd teleport-server-linux-x64-3.6.4-b3/
./setup.sh

3、检查是否运行

[root@nanjing ~]# /etc/init.d/teleport status
teleport web server is running.
teleport core server is running.
​
关闭或重启命令
/etc/init.d/teleport stop
/etc/init.d/teleport start
/etc/init.d/teleport restart

4、关闭防火墙和SElinux

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
​
#关闭SElinux
setenforce 0 #临时关闭
vim /etc/selinux/config
找出中间的行SELINUX=enforcing 修改为SELINUX=disabled
​
#检查
[root@nanjing ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@nanjing ~]# getenforce
Disabled
#结果是permissive或disabled都表示关闭
#如果是enforcing表示开启

5、浏览器访问http://teleport服务器IP:7190/

image-20240127171631280

6、按照流程,审计流程

image-20240127173240500