Linux门禁安全措施详解 (linux门禁security)

在当今信息技术高度发达的时代,安全问题显得尤为重要,安全的门禁系统也成为各种场所必不可少的设备之一。随着Linux操作系统的广泛应用,越来越多的门禁系统开始选用Linux作为核心操作系统,本文将详细介绍Linux门禁安全措施,为您带来全面的门禁安全解决方案。

一、Linux门禁系统的安全威胁

任何门禁系统都有其自身的安全威胁,对于运行Linux操作系统的门禁系统来说更是如此。以下是Linux门禁系统可能面临的安全威胁:

1. 远程攻击:攻击者可以通过网络对门禁系统进行攻击,比如通过网络病毒、木马、黑客攻击等方式入侵系统,从而实现非法的门禁控制或信息窃取等活动。

2. 物理攻击:攻击者可以通过物理手段破坏门禁系统,比如通过砸、损坏、撬门等手段进入受保护区域,篡改门禁系统数据、改变门禁设置等。

3. 存储攻击:攻击者可以通过存储攻击修改系统文件,比如篡改运行脚本、修改记录文件等。

以上安全威胁为Linux门禁系统带来了安全隐患,需要针对这些威胁采取措施,以保障门禁系统的安全稳定运行。

二、安全措施

1. 防止远程攻击

(a) 安装防病毒软件:在Linux门禁系统上安装防病毒软件可以有效预防病毒和木马攻击,保障系统的安全性。

(b) 配置防火墙:配置Linux系统的防火墙可以防范黑客攻击、网络攻击等,保证门禁系统的通信安全。

(c) 密码强度管理:在门禁系统中,设置足够复杂、难以破解的口令、用户名,以提高门禁系统防护能力,防止非法用户的入侵。

(d) 定期备份:通过定期进行备份或映像,可以快速地恢复系统到原始状态,防止因远程攻击导致的数据丢失或损坏。

2. 防止物理攻击

(a) 控制物理访问权限:在门禁系统的实施过程中,设置门禁系统的访问权限。控制访问门禁系统的人员的权限,限制他们可以进入的区域、使用的设备等,保护门禁系统开关等设备的完整性和安全。

(b) 使用环境监测技术:利用门禁系统中的环境监测技术,可以实时监测门禁系统设备的状态,发生异常时及时报警,从而防止攻击者修改门禁系统数据、改变门禁设置等。

(c) 使用加密技术:在门禁系统数据通信过程中,使用一定的加密技术,避免在传输过程中数据被他人窃取或篡改,保障数据传输的安全性。

3. 防止存储攻击

(a) 设置初始化环境:通常会将Linux门禁系统设备设置成一个独立的环境,以减少系统出现意外情况,从而提高系统的安全性和稳定性。

(b) 加密存储设备:在存储门禁系统数据时,将数据设备进行加密,避免数据被未经授权的人访问、修改,更大程度地保障数据的安全性。

(c) 升级及修补安全问题:在Linux门禁系统中,经常会发现一些安全问题,比如漏洞等。门禁系统管理员可以根据需要及时升级、修补,确保门禁系统的信息安全。

综上所述,对于Linux门禁系统,要想保障其安全性以及长时间稳定的运行,需要大量的安全措施,包括防止远程攻击、防止物理攻击、防止存储攻击等方面的措施。对于这些措施的执行者来说,需要认真细致、周到的考虑门禁系统的安全性和稳定性,为门禁系统运营提供安全可靠的保障。

相关问题拓展阅读:

linux内核态,在L框架中的文件操作hook接口中如何获取一个正在作的文件的内容?(linux4.4版本)

L是Linux Secrity Module的简称,即linux安全模块。其是一种轻量级通用访

问控制框架,适合于多种访问控制模型在它上面以内核可加载模块的形实现。用

户可以根据自己的需求选择合适的安全模块加载到内核上实现。

L设计思想:

L的设计思想:在最少改变内核代码的情况下,提供一个能够成功实现强制访

问控制模块需要的结构或者接口。L避免了利用如在systrace系统调用中的出

现过的系统调用干预,因为它不能扩展到多处理器内核,并且它受制于参数替换

攻击。还有L在设计时做了两点考虑:对不使用的人来说尽量少引入麻烦,对

使用的人来说要带来效率。以

Linus Torvalds

为代表的内核开发人员对Linux安

全模块(L)提出了三点要求:

1、真正的通用,当使用一个不同的安全模型的时候,只需要加载一个不同的内

核模块。

2、概念上简单,对

Linux内核

影响最小,高效,并且。

3、能够支持现存的POSIX.1e capabilities逻辑,作为一个可选的安全模块。

还有,针对linux上提出的各种不同的Linux安全增强系统对Linux安全模块(L

)提出的要求是:能够允许他们以可加载内核模块的形式重新实现其安全功能,

并且不会在安全性方面带来明显的损失,也不会带来额外的系统开销。

L框架结构:

L框架主要由五部分构成:

1、在特定的内核

数据结构

中加入安全域。

2、在内核

源代码

中不同的关键点插入对安全钩子函数的调用。

3、加入一个通用的安全系统调用。

4、提供了函数允许内核模块注册为安全模块或者注销。

5、5、将capabilities逻辑的大部分移植为一个可选的安全模块。

安全域是一个void*类型的指针,它使得安全模块把安全信息和内核内部对象联

系起来。下面列出被修改加入了安全域的内核数据结构,以及各自所代表的内核

内部对象:

task_struct结构:代表任务(进程)

linux_binprm结构:代表程序

super_block结构:代表

文件系统

inode结构:代表管道,文件,或者Socket

套接字

file结构:代表打开的文件

sk_buff结构:代表网络缓冲区(包)

net_device结构:代表

网络设备

kern_ipc_perm结构:代表Semaphore信号,共享内存段,或者

消息队列

msg_msg:代表单个的消息

Linux安全模块(L)提供了两类对安全钩子函数的调用:一类管理内核对象的

安全域,另一类仲裁对这些内核对象的访问。对安全钩子函数的调用通过钩子来

实现,钩子是全局表security_ops中的

函数指针

,这个全局表的类型是

security_operations结构,这个结构定义在include/linux/security.h这个头

文件中。

L接口的核心是security_ops,当系统启动时,他们被初始化为传统的DAC策略

。传统DAC访问控制是指控制系统中的主体(如进程)对系统中的客体(如文件

目录、文件)的访问(读、写和执行等)。自主访问控制DAC 是指主体(进程,

用户)对客体(文件、目录、特殊设备文件、IPC等)的访问权限是由客体的属

主或超级用户决定的,而且此权限一旦确定,将作为以后判断主体对客体是否有

访问权限的依据。

在加载安全模块时,我们必需先对模块进行注册,我们可以使用

register_security()函数向L注册一个安全模块。在我们的模块被加载成

功后,就可以进行访问控制操作。如果此时还有一个安全模块要使用

register_security()函数进行加载,则会出现错误,直到使用

unregister_security()函数向框架注销后,下一个模块才可以载入。当然LS

M还提供了mod_reg_security()函数和mod_unreg_security()函数,可以连续注

册多个安全模块。如果有其他后来的模块需要载入,可以通过mod_reg_security

()向之一个模块注册,形成支持不同策略的模块栈。

注:以上出现的函数均基于2.6.22以前的版本,对于后续的版本,出现了

register_security()函数未被导出或者取消掉了unregister_security()函数。

L执行过程:

根据下图的执行步骤:用户在执行系统调用时,先通过原有的内核接口依次执行

功能性的错误检查,接着进行传统的DAC检查,并在即将访问内核的内部对象之

前,通过L钩子函数调用L。L再调用具体的访问控制策略来决定访问的合

法性。图三显示了L钩子的调用:

图三:基于L的内核对象访问过程

Lilinux安全模块(L)主要支持”限制型”的访问控制决策:当Linux内核授予

文件或目录访问权限时,Linux安全模块(L)可能会拒绝,而当 Linux内核拒

绝访问时,可以跳过L。

========

使用L实现自己的访问控制

首先对L 进行简单介绍。虽然linux下的各位基本都知道一些,但是还要罗嗦

一下。

L中文全称是linux安全模块。英文全称:linux security module.

L是一种轻量级、通用的访问控制框架,适合多种访问控制模型以内核模块的

形式实现。其特点是通用、简单、高效、支持POSIX。1e能力机制。

L的架构图如下:

通过系统调用进入内核之后,系统首先进行传统的权限检查(传统权限检查主要

是基于用户的,用户通过验证之后就可以访问资源),通过之后才会进行强制访

问控制。(强制访问控制是不允许主体干涉的一种访问控制,其采用

安全标识

信息分级等信息敏感性进行访问控制。并且通过比较主体的级别和资源的敏感性

来确定是否允许访问。比如说系统设置A用户不允许访问文件B,即便A是文件B的

所有者,访问也是受限制的。)从图上看来,L实现访问控制主要通过安全模

块的钩子函数实现。

L框架主要由五部分组成:这个网上资料很多。

在关键的特定内核数据结构中加入了安全域;

在内核源码中不同的关键点处插入对安全钩子函数的调用;

提供了一个通用的安全系统调用;

提供了注册和注销函数,使得访问控制策略可以以内核模块方式实现;

将capabilities逻辑的大部分功能移植为一个可选的安全模块。

我们这里重点结合源码对L框架进行解释。我使用的源码是3.5.4

首先介绍安全域字段,它是一个空类型的指针,在内核中的很多内核结构中都存

在,比如inode、superblock、dentry、file等等。类型字段为void *

security;

那么安全域怎么和安全模块中的信息关联起来?

当安全模块加载之后,安全域中的指针便指向安全模块中的安全信息。这里以

selinux为例进行介绍。

内核里面security/selinux/include/objsec.h中定义了不同对象的安全信息,

格式为XXX_security_strut.

上面的文件的安全信息里面包含打开

文件描述符

时的安全ID、文件所有者的安全

ID等等。

要联系安全模块中安全信息和安全域需要几个控制钩子函数。这些钩子函数实现

了对内核关键信息的设置和管理。这里主要介绍alloc_security、

free_security。

selinux里面通过实现安全信息空间分配实现关联。比如以文件安全信息为例

这里分配空间成功之后,通过file->f_security = fsec实现了关联。

撤销关联是在安全模块卸载之后调用file_free_security.

这里具体通过设置file->f_secrity为NULL,然后释放安全信息结构实现。

现在来看看内核如何实现selinux的访问控制。这里主要就是实现L里面的钩子

函数了。L里面给出了

结构体

security_operations,里面给出了很多钩子函数

,实现了相关钩子函数就可以实现访问控制了。

上面的函数就实现了file_permission钩子函数。可以看下inode结构体的获得,

感受内核是通过文件->目录项->inode。该函数主要实现自己的访问控制策略就

OK 了。

哪selinux来说,在获得文件安全ID之后,主要对

掩码

和文件打开时相关的安全

信息进行检测,符合就通过访问控制。

selinux基本实现了L里面的所有钩子函数,待钩子函数实现后,对L里面钩

子域进行填充就OK了。

做完以上这些还需要注册安全模块到L,这里注册和注销使用了

register_security和unregister_security。

比如selinux在注册时使用语句register_security(&selinux_ops)实现。

接下来通过上面的分析我们可以实现简单的基于L的访问控制。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static int l_test_file_permission(struct file *file,int mask)

{

int path=0;

struct file *filp;

struct nameidata nd;

path = path_lookup(FILENAME,LOOKUP_FOLLOW,&nd);

if(!mask)

return 0;

if(path)

{

printk(“lookup file failed!\n”);

return -1;

}

filp = filp_open(“/home/yuyunchao/code/.c”,O_RDON,0);

{

printk(“open failed!\n”);

}

return 0;

}

static struct security_operations l_test_security_ops = {

.file_permission = l_test_file_permission,

};

static int __init l_file_init(void)

{

if(register_security(&l_test_security_ops)){

printk(“register error ……….\n”);

return -1;

}

printk(“l_file init..\n “);

return 0;

}

static void __exit l_file_exit(void)

{

if(unregister_security(&l_test_security_ops)){

printk(“unregister error…………….\n”);

return ;

}

printk(“module exit…….\n”);

}

MODULE_LICENSE(“GPL”);

module_init(l_file_init);

module_exit(l_file_exit);

========

L(Linux Security Module)应用方法(简单例子)

L在内核中很多地方已经插入了hook函数,并且在security.c函数中声明了

security_ops结构,要实现你自己的安全模块,只需要定义你自己的struct

security_operations,并且用register_security注册即可,下面举个简单例子

test.c代码如下:

/*

* Test Linux Security Module

*

* Author: penghuan

*

* Copyright (C) 2023 UbuntuKylin, Ltd.

*

* This program is free software; you can redistribute it and/or modify

* it under the terms of the GNU General Public License version 2, as

* published by the Free Software Foundation.

*

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int test_file_permission(struct file *file, int mask)

{

char *name = file->f_path.dentry->d_name.name;

if(!strcmp(name, “test.txt”))

{

file->f_flags |= O_RDON;

printk(“you can have your control code here!\n”);

}

return 0;

}

static struct security_operations test_security_ops = {

.name = “test”,

.file_permission = test_file_permission,

};

static __init int test_init(void)

{

printk(“enter test init!\n”);

printk(KERN_INFO “Test: becoming……\n”)

if (register_security(&test_security_ops))

panic(“Test: kernel registration failed.\n”);

return 0;

}

security_initcall(test_init);

将该文件以模块的形式放到security/下编译进内核,启用新的内核后,当你操

作文件test.txt时,通过dmesg命令就能再终端看到”you can have your

control code here!“输出

所以一般的做法是:定义你自己的struct security_operations,实现你自己的

hook函数,具体有哪些hook函数可以查询include/linux/security.h文件,然后

调用register_security来用你的test_security_ops初始化全局的security_ops

指针

楼主,我刚开始研究L,但网上资料太少,您这个代码,我编译成ko文件老是

有警告,并且inod时,说Unknown symbol register_security。我最近看了看

内核模块变成,没有对内核进行太深入的了解。不知能否把L的实验步骤给出

的再详细点,谢谢。

你需要把代码编进内核

是需要把那段源码拷到内核目录下,然后重新编译内核?。。没有不编译内核的

方法吗?。。直接按照模块进行编译。另外那个test.txt放在哪个文件夹里?。

是需要把那段源码拷到内核目录下,然后重新编译内核?。。没有不编译内核的

方法吗?。。直接按照模块进行 …

是的,你去网上找下怎么把模块编进内核,l模块不能以模块方式加载,涉及

安全;test.txt是测试文件,当你把代码编进内核后,用新内核启动,然后操作

test.txt文件,就会有输出,test.txt随便放哪里

楼主,您好,我刚开始学习l模块,把您的模块编译进内核,新的内核加载后

,register_security总是失败,请问下可能是什么原因导致的。我的内核版本

是3.13.11。

register_security的返回值是-11

========

L在Linux中的实现方式

L(Linux Secure Model)一种轻量级访问控制机制.

其实现方式有如在系统调用中加入一个后门….

方式如下:

static struct file *__dentry_open(struct dentry *dentry, struct

vfount *mnt,

struct file *f,

int (*open)(struct inode *, struct file *),

const struct cred *cred)

{

struct inode *inode;

int error;

………………………………………………………

error = security_dentry_open(f, cred); //L机制实现方式,在此加入了

一个L函数.

//security_dentry_open的实现如下,相当于一个接口,对一个函数指针再

//封装一下.

//只返回是与否,这样的控制信息.

if (error)

goto cleanup_all;

……………………………………………………….

return f;

cleanup_all:

………………………………………………………..

return ERR_PTR(error);

}

//========简单封装一个指针结构体===========================

int security_dentry_open(struct file *file, const struct cred *cred)

{

int ret;

ret = security_ops->dentry_open(file, cred);

if (ret)

return ret;

return fsnotify_perm(file, MAY_OPEN);

}

========

利用L实现更安全的linux

L的全称是Linux Security Modules,它是linux内核中用来支持更灵活的

安全策略的一个底层框架,虽然听起来比较复杂,但是可以就把它理解成一组安

插在linux内核的钩子函数和一些预留的被称为安全域的数据结构,下面先说说

这个框架的由来吧。

linux本身的机制就保证了linux拥有更好的安全机制,但是在这个机制下面

,还是隐藏了许多的问题:

1、权限粒度太大。用过linux的人应该对0644这样的访问权限设置不陌生,

它对能够操作这个文件的用户做了限制,但是这个只是限制到了组,而没有更进

一步的细分,当然,如果L只是用来限制这个的话,那么也就太没意思了,因

为实现文件更细的控制粒度,ACL就能够很出色的完成,顺便提一下,ACL有一个

分配的限制,如果哪位朋友需要用ACL进行粒度更细的访问权限控制的话,可能

需要注意一下这方面的东西。

2、root用户的权限太大。在linux中,root用户就是至高无上的,他拥有对

机器的完全控制权限,可以做他想做的一切事情。但是很多时候,我们可能并不

希望有root有这么大的权限,比如在现在比较流行的云存储中,用户肯定不希望

服务提供商能够随意访问我们的文件,那么这个时候,就需要对root用户进行一

定的设置了。

由于这些问题的存在,所以出现了像SE Linux(Securiy Enhanced Linux )

这样的增强补丁。但是每个系统对于具体安全细节的控制不尽相同, 所以Linus

Tovalds 提出应该要有一个 Linux 内核所能接受的安全框架来支持这些安全策

略,这个安全框架应该提供包含内核数据结构中的透明安全域以及用来控制、维

护安全域操作的安全钩子,于是就有了L。

L在内核中的位置,可以用下图来表示:

当用户态程序调用某些操作系统提供的函数的时候,比如read()函数,其会

对应于内核中的一个系统调用,然后该首先会进行一些常规的错误检测,接着进

行DAC(Discretionary Access Control)检测,再接着它会进行L检测。从上

图中能够看出来,L其实是一个非常底层的安全策略框架,利用L,可以接管

所有的系统调用,这样,我们就能对包括root在内的所有用户的权限进行控制,

并且实现粒度更细的访问权限控制。

当系统初始化的时候,L就是一个空的框架,它不提供任何的检测,其所

做的全部工作几乎就是返回0,当然,有些不带返回值的函数除外。而我们则可

以针对自己特定的需求来编写L,然后将我们编写的L钩子函数,通过其数据

结构struct security_operations注册到系统中去,这样,我们的L检测就开

始起作用了。

更多信息可参考《Linux就该这么学》

关于linux门禁security的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux门禁安全措施详解 (linux门禁security)