【笔记】文件隐藏权限、特殊权限 & 定时任务(1)

文件的隐藏权限

作用: 让文件更加安全(配置或者代码文件密码文件)
查看文件的隐藏权限: 文件默认没有隐藏权限

[root@b13k ~]#lsattr test.txt 
---------------- test.txt

i 无敌的 加上i权限 无法写入 删除 增加内容
a 只能追加内容 无法vim写入 删除

[root@b13k ~]#lsattr test.txt 	#查看隐藏权限
---------------- test.txt
[root@b13k ~]#chattr +i test.txt 	#增加隐藏权限i
[root@b13k ~]#lsattr test.txt 
----i----------- test.txt
[root@b13k ~]#rm -f test.txt 
rm: cannot remove ‘test.txt’: Operation not permitted
[root@b13k ~]#vim test.txt 
[root@b13k ~]#ll
total 0
-rw-r--r-- 1 root root 0 May 24 08:55 test.txt
[root@b13k ~]#echo hehe > test.txt
-bash: test.txt: Permission denied
[root@b13k ~]#ll
total 0
-rw-r--r-- 1 root root 0 May 24 08:55 test.txt
[root@b13k ~]#cat test.txt 
[root@b13k ~]#lsattr test.txt 
----i----------- test.txt
[root@b13k ~]#chattr -i test.txt 	#取消隐藏权限: -i


[root@b13k ~]#lsattr test.txt 
---------------- test.txt
[root@b13k ~]#lsattr +a test.txt	#增加隐藏权限a
[root@b13k ~]#lsattr test.txt 
-----a---------- test.txt
[root@b13k ~]#echo hehe >> test.txt 
[root@b13k ~]#cat test.txt 
hehe

注意:
1.在企业中注意 无法对一个文件进行修改操作时注意查看是否有隐藏权限
2.如果没有隐藏权限需要查看第三方安全软件

特殊权限

suid = 4 让用户执行命令的时候拥有命令所有者的权限
sgid = 2 让用户执行命令的时候拥有属组的权限
粘滞位t = 1 给目录增加时只有目录内文件的所有者或者root才可以删除或移动该文件

给/usr/bin/rm 授权 suid后 rm的权限由0755 变为 4755

[root@b13k ~]#ll /usr/bin/rm
-rwxr-xr-x 1 root root 62872 Nov 17  2020 /usr/bin/rm
[root@b13k ~]#
[root@b13k ~]#chmod u+s /usr/bin/rm
[root@b13k ~]#ll /usr/bin/rm
-rwsr-xr-x 1 root root 62872 Nov 17  2020 /usr/bin/rm
[root@b13k ~]#stat /usr/bin/rm
  File: ‘/usr/bin/rm’
  Size: 62872     	Blocks: 128        IO Block: 4096   regular file
Device: 803h/2051d	Inode: 50359588    Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-05-24 08:24:35.921007844 +0800
Modify: 2020-11-17 06:24:58.000000000 +0800
Change: 2022-05-24 09:23:02.726308884 +0800
 Birth: -

如何在在Linux系统中做一个共享目录 所有的用户都可以在这个目录下有创建文件的权限
所有的用户都可以在此目录下可以创建自己的文件 但是其他用户不能删除自己的文件

使用粘滞位

[root@b13k ~]#chmod o+t /data	
[root@b13k ~]#ll -d /data
drwxrwxrwt 2 root root 6 May 24 17:33 /data
[root@b13k ~]#su - ahui
Last login: Tue May 24 17:40:59 CST 2022 on pts/0
[ahui@b13k ~]$touch /data/haha.txt
[ahui@b13k ~]$exit
logout
[root@b13k ~]#su - stu1
Last login: Tue May 24 17:39:09 CST 2022 on pts/0
[stu1@b13k ~]$rm -f /data/haha.txt 
rm: cannot remove ‘/data/haha.txt’: Operation not permitted

定时任务(1)

作用: 在固定的时候完成固定的命令

比如:

  • 在凌晨对重要的文件进行打包 备份到备份服务器
  • 在什么时候备份:
    在业务的低谷期进行备份
    压缩占用CPU (把多个文件压缩成一个然后在拷贝到备份服务器 减少磁盘的IO INPUT OUTPUT)
    一台服务器发送文件到另外一个服务器
    业务的低谷期:
    通过监控手段: zabbix cacti 日志 ELK

定时任务分类

定时任务服务名称: crond # 默认开启 类似于 sshd服务
查看定时任务状态:

	[root@b13k ~]#systemctl status crond
	● crond.service - Command Scheduler
	Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
	Active: active (running) since Wed 2021-12-29 16:38:42 CST; 4 months 23 days ago

定时任务分为两类:
第一种定时任务: 用户定时任务 默认为空 家庭 普通用户的需要注意权限问题

创建定时任务:

  • 第一种方式: crontab -e 创建定时任务 有语法检测功能
    实际编辑的/var/spool/cron/用户名
    例如当前root用户 /var/spool/cron/root
    例如当前ahui用户 /var/spool/cron/ahui
    crontab -l 查看用户的定时任务 默认为空
  • 第二种方式: vim /var/spool/cron/root 直接编辑配置文件 建议不使用没有语法检测功能

第二种定时任务: 系统定时任务 国家
直接编辑配置文件
vim /etc/crontab #

用户定时任务和系统定时任务区别: 权限区别
1) root权限高
2) 普通用户只能处理自己相关的文件 没有权限对系统文件进行处理
3) 执行时间同步的时候用户的和系统没有任何区别
4) 执行脚本 如果在系统目录下普通用户需要有x执行权限 在普通用户家目录下可以直接执行
5) 普通用户只能使用cron -e 进行编辑定时任务 无法通过vim编辑配置文件 没有权限

定时任务相关配置文件

  1. /var/spool/cron/用户名文件 # 用户定时任务配置文件
  2. /etc/crontab # 系统定时任务配置文件
  3. /var/log/cron # 定时任务日志文件
  1. 配置定时任务
    # 系统定时任务使用 vim /etc/crontab
    # 用户定时任务使用 crontab -e

时间使用五颗星来定义:
第一颗星: 表示每分钟 0-59 0表示整点 60分
第二颗星: 表示时 0-23 0表示晚上12点
第三颗星: 表示天 1-31
第四颗星: 表示月 1-12
第五课星: 表示周 1-7 星期天可以使用0或者7来表示

凌晨12点表示方式
00 00 * * *

定时任务语法:
时间 用户名称 可执行命令
* * * * * user-name command to be executed

* 表示每的意思
* * * * * 表示每分钟
*/n 间隔n分钟
*/3 每间隔3分钟执行一次
*/5 每间隔5分钟执行一次 创建定时任务的时间为11:02分 请问下次执行时间是多少? 按照整点计算
*/30 每间隔30分钟执行一次
- 区间范围
1-8 表示从1点到8点
, 时间分隔
1-8,14,18 表示早上1-8点和下午的的2点和下午的6点执行任务

案例1: 每天的上午8点30分,来学校上车(go to school)

30 8 * * * echo go school
30 08 * * * echo go school

案例2: 每天晚上12点准时,回家自己开车(go to bed)

* 12 * * * echo go to bed # 不正确
* 00 * * * echo go to bed # 不正确 表示凌晨12点的每分钟都执行 凌晨 12:01 12:02 … 1:00
00 00 * * * echo go to bed# 正确的

案例3:凌晨12点进行打包/etc/passwd文件

两种方案:
第一种:
crontab -e
00 00 * * * tar zcvf all.tar.gz /etc/passwd

第二种:
vim /etc/crontab
00 00 * * * root tar zcvf all.tar.gz /etc/passwd

案例4: 每天上午的7点到11点执行命令

00 07-11 * * * 命令 # 如果多条命令建议写入脚本 在定时任务执行脚本
00 07-11 * * * sh /server/scripts/test.sh

案例5: 每1分钟把自己的名字 追加到 /ahui/ahui.txt

* * * * * whoami|tail -1 >> /ahui/ahui.txt

案例6: 系统时间同步使用cront -e来定义

第一步: 将时间修改为date -s 20081010
第二步: 通过定时任务配置每分钟进行一次时间同步 ntpdate ntp1.aliyun.com

在使用crontab -e定义配置文件时 配置文件只识别的PATH变量 只有 /usr/bin 和 /bin
crontab -e 编辑的定时任务 命令只搜索/usr/bin和/bin目录
注意: 在使用crontab -e编辑定时任务配置文件前需要先重新定义一下PATH变量

[root@b13k ~]# crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
* * * * * echo ahui > /ahui/ahui.txt
* * * * * ntpdate ntp1.aliyun.com

可以通过绝对路径执行解决PATH找不到问题

[root@b13k ~]# crontab -l
* * * * * echo ahui > /ahui/ahui.txt
* * * * * /usr/sbin/ntpdate ntp1.aliyun.com

定时任务注意事项:

  1. 定时任务规则前加注释 给我们自己看的 作用是什么

  2. 使用脚本执行定时任务
    超过两条以上的命令写入脚本 在定时任务调用脚本
    cat /server/script/test.sh
    touch /tmp/1.txt
    useradd test01

    crontab -e
    * * * * * sh /server/scripts/test.sh

  3. 定时任务中时间的%不识别 需要使用\转义

  4. 执行脚本前面使用sh 或者 bash(如果不加必须给脚本x执行)

  5. 定时任务结果定向到/dev/null 或者写入到文件中

    1. 如果不定向空 会一直发送邮件给root(发送邮件导致系统性能低)
    2. 在对外提供服务的服务器上需要把邮件服务关闭
    3. 如果关闭了邮件 定时任务的结果没有定向到空 则会在系统中产生临时小文件 每执行1个定时任务 就生成1个小文件
      如果定时任务有50条 每分钟执行一次 每分钟会生成50个小文件 时间久了会耗尽inode
      每个文件最少占用1个inode号码
      查看inode号码
      [root@b13k ~]# df -i
      Filesystem      Inodes IUsed   IFree IUse% Mounted on
      /dev/sda3      9858560 61348 9797212    1% /
      
  6. 通过两个日志文件检查定时任务:
    1.通过/var/log/cron 检查命令的完整性
    2.通过查看/var/spool/mail/root 邮件中的内容

  7. 默认的cronta -e 只识别的路径/usr/bin /bin
    解决方法:
    第一种: 在配置文件中定义PATH路径 建议使用第一种方式
    第二种: 命令使用绝对路径执行
    第三种: 把命令写入脚本 在脚本文件中定义PATH变量

[root@b13k ~]# crontab -l
* * * * * sh /root/ntp.sh

[root@b13k ~]# cat ntp.sh 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ntpdate ntp1.aliyun.com

关闭邮件服务并且开机禁止启动

[root@b13k ~]# systemctl stop postfix
[root@b13k ~]# 
[root@b13k ~]# systemctl disable postfix
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.

复制定时任务中每分钟的任务粘贴200行进行测试
等待一分钟后查看邮件目录 发现生成了200多小文件

[root@b13k ~]# ll /var/spool/postfix/maildrop/|wc -l
207

解决方法:

  1. 将命令的结果定向到空或者文件 建议使用第一种
  2. 通过定时任务定时删除/var/spool/postfix/maildrop/ 所有小文件
  3. 开启邮件服务

小结:

  1. 文件的隐藏权限
    i 无敌的 加上i权限 无法写入 删除 增加内容
    a 只能追加内容 无法vim写入 删除

    lsattr file\dir #查看文件隐藏权限
    chattr +-i\a file\dir # 给文件或目录增加或去掉隐藏权限

  2. 特殊权限
    suid 4 让用户执行命令的时候拥有命令所有者的权限
    sgid 2 让用户执行命令的时候拥有属组的权限
    粘滞位 1 给目录增加时只有目录内文件的所有者或者root才可以删除或移动该文件

  3. 定时任务重要内容:
    * * * * * 分时日月周
    * 表示每
    */5 表示每5分钟
    1-8 区间范围
    , 时间分隔 1-4,8,10

    注意事项:

    1. PATH变量问题 crontab -e 只识别/usr/bin /bin
    2. %不识别 加转义 (写入脚本中 定时任务调用脚本)
    3. 执行脚本前面 sh bash 必须给脚本执行权限
    4. 将定时任务的结果定向到空或者文件中

你可能感兴趣的:(笔记,linux)