Linux系统安全及应用

简介:

    作为一个开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。下面主要从账户安全、系统引导、登录控制的角度,优化Linux系统的安全性


账号安全控制

    用户账号,是计算机使用者的身份凭证,每个访问系统资源的人,必须要有账号才能登录计算机,在Linux中,提供了多种机制来确保用户账号的安全使用

1. 基本安全措施

(1)系统账号清理、锁定

    在Linux系统中,除了用户手动创建的各种账号外,还包括随系统或程序安装过程中生成的大量其他账号,用来维护系统运作、启动或保持服务进程,一般不允许登陆,称为非登录用户。为了保持系统安全,这些用户的登陆shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动

1
2
3
4
5
6
7
[root@localhost ~] # grep "/sbin/nologin$" /etc/passwd 
bin:x:1:1:bin: /bin : /sbin/nologin
daemon:x:2:2:daemon: /sbin : /sbin/nologin
adm:x:3:4:adm: /var/adm : /sbin/nologin
lp:x:4:7:lp: /var/spool/lpd : /sbin/nologin
mail:x:8:12:mail: /var/spool/mail : /sbin/nologin
……   // 省略部分内容


   各种非登录用户中,有一些很少用到,如news、uucp、games、gopher。可使用冗余账户,直接删除即可,还有一些随着应用程序的卸载未能自动删除,则需要管理员手动清除

1
2
3
[root@localhost ~] # userdel uucp
[root@localhost ~] # userdel games
[root@localhost ~] # userdel gopher


    对于一些长期不用的账号,若无法确定是否删除,应暂时锁定(用usermod、passwd命令都可以锁定、解锁账号)

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # usermod -L ysf                       //锁定账号
[root@localhost ~] # passwd -S ysf                        //查看账号状态
ysf LK 2017-12-22 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~] # usermod -U ysf                       //解锁账号
[root@localhost ~] # passwd -S ysf
ysf PS 2017-12-22 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
[root@localhost ~] # passwd -l ysf
锁定用户 ysf 的密码 。
passwd : 操作成功
[root@localhost ~] # passwd -u ysf
解锁用户 ysf 的密码 。
passwd : 操作成功


    如果服务器中的账号已经固定,不进行更改,可以采用锁定账号配置文件的方法。使用chattr命令锁定、解锁文件,使用lsattr查看文件锁定情况

1
2
3
4
5
6
7
8
9
[root@localhost ~] # chattr +i /etc/passwd /etc/shadow              //+i,锁定文件
[root@localhost ~] # lsattr /etc/passwd /etc/shadow                 //查看文件锁定情况
----i--------e-  /etc/passwd
----i--------e-  /etc/shadow
[root@localhost ~] # useradd yangshufan            //文件锁定,无法添加、删除用户,也不能更改用户的密码、登陆shell、宿主目录等属性
useradd : cannot  open  /etc/passwd
[root@localhost ~] # chattr -i /etc/passwd /etc/shadow              //-i,解锁文件
[root@localhost ~] # useradd yangshufan                             //正常创建用户
[root@localhost ~] #


(2)密码安全控制

   为了降低密码被猜出或暴力破解的风险,应避免长期使用同一个密码。管理员可以在服务器端限制用户密码使用最大有效期天数,对密码已过期的用户,登录时要求重新设置密码,否则拒绝登录

1
2
3
4
5
6
7
8
[root@localhost ~] # vim /etc/login.defs                   //适应于新建的用户
PASS_MAX_DAYS   30               // 密码最多使用30天,必须更改密码
PASS_MIN_DAYS   0                // 密码最少使用0天,才能更改密码
PASS_MIN_LEN    5                // 可接受的密码长度       
PASS_WARN_AGE   7                // 密码到期前的警告时间
 
[root@localhost ~] # chage -M 30 ysf           //适用于以存在的用户,密码30天过期
[root@localhost ~] # chage -d 0 yangshufan          //下次登录时,必须更改密码


(3)命令历史、自动注销

    shell环境下,命令历史机制为用户提供了极大的便利,也带来了一些潜在的风险。只有获得用户的命令历史记录,该用户的命令操作将一览无余,服务器的安全将受到威胁。历史命令记录条数有变量HISTSIZE控制,默认1000条,可修改配置文件,影响系统中的所有用户。

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # vim /etc/profile           //适用于新登录用户
HISTSIZE=100
[root@localhost ~] # HISTSIZE=5          //适用于当前用户
[root@localhost ~] # history 
    96  chage -d 0 yangshufan
    97  vim  /etc/profile
    98   export  HISTSIZE=100
    99   export  HISTSIZE=5
   100   history 
[root@localhost ~] # vim ~/.bash_logout        //添加以下语句,用户退出登录bash时,自动清空历史命令
history  -c
clear


    bash终端环境中,可设置一个闲置超时时间,当超过指定的时间没有任何输入时,自动注销终端。由变量TMOUT控制,默认单位

1
2
3
4
5
[root@localhost ~] # vim /etc/profile         //适用于新登录用户
export  TMOUT=600
 
[root@localhost ~] # TMOUT=600               //适用于当前用户
[root@localhost ~] # unset TMOUT             //如果进行耗时较长的操作,避免打扰,可取消TMOUT变量



2. 用户切换与提权

    一般情况下,不建议直接使用root用户登录,一是减少因操作失误而造成的破坏;二是降低特权密码被泄露的风险。鉴于这些原因,需要为普通用户提供一种身份切换或权限提升机制,以进行管理任务

(1)su命令——切换用户

    使用su命令,可以切换一个指定的用户,拥有该用户的所有权限

1
2
3
4
[root@localhost ~] # su - ysf            //root切换为普通用户,不需要密码验证
[ysf@localhost ~]$  su  -                  // 普通用户切换为root,需要验证,root可省略
密码:
[root@localhost ~] #


   默认所有用户允许使用su命令,从而有机会反复尝试其他用户(root)的登陆密码,带来安全风险。可以使用pam_wheel认证模块,只允许极个别用户使用su命令进行切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~] # vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid       // 这行去掉注释 
[root@localhost ~] # su - ysf
[ysf@localhost ~]$  su  - root            // 再次尝试切换,就会提示密码错误
密码:
su : 密码不正确
[ysf@localhost ~]$  exit
logout
[root@localhost ~] # gpasswd -a ysf wheel          //添加授权用户到wheel组
Adding user ysf to group wheel
[root@localhost ~] # grep wheel /etc/group         //查看wheel组成员
wheel:x:10:ysf
[root@localhost ~] # su - ysf                      
[ysf@localhost ~]$  su  -                            // 再次尝试切换,切换成功
密码:
[root@localhost ~] #


(2)sudo命令——提升执行权限

    使用su命令虽然可以切换为root用户,但必须知道root密码要知道每多一个人知道特权密码,就多一份风险。而sudo命令可以让普通用户拥有一部分root用户才能执行的命令,有不用知道特权密码

1)修改配置文件/etc/sudoers

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # visudo        //也可使用vi进行编辑,但保存是必须执行“:w!”强制执行
%wheel          ALL=(ALL)       NOPASSWD: ALL         //wheel 组的用户不需要密码验证
yangshufan      localhost= /sbin/ifconfig              //yangshufan 能在主机localhost上执行 ifconfig 命令修改IP地址
 
User_Alias      USER=ysf,yang
Host_Alias      HOST=win,www
Cmnd_Alias      CMND= /bin/rpm , /usr/bin/yum
USER            HOST=CMND                       // 这四行表示允许用户ysf,yang在主机win,www上执行rpm,yum命令
 
yang            localhost= /sbin/ *,! /sbin/ifconfig       //yang 可以执行在 /sbin 目录下除了 ifconfig 外所有的命令程序
 
Defaults logfile= "/var/log/sudo"               // 启用 sudo 日志记录以备管理员查看


2)通过sudo执行特权命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[yangshufan@localhost ~]$  ifconfig  eth0:0 10.0.0.1 /8           // 未用 sudo 命令
SIOCSIFADDR: 权限不够
SIOCSIFFLAGS: 权限不够
[yangshufan@localhost ~]$  sudo  ifconfig  eth0:0 10.0.0.1 /8        // 使用 sudo 命令
……   // 省略部分内容
[ sudo ] password  for  yangshufan:                              // 验证密码
[yangshufan@localhost ~]$  ifconfig  eth0:0                    // 查看命令,执行成功
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB  
           inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 
[yangshufan@localhost ~]$  sudo  -l                 // 查看获得哪些 sudo 授权
[ sudo ] password  for  yangshufan:  
用户 yangshufan 可以在该主机上运行以下命令:
     (root)  /sbin/ifconfig       
     
[root@localhost ~] # tail /var/log/sudo           //可以看到用户的sudo操作记录
Dec 27 07:49:35 : yangshufan : TTY=pts /0  ; PWD= /home/yangshufan  ; USER=root ;
     COMMAND= /sbin/ifconfig  eth0:0 10.0.0.1 /8



系统引导和登录控制

    现在,大部分服务器是通过远程登录的方式来进行管理的,本地引导和终端登录过程往往被忽视,从而留下安全隐患。

1. 开关机安全控制

   对于服务器主机,其物理安全是非常重要的,除了要保持机箱完好、机柜锁闭、严格控制机房人员进出、硬件设备现场接触等,在开关机方面,还要做好系统本身的安全措施

(1)调整BIOS引导设置    

* 将第一优先引导设备设为当前系统所在磁盘

* 禁止从其他设备引导系统,对应的项为Disabled

* 将BIOS安全级别改为setup,并设好管理密码,以防止未授权修改


(2)禁止Ctrl+Alt+Del快捷键重启

1
2
3
[root@localhost ~] # vim /etc/init/control-alt-delete.conf 
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"             //加#,注释信息
[root@localhost ~] # reboot                                           //重启生效


(3)限制更改GRUB引导参数

    通过修改GRUB引导参数进入单用户模式,不需要密码就可以进入系统,而且还用于root权限,只应在紧急情况下使用。从系统安全角度来看,如果任何人都能修改GRUB引导参数,对服务器来说是个极大地威胁。所以需要为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

1
2
3
4
5
6
7
8
[root@localhost ~] # grub-md5-crypt           //经过MD5算法加密的字符串,安全性更好
Password: 
Retype password: 
$1$vkPke/$TRfLUURiy7XMKa13XgvIH1              // 经过加密的密码字符串
 
[root@localhost ~] # vim /boot/grub/grub.conf 
password --md5 $1$vkPke/$TRfLUURiy7XMKa13XgvIH1            // 复制密码,添加到第一个title之前就可以了
……   // 省略部分内容


    再次修改GRUB菜单时,必须输入正确的GRUB密码,如下图所示

杨书凡04.png



2. 终端及登录控制

    在Linux中,默认开启了留个tty终端,允许任何用户进行本地登录,可从以下方面限制本地登录:

(1)减少开放的tty终端个数

    对于远程维护的Linux服务器,六个tty终端有些多余

1
2
3
4
5
6
7
8
9
/etc/init/tty .conf                     // 控制 tty 终端的开启
/etc/init/start-ttys .conf              // 控制 tty 终端的开启数量、设备文件
/etc/sysconfig/init                    // 控制 tty 终端的开启数量、终端颜色
 
[root@localhost ~] # vim /etc/init/start-ttys.conf  
env  ACTIVE_CONSOLES= /dev/tty [1-3]                        // 修改为1-3
[root@localhost ~] # vim /etc/sysconfig/init 
ACTIVE_CONSOLES= /dev/tty [1-3]                            // 修改为1-3
[root@localhost ~] # reboot

   重启后,将无法切换到tty4、tty5、tty6


(2)禁止root用户登录

    在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端登录。若要禁止root用户从指定的终端登录,只需注释或删除对应的行即可

1
2
3
[root@localhost ~] # vim /etc/securetty 
#tty1
#tty2


(3)禁止普通用户登录

    当服务器在维护时,不希望普通用户登录系统,只需建立/etc/nologin文件即可。当login程序检测到/etc/nologin文件存在时,将拒绝普通用户登录系统(root除外)

1
[root@localhost ~] # touch /etc/nologin

    当收到删除/etc/nologin文件或重启主机后,即可恢复正常    




弱口令检测、端口扫描

1. 弱口令检测——John the Ripper

    过于简单的密码是服务器面临的最大风险,尽管大家知道设置一个更长、更复杂的密码会更安全,但总有人贪图方便而采用简单、易记的密码。对于任何一个承担着安全责任的管理员,及时找出这些弱口令账户是非常重要的,这样更容易采取安全措施(如提醒重设更安全的密码)

   John the Ripper是一款开源的密码破解工具,能在已知密文的情况下,快速分析明文的密码字串,支持DES、MD5等多种加密算法,允许使用密码字典进行暴力破解。通过John the Ripper,可以检测Linux/UNIX系统用户的密码强度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost ~] # tar zxf john-1.8.0.tar.gz
[root@localhost ~] # cd john-1.8.0
[root@localhost john-1.8.0] # ls -ld *
drwxr-xr-x. 2 root root 4096 12月 27 09:45 doc                            // 手册文档
lrwxrwxrwx. 1 root root   10 12月 27 09:45 README -> doc /README           // 链接文件
drwxr-xr-x. 2 root root 4096 12月 27 09:45 run                            // 运行程序
drwxr-xr-x. 2 root root 4096 12月 27 09:45 src                            // 源码文件
 
[root@localhost john-1.8.0] # cd src/
[root@localhost src] # make clean linux-x86-64                    //切换到src目录下,编译
……   // 省略编译信息
[root@localhost src] # ls ../run/john                            //run子目录生成john可执行程序
.. /run/john
[root@localhost src] # cp /etc/shadow /etc/shadow.txt            //准备待破解的密码文件
[root@localhost src] # cd ../run
[root@localhost run] # ./john /etc/shadow.txt                    //执行暴力破解,破解后信息保存到john.pot文件
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [? /64 ])
Press  'q'  or Ctrl-C to abort, almost any other key  for  status
ysf              (ysf)
123              (yangshufan)
……   // 按Ctrl+C,终止后续过程
[root@localhost run] # ./john --show /etc/shadow.txt             //可通过--show选项,查看已破解的账户列表
ysf:ysf:17527:0:30:7:::
yangshufan:123:17527:0:99999:7:::
2 password hashes cracked, 1 left
 
[root@localhost run] # :> john.pot                       //清空以破解的账户列表,以便使用密码字典重新破解
[root@localhost run] # ./john --wordlist=./password.lst /etc/shadow.txt              //提供默认的密码字典password.lst,可往里添加更多密码组合
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [? /64 ])
Press  'q'  or Ctrl-C to abort, almost any other key  for  status
123              (yangshufan)
1g 0:00:00:18 100% 0.05467g /s  193.8p /s  393.0c /s  393.0C /s  !@ #$%..sss
Use the  "--show"  option to display all of the cracked passwords reliably
Session completed

    从上可看出,由于密码字典的密码组合较少,仅破解出一个其中密码。也不难看出像这类密码有多么脆弱了




2. 网络扫描——NMAP

    NMAP是一款强大的端口扫描类安全评测工具,支持ping扫描、多端口检测、OS识别等多种技术。使用NMAP定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,较少安全风险

1
2
3
[root@localhost ~] # mount /dev/cdrom /media/
mount : block device  /dev/sr0  is write-protected, mounting  read -only
[root@localhost ~] # rpm -ivh /media/Packages/nmap-5.51-3.el6.x86_64.rpm

 

    NMAP的扫描程序位于/usr/bin/nmap目录下,命令基本格式如下:

nmap  [扫描类型]  [选项]  [扫描目标...]


    其中:

扫描目标:可以是主机名、IP地址、网络地址等,多个目标以空格分隔

选项:-p指定扫描的端口;-n禁用反向解析(加快扫描)    

常用的扫描类型如下

-sS:TCP SYN扫描(半开扫描),只向目标发送SYN数据包,如果收到SYN/ACK响应就认为目标正在监听,并立即断开连接;否则就认为目标端口未开放

-sT:TCP连接扫描,完整的TCP扫描方式,如果成功连接就认为目标端口正在监听;否则就认为目标端口未开放

-sF:TCP FIN扫描,开放的端口会忽略,关闭的端口会回应RST数据包。这种方式扫描可间接检测防火墙的健壮性

-sU:UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描会比较慢

-sP:ICMP扫描,快速判断目标主机是否存活,不做其他扫描

-s0:跳过ping检测,当对方不响应ICMP请求时,使用这种方式可避免因无法ping通而放弃扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~] # nmap 127.0.0.1                 //扫描常用的TCP端口
Not shown: 995 closed ports
PORT     STATE SERVICE
22 /tcp    open   ssh
25 /tcp    open   smtp
111 /tcp   open   rpcbind
631 /tcp   open   ipp
3306 /tcp  open   mysql
 
[root@localhost ~] # nmap -sU 127.0.0.1            //扫描常用的UDP端口
PORT    STATE         SERVICE
111 /udp  open           rpcbind
631 /udp  open |filtered ipp
 
[root@localhost ~] # nmap -p 21 192.168.1.0/24     //检测192.168.1.0/24网段有哪些主机提供FTP服务
 
[root@localhost ~] # nmap -n -sP 192.168.1.0/24     //检测192.168.1.0/24网段有哪些主机存活(能ping通)
 
[root@localhost ~] # nmap -p 139,445 192.168.4.10-20   //检测192.168.10-20的主机是否开启文件共享服务









本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2054982,如需转载请自行联系原作者
目录
相关文章
|
23小时前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
9 5
|
3月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
65 5
|
3月前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
6月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
277 4
|
6月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
641 3
|
6月前
|
存储 监控 Linux
在Linux中,如何进行虚拟化技术的应用?
在Linux中,如何进行虚拟化技术的应用?
|
6月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
6月前
|
监控 安全 Linux
在Linux中,如何进行系统安全加固?
在Linux中,如何进行系统安全加固?
|
6月前
|
存储 监控 Linux
在Linux中,如何进行容器技术的应用?
在Linux中,如何进行容器技术的应用?
|
6月前
|
算法 Ubuntu Linux
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?

热门文章

最新文章