网上流传的安全的rm,几乎都是提供一个rm的”垃圾”回收站,在服务器环境上来说,这实非良方。
我想,提供一个安全的rm去保护一些重要的文件或目录不被删除,避免出现重要数据误删的悲剧,或许才是更佳方案。
我写了一个脚本: ,源码和用法本文后面已经提供了,不过各位愿意捧场的可以去github上点个star。
rm_is_safe
会创建一个名为/bin/rm
的shell脚本,同时会备份原生的/bin/rm为/bin/rm.bak。所以,原来如何使用rm,现在也以一样的方式使用rm,没有任何区别。
为了区分原生rm和伪装后的安全的rm,下面将伪装的rm命令称为rm_is_safe
。
rm_is_safe
会自动检查rm被调用时传递的参数,如果参数中包含了重要文件,可能意味着这是一次危险的rm操作,rm_is_safe
会直接忽略本次rm。至于哪些属于重要文件,由你自己来决定。
rm_is_safe
对所有用户都有效,包括目前已存在的用户和未来新创建的用户。
根目录/
以及根目录下的子目录、子文件总是自动被保护的
你可以在/etc/curity/rm_fileignore
中定义你自己觉得重要的文件,每行定义一个被保护的文件路径。例如:
/home/junmajinlong/home/junmajinlong/apps
现在,该文件中定义的两个文件都被保护起来了,它们是安全的,不会被rm删除。
注意事项:
显然,被保护的目录是不会进行递归的,所以’/bin’是安全的,而’/bin/aaa’是不安全的,除非你将它加入/etc/curity/rm_fileignore文件中根目录/
以及根目录下的子目录是自动被保护的,不用手动将它们添加到/etc/curity/rm_fileignore中/etc/curity/rm_fileignore文都市职场电视剧件中定义的路径可以包含任意斜线,rm_is_safe
会自动处理。所以,’/home/junmajinlong中学生自我介绍范文8217;和’/home///junmajinlong/////’都是有效路径/etc/curity/rm_fileignore中定义的路径中不要使用通配符,例如/home/*
是无效的1.执行本文后面提供的shell脚本:
$ s余秋雨语录udo bash rm_is_safe.sh
执行完成后,你的rm命令就变成了安全的rm了。
2.如果确实想要删除被保护的文件,比如你明确知道/data是可以删除的,那么你可以使用原生的rm命令,即/bin/rm.bak来删除。
$ rm.bak /path/to/file
3.如果你想要卸载rm_is_safe
,执行函数uninstall_rm_is_safe
即可:
# 如果找不到该函数,则先exec bash,再执行即可$ uninstall_rm_is_safe
卸载完成后,/bin/rm
就变回原生的rm命令了。
脚本如下,假设其文件名为rm_is_safe.sh
:
#!/bin/bash################################ author: www.junmajinlong.com################################ generate /bin/rm# 1.create file: /etc/curity/rm_fileignore# 2.backup /bin/rm to /bin/rm.bakfunction rm_is_safe(){ [ -f /etc/curity/rm_fileignore ] || touch /etc/curity/rm_fileignore if [ ! -f /bin/rm.bak ];then file /bin/rm | grep -q elf &&a老年护理学mp; /bin/cp -f /bin/rm /bin/rm.bak fi cat >/bin/rm<<'eof'#!/bin/bashargs=$(echo "$*" | tr -s '/' | tr -d "27" )safe_files=$(find / -maxdepth 1 | tr '\n' '|')$(cat /etc/curity/rm_fileignore | tr '\n' '|')echo "$args" | grep -qp "(?:${safe_files%|})(?:/?(?=\s|$))"if [ $? -eq 0 ];then echo -e "'\e[1;5;33mrm $args\e[0m' is not allowed,exit..." exit 1fi/bin/rm.bak "$@"eof chmod +x /bin/rm}# for uninstall rm_is_safe# function `uninstall_rm_safe` ud for uninstallfunction un_rm(){ # make efforts for all ur if [ ! -f /etc/profile.d/rm_is_safe.sh ];then shopt -s nullglob for uh in /home/* /root /etc/skel;do shopt -u nullglobcat >>$uh/.bashrc<<'eof'# for rm_is_safe:[ -f /etc/profile.d/rm_is_safe.sh ] && source /etc/profile.d/rm_is_safe.sheof done ficat >/etc/profile.d/rm_is_safe.sh<<'eof'function uninstall_rm_is_safe(){ unt uninstall_rm_is_safe /bin/unlink /etc/curity/rm_fileignore 南开大学在哪/bin/cp -f /bin/rm.bak /bin/rm /bin/unlink /etc/profile.d/rm_is_safe.sh shopt -s nullglob for uh in /home/* /root /etc/skel;do shopt -u nullglob d -ri '\%# for rm_is_safe%,\%/etc/profile.d/rm_is_safe.sh%d' $uh/.bashrc done}export -f uninstall_rm_is_safeeof}rm_is_safeun_rm
本文发布于:2023-04-03 22:56:06,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/65fbe0509511eda6ad640d7044fef10d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:更安全的rm命令,保护重要数据.doc
本文 PDF 下载地址:更安全的rm命令,保护重要数据.pdf
留言与评论(共有 0 条评论) |