泷羽sec专题课笔记-- Linux基础(2)--账户/权限/日志

  本笔记为 泷羽sec 《红队全栈课程》学习笔记,课程请可自行前往B站学习,课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等,请使用该课程、本笔记以及课程和笔记中提及工具的读者,遵守网络安全相关法律法规,切勿进行违法违规违纪的操作。

写在最前面的话,我们为什么要学习网络安全这门技术:

  • 维护国家安全

  防范网络攻击:网络安全威胁已成为国家安全的重要挑战。学习网络安全有助于识别和防范来自国内外的网络攻击,防止敌对势力通过网络手段窃取敏感信息、破坏关键基础设施或干扰社会正常运作。
  保护关键基础设施:现代社会高度依赖网络技术,金融系统、交通网络、电力供应等关键基础设施都依赖于稳定的网络环境。掌握网络安全知识有助于保护这些基础设施免受网络攻击,确保国家的正常运转。

  • 促进经济发展

  保障数字经济安全:数字经济已成为国家经济增长的重要引擎。通过学习网络安全,可以保障数字经济的健康发展,防止数据泄露和网络犯罪对经济活动的干扰。
  增强国际竞争力:在全球化的背景下,网络安全技术水平直接影响国家的国际竞争力。掌握先进的网络安全技术和策略,有助于提升国家在全球数字经济中的地位。

  • 提升社会稳定

  防范社会风险:网络犯罪和网络恐怖主义对社会稳定构成严重威胁。学习网络安全有助于及时发现和应对这些风险,维护社会的和谐与稳定。
  保护公民权益:网络安全直接关系到公民的隐私权和信息安全。通过学习网络安全,可以更好地保护公民的合法权益,增强公众对政府和企业的信任。

  • 推动科技进步

  创新安全技术:网络安全领域的技术创新不断推动信息技术的进步。学习网络安全有助于推动新技术的研发和应用,提升国家在科技领域的整体实力。
  促进国际合作:网络安全是全球性问题,需要各国共同努力应对。通过学习网络安全,可以参与国际网络安全合作,共同制定国际标准和规范,提升全球网络安全水平。

  • 强化法治建设

  完善法律法规:学习网络安全有助于推动和完善相关法律法规的制定和实施,确保网络安全工作有法可依、有章可循。
  提升执法能力:掌握网络安全知识可以提升执法部门的网络侦查和取证能力,有效打击网络犯罪,维护法律权威。

  • 培养专业人才

  构建人才梯队:网络安全领域需要大量高素质的专业人才。通过系统学习和培训,可以培养出一批具备专业知识和实战经验的网络安全专家,为国家的网络安全事业提供坚实的人才保障。

  总之,学习网络安全不仅是个人职业发展的需要,更是维护国家安全、促进经济发展、保障社会稳定和推动科技进步的重要手段。通过不断提升网络安全意识和能力,我们可以更好地应对日益复杂的网络安全挑战,为实现国家的长期稳定和发展贡献力量。


以下为linux基础(1)视频对应的内容   视频传送门 ==>  linux基础(1)_哔哩哔哩_bilibili   约23分钟左右处


一、Linux 账户数据相关文件

/etc/passwd

/etc/shadow

/etc/group

1、/etc/passwd

  该文件在 Linux 系统中用于存储关于系统用户账户的信息。每一行代表一个用户账户,每一行由多个字段组成,我们使用cat 等命令可以查看到文件的内容,具体如下:

┌──(kali㉿kali)-[~]   # head -3 表示读取文件前3行
└─$ sudo head -3 /etc/passwd   
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
1用户名(Username)用户登录系统时使用的名字‌
2密码占位符(Password)现代 Linux 系统通常不在 /etc/passwd 文件中直接存储用户密码。取而代之的是,这里通常会有一个占位符(如 x),而实际的加密密码存储在 /etc/shadow 文件中
3用户ID(User ID, UID)这是系统内部用于识别用户的数字ID。0 通常表示 root 用户(超级用户),1-999 通常用于系统账户,1000 及以上通常用于普通用户账户。
4组ID(Group ID, GID)这是用户所属的主要组的ID。用户还可以属于其他组,但这些信息存储在 /etc/group 文件中。
5用户全名或描述(Full Name or Description)这通常是用户的全名或者是对用户账户的简短描述。
6用户主目录(Home Directory)一般也叫家目录,这是用户登录系统后默认进入的目录,也是用户个人文件通常存放的地方。
7默认Shell(Default Shell)这是用户登录系统后默认运行的命令解释器或程序。对于普通用户,这通常是一个 Shell(如 /bin/bash/usr/bin/zsh 等)。对于某些系统账户(如 daemonbin),这可能是 /usr/sbin/nologin,表示不允许这些账户通过常规方式登录。

2、/etc/shadow

  该文件在 Linux 系统中用于存储关于系统用户账户的密码信息。与 /etc/passwd 文件类似,每一行代表一个用户账户,每一行由多个字段组成,这些字段由冒号 (:) 分隔。

┌──(kali㉿kali)-[~]
└─$ sudo head -3 /etc/shadow
root:*:19953:0:99999:7:::
daemon:*:19953:0:99999:7:::
bin:*:19953:0:99999:7:::
1用户名(Username)这是与 /etc/passwd 文件中的用户名相对应的用户登录名
2加密密码(Encrypted Password)这个字段存储用户密码的加密表示。如果字段是 * 或 !,通常表示账户被禁用了密码登录(例如,对于不允许通过密码登录的系统账户)。实际的加密密码是一个复杂的字符串,由密码加密算法生成。
3密码最后更改的日期(Last Password Change)这个字段表示自 Unix 纪元(1970 年 1 月 1 日)以来密码最后被更改的天数。
4密码更改的最小间隔(Minimum Password Age):这个字段表示用户必须等待多少天才能再次更改密码。0 表示用户可以随时更改密码。
5密码更改的最大间隔(Maximum Password Age)这个字段表示密码在多少天后必须被更改。99999 通常是一个很大的值,意味着密码几乎不需要更改(在实际应用中,管理员可能会设置更合理的值来确保密码的安全性)。
6密码过期警告天数(Password Warning Period)这个字段表示在密码到期前的多少天开始警告用户。7 表示在密码到期前 7 天开始警告用户。
7密码过期后的宽限期(Password Inactivity Period)这个字段表示密码过期后多少天账户被禁用。如果这个字段为空,通常意味着账户在密码过期后立即被禁用(取决于系统的配置)。
8账户到期日期(Account Expiration Date)这个字段表示账户到期的日期(以自 Unix 纪元以来的天数表示)。如果这个字段为空,表示账户永不过期。
9保留字段(Unused Field)这是一个保留字段,目前未使用,用于将来的扩展。

3、/etc/group

  该文件在 Linux 系统中用于存储关于系统组的信息。每一行代表一个组,每一行由多个字段组成,这些字段由冒号 (:) 分隔。

┌──(kali㉿kali)-[~]
└─$ head -3 /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
1组名(Group Name)这是组的名称,用于标识和引用系统中的组。
2密码占位符(Password)现代 Linux 系统通常不在 /etc/group 文件中直接存储组密码。取而代之的是,这里通常会有一个占位符(如 x)。在早期的 Unix 系统中,这个字段可能包含组的加密密码,但现在这种做法已经很少见了。
3组ID(Group ID, GID)这是系统内部用于识别组的数字ID。0 通常表示 root 组(超级用户组),其他数字则表示普通用户组或系统组。
4组成员(Group Members)这个字段列出属于该组的所有用户的用户名。多个用户名之间用逗号(,)分隔。如果这个字段为空,表示该组当前没有成员(这在实际情况中比较少见)。

二、Linux用户和组相关命令(部分)

1、useradd/deladd

  添加或者删除一个用户,下面做个小实验,添加一个叫mali的用户,再删除这个用户,期间跟踪下/etc/passwd 文件最后2行的情况。

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo useradd mali              
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/passwd          # tail 表示查看文件后面几行 -2表示2行
kali:x:1000:1000:,,,:/home/kali:/usr/bin/zsh
mali:x:1001:1001::/home/mali:/bin/sh  # passwd文件中可以看到该用户
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/group   
kaboxer:x:137:kali
mali:x:1001:                          # group文件中可以看到添加了mali组
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo userdel mali      
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/passwd
_gvm:x:132:135::/var/lib/openvas:/usr/sbin/nologin
kali:x:1000:1000:,,,:/home/kali:/usr/bin/zsh   # 该用户已经被删除
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/group 
kali:x:1000:
kaboxer:x:137:kali                    # 组也同步被删除

1-h, --help显示帮助信息并退出。
2--badname在创建用户时,不检查用户名是否包含不良字符或格式。
3-b, --base-dir BASE_DIR为新账户的家目录指定一个基础目录。新用户的家目录将会在这个基础目录下创建。
4--btrfs-subvolume-home使用 BTRFS 子卷作为家目录(这需要系统支持 BTRFS 文件系统)。
5-c, --comment COMMENT为新账户设置 GECOS 字段(通常包含用户的全名、电话等信息)。
6-d, --home-dir HOME_DIR指定新账户的家目录路径。
7-D, --defaults打印或更改 useradd 的默认配置。
8-e, --expiredate EXPIRE_DATE设置新账户的过期日期(格式通常为 YYYY-MM-DD)。
9-f, --inactive INACTIVE设置新账户密码的不活动期限(以天为单位)。如果用户在指定的天数内没有登录,他们的密码将过期。
10-F, --add-subids-for-system即使添加的是系统用户,也会为子用户和子组添加条目(这与用户命名空间有关)。
11-g, --gid GROUP指定新账户的主组的名称或 ID。
12-G, --groups GROUPS指定新账户的附加组的列表(这些组将作为用户的次要组)。
13-k, --skel SKEL_DIR使用指定的骨架目录(skeleton directory)来创建新用户的家目录内容。骨架目录通常包含一些默认的配置文件和目录。
14-K, --key KEY=VALUE覆盖 /etc/login.defs 文件中的默认值。
15-m, --create-home为新用户创建家目录(如果家目录不存在)。
16-M, --no-create-home不为新用户创建家目录。
17-N, --no-user-group不创建一个与新用户名称相同的组。
18-o, --non-unique允许创建具有重复(非唯一)UID 的用户。
19-p, --password PASSWORD为新账户指定一个加密的密码。
20-r, --system创建一个系统账户(这些账户通常不会用于登录,而是用于运行系统服务)。
21-R, --root CHROOT_DIR指定一个目录,将 useradd 命令限制在该目录中运行(即 chroot 环境)。
22-P, --prefix PREFIX_DIR指定一个前缀目录,其中包含 /etc/* 文件(这通常用于在特定前缀下安装系统时)。
23-s, --shell SHELL指定新用户的登录 shell

2、chage

  该条命令是用于检查和更改用户密码过期信息的工具,主要参数如下:

1-d, --lastday LAST_DAY设置用户最后一次更改密码的日期为 LAST_DAYLAST_DAY 应该是一个有效的日期字符串,如 YYYY-MM-DD
2-E, --expiredate EXPIRE_DATE设置用户账户的到期日期为 EXPIRE_DATE。到期后,用户将无法登录,除非账户被重新激活。EXPIRE_DATE 也应该是一个有效的日期字符串。
3-h, --help显示帮助信息并退出。这是用于获取 chage 命令使用方法的快速途径。
4-i , --iso8601当打印日期时,使用 YYYY-MM-DD 的格式。这有助于确保日期的格式是一致的,并且易于阅读。
5-I, --inactive INACTIVE设置密码在过期后保持无效的天数为 INACTIVE。一旦密码过期,用户将有 INACTIVE 天的时间来更改他们的密码。如果在这段时间内没有更改密码,账户将被锁定。
6-l 【注:L的小写】, --list显示用户账户的密码和过期信息。这包括最后一次更改密码的日期、密码到期的日期、密码无效的天数、账户到期的日期等。
7-m, --mindays MIN_DAYS设置用户更改密码之前必须等待的最小天数为 MIN_DAYS。这是为了防止用户频繁更改密码。
8-M, --maxdays MAX_DAYS设置用户密码有效的最大天数为 MAX_DAYS。在这个天数之后,用户必须更改他们的密码。
9-R, --root CHROOT_DIR指定在执行 chage 命令时应该使用的 chroot 目录。chroot 是一种将进程和其子进程限制在指定目录及其子目录中的方法,通常用于提高安全性。
10-P, --prefix PREFIX_DIR指定用于查找用户账户信息的目录前缀。这通常与 /etc/* 文件(如 /etc/passwd 和 /etc/shadow)一起使用,以确定用户账户的位置。
11-W, --warndays WARN_DAYS设置密码到期前的警告天数为 WARN_DAYS。在密码到期前的这些天内,用户将会收到警告提示,提醒他们更改密码。

  做个小实验,修改下一些用户的到期日

# 创建个叫 kkkk ,useradd 可以-e参数设置用户到期时间
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo useradd -e 2024-11-17 kkkk     

# 查看下shadow用户,可以看到到期时间列是20044,Unix纪元+20044天                                                                            
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/shadow      
kali:$y$j9T$zY1oKFxJlTgP2WcJhzbNl1$xhkUmB8R9fzETc/1kgL/nOPcWFTvhn17clxXCgyFjpC:19953:0:99999:7:::
kkkk:!:20041:0:99999:7::20044:

# 我们使用 date -d 命令计算下时间,且采用 xxxx-xx-xx 输出格式
┌──(kali㉿kali)-[~/Desktop]
└─$ date -d "1970-01-01 +20044day" +"%Y-%m-%d"   # 其中1970-01-01就是Unix纪元  
2024-11-17

# 我们同步使用 chage 命令查看下kkkk账户的信息,其中expires行就是到期时间,和上面一致                                                                           
┌──(kali㉿kali)-[~/Desktop]
└─$ chage -l -i kkkk        
chage: Permission denied.

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo chage -l -i kkkk      # -i 采用xxxx-xx-xx这种易阅读模式输出
Last password change                                    : 2024-11-14
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : 2024-11-17
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

#我们直接使用 chage -E 修改用户到期时间,增加1天
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo chage -E 2024-11-18 kkkk

# 我们看到shadow文件中的20044增加了1天                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -2 /etc/shadow     
kali:$y$j9T$zY1oKFxJlTgP2WcJhzbNl1$xhkUmB8R9fzETc/1kgL/nOPcWFTvhn17clxXCgyFjpC:19953:0:99999:7:::
kkkk:!:20041:0:99999:7::20045:

# 用chage -l -i 参数检查下                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo chage -l -i kkkk        
Last password change                                    : 2024-11-14
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : 2024-11-18
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

# 此外,用 usermod -e 也可以修改到期时间
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo usermod -e 2024-11-20 kkkk

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo chage -l -i kkkk | grep Account
Account expires                                         : 2024-11-20

3、passwd

  该命令在Linux系统中用于更改用户的认证信息,包括用户密码、密码过期时间、锁定或解锁用户密码等。

1-l(注:lock的l)锁定用户账号,禁止用户登录系统。
2-u解锁用户账号,恢复用户登录权限。
3-d删除用户密码,使用户无需密码即可登录,但通常不安全。
4-e要求用户在下次登录时更改密码。
5-S显示用户账号的密码状态信息。
6-n设置密码的最小使用天数。
7-x设置密码的最大有效天数。
8-w设置密码过期前的警告天数。
9-i设置密码过期后的不活动期限。
10--stdin从标准输入读取密码,通常用于脚本中。

  下面根据passwd参数,部分参数进行一些小实验

# 我们可以看到 kkkk 用户在
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -1 /etc/shadow
[sudo] password for kali: 
kkkk:!:20041:0:99999:7::20047:
# 给 kkkk 用户设置密码   

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo passwd kkkk        
New password: 
Retype new password: 
passwd: password updated successfully

# 切换到kkkk用户,因为没有特地设置过shell,故使用的了sh    
┌──(kali㉿kali)-[~/Desktop]
└─$ su kkkk         
Password: 
$ su kali    <-- 这里是sh的shell
Password: 

# 切换回kali用户,使用 -l (小写的L) 锁定kkkk用户账户
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo passwd -l kkkk
passwd: password changed.

# 此时 切换kkkk就会出错                                                                    
┌──(kali㉿kali)-[~/Desktop]
└─$ su kkkk            
Password: 
su: Authentication failure

# 使用 -u 参数解锁kkkk                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo passwd -u kkkk
passwd: password changed.

# kkkk用户又可以正常使用了                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ su kkkk            
Password: 
$ whoami
kkkk
$ su kali
Password: 

# 留意下面使用-S参数的输出
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo tail -3 /etc/passwd
_gvm:x:132:135::/var/lib/openvas:/usr/sbin/nologin
kali:x:1000:1000:,,,:/home/kali:/usr/bin/zsh
kkkk:x:1001:1001::/home/kkkk:/bin/sh
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo passwd -S kkkk     
kkkk P 2024-11-14 0 99999 7 -1

# 以下是使用 --stdin 参数讲文本文件中的内容传入passwd命令作为用户的密码
┌──(kali㉿kali)-[~/Desktop]
└─$ echo 12345>passwd.txt                    
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ cat passwd.txt            
12345
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ cat passwd.txt | sudo passwd --stdin kkkk
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ su kkkk
Password: 
$ whoami
kkkk
$ 

三、Linux文件/文件夹权限部分

1、Linux文件权限介绍

┌──(kali㉿kali)-[~/Desktop]
└─$ ls -la 
total 12
drwxr-xr-x  2 kali kali 4096 Nov 14 08:42 .
drwx------ 17 kali kali 4096 Nov 14 08:29 ..
-rw-rw-r--  1 kali kali    6 Nov 14 08:42 passwd.txt

  当我们使用普通的ls -a 参数,会列出上面的“.”“..”,其中1个点表示当前文件夹,2个点表示上级文件夹。

  第一列中的d,表示是文件夹,否则的话一般都是文件;

  第二列rwx为一组,表示文件或者文件夹对文件所有者的权限,是读、写、执行。

  第二列rwx为一组,表示文件或者文件夹对文件组用户的权限,是读、写、执行。

  第三列rwx为一组,表表示文件或者文件夹对其他用户的权限,是读、写、执行。

  另外,r/w/x 在给文件夹权限的时候一般可以用4/2/1的和来代替,所以rwx就是7,r-x是5,r--就是4。

  值得注意的是,如果要进入文件夹或者读取里面的文件的时候,该文件夹的其他用户权限必须为r-x,我们借用kkkk用户来进行实验,桌面有个test文件夹:

  当文件夹权限为xx4的时候也就是r--的时候,其他用户无法读取这个文件夹内的文件;

  当文件夹权限调整为xx5也就是r-x的时候,其他用户就可以读取文件夹内的文件。

  关于权限操作的在下面一节。

2、chmod命令

  该命令用于更改文件或目录的权限,具体参数如下:

1--help显示帮助信息并退出。这是用户寻求命令使用帮助时常用的参数。
2-c, --changes-v(verbose,详细模式)一样,但只在实际更改了文件权限时才报告。这有助于减少不必要的输出。
3-f, --silent, --quiet抑制大多数错误消息。当你不希望命令执行过程中出现太多干扰信息时,可以使用这个参数。
4-v, --verbose为每个处理的文件输出诊断信息。这有助于你了解命令正在执行哪些操作。
5--no-preserve-root不特别处理根目录/。默认情况下,chmod会避免对根目录进行递归操作,使用这个参数可以覆盖这个行为。
6--preserve-root失败于对根目录/进行递归操作。这是默认行为,用于防止意外更改根目录及其子目录的权限。
7--reference=RFILE使用参考文件RFILE的权限,而不是指定MODE值。这允许你复制另一个文件的权限到目标文件上。如果RFILE是符号链接,那么它总是会被解引用(即跟随链接到实际文件)。
8-R, --recursive递归地更改文件和目录的权限。这意味着命令将应用于指定目录及其所有子目录和文件。
9--version输出版本信息并退出。这有助于你了解当前使用的chmod命令的版本。
10MODE权限模式,可以是符号模式(如rwxr-xr-x)或八进制模式(如755)。符号模式由字符组合而成,表示不同用户和类型的权限;八进制模式则使用数字表示权限,每个数字对应一组三位二进制数,分别代表读、写和执行权限。

  下面我们来做几个小实验,使用u/g/o/a和rwx来调整文件的权限。当前桌面新建了2个txt文件,权限都是-rw-rw-r,我们给所有用户都赋上可执行权限,使用的事u+/g+/o+,这种情况下可以用a+来代替,a表示对三种用户及组一起操作。

┌──(kali㉿kali)-[~/Desktop]
└─$ ls -lian
total 8
435738 drwxr-xr-x  2 1000 1000 4096 Nov 14 09:52 .
393218 drwx---r-x 17 1000 1000 4096 Nov 14 09:33 ..
436036 -rw-rw-r--  1 1000 1000    0 Nov 14 09:52 111.txt
436039 -rw-rw-r--  1 1000 1000    0 Nov 14 09:52 222.txt
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ chmod u+x,g+x,o+x 111.txt
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ chmod a+x 222.txt        
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ ls -lian
total 8
435738 drwxr-xr-x  2 1000 1000 4096 Nov 14 09:52 .
393218 drwx---r-x 17 1000 1000 4096 Nov 14 09:33 ..
436036 -rwxrwxr-x  1 1000 1000    0 Nov 14 09:52 111.txt
436039 -rwxrwxr-x  1 1000 1000    0 Nov 14 09:52 222.txt

   除了使用u/g/o/a 和 +-= 对文件或者文件夹进行权限调整操作以外,还可以使用r=4,w=2,x=1的数值对权限进行操作,如果需要如下权限的话,按照下面表格,只要使用chmod 754 file即可完成权限设置:

ugo
rwxr-xr--
4+2+1=74+0+1=54+0+0=4
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt
                                                                                                        
┌──(kali㉿kali)-[~/Desktop]
└─$ ls -l     
total 0
-rw-rw-r-- 1 kali kali 0 Nov 14 14:24 1.txt
                                                                                                        
┌──(kali㉿kali)-[~/Desktop]
└─$ chmod 754 1.txt 
                                                                                                        
┌──(kali㉿kali)-[~/Desktop]
└─$ ls -l
total 0
-rwxr-xr-- 1 kali kali 0 Nov 14 14:24 1.txt

   根据上面试验可以看出,使用 chmod 754 file 这种方法调整权限,命令输入量会大幅减少,缺点是需要少量计算,但对于学习渗透的我们来说几乎没有什么难度,只不过是在输入前思维稍许需要拐个弯。

  关于x权限的特别说明:

  x是执行权限,如果没有x权限的情况下,可执行文件或者shell脚本都会无法运行。由于上述试验中用到的均非可执行文件,接下来我们做个小实验,创建个shell脚本(可以当成是一串Linux命令的集合),并进行运行。

┌──(kali㉿kali)-[~/Desktop]  # 这里偷懒了直接用echo加重定向符把脚本写入文件,\n是换行
└─$ echo '#/bin/bash\na="hello world"\necho $a' >1.sh 


┌──(kali㉿kali)-[~/Desktop]  # cat 命令查看下脚本,情况正常
└─$ cat 1.sh     
#/bin/bash         # 告诉系统用/bin/bash这个shell执行
a="hello world"    # 把hello world字符串赋值给变量a
echo $a            # echo 变量a,输出变量的内容
                                                                                             
┌──(kali㉿kali)-[~/Desktop]  # 先看下,刚创建后的这个shell脚本是没有x权限的
└─$ ls -l 1.sh
-rw-rw-r-- 1 kali kali 35 Nov 14 14:07 1.sh
                                                                                             
┌──(kali㉿kali)-[~/Desktop]      # 无x权限的情况下,shell脚本无法运行
└─$ ./1.sh                       # 脚本要运行的话,一定要用./做开头,给到一个绝对或者相对路径
zsh: permission denied: ./1.sh   # 这里是出错提示
                                                                                             
┌──(kali㉿kali)-[~/Desktop]  # 给shell脚本可执行权限
└─$ chmod +x 1.sh
                                                                                             
┌──(kali㉿kali)-[~/Desktop]  # 权限调整后,该脚本可以顺利运行
└─$ ./1.sh
hello world
                                                                                             

  除了rwx权限外,还有X/s/t三种权限,其中关于s权限,s‌(setuid/setgid):特殊权限,允许普通用户以文件或目录所有者的身份运行程序或命令。当s权限在用户的x权限上时,称为Set UID(SUID),程序执行时拥有文件所有者的权限;当s权限在用户组的x权限上时,称为Set GID(SGID),程序执行时拥有文件所属组的权限。s权限情况比较特殊,一般给这个权限的时候必须谨慎又谨慎,后续涉及到suid权限提权会有很多的利用,本处先略。

  另外除了 rwxs权限外,还有X权限、t权限,目前暂时用不到。

3、chown 命令

  该命令用于更改文件或目录的所有者(owner)和所属用户组(group)。它可以帮助用户管理和维护文件系统的安全性与访问控制。

1-c, --changes只在有更改生效时才显示更改信息。
2-f, --silent, --quiet忽略大部分错误信息。
3-v, --verbose显示指令详细的执行过程。
4-R, --recursive递归地更改指定目录下所有文件和子目录的所有者。
5--dereference修改符号链接指向的实际文件的属主和所属用户组,而非符号链接文件本身(默认选项)。
6-h, --no-dereference修改符号链接文件本身的属主和所属用户组。
7--from=CURRENT_OWNER只有当文件的属主和所属组符合选项所指定的才更改。

  做个小实验,桌面test文件夹,及其内部的文件的所有者全部变更到root和root组。

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir test
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 111 222 333
                                                                                                
┌──(kali㉿kali)-[~/Desktop]
└─$ mv * test 
mv: cannot move 'test' to a subdirectory of itself, 'test/test'
                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo chown root:root test  -R -v 
changed ownership of 'test/333' from kali:kali to root:root
changed ownership of 'test/222' from kali:kali to root:root
changed ownership of 'test/111' from kali:kali to root:root
changed ownership of 'test' from kali:kali to root:root

┌──(kali㉿kali)-[~/Desktop]
└─$ ls test -la
total 8
drwxrwxr-x 2 root root 4096 Nov 14 10:47 .
drwxr-xr-x 3 kali kali 4096 Nov 14 10:47 ..
-rw-rw-r-- 1 root root    0 Nov 14 10:47 111
-rw-rw-r-- 1 root root    0 Nov 14 10:47 222
-rw-rw-r-- 1 root root    0 Nov 14 10:47 333

四、Linux日志

1、先说下为什么有些Linux系统没有 lastb / lastlog 命令,以及没有 /var/log/auth.log文件

a、关于没有 lasb / lastlog

  视频演示中,泷师傅视频中用的系统有 lastb / lastlog 两条命令,另外也有 /var/log/auth.log文件,但如果是使用2403pre-build版本的kali(预装或预构建虚拟机镜像版),没有上述两条命令,也没 auth.log 文件。主要因为两条命令是util-linux(Linux一个基本工具套件)版本的问题,util-linux 2.40 版貌似没有把 lastb / lastlog 两条命令装进去,不过我们可以在debian的最新的docker 容器内体验下,同时可以用下面这条命令检查 util-linux 的版本:

dpkg -l | grep util-linux

# 注意kali2403的预装版没有下面2条命令,运行报错是正常的
┌──(kali㉿kali)-[~]  
└─$ lastb         
Command 'lastb' not found, did you mean:
  command 'last' from deb wtmpdb
  command 'lasts' from deb multicat
  command 'lastdb' from deb last-align
  command 'lastz' from deb lastz
Try: sudo apt install <deb name>
                                                                                                                                                                    
┌──(kali㉿kali)-[~]
└─$ lastlog
Command 'lastlog' not found, did you mean:
  command 'lastlog2' from deb lastlog2
Try: sudo apt install <deb name>

# 我们用这条命令检查下util-linux套件包,看到kali内置的包版本是2.40
┌──(kali㉿kali)-[~]  
└─$ dpkg -l | grep util-linux
ii  util-linux                                     2.40.2-9                                 amd64        miscellaneous system utilities
ii  util-linux-extra                               2.40.2-9                                 amd64        interactive login tools

# 我们找个最新版本的debian容器进去看下
┌──(kali㉿kali)-[~]
└─$ sudo docker exec -it debian bash
root@1efdc60857c9:/# lastb   # lastb 因为没登录故没内容,但是命令可以正常执行

btmp begins Wed Nov 13 16:17:58 2024
root@1efdc60857c9:/# lastlog # lastlog 可以正常允许
Username         Port     From                                       Latest
root                                                                **Never logged in**
daemon                                                              **Never logged in**
(当中较长省略了)
nobody                                                              **Never logged in**
root@1efdc60857c9:/# dpkg -l | grep util-linux  # 这里看下util-linux版本是2.38,所以有这两条命令
ii  util-linux              2.38.1-5+deb12u2      amd64        miscellaneous system utilities
ii  util-linux-extra        2.38.1-5+deb12u2      amd64        interactive login tools
root@1efdc60857c9:/# 
b、关于没有 /var/log/auth.log

  这个文件,需要我们安装一个 rsyslog 程序,该程序是一个开源的日志处理工具,用于在IP网络中转发和处理来自各种来源的日志信息。可使用如下命令进行安装:

sudo apt update

sudo apt install rsyslog

  安装完毕后,重新启动下,再到 /var/log 目录下,就可以找到该文件了,该程序具体使用本教程略。

# 注意,安装 rsyslog 后需要重启再有该文件
┌──(kali㉿kali)-[~]
└─$ cat /var/log/auth.log
2024-11-16T13:54:20.944303-05:00 kali sudo: pam_unix(sudo:session): session closed for user root
2024-11-16T13:54:26.527620-05:00 kali systemd-logind[632]: The system will reboot now!
2024-11-16T13:54:26.530776-05:00 kali systemd-logind[632]: System is rebooting.
2024-11-16T13:54:26.564609-05:00 kali ssh-agent[1276]: exiting on signal 15
2024-11-16T13:54:50.203009-05:00 kali systemd-logind[641]: New seat seat0.
2024-11-16T13:54:50.203014-05:00 kali systemd-logind[641]: Watching system buttons on /dev/input/event1 (Power Button)
2024-11-16T13:54:50.203023-05:00 kali systemd-logind[641]: Watching system buttons on /dev/input/event6 (VMware VMware Virtual USB Keyboard)

2、/var/log/文件夹中的wtmp、btmp、lastlog文件

  三个文件具体用途如下:

/var/log/wtmp记录系统中所有成功登录和注销的信息,以及系统启动、重启和关机的时间
/var/log/btmp专门记录系统中失败的登录尝试信息
/var/log/lastlog记录每个用户最后一次登录的时间、登录源(如终端或远程IP地址)以及登录会话的持续时间。
a、关于 /var/log/wtmp

  这个文件和 last 命令对应,而且一般 Linux 系统全部都有,如果ssh到Linux服务器,那么使用last命令可以显示登陆情况,而如果用户退出服务器,则命令也会显示离开。

  下面做个小实验,创建 debian 容器开启ssh服务,然后我们用ssh连接容器。

   但是,目前的 Kali Linux 又是一种新的情况,我们可以尝试在新的Kali Linux中运行last命令,会发现如下的提示:

┌──(kali㉿kali)-[~]
└─$ last
kali     tty7         :0               Sat Nov 16 15:05 - still logged in
lightdm  tty7         :0               Sat Nov 16 15:05 - 15:05  (00:00)

/var/lib/wtmpdb/wtmp.db begins Sat Nov 16 15:05:05 2024

  这说明目前 Kali Linux 是把这些信息存储在了 /var/lib/wtmpdb/wtmp.db 数据库中,这个数据库是个sqlite数据库,我们可以直接用下面的命令打开:

sqlite3 /var/lib/wtmpdb/wtmp.db

  此时,我们可以看到wtmp.db数据库文件中的内容,和 last 显示的信息完全一样。

┌──(kali㉿kali)-[~]
└─$ sqlite3 /var/lib/wtmpdb/wtmp.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
wtmp
sqlite> select * from wtmp;
1|3|lightdm|1731787505993287|1731787540132261|tty7|:0|lightdm-greeter
2|3|kali|1731787540141312||tty7|:0|lightdm
b、关于/var/log/btmp

  这个文件记录记录登录系统失败的用户相关信息。因为目前最新的 Kali Linux 没有 lastb 命令,我们可以直接用 cat / tail 等命令查看。

  我们做个小实验,用ssh连接 Kali Linux 且故意输错密码,在btmp中留下记录,另外直接在kali终端内新建个用户,用 su 切换用户,故意输错密码,也在btmp中留下记录:

  我们可以使用utmpdump 获得更好的视觉效果

┌──(kali㉿kali)-[~]
└─$ sudo utmpdump /var/log/btmp
Utmp dump of /var/log/btmp
[6] [02789] [    ] [kali    ] [ssh:notty   ] [192.168.203.1       ] [192.168.203.1  ] [2024-11-15T08:57:10,000000+00:00]
[6] [02789] [    ] [kali    ] [ssh:notty   ] [192.168.203.1       ] [192.168.203.1  ] [2024-11-15T08:57:20,000000+00:00]
[6] [02789] [    ] [kali    ] [ssh:notty   ] [192.168.203.1       ] [192.168.203.1  ] [2024-11-15T08:57:31,000000+00:00]
[6] [06119] [0   ] [test    ] [pts/0       ] [                    ] [0.0.0.0        ] [2024-11-15T09:03:18,895785+00:00]
[6] [06350] [0   ] [test    ] [pts/0       ] [                    ] [0.0.0.0        ] [2024-11-15T09:03:42,624544+00:00]
c、关于lastlog

  老的情况就不说了,Kali Linux 目前可以安装 lastlog2 ,我们可以使用这条命令查看登录情况。

sudo apt install lastlog2

┌──(kali㉿kali)-[/var/log]
└─$ lastlog2
Username         Port     From                                       Latest 
kali             tty7     :0                                         Sat Nov 16 15:36:50 -0500 2024
lightdm          tty7     :0                                         Sat Nov 16 15:36:23 -0500 2024
test             pts/1                                               Sat Nov 16 15:35:25 -0500 2024

  同样,这条命令后面实际有个db数据库文件,和上面查看wtmpdb.db类似,我们可以在/var/lib/lastlog的文件夹中,用sqlite查看到数据库内容:

┌──(kali㉿kali)-[/var/lib/lastlog]
└─$ sqlite3 lastlog2.db                 
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
Lastlog2
sqlite> select * from Lastlog2;
test|1731789325|pts/1||su
lightdm|1731789383|tty7|:0|lightdm-greeter
kali|1731789410|tty7|:0|lightdm

 3、journalctl

  journalctl 是一个用于查询和管理系统日志文件的命令行工具。它允许用户查看、过滤和导出由 systemd 管理的系统日志。假设要查看ssh登录失败的日志:

┌──(kali㉿kali)-[/var/log/journal/30e662c5c81d4191bd2444a79c97d2e0]
└─$ journalctl -u ssh | grep "Failed password" 
Nov 16 15:21:54 kali sshd-session[9982]: Failed password for kali from 172.17.0.2 port 38150 ssh2
Nov 16 15:21:59 kali sshd-session[9982]: Failed password for kali from 172.17.0.2 port 38150 ssh2
Nov 16 15:22:03 kali sshd-session[9982]: Failed password for kali from 172.17.0.2 port 38150 ssh2

  journalctl 功能非常强大,此处不再具体展开。

 4、dmesg

  dmesg(display message)命令用于显示和控制Linux内核的环形缓冲区(ring buffer)。‌作用‌:内核在启动和运行过程中会将各种信息(如系统架构、CPU、挂载的硬件、RAM等)存储在这个缓冲区中。通过dmesg命令,用户可以查看这些系统信息,进行设备故障的诊断,或确认服务器安装的硬件。

  这条命令我们渗透测试人员貌似、可能、大概、或许初级阶段不太会用到,故细节略。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值