时间服务器、日志服务器以及sudo用法
chrony
对于时间服务器只介绍几个关键的核心知识:
- 在分布式环境中,相互协作的服务器不需要时间准确,但是要保证时间的一致性,但是有些服务会对时间的准确性有严格的要求。
- linux在启动时由内核读取硬件时间,启动后系统时间与硬件时间相互独立运行,没有交集。对于虚拟机来说,它的时间有天然的不确定性,因为它的CPU是由宿主机分配过来的一点CPU。所以假如宿主机的CPU时钟频率震荡为1分钟,那么虚拟机的可能也就是30秒。
- 假如服务器慢了24小时,不能将服务器的时间直接跳至准确的时间,因为中间的时间会出现空白,导致文件出现异常。所以需要将服务器的时间加快。直到它恢复正常时间。而不是直接跳转。
- linux开始使用的是ntp软件,后来使用的chrony。后者更好用,更方便
- 无论是ntp和chrony,既可以当作客户端,也可以当作服务端。也就是可以是单机同步,也可以让别人来同步你的时间。
测试环境:192.168.199.146为时钟服务器,192.168.1.229为客户端
(1)服务器和客户端都需要安装chrony
[aaa@qq.com ~]# yum info chrony
...
源 :installed
...
(2)配置文件:/etc/chrony.conf
对于主机来说只要开启了allow选项,那么它就充当了一个服务器的角色,它监听在udp的123和323端口。
而对于客户端来说,只需要将前面的server注释掉,换上远程服务器的地址即可。
补充说明:
- 启动服务是 chronyd.service
- 如果^后面出现?号的情况需要先查看防火墙,SE是否关闭,如果已经关闭,可以试着先stop一下,然后在启动试试。
- chronyc是一个交互工具,进入交互页面之后,可以使用help获取帮助,sources和sourcestats可以查看状态是否正常
日志服务器
对于日志服务器来说,有下面几个核心内容:
- rsyslog是syslog的升级版。支持C/S架构,可以当服务器或者客户端。
- 支持多线程,支持TCP、UDP、SSL、TLS、RELP协议,可以存储日志信息于文件,数据库等存储数据系统,可以过滤日志信息中的任何部分的内容
- rsyslog中有N个facility(设施),它可以将同类型应用程序的日志记录到一起,并且指明存放于何处
facility | 解释 |
---|---|
auth | 认证系统消息 |
authpriv | 权限系统消息 |
cron | 定时任务消息 |
daemon | 系统服务消息 |
kern | 内核消息 |
lpr | 打印系统消息 |
邮件服务消息 | |
news | 新闻系统消息 |
security | 安全服务消息 |
user | 用户服务消息 |
uucp | uucp生成的消息 |
local0-local7 | 自定义程序消息 |
syslog | 系统日志 |
- 日志优先级,危险程度由低到高排列
级别 | 解释 |
---|---|
debug | 调试 |
info | 提供信息 |
notice | 重要的普通信息 |
warn | 警告信息 |
err | 错误消息 |
crit | 程序不可行的消息 |
alert | 需要立即处理的消息 |
emerg | 系统崩溃消息 |
在实际生产环境中,一般使用warn及warn以上的级别消息。
- 程序配置文件:/etc/rsyslog.conf
- 主程序:rsyslog.service
使用rsyslog:
环境:服务器192.168.199.146(ydong1) 客户端:192.168.199.229(ydong2)
(1)系统默认安装了rsyslog,如果未安装,使用yum安装一下。
[rooaaa@qq.com ~]# yum info rsyslog
源 :installed
(2)对服务器端配置文件进行更改。/etc/rsyslog.conf
配置文件中分为三大段:
段落 | 解释 |
---|---|
MODULES | 模块管理 |
GLOBAL DIRECTIVES | 全局设置 |
RULES | 规则 |
对于服务器来说,需要监听在套接字上。TCP/UDP 的514端口。如下图:
RULES上的选项:
格式:facility.priority target(存储的地方)
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
#表示kern下所有级别的信息保存在/dev/console下
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#表示所有facility的info信息保存在/vat/log/messages下。除了mail,authpriv,cron。
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
#“-”表示异步写入,意思是先写在内存中,等内存容量到达一定程度在写入文件中。可以提高磁盘的IO能力。一般默认都是同步写入。
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
#表示所有facility的emerg消息全部发送给用户消息。 om表示输出模块
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
(3)客户端配置文件将需要发送的日志信息保存路径改为@远程服务器地址即可。
(4)将日志保存在数据库中。
-
安装rsyslog-mysql接口。
安装完成之后会产生两个程序文件,一个是处理模块,一个是rsyslog的mysql脚本。 -
导入脚本rsyslog-mysql脚本。
-
创建用户拥有syslog的一切权限
-
对配置文件进行更改
数据库填写格式:ommysql:数据库地址,数据库名称,用户名,密码
-
在客户端上安装mariadb服务,发现服务器上有日志消息
sudo用法
-
在生产环境中,root用户不能说随意登录,但是又有些命令是必须拥有特殊权限才可以使用。sudo就是来解决这一类问题的。它可以使普通用户临时使用别的身份来执行命令
-
授权文件:
/etc/sudoers
,此文件只是一个只读文件。我们修改使用visudo
-
授权语法:
users | hosts=(runas) | commands |
---|---|---|
用户名 | 主机地址=(运行身份) | 可运行命令 |
例如:
ydong ALL=(ALL) /usr/sbin/useradd #允许ydong用户在任何主机以任何身份可以运行useradd命令
补充:%号表示组内的用户可以拥有的权限,只可以是用户的基本组,附加组没有该处的权限
- sudo还用用户提供了别名服务,方便用户对命令的重复使用。不需要在为每个用户拥有相同的命令而一次次重写。
User_alias | Host_alias | Runas_alias | Cmnd_alias |
---|---|---|---|
用户别名 | 主机别名 | 运行别名 | 命令别名 |
定义的方法:ALIAS_TYPE NAME=item1,item2....
例如:User_alias animals=dog,cat,fish
-
sudo常用选项,可以使用-h来查看。
-
在配置文件中添加普通用户权限
[aaa@qq.com ~]$ useradd jerry
-bash: /usr/sbin/useradd: 权限不够
#无法直接使用命令进行添加用户,需要使用sudo
[aaa@qq.com ~]$ sudo useradd jerry
[sudo] ydong 的密码:
[aaa@qq.com ~]$
补充:当用户第一次使用sudo的话需要输入密码,短时间内在此使用是不用输入密码的。这个是由时间戳控制的。默认记录的时间为5分钟。-k选项可以清楚时间戳,让每次使用sudo的时候都输入密码。-l可以输出当前用户所拥有的权限
- 别名的使用
User_Alias LOCALNAME = jerry,paul
Cmnd_Alias USER_COMMAND = /usr/sbin/useradd,/sbin/userdel,/bin/passwd [a-z]*,!/bin/passwd root
LOCALNAME ALL=(ALL) USER_COMMAND
#为用户jerry,paul提供useradd userdel以及passwd命令,但是passwd命令不可以修改root的密码
[aaa@qq.com ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 jerry 可以在 ydong1 上运行以下命令:
(ALL) /usr/sbin/useradd, /sbin/userdel, /bin/passwd [a-z]*, !/bin/passwd root
[aaa@qq.com ~]$ sudo useradd user1
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
正在创建信箱文件: 文件已存在
[aaa@qq.com ~]$ sudo passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[aaa@qq.com ~]$ sudo userdel user1
[aaa@qq.com ~]$ sudo passwd root
对不起,用户 jerry 无权以 root 的身份在 ydong1 上执行 /bin/passwd root。
- 如果不想输入密码可以在配置文件中加上NOPASSWD即可
[aaa@qq.com ~]$ sudo useradd user2
[aaa@qq.com ~]$
#切换新用户后,不再输入密码
- sudo的日志默认存放在/var/log/secure里。可以设置专门放日志文件的地方。
[aaa@qq.com ~]# !tail
tail /var/log/sudo.log
Jun 22 18:57:32 : jerry : TTY=pts/2 ; PWD=/home/jerry ; USER=root ;
COMMAND=/sbin/userdel user3
Jun 22 18:58:23 : jerry : TTY=pts/2 ; PWD=/home/jerry ; USER=root ;
COMMAND=/sbin/useradd user3
Jun 22 18:59:02 : paul : TTY=pts/2 ; PWD=/home/paul ; USER=root ;
COMMAND=/sbin/userdel user3
Jun 22 19:00:11 : paul : command not allowed ; TTY=pts/2 ; PWD=/home/paul ;
USER=root ; COMMAND=chomd /etc/passwd
Jun 22 19:00:20 : paul : command not allowed ; TTY=pts/2 ; PWD=/home/paul ;
USER=root ; COMMAND=/bin/chmod /etc/passwd
#哪个用户执行哪个命令,哪个命令没有成功都会有所记载。
上一篇: HTML之HTML5增强表单标签
下一篇: 手写时钟
推荐阅读