用于 Linux 环境的杀毒软件 ClamAV, yyds!!!!
这是我参与更文挑战的第 26 天,活动详情查看:更文挑战
一名致力于在技术道路上的终身学习者、实践者、分享者,一位忙起来又偶尔偷懒的原创博主,一个偶尔无聊又偶尔幽默的少年。
欢迎各位掘友们微信搜索「杰哥的IT之旅」关注!
原文链接:详解 Linux 环境下防毒软件 ClamAV
在工作中,无论你是系统管理员也好,普通用户也罢。计算机都会存在这样的现象,第一:计算机系统本身的病毒,第二:黑客入侵他人计算机,而病毒的破坏性有大有小。例如:删除数据、窃取信息等等,不管怎么样,总之计算机用户会受到一定影响的。那么,我们就需要采取一些手段来进行保护;
今天给大家介绍一个 Linux 环境下防毒软件:ClamAV
ClamAV 介绍
ClamAV:是 Linux 操作系统上最流行的防病毒软件、GPL 协议免费发布、用于检测木马,病毒,恶意软件和其他恶意威胁的一个开源杀毒引擎。
ClamAV 的特点
ClamAV 的官网
官网地址:
www.clamav.net
源码包下载地址:
www.clamav.net/downloads
官网文档手册地址:
www.clamav.net/documents/c…
官网介绍地址:
www.clamav.net/documents/i…
ClamAV 的环境搭建与安装
系统环境:Centos 6.5
clamav version:clamav-0.101.2.tar.gz
1、首先要编写一个 YUM 仓库脚本,给予 755 的权限,然后执行 .sh 的文件。如果大家有不会 YUM 仓库的配置及使用的话,请参考:Linux 之 Yum 仓库的配置及使用
sh yum_install.sh
2、安装 Clamav 有如下两种方式:
通过 YUM 安装 Clamav 和一些组件;
用 epel 源进行安装,需要连网才可以。需要注意的是:不过一般能中毒的都是外网。
安装完成后会自动生成服务文件,服务启动后,可使用 clamdsacn 命令,扫描速度快,实时监控扫描连接情况,提高了安全性,不过可能会对服务器性能产生一定的影响。
yum install clamav clamav-server clamav-data clamav-update clamav-filesystem clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd
源码安装:需手动编译并安装,安装虽然不需要连网。
但更新病毒库还是需要联网安装后不用启动服务,不能使用 clamdsacn 命令,可使用 clamscan 命令,扫描速度相对较慢。
tar zxvf clamav-0.101.2.tar.gz
cd clamav-0.101.2
./configure --prefix=/usr/local/clamav --with-pcre
当执行完上述./configure --prefix=/usr/local/clamav --with-pcre命令后,会提示以下报错现象,具体的解决办法如下:
configure: error: newly created file is older than distributed files!
解决办法:
报错原因分析:
因为现在的时钟比文件的时间早,需要设置当前系统的时间超过文件创建时间;
参考 Linux 配置出现:
configure: error: newly created file is older than distributed files!
执行的命令如下:
hwclock --set --date="05/21/2019 13:14:52"
将所有文件设置成当前时间
参考 Linux 下修改文件创建时间,既修改文件更改时间;
执行的命令如下:
find . -name "*" -exec touch '{}' \;
执行完./configure后,将输出摘要的结果,来验证你实际安装的软件包是否已被检测到;
输出后的结果具体如下:
make && make install
修改配置文件
将 clamd.conf、freshclam.conf 配置文件中的第 8 行的 Example 注释掉
cd /usr/local/clamav/etc/
cp clamd.conf.sample clamd.conf
cp freshclam.conf.sample freshclam.conf
vi clamd.conf
vi freshclam.conf
创建用户及创建存放病毒库的目录
useradd clamav -s /sbin/nologin
mkdir -p /usr/local/clamav/share/clamav
chown clamav:clamav /usr/local/clamav/share/clamav
更新病毒库
保持更新、定期巡检病毒库十分重要,clamAV 提供了自动更新功能,其实用户可以使用命令行工具来进行手动更新病毒库;
需要注意的是:更新病毒库必须的联通外网;
/usr/local/clamav/bin/freshclam
扫描病毒
更新完病毒库后,接下来我们就可以扫描病毒库,看具体有能扫描出哪些选项?
例如:下面这条命令的意思是将扫描后缀名为.rar的文件类型的情况;
[root@localohost ~]# /usr/local/clamav/bin/clamscan --unrar
扫描完成后 clamscan 会显示一张表,将显示出本次扫描的结果。
==========扫描过程中之前的内容省略,下面是一部分扫描后的结果==========
/root/.gtk-bookmarks: OK
/root/.bash_logout: OK
/root/yum_install.sh: OK
/root/anaconda-ks.cfg: OK
/root/.pulse-cookie: OK
/root/.tcshrc: OK
/root/.bashrc: OK
/root/.esd_auth: OK
/root/.imsettings.log: OK
/root/.bash_history: OK
/root/.cshrc: OK
/root/.bash_profile: OK
/root/clamav-0.101.2.tar.gz: OK
/root/.ICEauthority: OK
/root/install.log.syslog: OK
/root/.viminfo: OK
----------- SCAN SUMMARY -----------
Known viruses: 6131551
Engine version: 0.101.2
Scanned directories: 1
Scanned files: 18
Infected files: 0
Data scanned: 21.02 MB
Data read: 20.78 MB (ratio 1.01:1)
Time: 74.598 sec (1 m 14 s)
得知扫描后的结果有如下几项:
clamscan常用参数选项
选项 | 适用的文件类型 | 执行命令示例 |
---|---|---|
-r | 所有文件 | /usr/local/clamav/bin/clamscan -r |
--unrar | .rar 文件 | /usr/local/clamav/bin/clamscan --unrar |
--arj | .arj 文件 | /usr/local/clamav/bin/clamscan --arj |
--unzoo | .zoo 文件 | /usr/local/clamav/bin/clamscan --unzoo |
--lha | .lzh 文件 | /usr/local/clamav/bin/clamscan --lha |
--jar | .jar 文件 | /usr/local/clamav/bin/clamscan --jar |
--deb | .deb 安装包 | /usr/local/clamav/bin/clamscan --deb |
--tar | .tar 文件 | /usr/local/clamav/bin/clamscan --tar |
--tgz | .tar.gz | /usr/local/clamav/bin/clamscan --tgz |
--log=FILE/-l FILE | 增加扫描日志 | /usr/local/clamav/bin/clamscan -l /var/log/clamscan.log |
--move=directory | 把病毒文件移动到目录directory下 | /usr/local/clamav/bin/clamscan --move /root |
--copy=directory | 把病毒文件复制到目录directory下 | /usr/local/clamav/bin/clamscan --copy /root |
--remove | 删除病毒文件 | /usr/local/clamav/bin/clamscan --move /abc |
--quiet | 输出错误消息 | /usr/local/clamav/bin/clamscan --quiet |
--infected/-i | 输出感染文件 | /usr/local/clamav/bin/clamscan -i |
--suppress-ok-results/-o | 跳过扫描OK的文件 | /usr/local/clamav/bin/clamscan -o |
定时扫描
除了上述扫描病毒以外,你也可以设置个定时任务来定时扫描病毒;
[root@localhost ~]# crontab -e
50 21 * * * /usr/local/clamav/bin/clamscan --tgz
原创不易,如果你觉得这篇文章对你有点用的话,麻烦你为本文点个赞、评论或转发一下,因为这将是我输出更多优质文章的动力,感谢!
对了,掘友们记得给我点个免费的关注哟!防止你迷路下次就找不到我了。
我们下期再见!
推荐阅读
-
用于 Linux 环境的杀毒软件 ClamAV, yyds!!!!
-
紧急模式问题处理 - 图 1 紧急模式 根本原因分析 应急模式提供了尽可能小的环境,即使无法进入应急模式,也可以在其中修复系统。在应急模式下,系统只安装根文件系统供读取,不尝试安装任何其他本地文件系统,不激活网络接口,只启动一些基本服务。 进入应急模式的原因通常是 /etc/fstab 文件中存在错误,导致文件系统挂载失败。 文件系统中存在错误,导致。 约束和限制 本节适用于 Linux 操作系统紧急模式。程序涉及修复文件系统。修复文件系统有丢失数据的风险,因此请先备份数据,然后再执行修复操作。 处理方法 输入根密码,然后进入修复模式。 在应急模式下,根分区以只读模式挂载。要修改根目录中的文件,需要执行以下命令以读写模式重新挂载根分区。# mount -o rw,remount / 请执行以下命令首先检查 fstab 文件是否有误,然后尝试挂载所有未挂载的文件系统。# mount -a 如果挂载点不存在,请创建一个挂载点。 如果不存在此类设备,请注释或删除挂载行。 如果指定了不正确的挂载选项,请将挂载参数更改为正确的参数。 如果没有发生错误,但出现 UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 消息(通常是由文件系统错误引起的),请跳至第 7 步。 执行以下命令打开 /etc/fstab 以修改相应的错误。# vi /etc/fstab /etc/fstab 文件包含以下字段,以空格分隔:[文件系统] [dir] [type] [options] [dump] [fsck] 表 1 /etc/fstab 参数 说明 参数 说明 [文件系统] 要挂载的分区或存储设备。 文件系统]列建议以 UUID 的形式写入。执行 blkid 命令可查询设备文件系统 UUID。 参考格式如下: # <device> <dir> <type> <options> <dump> <fsck>; UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 使用 UUID 的好处是,它们与磁盘顺序无关。如果你在 BIOS 中更改了存储设备的顺序,或重新插入了存储设备,或者因为某些 BIOS 可能会随机更改存储设备的顺序,那么使用 UUID 会更有效率。 [文件系统] 文件系统]的挂载位置。 类型 挂载设备或分区的文件系统类型,支持多种不同的文件系统:ext2、ext3、ext4、reiserfs、xfs、jfs、smbfs、iso9660、vfat、ntfs、swap 和 auto。 设置为自动类型后,挂载命令会猜测所使用的文件系统类型,这对 CDROM 和 DVD 等移动设备非常有用。 选项 挂载时要使用的参数,有些参数是特定文件系统特有的。例如,默认值参数使用文件系统的默认挂载参数,ext4 的默认参数为:rw、suid、dev、exec、auto、nouser、async。 有关更多参数,请执行以下命令查看 man 手册:# man mount
-
经过专业测试且可用的 Linux 仿真环境(Ubuntu 18.04 下),可运行俄罗斯方块游戏 ------ --- 可用于强化学习算法的游戏模拟器环境
-
= 0; i--) {
printf("%5d", *(p + i));
}
printf("\n");
return 0;
}
```
2. 利用指针计算奇数索引数组元素之和
```c
// 使用指针计算奇数索引数组元素之和
#include
int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = sizeof(arr) / sizeof(arr[0]); printf("数组元素: "); for (int i = 0; i < n; i++) { printf("%3d", arr[i]); // 宽度为3,右对齐 } printf("\n"); printf("数组下标: "); for (int i = 0; i < n; i++) { printf("%3d", i); // 宽度为3,右对齐 } printf("\n"); int sum = 0; int *p = arr; // 声明指向整数的指针 for (int i = 0; i < n; i++) { if (i % 2 != 0) { sum += *(p + i); // 若索引i为奇数,累加对应元素值 } } printf("奇数索引数组元素之和: %d\n", sum); return 0; } ``` 3. 查看不同类型指针在Linux Ubuntu gcc下的字节大小 ```c // 在Linux Ubuntu gcc环境下查看不同类型指针的字节大小 #include #include int main() { printf("int指针大小: %zu bytes\n", sizeof(int *)); printf("char指针大小: %zu bytes\n", sizeof(char *)); printf("float指针大小: %zu bytes\n", sizeof(float *)); printf("double指针大小: %zu bytes\n", sizeof(double *)); return 0; } ``` 请注意,对于现代64位系统(如Linux),`int`、`char`、`float`和`double`指针通常都是8字节。但在某些特定情况下(如32位系统或特定编译环境),可能有所不同。 4. 使用指针遍历并打印字符数组 ```c // 使用指针遍历并打印字符数组 #include #include // 引入strlen函数 int main() { char str[] = "Hello, World"; // 字符串常量 int len = strlen(str); // 获取字符串长度 char *ptr = str; // 定义指向字符的指针 printf("输出字符串: %s\n", str); // 输出原始字符串 printf("遍历并打印字符数组: "); for (int i = 0; i < len; i++) { printf("%c", *ptr); // 输出当前字符 ptr++; // 移动指针到下一个字符 } printf("\n"); return 0; } ``` 对于用户自定义输入字符串的情况,请参考以下代码: ```c #include #include int main() { char input[100]; // 用于存放用户输入的字符串,假设最大长度为100 printf("请输入字符串: "); fgets(input, sizeof(input), stdin); // 从标准输入读取字符串,fgets会保留换行符 int len = strlen(input) - 1; // 去掉fgets读取的换行符 char *ptr = input; // 定义指向字符的指针 printf("输入的字符串: %s\n", input); printf("遍历并打印字符数组: "); for (int i = 0; i < len; i++) { printf("%c", *ptr); // 输出当前字符 ptr++; // 移动指针到下一个字符 } printf("\n"); return 0; } ```"> 1. 使用指针倒序显示整数数组内容 ```c // 通过指针逆序打印整数数组 #include
#include #include int main() { int arr[10] = {0}; int n = sizeof(arr) / sizeof(arr[0]); srand(time(NULL)); printf("原始数组: "); for (int i = 0; i < n; i++) { arr[i] = rand() % 100; printf("%5d", arr[i]); } printf("\n"); int *p = arr; // 指针指向数组元素 printf("反转打印数组元素: "); for (int i = n - 1; i >= 0; i--) { printf("%5d", *(p + i)); } printf("\n"); return 0; } ``` 2. 利用指针计算奇数索引数组元素之和 ```c // 使用指针计算奇数索引数组元素之和 #include int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = sizeof(arr) / sizeof(arr[0]); printf("数组元素: "); for (int i = 0; i < n; i++) { printf("%3d", arr[i]); // 宽度为3,右对齐 } printf("\n"); printf("数组下标: "); for (int i = 0; i < n; i++) { printf("%3d", i); // 宽度为3,右对齐 } printf("\n"); int sum = 0; int *p = arr; // 声明指向整数的指针 for (int i = 0; i < n; i++) { if (i % 2 != 0) { sum += *(p + i); // 若索引i为奇数,累加对应元素值 } } printf("奇数索引数组元素之和: %d\n", sum); return 0; } ``` 3. 查看不同类型指针在Linux Ubuntu gcc下的字节大小 ```c // 在Linux Ubuntu gcc环境下查看不同类型指针的字节大小 #include #include int main() { printf("int指针大小: %zu bytes\n", sizeof(int *)); printf("char指针大小: %zu bytes\n", sizeof(char *)); printf("float指针大小: %zu bytes\n", sizeof(float *)); printf("double指针大小: %zu bytes\n", sizeof(double *)); return 0; } ``` 请注意,对于现代64位系统(如Linux),`int`、`char`、`float`和`double`指针通常都是8字节。但在某些特定情况下(如32位系统或特定编译环境),可能有所不同。 4. 使用指针遍历并打印字符数组 ```c // 使用指针遍历并打印字符数组 #include #include // 引入strlen函数 int main() { char str[] = "Hello, World"; // 字符串常量 int len = strlen(str); // 获取字符串长度 char *ptr = str; // 定义指向字符的指针 printf("输出字符串: %s\n", str); // 输出原始字符串 printf("遍历并打印字符数组: "); for (int i = 0; i < len; i++) { printf("%c", *ptr); // 输出当前字符 ptr++; // 移动指针到下一个字符 } printf("\n"); return 0; } ``` 对于用户自定义输入字符串的情况,请参考以下代码: ```c #include #include int main() { char input[100]; // 用于存放用户输入的字符串,假设最大长度为100 printf("请输入字符串: "); fgets(input, sizeof(input), stdin); // 从标准输入读取字符串,fgets会保留换行符 int len = strlen(input) - 1; // 去掉fgets读取的换行符 char *ptr = input; // 定义指向字符的指针 printf("输入的字符串: %s\n", input); printf("遍历并打印字符数组: "); for (int i = 0; i < len; i++) { printf("%c", *ptr); // 输出当前字符 ptr++; // 移动指针到下一个字符 } printf("\n"); return 0; } ``` -
在Linux环境下使用Intel编译器安装NetCDF-Fortan库的步骤(适用于4.2及更高版本)