Linux 系统安全设置实验
1.1 实验目的
1、了解Linux操作系统的安全性
2、熟悉Linux操作系统的安全设置
3、建立Linux操作系统的基本安全框架
1.2 实验要求
1、根据实验中的安全设置要求,详细观察并记录设置前后系统的变化,给出分析报告。
2、使用RPM对系统的软件进行管理,验证系统内软件的完整性,并分析结果。
3、比较Windows系统的安全设置和Linux系统安全设置的异同。
1.3 实验原理
1.3.1 账号
在 linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。
在 linux 系统中,所创建的用户帐号和其相关信息 (密码除外) 均是存放在 / etc/passwd 配置文件中。由于所有用户对 passwd 文件均有读取的权限,因此密码信息并未保存在该文件中,而是保存在了 / etc/shadow 的配置文件中。
在 passwd 文件中,一行定义一个用户帐号,每行均由多个不同的字段构成,各字段值间用":”分隔,每个字段均代表该帐号某方面的信息。
在刚安装完成的 linux 系统中, passwd 配置文件已有很多帐号信息了,这些帐号是由系统自动创建的,他们是linux 进程或部分服务程序正常工作所需要使用的账户,这些账户的最后一个字段的值一般为 / sbin/nologin,表示该帐号不能用来登录 linux 系统。
在 passwd配置文件中,从左至右各字段的对应关系及其含义:
由于 passwd 不再保存密码信息,所以用x 占位代表。
若要使某个用户账户不能登录 linux,只需设置该用户所使用的 shell 为/ sbin/nologin 即可。比如,对于 FTP账户,一般只允许登录和访问 FTP 服务器,不允许登录 linux 操作系统。若要让某用户没有 telnet 权限,即不允许该用户利用 telnet 远程登录和访问 linux 操作系统,则设置该用户所使用的 shell 为 / bin/true 即可。若要让用户没有 telnet 和 ftp 登录权限,则可设置该用户的 shell 为 / bin/false。
在 / etc/shells 文件中,若没有 / bin/true 或 / bin/false,则需要手动添加:[root@localhost ~ ]# echo “/bin/false”>>/etc/shells[root@localhost ~ ]# echo “/ bin/true”>>/ etc/shells
用户密码文件
为安全起见,用户真实的密码采用 MD5 加密算法加密后,保存在 / etc/shadow 配置文件中,该文件只有 root用户可以读取。
与 passwd 文件类似, shadow 文件也是每行定义和保存一个账户的相关信息。第一个字段为用户帐户名,第二个字段为账户的密码。
用户组帐号文件
用户组帐号信息保存在 / etc/group 配置文件中,任何用户均可以读取。用户组的真实密码保存在/etc/gshadow 配置文件中。
在 group中,第一个字段代表用户组的名称,第二个字段为 x,第三个为用户组的 ID 号,第四个为该用户组的用户成员列表,各用户名间用逗号分隔。
1.3.2 文件
linux文件属性解读:文件类型:
- :普通文件 (f)
d:目录文件
b:块设备文件 (block)
c:字符设备文件 (character)
l:符号链接文件(symbolic link file)
p:命令管道文件(pipe)
s:套接字文件(socket)
文件权限: 9位,每3位一组,每一组: rwx(读,写,执行),当改组不具有某一权限用-代替。第一组为: 文件拥有者的权限, 该文件的拥有者可以读写,但不可执行;
第二组为: 同群组的权限
第三组为: 其他非本群组的权限r:read就是读权限 --数字4表示w:write就是写权限 --数字2表示
x:excute就是执行权限 --数字1表示
SUID 属性
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l”或者”ll”命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。
SGID属性应用在目录上时,该目录中所建立的文件或子目录的拥有组都会是该目录的拥有组。当SGID属性应用在可执行文件上时,其他用户在使用执行文件时就会临时拥有该执行文件的拥有组权限。在使用”ls -l”或者”ll”命令浏览目录时,如果拥有组权限的第三位是一个小写的”s”,就表明该执行文件或者目录拥有SGID属性。
Sticky Bit 属性
Sticky属性只能应用在目录,当目录拥有Sticky属性,所有在该目录中的文件或子目录无论是什么权限,只有文件或者子目录所有者和root用户能做删除动作。在使用”ls -l”或者”ll”命令浏览目录时,如果其他用户权限的第三位是一个小写的”t”,就表明该执行文件或者目录拥有Sticky属性。
注意: linux系统规定,如果原本该位上有x,则这些属性显示问小写字母(有效),否则显示大写字母(无效)
1.3.3 ssh配置文件部分选项
# 禁止使用密码登入 (默认允许)
# 注意:需先配置好有 root 权限的用户的公私钥对登入后再禁止密码登入,
# 避免自己无法登入服务器 ,或使用低权限用户登入服务器后无法取得 root 权限。PasswordAuthentication no
# 禁止空密码账户登入 (默认禁止)PermitEmptyPasswords no
# 禁止 root 账户通过密码登入 (默认允许)
# (root 账户仍可以通过公私钥对登入 ,如果配置了的话)PermitRootLogin without- password
# (新版本的 sshd 也支持使用更符合直觉的名字 prohibit-password)# PermitRootLogin prohibit- password
# 或:禁止 root 账户通过 SSH 登入 (默认允许)# PermitRootLogin no
# 只允许白名单内的用户登入 (默认允许所有用户登入)AllowUsers alice bob@ corporation
# 或禁止黑名单内的用户通过 SSH 登入 (默认允许所有用户登入)DenyUsers alice bob@ corporation
1.4 实验相关资源
实验环境:
Linux虚拟机kali
相关资源:
Linux 账号管理与 ACL 权限配置:http://cn.linux.vbird.org/linux_basic/0410accountmanager.php
1.5 实验步骤
1.5.1 账户和口令安全
( 1)查看和添加账户
在终端下输入命令: useradd ***,建立一个新账户;

cat /etc/shadow, 查看系统中的账户列表;


( 2)添加和更改密码: passwd命令

( 3)查看Linux系统中是否有用于检测密码安全的黑客技术语字典及密码检测模块:
locate pam_cracklib.so dict|grep crack

1.5.2 账户安全设置
( 1)强制用户首次登陆时修改口令,强制每90天更改一次口令,并提前10天提示: change命令
chage命令是用来修改帐号和密码的有效期限。
语法 chage [选项] 用户名

(2)账户的禁用与恢复: passwd命令,锁定除root之外的不必要的超级用户

(3)建立用户组,设置用户: groupadd命令、 groupmod命令、 gpasswd命令

(4)设置密码规则: /etc/login.defs文件编辑修改,设置用户的密码最长使用天数、最小密码长度等
在/etc/login.defs文件中修改或添加以下内容:
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 80 #密码最小过期天数
PASS_MIN_LEN 10 #密码最小长度
PASS_WARN_AGE 7 #密码过期警告天数

(5)为账户和组相关系统文件加上不可更改属性,防止非授权用户获取权限: chattr命令
chattr 命令、
文件的特殊属性- 使用"+" 设置权限 ,使用"-" 用于取消
chattr +a file1 只允许以追加方式读写文件
chattr +c file1 允许这个文件能被内核自动压缩/解压
chattr +d file1 在进行文件系统备份时 , dump 程序将忽略这个文件
chattr +i file1 设置成不可变的文件 ,不能被删除、修改、重命名或者链接
chattr +s file1 允许一个文件被安全地删除
chattr +S file1 一旦应用程序对这个文件执行了写操作 ,使系统立刻把修改的结果写到磁盘
chattr +u file1 若文件被删除 ,系统会允许你在以后恢复这个被删除的文件
lsattr 显示特殊的属性


(6)删除用户和用户组: userdel命令、 groupdel命令
userdel命令用于删除给定的用户 ,以及与用户相关的文件。若不加选项 ,则仅删除用户帐号 ,而不删除相关文件。
-f:强制删除用户 ,即使用户当前已登录;
-r:删除用户的同时 ,删除与用户相关的所有文件。

(7)限制su命令提权: /etc/pam.d/su文件,在头部添加命令:
auth required /lib/security/pam_wheel.so group=wheel
这样,只有wheel组的用户可以su到root用户

(8)将用户加入到某个组: usermod命令
usermod命令用于修改用户的基本信息。 usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
选项
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码 ,使密码无效;
-s:修改用户登入后所使用的shell;-u:修改用户ID;
-U:解除密码锁定。
groups命令在标准输入输出上输出指定用户所在组的组成员 ,每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组。
(9)确认shadow中的空口令帐号: awk命令
请说明为什么可以用该指令来确认空口令账号

1.5.3 文件系统管理安全
( 1)查看某个文件的权限: ls -l
(2)设置文件属主及属组等的权限: chmod命令
chmod命令用来变更文件或目录的权限。在UNIX系统家族里 ,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分 ,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限 ,设置方式采用文字或数字代号皆可。符号连接的权限无法变更 ,如果用户对符号连接修改权限 ,其改变会作用在被连接的原始文件。
chmod u+x,g+w f01 //为文件f01设置自己可以执行 ,组员可以写入的权限chmod u=rwx,g=rw,o=r f01chmod 764 f01
chmod a+x f01 //对文件f01的u,g,o都设置可执行属性
(3)切换用户,检查用户对文件的权限: su命令
请注释掉之前限制su命令提权时所增加的语句

(4)修改文件的属主和属组: chown命令
chown命令改变某个文件或目录的所有者和所属的组 ,该命令可以向某个用户授权 ,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表 ,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
chown user1 file1 改变一个文件的所有人属性
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chown user1:group1 file1 改变一个文件的所有人和群组属性
(5)文件的打包备份和压缩、和解压: tar命令、 gzip命令、 gunzip命令
tar -cvf log.tar log2012.log 仅打包 ,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后 ,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后 ,以 bzip2 压缩
解压-c的压缩包
tar -xvf training.tar
使用gzip压缩 ,即在tar本身压缩基础上加入-z参数
(6)设置应用于目录的SGID权限位:
配置SUID、SGID、Sticky属性
可以使用字符配置 (s 表示SUID和SGID,t表示Sticky)如:
chmod u+s test_file
chmod g+s test_dir
chmod o+t test_dir
#给文件增加SUID属性#给目录增加SGID属性#给目录增加Sticky属性
还可以用数字的方式配置 ( 4表示SUID,2表示SGID,1表示Sticky)如:
chmod 4555
chmod 2555
chmod 1555
test_file
test_file
test_dir
#给文件增加SUID属性#给文件增加SGID属性#给文件增加Sticky属性
1.5.4 ssh 安全配置
Kali的 ssh配 置 文 件 是 : / etc/ ssh/ sshd_ config
( 1)修改ssh连接端口
修改配置文件如下,去掉 #Port 22 的注释#,添加Port 43999,这里去掉22端口的注释是为了如果修改的
43999端口如果不可用,还可以通过22端口连上去修改
Port 22
Port 43999
# AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

然后重启ssh服务 service ssh restart
然后连接测试一下,如果43999端口可以连上,再把配置文件修改为#Port 22
ssh root@192.168.190.138 -p 43999

( 2)设置ssh key登录
1、生成ssh key;
输入指令: ssh-keygen

2、 把公钥上传给服务器,并输入kali密码;
输入指令: ssh-copy-id root@192.168.190.138

3、连接服务器;
输入指令: ssh root@192.168.190.138 -p 43999
新版本的系统默认打开ssh key登录
如果不能连接,需要打开下列配置, ,记得修改配置后重启ssh服务
RSAAuthentication yes
//去掉前面的注释
PubkeyAuthentication yes
//去掉前面的注释
AuthorizedKeysFile .ssh/authorized_keys //去掉前面的注释
使用 -i 参数指定对应私钥
ssh -p your_port username@domain -i your_private_certification

4、禁止密码登录
配置好ssh key后,修改ssh的配置文件/etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication
此外,可以安装fail2ban ,fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址



