系统安全及应用

如何让Linux系统更加安全? Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。 那么,Linux服务器安全技巧有哪些?

一、信息安全分类

设备安全:对物理设备进行安全防护,电压,工作环境,丢失,设备物理损坏
系统安全:操作系统,访问权限,用户权限,账户密码,漏洞补丁等。
通讯安全:网络通讯,广播风暴,网络流量攻击,地址伪装,信息窃取等
数据安全:数据窃取,复制,删除,破解等
服务安全:各种服务的漏洞,应用程序的BUG等

二、账号安全基本措施

1、系统账号

linux用户:管理员用户 程序用户 普通用户
/etc/passwd:保存用户基本信息

root:x:0:0:root:/root:/bin/bash

第一列:用户名
第二列:密码区域(密码保存在/etc/shadow)
第三列:UID
第四列:GID
第五列:描述信息
第六列:用户宿主目录
第七列:用户登录shell(/etc/shells)

/etc/shadow:存放密码相关信息

root:$6$6aoUuO9cRnSLchHL$bMpOlt5aJgk.66y5o/UJAbuG521HpHiDv6SeA1LGpAx9iMGm4vIKo9MS2g.xoUwy.8RKq6Q4aepaGTYj6ySbP0::0:99999:7:::          16
cxf:$6$C$u6e.1W78uVdeqmY0yNxyXiFNFOW52gZVkqbMImJXJHJWtVmn2aC0UxPl77M.toeDoMSBEskFiENoHvZwwHny50:17827:0:99999:7:::	1
zs:$6$IJ5/H9IO$kVswGQH9YgaCiOXeUngw0H7IVQXjuOOSsv39y9akwrOr.jwmgtD/mx4jQHhB7oyQbFl.QvywHSn7IU9VTDcPx.:18346:0:99999:7:::	8

1)第1字段:用户账号名称。
2)第2字段:使用MD5加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无需密码即可登录系统。
第一部分:加密类型。
第二部分:标识符。
第三部分:用户加密后的密码。
3)第3字段:上次修改密码的时间,从1970年01月01日算起
4)第4字段:密码的最短有效天数,默认值为0,表示不进行限制。
5)第5字段:密码的最长有效天数
6)第6字段:提前多少天警告用户口令将过期,默认值为7。
7)第7字段:在密码过期之后多少天内禁用此用户。
8)第8字段:账号失效时间,默认值为空,表示账号永久可用。
9)第9字段:保留(未使用)

/etc/skel:用户宿主目录模板文件夹

# ls -a
.bash_logout:用户注销(退出至待登录界面)时执行文件,默认空。
.bash_profile:当前用户环境变量文件(系统启动时执行的文件)
.bash_history:  保存了当前用户使用过的历史命令,方便查找
.bashrc:用户自定义变量文件

题:现公司有一个规章制度《新制度》,想让新员工的账号中都存在这个文件。
答:把文件加到/etc/skel/目录下。查看新用户的/home/用户名即可。
cp 新制度名(例:1.txt) /etc/skel/

useradd haha
[root@localhost ~]# ls -a /home/haha/
.  ..  1.txt  .bash_logout  .bash_profile  .bashrc  .mozilla 

/etc/login.defs:新建用户时,用户属性模板文件(只对新建用户生效)
MAIL_DIR /var/spool/mail:用户通知邮件
PASS_MAX_DAYS 99999:密码最长使用期限
PASS_MIN_DAYS 0:密码最短使用期限
PASS_MIN_LEN 5:密码最小长度
PASS_WARN_AGE 7:密码过期提前警告时间
UID_MIN 1000:用户最小UID
UID_MAX 60000:用户最大UID
SYS_UID_MIN 201:系统用户最小UID
SYS_UID_MAX 999:系统用户最大UID
GID_MIN 1000:组最小UID
GID_MAX 60000:组最大UID
CREATE_HOME yes:是否创建家目录,默认是创建
UMASK 077:反掩码 755 644
USERGROUPS_ENAB yes:是否允许删除没有用户的基本组,默认是允许
ENCRYPT_METHOD SHA512:用户密码的加密方式

Linux whoami命令用于显示自身用户名称。

[root@localhost ~]# whoami 
root

命令whoami由英文单句“Who am I?(我是谁?)”连接而成,调用该命令时系统会输出当前用户的有效用户名,这一输出效果与Unix命令id-un是相同的。

2、修改Linux密码过期时间

Windows用户默认密码过期时间:42天
Linux用户默认密码过期时间:99999

☑ 方法1:

vim /etc/shadow
修改99999为30,表示30天后过期

☑ 方法2:

usermod -e 2020-03-30 wwx

☑ 方法3:(适用于新用户)

vim /etc/login.defs 
修改:
PASS_MAX_DAYS   99999
修改99999为15,表示15天后过期

☑ 方法4:

chage -M 30 wwx                       -M:密码保持有效的最大天数

实验:

/opt/aaa/haha
1)创建两个用户zs、ls
2)创建目录aaa,给了w(写入权限)
3)进入目录aaa,创建了目录haha,并修改了属主和属组为zs
4)su到zs,将目录haha删除,结果成功!
5)exit退出zs,用root用户再次创建目录haha,并修改了属主和属组为zs,登录用户ls查看能否删除
6)exit退出ls,用root用户再次创建目录haha,并赋予aaa目录粘滞位,测试用户是否还能删除haha目录

# 命令:
[root@localhost ~]# useradd zs 
[root@localhost ~]# useradd ls
[root@localhost ~]# mkdir /opt/aaa
[root@localhost ~]# cd /opt/
[root@cxf opt]# ll
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1223 09:08 aaa
drwxr-xr-x. 2 root root 6 326 2015 rh
[root@localhost opt]# chmod o+w aaa/    (o不能省去)
[root@localhost opt]# ll
总用量 0
drwxr-xrwx. 2 root root 6 1223 09:08 aaa
drwxr-xr-x. 2 root root 6 326 2015 rh

3[root@localhost aaa]# mkdir haha
[root@localhost aaa]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1223 09:15 haha
[root@localhost aaa]# chown zs:zs haha/
[root@localhost aaa]# ll
总用量 0
drwxr-xr-x. 2 zs zs 6 1223 09:15 haha

4[root@localhost aaa]# su zs
[zs@localhost aaa]$ rm -rf haha
[zs@localhost aaa]$ ll
总用量 0
[zs@localhost aaa]$ exit
exit

5[root@localhost aaa]# mkdir haha
[root@localhost aaa]# chown zs:zs haha/
[root@localhost aaa]# ll
总用量 0
drwxr-xr-x. 2 zs zs 6 1223 09:19 haha
[root@localhost aaa]# su ls
[ls@localhost aaa]$ rm -rf haha/             (ls也是可以删除的)
[ls@localhost aaa]$ ls
[ls@localhost aaa]$ exit
exit

[root@localhost aaa]# mkdir haha
[root@localhost aaa]# cd ..
[root@localhost opt]# chmod o+t aaa/
[root@localhost opt]# ll
总用量 0
drwxr-xrwt. 3 root root 18 1223 09:22 aaa                        set(主、组)和粘滞(other)全都是在x位上进行表示
drwxr-xr-x. 2 root root  6 326 2015 rh
[root@localhost opt]# cd aaa/
[root@localhost aaa]# su ls
[ls@localhost aaa]$ rm -rf haha/
rm: 无法删除"haha/": 不允许的操作
[ls@localhost aaa]$ exit
exit
[root@localhost aaa]# su zs
[zs@localhost aaa]$ rm -rf haha/
rm: 无法删除"haha/": 不允许的操作

3、文件隐藏权限

chattr:更改权限 chattr:改变文件的属性
+a:不能删除文件和数据 -a
+i:不能更改文件和数据 -i
lsattr:显示权限列表 lsattr:显示文件的属性
例:

[root@lala ~]# cp /etc/passwd /etc/passwd.old
[root@lala ~]# chattr +a /etc/passwd.old
[root@lala ~]# lsattr /etc/passwd
---------------- /etc/passwd
[root@lala ~]# lsattr /etc/passwd.old 
-----a---------- /etc/passwd.old
[root@lala ~]# rm -rf /etc/passwd.old 
rm: 无法删除"/etc/passwd.old": 不允许的操作

[root@lala ~]# chattr +i /etc/passwd.old 
[root@lala ~]# vim /etc/passwd.old
→不允许修改数据

4、权限访问控制列表:setfacl

getfacl:取得某个文件/目录的ACL设置项目 获取目录或文件访问控制列表
setfacl:设置某个目录/文件的ACL规定

[root@lala ~]# touch zwl.txt
[root@lala ~]# ll
-rw-r--r--. 1 root root    0 326 15:02 zwl.txt
[root@lala ~]# setfacl -m g:root:rw zwl.txt                       -m,       --modify-acl 更改文件的访问控制列表
[root@lala ~]# ll zwl.txt
-rw-rw-r--+ 1 root root 0 326 15:02 zwl.txt
[root@lala ~]# setfacl -m o:wx zwl.txt 
[root@lala ~]# ll zwl.txt
-rw-rw--wx+ 1 root root 0 326 15:02 zwl.txt

[root@lala ~]# getfacl zwl.txt 
# file: zwl.txt
# owner: root
# group: root
user::rw-
group::r--
group:root:rw-
mask::rw-
other::-wx

[root@localhost ~]# touch 2.txt
[root@localhost ~]# getfacl 2.txt 
# file: 2.txt
# owner: root
# group: root
user::rw-       默认文件权限为644
group::r--
other::r--

[root@localhost ~]# setfacl -m g:root:rwx 2.txt 
[root@localhost ~]# getfacl 2.txt 
# file: 2.txt
# owner: root
# group: root
user::rw-
group::r--
group:root:rwx
mask::rwx
other::r--

[root@localhost ~]# setfacl -m o:wx 2.txt 
[root@localhost ~]# getfacl 2.txt 
# file: 2.txt
# owner: root
# group: root
user::rw-
group::r--
group:root:rwx
mask::rwx
other::-wx

5、强制要求用户更新密码

再次登录时需要先输入旧密码,再输入新密码,2次

[root@localhost ~]# useradd qqq
[root@localhost ~]# echo 123.com | passwd qqq --stdin
更改用户 qqq 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# chage -d 0 qqq               >>-d:指定密码最后修改日期
[root@localhost ~]# su qqq
[qqq@localhost root]$ sudo systemctl restart network
[sudo] password for qqq: 
sudo:账户或密码过期,重置您的密码并重试
为 qqq 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 密码与原来的太相似                 (尴尬)
新的 密码:                                   --不要过于简单化/系统化
重新输入新的 密码:
qqq 不在 sudoers 文件中。此事将被报告。                          //因为你没有配置sudo授权于用户
[qqq@localhost root]$ sudo -l
[sudo] password for qqq: 
对不起,用户 qqq 不能在 localhost 上运行 sudo。

6、修改历史命令显示条数

vim /etc/profile
HISTSIZE=1000			//显示历史命令条数1000修改为10,则只显示10.    /etc/profile

验证:再次history时,则只显示10条
export HISTSIZE=5		//只适用于当前用户

7、切换用户

su (switch user):切换用户
普通用户切换到root时需要密码(容易造成root密码泄露),root切换到普通用户无需密码
su -
带 - 选项表示切换用户并将使用目标用户的登录Shell环境

7-1)限制用户使用su命令

# 1、用户加入wheel组
gpasswd  -a  用户名  wheel

# 2、修改/etc/pam.d/su文件
启用auth            required        pam_wheel.so use_uid  (去掉#号)                            required:规定              wheel:轮(但在此命令中的意思是一个组)         auth:授权
没有经过认证的用户使用su命令的时候,会提示无权限
[[root@localhost ~]# su haha
[haha@localhost root]$ su root
密码:
[root@localhost ~]# su qqq
[qqq@localhost root]$ su root
密码:
su: 拒绝权限

7-2)配置sudo授权:

利用“命令所有者的身份”去执行命令(不需要切换到该用户,需要提前授权)
1)visudo
2)/etc/sudoers 需要用wq!或w!保存
添加:
哪些用户 哪些主机=哪些命令
pkr localhost=/sbin/fdisk,/sbin/reboot
wwx ALL=/sbin/ifconfig 允许wwx用户在所有主机上使用ifconfig命令
可以使用通配符*、取反符号!

验证:

[root@localhost ~]# su wwx
[wwx@localhost root]$ cd
[wwx@localhost ~]$ sudo useradd qqqqq
[sudo] password for wwx: 
对不起,用户 wwx 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/useradd qqqqq。
[wwx@localhost ~]$ sudo ifconfig ens33
[sudo] password for wwx: 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a535:642:e9fd:ceb7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c0:93:18  txqueuelen 1000  (Ethernet)
        RX packets 1165  bytes 84755 (82.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1058  bytes 80310 (78.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

输入所切换用户的密码就可以使用了

7-3)查看sudo操作记录

[root@localhost ~]# visudo       》》添加:Defaults logfile = 保存路径                                  注意:=号两旁必须有空格
[root@localhost ~]# tail /var/log/sudo 
[root@localhost ~]# su - haha
上一次登录:二 1222 23:23:50 CST 2020pts/0 上
[haha@localhost ~]$ sudo ifconfig
[sudo] password for haha: 
[haha@localhost ~]$ sudo systemctl restart network                    

启用日志配置以后,sudo操作过程才会被记录(正确+错误信息都会记录)
[haha@localhost ~]$ exit
登出

[root@localhost ~]# tail /var/log/sudo 
Dec 22 23:17:57 : haha : TTY=pts/0 ; PWD=/home/haha ; USER=root ;
    COMMAND=/sbin/ifconfig
Dec 22 23:18:11 : haha : TTY=pts/0 ; PWD=/home/haha ; USER=root ;
    COMMAND=/bin/systemctl restart network

sudo -l
查看当前用户默认条目(可以查看当前用户拥有哪些权限,可以执行哪些命令)

8、取消Ctrl+Alt+Del重启快捷键

systemctl mask ctrl-alt-del.target    (对虚拟机暂时无效)

恢复Ctrl+Alt+Del重启快捷键
systemctl unmask ctrl-alt-del.target 
systemctl daemon-reload 		//刷新systemd配置                  {daemon:守护进程}

9、禁用root用户登录某tty终端

在配置文件中用#注销掉不允许登录的终端即可

vim /etc/securetty 
#tty5
#tty6
#tty7

当服务器在进行备份或调解等维护工作时,若不希望再有新的用户登录系统。
禁用普通用户登录

touch /etc/nologin      >就创建个文件即可~

原理:利用了shutdown延迟关机的限制机制。如果希望用户登录,则删除此文件或重启即可。

10、弱口令检测

一、密码破解的三种方式:

1.暴力破解:使用密码破解软件,对指定范围的密码进行逐个对应计算。
2.密码字典破解:用户通过一个现有的密码字典,进行密码匹配。是否能够破解,取决于密码字典中的密码数量。
3.掩码破解:基于暴力破解的一种指定范围的方式。

二、使用john破解用户密码

破解原理:john工具通过扫描 shadow文件,对用户的密码进行反向推算,得到的值与密码字典中的值相同时,则表示该密码对应成功。如果不对,则对比字典中的下一条密码,直到全部对比完密码字典中的密码,或找到相同密码位置。
john the ripper,开源的密码破解工具,能够在已知密文的情况下快速分析出明文的密码子串,支持MD5、DES等多种加密算法。

# 1)安装
tar zxvf john-1.8.0.tar.gz -C /usr/src/
cd /usr/src/john-1.8.0/src
make clean linux-x86-64                     //编译内核版本到软件中

# 2)创建测试用户
useradd zhangsan                      
passwd zhangsan		123.com

useradd lisi
passwd lisi		1234.com

# 3)复制/etc/shadow到/tmp,防止源文件/etc/shadow被破坏导致计算机不能使用。并设置权限
cp /etc/shadow /tmp/
chmod +r /tmp/shadow

# 4)删除/tmp/shadow文件中不需要破解的用户
vim /tmp/shadow
将除了root、zhangsan、lisi的其他用户删掉,wq!保存

# 5)给john的密码字段中添加密码字符串
cd /usr/src/john-1.8.0/run
vim password.lst
添加:
123.com
1234.com
为了减少实验时间,除了“上述两个密码外,其余的都可以删掉”

# 6)开始破解
【在run目录之下才能执行如下命令】
./john /tmp/shadow 
Loaded 4 password hashes with 4 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123.com          (cxf)            #此用户之前就存在
123.com          (zhangsan)
1234.com         (lisi)
123.com          (root)
4g 0:00:00:38 100% 2/3 0.1043g/s 307.3p/s 314.8c/s 314.8C/s 123456..ncc1701   (100%是此工具在password.lst文件中查找的进程)
Use the "--show" option to display all of the cracked passwords reliably
Session completed

7)查看破解结果(并不会改变你原有文件中的数据)
./john --show /tmp/shadow

11、扫描工具(语法和类型)

扫描工具:
☑ 主机地址扫描工具:通过ping命令扫描或通过arp广播收集信息【常用,可以扫描网络中可以通讯的主机IP】
☑ 端口扫描:查看主机开启的服务端口【通过软件或测试脚本,对指定主机或指定范围的主机进行“后台端口扫描”】
☑ 端口漏洞扫描:需要使用软件或脚本进行扫描
☑ 系统漏洞扫描:补丁服务(可对本地或远程系统)
☑ 病毒木马扫描
NMAP作用:扫描网络中主机开启的服务端口
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

NMAP(端口扫描)

1)安装
yum -y install nmap

2)测试
nmap 127.0.0.1
测试本机开启的服务端口
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ipp
111/udp  open          rpcbind
5353/udp open|filtered zeroconf        以上服务默认存在


nmap -sT 192.168.6.50 (可以远程扫描)
测试相应主机的TCP端口

nmap -sU 192.168.6.50
测试相应主机的UDP端口

nmap -sn  192.168.6.0/24   测试整个网段中存在的主机
选项:
端口探测一般为-s开头
-sS  TCP SYN扫描:向目标发送SYN数据包,如果收到ACK就认为目标端口开启
-sF  TCP FIN扫描:检测防火墙是否强壮。向目标发送FIN数据包,如果收到RST就认为目标端口关闭
-sP  ICMP扫描:类似于ping检测
-P0  跳过ping检测
-v   启用细节模式。
-sL  仅列出指定网络上的每台主机,不发送任何报文到目标主机:192.168.1.0/24
-sO  确定目标主机支持哪些IP协议 
-O   探测目标主机的操作系统

拓展:

Linux内核升级:yum -y install kernel(uname -r:查看内核版本)

12、linux清空历史命令(history)

一、history -c
该命令可以清空本次登入的所有输出命令,但不清空.bash_history文件,所以下次登陆后,旧命令还将出现,历史命令是存在于当前用户根目录下的./bash_history文件。
二、echo > /home./用户/.bash_history
每个用户根目录下都有一个.bash_history文件用于保存历史命令,当每次注销时,本次登陆所执行的命令将被写入该文件。所以可以清空该文件,下次登陆后上次保存的命令将消失,清空效果将在下次登陆生效。

13、Chage命令 是用来修改帐号和密码的有效期限。

# 语法
chage [选项] 用户名

# 选项
-m: 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M: 密码保持有效的最大天数。                                                       
-w: 用户密码到期前,提前收到警告信息的天数。 
-E: 帐号到期的日期。过了这天,此帐号将不可用。 0表示马上过期,-1表示永不过期 
-d: 指定密码最后修改日期  
-i: 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
-h: 显示帮助信息并退出

14、setfacl的用途

setfacl的用途
setfacl命令可以用来细分linux下的文件权限。
chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。
换句话说,setfacl可以更精确的控制权限的分配。
比如:让某一个用户对某一个文件具有某种权限。

这种独立于传统的u,g,o的rwx权限之外的具体权限设置叫ACL(Access Control List)
ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。
如,某一个文件,不让单一的某个用户访问。

setfacl的用法

# 用法: setfacl { -m|-M|-x|-X ... }       {u|g|o|m}     file 

-m,       --modify-acl 更改文件的访问控制列表                    (多种选项结合时,-m一般跟在其他选项的后面)
-M,       --modify-file=file 从文件读取访问控制列表条目更改
-x,       --remove=acl 根据文件中访问控制列表移除条目
-X,       --remove-file=file 从文件读取访问控制列表条目并删除
-b,       --remove-all 删除所有扩展访问控制列表条目
-k,       --remove-default 移除默认访问控制列表
          --set=acl 设定替换当前的文件访问控制列表
          --set-file=file 从文件中读取访问控制列表条目设定
          --mask 重新计算有效权限掩码
-n,       --no-mask 不重新计算有效权限掩码
-d,       --default 应用到默认访问控制列表的操作(使用-d的话,就会把默认的都加上去,只针对目录哦。)
-R,       --recursive 递归操作子目录(在使用-R时,记得放在-m前面,否则不可以地)
-L,       --logical 依照系统逻辑,跟随符号链接
-P,       --physical 依照自然逻辑,不跟随符号链接
          --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
          --test 测试模式,并不真正修改访问控制列表属性
-v,       --version           显示版本并退出
-h,       --help              显示本帮助信息

Life needs not only to enjoy the pleasure, but also to think about the pain.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值