当前位置:   article > 正文

Linux操作系统安全初步

Linux操作系统安全初步

参考:《Linux 就该这么学》

用户身份与能力

  • 管理员 UID 为 0:系统的管理员用户。
  • 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提
  • 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏
  • 范围。
  • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

为了方便管理属于同一组的用户, Linux 系统中还引入了用户组的概念。通过使用用
户组号码( GID, Group IDentification),我们可以把多个用户加入到同一个组中,从而方
便为组中的用户统一规划权限或指定任务。


在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且
这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户
组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组
 

useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。

useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe

参数作用
-d指定用户的家目录(默认为/home/username)
-e账户的到期时间,格式为 YYYY-MM-DD.
-u指定该用户的默认 UID
-g指定一个初始的用户基本组(必须已存在)
-G指定一个或多个扩展用户组
-N不创建与用户同名的基本用户组
-s指定该用户的默认 Shell 解释器

groupadd 命令
groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”

usermod 命令
usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。

参数作用
-c填写用户账户的备注信息
-d -m参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e账户的到期时间,格式为 YYYY-MM-DD
-g变更所属用户组
-G变更扩展用户组
参数作用
-L锁定用户禁止其登录系统
-U解锁用户,允许其登录系统
-s变更默认终端
-u修改用户的 UID

usermod -G root linuxprobe

usermod -u 8888 linuxprobe
 

passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。
 

参数作用
-l锁定用户,禁止其登录
-u解除锁定,允许用户登录
--stdin允许通过标准输入修改用户密码, 如echo "NewPassWord" | passwd --stdin Username
-d使该用户可用空密码登录系统
-e强制用户在下次登录时修改密码
-S显示用户的密码是否被锁定,以及密码所采用的加密算法名称

userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。

参数作用
-f强制删除用户
-r同时删除用户及用户家目录

文件权限与归属
 

一切都是文件
每个文件的类型不尽相同,因此 Linux 系统使用了不同的字符来加以区分

 -:普通文件。
 d:目录文件。
 l:链接文件。
 b:块设备文件。
 c:字符设备文件。
 p:管道文件。

每个文件都有所属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的可读( r)、可写( w)、可执行( x)等权限


特别的,对目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。
 

文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 4、 2、 1 来表示

权限分配文件所有者文件所属组其他用户
权限项执行执行执行
字符表示rwxrwxrwx
数字表示421421421

举例:rwxrw-r--,数字法表示即为 764


文件的特殊权限
SUID、 SGID 与 SBIT 的特殊权限位
 

  • SUID 是一种对二进制程序进行设置的特殊权限, 可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

SUID作用说明:CTF提权常用的思路,用find  / -perm -4000 找到一个这样的可执行命令,进行内存溢出攻击查看 passwd 命令属性时发现所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限。
说明:如果原本的权限是 rw-呢?即原先权限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S
 

  • SGID 主要实现如下两种功能:

让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
 

cd /tmp
mkdir testdir
ls -ald testdir/
chmod -Rf 777 testdir/
chmod -Rf g+s testdir/
ls -ald testdir/
su - linuxprobe
cd /tmp/testdir/
echo "linuxprobe.com" > test
ls -al test       观察test文件属性
 

chmod 命令是一个非常实用的命令, 能够用来设置文件或目录的权限, 格式为“chmod [参数] 权限 文件或目录名称”。
chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。
参数-R 来表示递归操作
 

  • SBIT
     

当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
与前面所讲的 SUID 和 SGID 权限显示方法不同,当目录被设置 SBIT 特殊权限位后,文
件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原
本没有 x 执行权限则会被写成 T。 
对其他目录来设置 SBIT 特殊权限位,用 chmod 命令就可以了。对应的参数 o+t 代表设置 SBIT 粘滞位权限


文件的隐藏属性

chattr 命令用于设置文件的隐藏权限,格式为“chattr  [参数]  文件”。

如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

参数  作用 
i       无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 
a      仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) 
S     文件内容在变更后立即同步到硬盘(sync) 
s     彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域) 
A     不再修改这个文件或目录的最后访问时间(atime) 

b    不再修改文件或目录的存取时间 
D     检查压缩文件中的错误 
d    使用 dump 命令备份时忽略本文件/目录 
c    默认将文件或目录进行压缩 
u    当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 
t     让文件系统支持尾部合并(tail-merging) 
X    可以直接访问压缩文件中的内容 
 

lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数]  文件”。


文件访问控制列表

一般权限、特殊权限、隐藏权限其实有一个共性—权限
是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文
件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定
的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL,则目录
中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。 
 

普通用户,然后尝试进入 root 管理员的家目录中。在没有针对普通用户对 root 管理员的家目录设置 ACL之前,其执行结果是不正确的。

setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数]  文件名称”。文件的 ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl 命令
可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的 ACL,
则可以使用-b 参数。

setfacl -Rm u:linuxprobe:rwx /root

常用的 ls 命令是看不到 ACL 表信息的,但是却可以看到文件的权限最后一个点(.)变
成了加号(+),这就意味着该文件已经设置了 ACL 了。

getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl  文件名称”


su 命令与 sudo 服务 
su 命令与用户名之间有一个减号(-),这意味着完全切
换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强
烈建议在切换用户身份时添加这个减号(-)。

sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式为“sudo [参数]  命令名称”。

参数  作用 
-h     列出帮助信息 
-l       列出当前用户可执行的命令 
-u     用户名或 UID 值  以指定的用户身份执行命令 
-k    清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证 
-b    在后台执行指定的命令 
-p    更改询问密码的提示语 
 

配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数

也可以使用 sudo 命令提供的 visudo 命令来配置用户权限。但都必须是root

root ALL=(ALL) ALL

含义如下:

谁可以使用   允许使用的主机=(以谁的身份)   可执行命令的列表 
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/208696
推荐阅读
相关标签
  

闽ICP备14008679号