基础服务
服务DNS 域名解析 端口53(bind)
主要文件
/etc/named.conf #bind的配置文件
/var/named/alvinyuan.zone #你自己编写的zone
/etc/resolv.conf #指定DNS服务器所在的IP地址
安装
yum install -y bind*
#(6:bind 7:unbound)
编写主配置文件:vim /etc/named.conf
listen -on port 53 {any;};
allow -query {any;};
zone "alvinyuan.com" IN {
type master;
file "alvinyuan.zone";
};
zone "110.132.in-addr.arpa" IN {
type master;
file "110.132.zone";
};
数据配置文件名:alvinyuan.zone 与主配置文件一致,110.132.zone是反向解析数据文件
正向解析
vim /var/named/alvinyuan.zone
$TTL 600
@ IN SOA web.alvinyuan.com. root.alvinyuan.com. (
2009050401
3600
600
3600000
1800 )
@ IN NS web.alvinyuan.com.
web IN A 192.168.110.132
www IN A 192.168.110.133
monitor IN A 192.168.110.134
dns中记录的类型
SOA:起始授权记录
NS:域名服务记录
NS web.alvinyuan.com. #指定dns服务器
www A 192.168.110.132 #A代表正向解析
A:ipv4记录
AAAA:ipv6记录
反向解析
vim /var/named/110.132.zone
反向解析
$TTL 600
@ IN SOA web.alvinyuan.com. root.alvinyuan.com. (
2009050401
3600
600
3600000
1800 )
@ IN NS web.alvinyuan.com.
132 IN PTR web.alvinyuan.com.
133 IN PTR www.alvinyuan.com.
134 IN PTR monitor.alvinyuan.com.
指定DNS服务器所在的IP地址
vim /etc/resolv.conf
nameserver 192.168.110.132
重启服务:
systemctl start named
验证:ping 域名,地址自动解析成数据文件的IP
nslookup web.alvinyuan.com
dig web.alvinyuan.com
服务DHCP 动态主机配置协议:端口67
BOOTP:在主板上一段程序单向输出
1:服务器端配置静态IP:
2:yum install -y dhcp
3:改配置:
vim /etc/dhcp/dhcpd.conf
subnet 192.168.0.0 netmask 255.255.255.0 { 网段
rang 192.168.0.100 192.168.0.20; 范围
option routers 192.168.0.1; 网关
option domain-name-server 192.168.0.110; DNS服务器
}
4:启动服务:
service dhcpd start
5:客户端验证:网卡模式仅主机,配置文件改为dhcp,IP和子网#注释掉
6:重启网络服务:
service network restart
7:验证:是否由服务器端分配IP:
ifconfig eth0 | grep Bcast
8:查看网关:
route -n | grep UG
9:查看DNS:
cat /etc/resolv.conf
服务FTP 文本传输协议,实现共享功能:
端口21 是vsftp
工作模式:1主动模式:发数据端口为20
yum install -y vsftpd ftp
cd /etc/vsftpd
mv vsftpd.conf vsftpd.conf.bak #备份配置文件以免修改错误可还原
新建配置文件
cat>>/etc/vsftpd/vsftpd.conf <<_EOF #改配置文件
anonymous_enable=NO
write_enable=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd
use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120
data_connection_timeout=120
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vuser_conf
virtual_use_local_privs=YES
pasv_min_port=10060
pasv_max_port=10090
accept_timeout=5
connect_timeout=1
chroot_list_file=/etc/vsftpd/chroot_list
_EOF
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser #创建ftpuser用户
passwd ftpuser #赋予密码
chown -R ftpuser.root /home/vsftpd #给家目录权限
touch /etc/vsftpd/vuser_passwd #创建虚拟用户名密码
创建虚拟用户ftp1和ftp2
cat>>/etc/vsftpd/vuser_passwd<<_EOF
ftp1 #第一行用户名
123456 #第二行密码
ftp2 #用户名
123456 #密码
_EOF
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db #生成虚拟用户数据文件,如果更改虚拟用户密码需要更改vuser_passwd里的密码,在执行这条命令重置vuser_passwd.db数据文件
chmod 600 /etc/vsftpd/vuser_passwd.db #更改文件权限
mkdir /etc/vsftpd/vuser_conf # 建立虚拟用户个人vsftp的配置文件
cd /etc/vsftpd/vuser_conf # 进入目录
touch ftp1 ftp2
建立虚拟用户配置文件
该文件可修改用户的访问家目录,比如 local_root=/home/vsftpd/ftp1 可修改成local_root=/var/www/html
cd /etc/vsftpd/vuser_conf
cat >>ftp1<<_EOF
local_root=/home/vsftpd/ftp1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
_EOF
cd /etc/vsftpd/vuser_conf
cat >>ftp2<<_EOF
local_root=/home/vsftpd/ftp1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
_EOF
限制只能ftp1和ftp2访问
echo -e "ftp1\nftp2" >/etc/vsftpd/chroot_list
查看目录vsftp目录结构
yum install -y tree
tree /etc/vsftpd #查看目录结构
/etc/vsftpd/
├── chroot_list #CHROOT可以增进系统的安全性,限制使用者能做的事,在这里的用户可以访问
├── ftpusers #黑名单,默认开启黑名单,配置文件写了userlist_deny=YES 则在/etc/vsftpd/user_list和/etc/vsftpd/ftpusers 这两个文件中的用户不能登录
├── user_list #白名单,只有写在user_list中的普通用户才可以登录ftp在白名单上可登录
├── vsftpd.conf #vsftp配置文件
├── vsftpd.conf.bak
├── vsftpd_conf_migrate.sh
├── vuser_conf #虚拟用户配置文件夹
│ ├── ftp1
│ └── ftp2
├── vuser_passwd #虚拟用户账户密码
└── vuser_passwd.db #虚拟用户数据文件
重启服务
setenforce 0 #关闭selinux
systemctl start vsftpd #启动服务
netstat -anplut | grep ftp #查看端口是否是vsftpd占用的
登录
ftp 127.0.0.1
#之后根据提示输入用户名和密码
登录后默认位置:/var/ftp 默认为虚拟用户配置文件中local_root=/home/vsftpd/ftp1 配置的目录
其他
ftp 两种传输方式:
binary 二进制比特流方式传输,速度快(默认)
ASCII 文本方式传输,速度慢一些
切换:ftp > status ftp >ascii
工作模式:
主动模式:发数据端口为20
被动模式:端口随机
两个链接
1命令链接
2数据链接
sftp且限制用户访问目录
通过加密SSH传输处理所有操作。
功能简述:凡是在用户组sftp里的用户,都可以使用sftp服务
使用sftp服务连接上之后,可访问目录为/srv/sftp/username
举个例子:
- 用户test是一个sftp组的用户,那么他通过sftp连接服务器上之后,只能看到/srv/sftp/test目录下的内容
- 用户test2也是一个sftp组的用户,那么他通过sftp连接服务器之后,只能看到/srv/sftp/test2目录下的内容
创建sftp服务用户组,创建sftp服务根目录
groupadd sftp
#此目录及上级目录的所有者(owner)必须为root,权限不高于755,此目录的组最好设定为sftp
mkdir /srv/sftp
chown -R root:sftp /srv/sftp
chmod -R 0755 /srv/sftp
备份sshd配置文件然后编辑
mv /etc/ssh/sshd_config ~/backup/sshd_config_xxx
vim /etc/ssh/sshd_config
#注释掉/etc/ssh/sshd_config文件中的此行代码:
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下代码:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /srv/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
重启sshd服务
systemctl restart sshd
添加有效的sftp用户,且给予用户写权限
创建一个名称为test的sftp帐号
#创建test的家目录:test目录的所有者必须是root,组最好设定为sftp,权限不高于755
mkdir /srv/sftp/test
chmod 0755 /srv/sftp/test
groupadd sftp
chown root:sftp /srv/sftp/test
#添加用户 使用参数 -s/sbin/nologin禁止用户通过命令行登录
useradd -gsftp -d/srv/sftp/test -s/sbin/nologin test
passwd test #赋予test用户密码
关于写权限
#在test目录下创建一个可以写的目录
mkdir /srv/sftp/test/write
chown -R test:sftp /srv/sftp/test/write
这样test用户就可以在自己家目录里的write目录下拥有写入权限了
sftp服务的根目录的所有者必须是root,权限不能超过755(上级目录也必须遵循此规则),sftp的用户目录所有者也必须是root,且最高权限不能超过755.
常用命令
sftp> ls #list directory
sftp> pwd #print working directory on remote host
sftp> lpwd #print working directory on local host
sftp> mkdir abc #create a new directory abc
推送文件至sftp服务端
要将整个目录上传到sftp服务端,请使用put命令。
在客户端找到需要上传的文件夹
put -r /tmp
get -r dir
#下载dir目录以及文件
退出
exit
crontab 计划任务(默认为开启状态)
1:service crond start
crontab -u 设定某个用户的crond服务
-l 列出某个用户cron服务的详细内容
-r 删除某个用户的cron服务
-e 编辑某个用户的cron服务
使用:crontab -u user1 -e 给user1设定一个计划任务
分钟 小时 日 月 周 命令
范围 0-59 0-23 1-31 1-12 0-7 (时间任意用*表示)
配置文件所在位置:
/var/spool/cron 可直接追加
echo '15 6 * * * /bin/echo "welcome">>/var/spool/cron/user1
*/2 * * * * #每两分钟执行
每天零点定期清理大于30天的master-bin 文件
0 0 * * * find /var/lib/mysql -name "master-bin*" -type f -ctime +30 -exec rm -rf {} \; > /dev/null 2>&1
日志轮转 logrotate分割管理服务器日志
对日志进行日志切割,通常服务器默认安装
安装
yum install -y logrotate
默认 logrotate 安装在 etc 目录下,其中
- /etc/logrotate.conf 主配置文件。
- /etc/logrotate.d 目录下可以存放很多具体的日志滚动切割规则配置文件,我们想要自动拆分日志的配置都可以单独的放在这里,方便后续的维护和修改。
配置日志分割文件
要分割 nginx 的 access.log 文件,具体操作如下:
#在 /etc/logrotate.d/ 目录下新建一个叫做 access 的配置文件
cd /etc/logrotate.d
vim access
# 然后编辑 access 日志文件位置:
/usr/local/nginx/logs/access.log{
weekly
missingok
rotate 8
create
copytruncate
noolddir
dateext
compress
delaycompress
notifempty
sharedscripts
}
配置项 说明
daily每天滚动一次
weekly指定滚动周期为每周
monthly指定滚动周期为每月
notifempty如果文件为空,则不滚动
missingok如果文件不存在,则不滚动
rotate 7保留最近7个日志文件
compress压缩日志文件
delaycompress延迟压缩,延迟到下一次日志分割的时候。注意这个要结合compress 一起使用
create 640 root root新建日志文件的属主及权限,如果 nginx 不是root用户运行的要特别注意
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
postrotate日志滚动完成后运行的脚本,有些业务日志可以不需要这个脚本
copytruncate用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate备份日志文件不过不截断
nocreate不建立新的日志文件
errors address滚动时的错误信息发送到指定的 Email 地址
ifempty即使日志文件为空文件也做滚动
mail address把滚动的日志文件发送到指定的 Email 地址
nomail滚动时不发送日志文件
olddir /log滚动后的日志文件放入指定的目录,这里是/log,必须和当前日志文件在同一个文件系统。
noolddir滚动后的日志文件和当前日志文件放在同一个目录下
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
prerotate在滚动之前需要执行的指令,例如修改文件的属性等动作,必须独立成行
postrotate在滚动之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务;必须独立成行
dateext使用当期日期作为命名格式
dateformat .%s配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合
dateext使用,只支持%Y/%m/%d/%s四个参数
size log-size当日志文件到达指定的大小时才滚动,以下为合法格式:
size = 5或size 5 (>= 5 个字节就滚动) size = 100k或size 100k size = 100M或size 100M
为了验证配置文件是否能正常工作,我们可以使用下面的命令测试:对已有的nginx日志测试
logrotate -d /etc/logrotate.d/nginx
# 如果输下面内容,并没有报错信息,说明配置文件有效。
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size: 15360 B
Handling 1 logs
rotating pattern: /var/log/nginx/*.log after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/*.log /access.log
log does not need rotating (log has been already rotated)
considering log /var/log/nginx/*.log /error.log
强制执行
logrotate -f /etc/logrotate.d/