第九单元 部署 ftp 文件共享服务
一、部署 FTP 服务器
1.FTP ( 文件传输协议 ) 是 INTERNET 上仍常用的最老的网络协议之一 , 它为系统提供了通过网络与远程服务器进行传输的简单方法
2.在 RED HAT ENTREPRISE LINUX 6 中。 FTP 服务器包的名称为 VSFTPD , 它代表 Very Secure File TransferProtocol Damon 服务器名称也叫做 vsftpd
3.默认配置文件让 ANONYMOUS 用户只能下载位于CHROOT 目录中的内容。 /var/ftp/ 这意味着远程 FTP客户端能以用户 anonymous 或 ftp 身份连接到服务器( 无需密码 ), 并从 ftp 服务器上的 /var/ftp/ 目录下载文件( 其本地 ftp 用户可以读取这些文件 )
二、部署网络服务的四个步骤
1.安装服务软件
2.启动服务
3.启用服务
4.测试服务
三、安装 vsftpd 包并启动服务
1.yum install vsftpd -y
2.systemctl start vsftpd
3.systemctl enable vsftpd
4.setenforce 0
5.systemctl stop firewalld
四、启用 vsftpd 服务
1.Applications-->Sundry-->Firewall
五、测试服务
1.cd /var/ftp/pub/
2.touch file{1..3}
3.lftp 172.25.0.10
lftp 172.25.0.10:~> ls
drwxr-xr-x 2 0 0 42 Nov 20 07:19 pub
lftp 172.25.0.10:/> cd pub/
lftp 172.25.0.10:/pub> ls
-rw-r--r-- 1 0 0 0 Nov 20 07:19 file1
-rw-r--r-- 1 0 0 0 Nov 20 07:19 file2
-rw-r--r-- 1 0 0 0 Nov 20 07:19 file3
六、FTP 服务器配置
1.默认配置为匿名FTP服务器,仅允许匿名客户端下载,并且禁用所有本地用户,禁止上传
2./var/ftp ###默认发布目录
3.vsftpd配置件:/etc/vsftpd/vsftpd.conf,document root位于/var/ftp/中,配置修改后,需重新启动服务
4.选项示例 :
– anonymous_enable=YES
– local_enable=NO
– write_enable=NO
七、Vsftpd 服务配置
1.匿名用户设定
anonymous_enable=YES|NO ###匿名用户登陆限制
1)<匿名用户上传>
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
2)<匿名用户家目录修改>
anon_root=/direcotry
3)<匿名用户上传文件默认权限修改>
anon_umask=xxx
4)<匿名用户建立目录>
anon_mkdir_write_enable=YES|NO
5)<匿名用户下载>
anon_world_readable_only=YES|NO ###设定参数值为no表示匿名用户可以下载
6)<匿名用户删除>
anon_other_write_enable=YES|NO
7)<匿名用户使用的用户身份修改>
chown_uploads=YES
chown_username=student
8)<最大上传速率>
anon_max_rate=102400
9)<最大链接数>
max_clients=2
2.本地用户设定
local_enable=YES|NO ###本地用户登陆限制
write_enable=YES|NO ###本地用户写权限限制
1)<本地用户家目录修改>
local_root=/directory
2)<本地用户上传文件权限>
local_umask=xxx
3)<限制本地用户浏览/目录>
所有用户被锁定到自己的家目录中
chroot_local_user=YES
chmod u-w /home/*
a.用户黑名单建立
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
b.用户白名单建立
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
4)<限制本地用户登陆>
vim /etc/vsftpd/ftpusers ###用户黑名单
vim /etc/vsftpd/user_list ###用户临时黑名单
a.用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ###参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
3.ftp虚拟用户的设定
1)<创建虚拟帐号身份>
vim /etc/vsftpd/loginusers ###文件名称任意
ftpuser1
123
ftpuser2
123
ftpuser3
123
db_load -T -t hash -f /etc/vsftpd/loginusers loginusers.db
vim /etc/pam.d/ckvsftpd ###文件名称任意
account required pam_userdb.so db=/etc/vsftpd/loginusers
auth required pam_userdb.so db=/etc/vsftpd/loginusers
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ckvsftpd
guest_enable=YES
2)<虚拟帐号身份指定>
guest_username=ftpuser
chmod u-w /home/ftpuser
3)<虚拟帐号家目录独立设定>
vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserhome/$USER
user_sub_token=$USER
mkdir /ftpuserhome
chgrp ftpuser /ftpuserhome
chmod g+s /ftpuserhome
mkdir /ftpuserhome/ftpuser{1..3}
4)<虚拟帐号配置独立>
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/ftpuser1
在此文件中设定配置文件中的所有参数,此文件的优先级搞
eg:[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
rhel_dvd.repo
[root@localhost yum.repos.d]# vim rhel_dvd.repo ###修改yum源
[root@localhost yum.repos.d]# cat rhel_dvd.repo
# Created by cloud-init on Thu, 10 Jul 2014 22:19:11 +0000
[rhel_dvd]
gpgcheck = 0
enabled = 1
baseurl = http://172.25.254.250/rhel7
name = Remote classroom copy of dvd
[root@localhost yum.repos.d]# yum clean all ###重启yum服务
已加载插件:langpacks
正在清理软件源: rhel_dvd
Cleaning up everything
[root@localhost yum.repos.d]# yum install vsftpd -y ###下载vsftpd软件
已加载插件:langpacks
rhel_dvd | 4.1 kB 00:00
(1/2): rhel_dvd/group_gz | 134 kB 00:00
(2/2): rhel_dvd/primary_db | 3.4 MB 00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-9.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
vsftpd x86_64 3.0.2-9.el7 rhel_dvd 166 k
事务概要
================================================================================
安装 1 软件包
总下载量:166 k
安装大小:343 k
Downloading packages:
vsftpd-3.0.2-9.el7.x86_64.rpm | 166 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : vsftpd-3.0.2-9.el7.x86_64 1/1
验证中 : vsftpd-3.0.2-9.el7.x86_64 1/1
已安装:
vsftpd.x86_64 0:3.0.2-9.el7
完毕!
[root@localhost yum.repos.d]# systemctl start vsftpd ###开启vsftpd服务
[root@localhost yum.repos.d]# systemctl enable vsftpd ###开机vsftpd服务自启动
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
[root@localhost yum.repos.d]# firewall-cmd --list-all ###查看火墙状态
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh ###仅对于ssh服务,火墙永久关闭
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@localhost yum.repos.d]# firewall-config ###设置防火墙状态
#添加ftp,选择permanent,以及options->reload firewalld ###对于ftp服务,防火墙永久关闭
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 ###匿名用户连接
lftp 172.25.254.142:~> ls ###连接成功,打开的是/var/ftp/目录
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
lftp 172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[root@localhost yum.repos.d]# cd /var/ftp/
您在 /var/spool/mail/root 中有新邮件
[root@localhost ftp]# ls
pub
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf ###ftp服务配置文件
#12 anonymous_enable=yes ###匿名用户,yes可连接,no不可连接
#16 local_enable=no ###本地用户,yes可连接,no不可连接
[root@localhost vsftpd]# systemctl restart vsftpd.service ###重启vsftpd
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
ls: 登录失败: 530 This FTP server is anonymous only.
lftp student@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$
[root@localhost vsftpd]# cd /var/ftp/
[root@localhost ftp]# touch file{1..5}
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142
lftp 172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file1
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file2
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file3
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file4
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file5
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
lftp 172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
lftp student@172.25.254.142:~> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp student@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$
[root@localhost ftp]# setenforce 0
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
lftp student@172.25.254.142:~> put /etc/passwd
2270 bytes transferred
lftp student@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
# 19 write_enable=no
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 1000 1000 2270 Apr 07 06:23 passwd
lftp student@172.25.254.142:~> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)
lftp student@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142
lftp 172.25.254.142:/> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)
lftp 172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
#29 anon_upload_enable=YES
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142
lftp 172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file1
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file2
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file3
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file4
-rw-r--r-- 1 0 0 0 Apr 07 06:17 file5
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
lftp 172.25.254.142:/> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp 172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[root@localhost var]# chgrp ftp /var/ftp/pub/
[root@localhost var]# chmod 775 /var/ftp/pub/
[root@localhost var]# ls -ld /var/ftp/pub/
drwxrwxr-x. 2 root ftp 6 Mar 7 2014 /var/ftp/pub/
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142
lftp 172.25.254.142:~> cd /pub/
lftp 172.25.254.142:/pub> ls
lftp 172.25.254.142:/pub> put /etc/passwd
2270 bytes transferred
lftp 172.25.254.142:/pub> quit
[kiosk@foundation42 Desktop]$
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142
lftp 172.25.254.142:~> cd pub/
lftp 172.25.254.142:/pub> ls
-rw------- 1 14 50 2270 Apr 07 06:46 passwd
lftp 172.25.254.142:/pub> get passwd
get: Access failed: 550 Failed to open file. (passwd)
lftp 172.25.254.142:/pub> mkdir test
mkdir: Access failed: 550 Permission denied. (test)
lftp 172.25.254.142:/pub> rm -fr passwd
lftp 172.25.254.142:/pub> ls
-rw------- 1 14 50 2270 Apr 07 06:46 passwd
lftp 172.25.254.142:/pub> quit
[kiosk@foundation42 Desktop]$
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf ###允许本地用户登陆
#local_enable=YES ###YES允许,NO不允许
[root@localhost ~]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls ###本地用户student可登陆
lftp student@172.25.254.142:~> quit
[root@localhost ~]# touch /home/student/file
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file ###登陆的家目录为/home/student/
lftp student@172.25.254.142:~> quit
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf ###修改本地用户登陆家目录为/var/ftp/
#local_root=/var/ftp/
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# touch /var/ftp/ccc
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:26 ccc ###用户登陆家目录被修改
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
lftp student@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
lftp student@172.25.254.142:~> put /etc/passwd ###用户上传文件,文件系统未开启
put: Access failed: 553 Could not create file. (passwd)
lftp student@172.25.254.142:~> quit
[root@localhost ftp]# setenforce 0 ###打开文件系统
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
lftp student@172.25.254.142:~> put /etc/passwd
2328 bytes transferred
lftp student@172.25.254.142:~> ls ###上传文件默认权限为644
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
-rw-r--r-- 1 1000 1000 2328 Apr 10 01:29 passwd
lftp student@172.25.254.142:~> rm -fr passwd
rm 成功, 删除 `passwd'
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
lftp student@172.25.254.142:~> quit
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf ###修改上传文件的默认权限为600
#local_umask=066
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
lftp student@172.25.254.142:~> put /etc/passwd
2328 bytes transferred
lftp student@172.25.254.142:~> ls ###上传文件权限默认600
-rw-r--r-- 1 0 0 0 Apr 10 01:24 file
-rw------- 1 1000 1000 2328 Apr 10 01:30 passwd
lftp student@172.25.254.142:~> quit
[root@localhost ftp]# useradd lee
[root@localhost ftp]# echo lee | passwd --stdin lee
更改用户 lee 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ftp]# useradd loo
[root@localhost ftp]# echo loo | passwd --stdin loo
更改用户 loo 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls ###新建用户lee,loo皆可登陆
lftp lee@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls
lftp loo@172.25.254.142:~> quit
[root@localhost ftp]# vim /etc/vsftpd/ftpusers ###将lee加入用户永久黑名单
#lee
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls ###lee用户登陆失败
ls: 登录失败: 530 Login incorrect.
lftp lee@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls ###loo用户可登陆
lftp loo@172.25.254.142:~> quit
[root@localhost ftp]# vim /etc/vsftpd/ftpusers ###永久黑名单中撤销lee用户
#lee
[root@localhost ftp]# vim /etc/vsftpd/user_list ###临时黑名单中添加loo用户
#loo
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls ###lee用户可登陆
lftp lee@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls ###loo用户登录失败
ls: 登录失败: 530 Permission denied.
lftp loo@172.25.254.142:~> quit
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
#userlist_deny=NO ###userlist_deny=NO可将临时黑名单转为白名单
[root@localhost ftp]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls ###loo在白名单上,可登陆
lftp loo@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls ###lee用户没在名单上,不可登陆
ls: 登录失败: 530 Permission denied.
lftp lee@172.25.254.142:~> quit
[kiosk@foundation42 Desktop]$
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls
lftp loo@172.25.254.142:~> cd /
cd 成功, 当前目录=/
lftp loo@172.25.254.142:/> ls ###loo用户可切入根目录
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
dr-xr-xr-x 4 0 0 4096 Jul 10 2014 boot
drwxr-xr-x 18 0 0 2800 Apr 10 01:05 dev
drwxr-xr-x 134 0 0 8192 Apr 10 01:31 etc
drwxr-xr-x 5 0 0 40 Apr 10 01:31 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 132 0 0 0 Apr 10 01:05 proc
dr-xr-x--- 15 0 0 4096 Apr 10 01:55 root
drwxr-xr-x 35 0 0 1120 Apr 10 01:28 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 Apr 10 01:05 sys
drwxrwxrwt 10 0 0 4096 Apr 10 01:26 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 Apr 10 01:07 var
lftp loo@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls
lftp lee@172.25.254.142:~> cd /
cd 成功, 当前目录=/
lftp lee@172.25.254.142:/> ls ###lee用户可切入根目录
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
dr-xr-xr-x 4 0 0 4096 Jul 10 2014 boot
drwxr-xr-x 18 0 0 2800 Apr 10 01:05 dev
drwxr-xr-x 134 0 0 8192 Apr 10 01:31 etc
drwxr-xr-x 5 0 0 40 Apr 10 01:31 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 132 0 0 0 Apr 10 01:05 proc
dr-xr-x--- 15 0 0 4096 Apr 10 01:55 root
drwxr-xr-x 35 0 0 1120 Apr 10 01:28 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 Apr 10 01:05 sys
drwxrwxrwt 10 0 0 4096 Apr 10 01:26 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 Apr 10 01:07 var
lftp lee@172.25.254.142:/> quit
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#chroot_local_user=YES ###限制用户权限,使其不可切出用户家目录
[root@localhost vsftpd]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> cd / ###切入失败
cd: 登录失败: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp lee@172.25.254.142:~> ls ###不可登陆,权限过大
ls: 登录失败: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp lee@172.25.254.142:~> quit
[root@localhost vsftpd]# chmod u-w /home/* ###降低权限
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls
lftp lee@172.25.254.142:/> cd / ###无法切入根目录
lftp lee@172.25.254.142:/> ls
lftp lee@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls
lftp loo@172.25.254.142:/> cd / ###无法切入根目录
lftp loo@172.25.254.142:/> ls
lftp loo@172.25.254.142:/> quit
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#chroot_local_user=NO ###用户黑名单
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list ###是指定用户不可切出家目录
[root@localhost vsftpd]# vim /etc/vsftpd/chroot_list
#lee ###用户黑名单
[root@localhost vsftpd]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls
lftp loo@172.25.254.142:~> cd /
cd 成功, 当前目录=/
lftp loo@172.25.254.142:/> ls ###loo没在用户黑名单,切入根目录成功
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
dr-xr-xr-x 4 0 0 4096 Jul 10 2014 boot
drwxr-xr-x 18 0 0 2800 Apr 10 01:05 dev
drwxr-xr-x 134 0 0 8192 Apr 10 01:31 etc
drwxr-xr-x 5 0 0 40 Apr 10 01:31 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 132 0 0 0 Apr 10 01:05 proc
dr-xr-x--- 15 0 0 4096 Apr 10 02:00 root
drwxr-xr-x 35 0 0 1120 Apr 10 01:28 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 Apr 10 01:05 sys
drwxrwxrwt 10 0 0 4096 Apr 10 01:58 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 Apr 10 01:07 var
lftp loo@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls
lftp lee@172.25.254.142:/> cd / ###lee在用户黑名单,切入根目录失败
lftp lee@172.25.254.142:/> ls
lftp lee@172.25.254.142:/> quit
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#chroot_local_user=YES ###用户白名单
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost vsftpd]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u lee
口令:
lftp lee@172.25.254.142:~> ls
lftp lee@172.25.254.142:~> cd / ###lee在白名单内,切入根目录成功
cd 成功, 当前目录=/
lftp lee@172.25.254.142:/> ls
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
dr-xr-xr-x 4 0 0 4096 Jul 10 2014 boot
drwxr-xr-x 18 0 0 2800 Apr 10 01:05 dev
drwxr-xr-x 134 0 0 8192 Apr 10 01:31 etc
drwxr-xr-x 5 0 0 40 Apr 10 01:31 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 133 0 0 0 Apr 10 01:05 proc
dr-xr-x--- 15 0 0 4096 Apr 10 02:01 root
drwxr-xr-x 35 0 0 1120 Apr 10 01:28 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 Apr 10 01:05 sys
drwxrwxrwt 10 0 0 4096 Apr 10 01:58 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 Apr 10 01:07 var
lftp lee@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u loo
口令:
lftp loo@172.25.254.142:~> ls
lftp loo@172.25.254.142:/> cd / ###loo没在名单内,切入失败
lftp loo@172.25.254.142:/> ls
lftp loo@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[root@localhost vsftpd]# vim /etc/vsftpd/userfile
[root@localhost vsftpd]# cat /etc/vsftpd/userfile ###ftp虚拟用户建立,123为密码
user1
123
user2
123
user3
123
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/userfile userfile.db ###文件加密
[root@localhost vsftpd]# ls
chroot_list userfile user_list vsftpd_conf_migrate.sh
ftpusers userfile.db vsftpd.conf
[root@localhost vsftpd]# cd /etc/pam.d/
[root@localhost pam.d]# vim /etc/pam.d/userftp
[root@localhost pam.d]# cat /etc/pam.d/userftp
#account required pam_userdb.so db=/etc/vsftpd/userfile ###指定用户
#auth required pam_userdb.so db=/etc/vsftpd/userfile ###指定密码
[root@localhost pam.d]# vim /etc/vsftpd/vsftpd.conf
[root@localhost pam.d]# systemctl restart vsftpd.service
#pam_service_name=userftp ###文件读取userftp
#guest_enable=YES
#guest_username=student ###指定虚拟用户目录为student家目录
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u user1
口令:
lftp user1@172.25.254.142:~> ls
lftp user1@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u user2
口令:
lftp user2@172.25.254.142:~> ls
lftp user2@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u user3
口令:
lftp user3@172.25.254.142:~> ls
lftp user3@172.25.254.142:/> quit
[root@localhost pam.d]# mkdir /ftpuser/user1 -p ###创建虚拟用户家目录
[root@localhost pam.d]# mkdir /ftpuser/user2 -p
[root@localhost pam.d]# mkdir /ftpuser/user3 -p
[root@localhost pam.d]# touch /ftpuser/user1/user1file ###家目录中新建文件
[root@localhost pam.d]# touch /ftpuser/user2/user2file
[root@localhost pam.d]# touch /ftpuser/user3/user3file
[root@localhost pam.d]# vim /etc/vsftpd/vsftpd.conf
#local_root=/ftpuser/$USER ###指定虚拟用户家目录路径
#user_sub_token=$USER
[root@localhost pam.d]# systemctl restart vsftpd.service
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u user1
口令:
lftp user1@172.25.254.142:~> ls ###进入虚拟用户家目录成功
-rw-r--r-- 1 0 0 0 Apr 10 03:07 user1file
lftp user1@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$ lftp 172.25.254.142 -u user2
口令:
lftp user2@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 03:07 user2file
lftp user2@172.25.254.142:/> lftp 172.25.254.142 -u user3
口令:
lftp user3@172.25.254.142:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 03:07 user3file
lftp user3@172.25.254.142:/> quit
[kiosk@foundation42 Desktop]$
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#ser_config_dir=/etc/vsftpd/userconf
[root@localhost ~]# mkdir /etc/vsftpd/userconf/
[root@localhost userconf]# touch /etc/vsftpd/userconf/user2
[root@localhost userconf]# vim /etc/vsftpd/userconf/user2
[root@localhost userconf]# cat /etc/vsftpd/userconf/user2
anon_upload_enable=YES
[root@localhost userconf]# chgrp student /ftpuser/user{1..3}/pub
[root@localhost userconf]# lftp 172.25.254.142 -u user2
口令:
lftp user2@172.25.254.142:~> cd pub/
lftp user2@172.25.254.142:/pub> put /etc/passwd
2079 bytes transferred
lftp user2@172.25.254.142:/pub> quit
[root@localhost userconf]# lftp 172.25.254.142 -u user1
口令:
lftp user1@172.25.254.142:~> cd pub/
lftp user1@172.25.254.142:/pub> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)
lftp user1@172.25.254.142:/pub> quit
[root@localhost userconf]
第十单元 selinux 的管理
一、基本 SELINUX 安全性概念
1.SELINUX ( 安全增强型 Linux ) 是可保护你系统安全性的额外机制
2.在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。在常规模式中 , 以用户身份运行进程 ,并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权 SELINUX 的另一个不同之处在于 , 若要访问文件 , 你必须具有普通访问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份 root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签
3.示例:在无 selinux 保护时 , 恶意人员可以尝试利用 web 服务器中的安全漏洞强行进入系统。如果成功 , 将会控制以用户apache 身份运行的进程 , 这时再由一个本地安全漏洞就可能使攻击者获得超级用户的访问权限
二、selinux 安全上下文访问规则
1.WEB 服务器的 HTTPD 进程设置了 SELINUX 上下文system_u:system_r:httpd_t 标签。该上下文的重要部分是第三个用冒号分隔的字段 SELINUX 类型 : httpd_t
2.系统上的文件和资源也设置了 SELINUX 上下文标签 , 并且重要的部分是 SELINUX 类型。例如 , /var/www/html 中的文件具有类型 httpd_sys_content_t 。 /tmp 和/var/tmp 中的文件通常具有类型 tmp_t
3.Seliux 策略具有允许以 httpd_t 身份运行的进程访问标记为 httpd_sys_content_t 的文件的规则。没有规则允许这些进程访问标记有 tmp_t 的文件 , 因此将拒绝这些访问 , 即使常规文件权限指出应该允许这些访问
三、SELINUX模式
1.强制模式 : SELINUX 主动拒绝访问尝试读取类型上下文为tmp_t的web服务器。在强制模式中 ,SELINXU 既记录冲突 , 也强制执行规则
2.许可模式 : 通常用于对问题进行故障排除。在许可模式下 , 即使没有明确规则 , SELINUX 也允许所有交互 , 并且记录所有被拒绝的交互。此模式可以用于确定你是否有 SELINUX问题。无需重新引导即可从强制模式转为许可模式 , 或再从许可模式转回强制模式
四、显示及更改SELINUX模式
1.getenforce
2.setenforce 0|1
–0 表示 permissive # 警告
–1 表示 enforcing # 强制
五、更改 selinux 的开机状态
1.vim /etc/sysconfig/selinux
#SELINUX=disabled
PS:disable表示关闭,enforcing表示强制,permissive表示警告,disable状态切换到permissive状态或enforcing状态需要重启系统
六、显示 SELinux 文件上下文
1.什么确定文件的初始 SELinux 上下文通常是父目录。将父目录的上下文指定给新创建的文件。这对 vimcp 和 touch 等命令其作用 , 但是 , 如果文件是在其他位置创建的并且保留了权
限 ( 与 mv 或 cp -a 一样 ) 则还将保留 SELinux 上下文
2.许多处理文件的命令具有一个用于显示或设置 SELinux 上下文的选项 ( 通常是 -Z ) 。例如 , ps 、 ls 、 cp 和 mkdir 都使用 -Z 选项显示或设置 SELinux 上下文
3.显示上下文
– ps axZ
– ps -ZC
– ls -Z
七、修改 selinux 安全上下文
1.chcon -t
一次性定制安全上下文,执行 restorecon 刷新后还原
2.semanage fcontext
永久更改文件的上下文
八、semanage 命令
1.restorecon 是 policycoreutil 软件包的一部分
2.semanage 是 policycoreutil-python 软件包的一部分
3.semanage fcontext 可用与显示或修改 restorrecon 用来设置默认文件上下文的规则
4.semanage fcontext 使用扩展正则表达式来指定路径和文件名。 fcontext 规则中最常用的扩展正则表达式是(/.*)?, 表示随意地匹配 / 后跟任何数量的字符
5.semanage fcontext 将递归地与在表达式前面列出的目录以及该目录中的所有内容相匹配
6.示例:
[root@serverX ~]# mkdir /virtual
[root@serverX ~]# touch /virtual/index.html
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@serverX ~]# semanage fcontext -a -f "" -t httpd_sys_content_t
'/virtual(/.*)?'
[root@serverX ~]# restorecon -RFvv /virtual/
restorecon reset /virtual context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/index.html context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
九、管理 SELinux 布尔值
1.SELinux 布尔值是更改 SELinux 策略行为的开关。SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使用 SELinux 布尔值来调整策略 , 以有选择地进行调整
2.许多软件包都具有 man page *_selinux(8), 其中详细说明了所使用的一些布尔值 ; man -k ‘_selinux’ 可以轻松地找到这些手册
3.getsebool 用于显示布尔值 , setsebool 用于修改布尔值
4.setsebool -P 修改 SELinux 策略 , 以永久保留修改。
5.semanage boolean -l 将显示布尔值是否永久
6.示例
[root@serverX ~]# getsebool -a
abrt_anon_write --> off
.....
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@serverX ~]# setsebool httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs
-> off Allow httpd to read home directories
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
[root@serverX ~]# setsebool -P httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs
-> on
Allow httpd to read home directories
十、监控 SELinux 冲突
1.必须安装 setroubleshoot-server 软件包 , 才能将SELinux 消息发送至 /var/log/messages
2.etroubleshoot-server 侦听/var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/messages
3.摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ),可用于收集更多信息。 Sealert -l UUID 用于生成特定事件的报告。 Sealert -a /var/log/audit/audit.log 用于在该文件中生成所有事件的报告
4.示例
[root@demo ~]# echo www.westos.org /root/file1
[root@demo ~]# mv /root/file1 /var/www/html/
[root@demo ~]# service httpd start
[root@demo ~]# elinks -dump http://localhost/file1
Forbidden
You don't have permission to access /file1 on this server.
[root@demo ~]# tail -1 /var/log/audit/audit.log
....
type=AVC msg=audit(1312818090.800:25721): avc: denied { getattr } for
pid=29653 comm="httpd"
Path="/var/www/html/file1" dev=dm-1 ino=54309
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
....
[root@demo ~]# tail /var/log/messages
5.示例
[root@demo ~]# tail /var/log/messages
.....
Aug 8 23:41:30 demo setroubleshoot: SELinux is preventing /usr/sbin/httpd
"getattr" access to /var/www/html/file1.
For complete SELinux messages. run sealert -l bbb10235-7683-4387-977d-
a34c141bba86
[root@demo ~]# sealert -l bbb10235-7683-4387-977d-a34c141bba86
Summary:
SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file1.
Detailed Description:
... ...
You can restore the default system context to this file by executing the
restorecon command. restorecon
'/var/www/html/file1', if this file is a directory, you can recursively restore using
restorecon -R
'/var/www/html/file1'.
Fix Command:
/sbin/restorecon '/var/www/html/file1'
6.示例
执行事件报告中给出的解决命令 :
[root@demo ~]# restorecon /var/www/html/file1
[root@demo ~]# elinks -dump http://localhost/file1
eg:[root@localhost Desktop]# vim /etc/sysconfig/selinux ###修改selinux的开机状态,关闭
#SELINUX=disabled
[root@localhost Desktop]# reboot ###每次修改selinux的状态后,只有重启虚拟机,才能发挥作用
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ ssh root@172.25.254.142 -X
root@172.25.254.142's password:
Last failed login: Mon Apr 10 21:47:46 EDT 2017 from 172.25.254.42 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Apr 10 21:41:21 2017 from 172.25.254.42
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# touch /mnt/file
[root@localhost ~]# mv /mnt/file /var/ftp/pub/ ###匿名用户的家目录/var/ftp/
[root@localhost ~]# lftp 172.25.254.142
lftp 172.25.254.142:~> ls
drwxr-xr-x 2 0 0 17 Apr 11 02:04 pub
lftp 172.25.254.142:/> cd pub/
lftp 172.25.254.142:/pub> ls
-rw-r--r-- 1 0 0 0 Apr 11 02:03 file ###selinux关闭,新建的文件安全上下文与系统安全上下文不匹配的文件显示
lftp 172.25.254.142:/pub> quit
[root@localhost ~]# cd /var/ftp/pub/
[root@localhost pub]# ls
file
[root@localhost pub]# ls -Z file
-rw-r--r-- root root ? file
[root@localhost pub]# vim /etc/sysconfig/selinux ###修改selinux的开机状态开启
#SELINUX=enforcing
[root@localhost pub]# reboot ###重启虚拟机
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ ssh root@172.25.254.142 -X
root@172.25.254.142's password:
Last login: Mon Apr 10 22:02:33 2017 from 172.25.254.42
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# lftp 172.25.254.142
lftp 172.25.254.142:~> ls
drwxr-xr-x 2 0 0 17 Apr 11 02:04 pub
lftp 172.25.254.142:/> cd pub/
lftp 172.25.254.142:/pub> ls
-rw-r--r-- 1 0 0 0 Apr 11 02:03 file
lftp 172.25.254.142:/pub> quit
[root@localhost ~]# touch /mnt/file1
[root@localhost ~]# mv /mnt/file1 /var/ftp/pub/ ###新建文件的文件安全上下文与系统安全上下文不匹配
[root@localhost ~]# lftp 172.25.254.142
lftp 172.25.254.142:~> ls
drwxr-xr-x 2 0 0 29 Apr 11 02:12 pub
lftp 172.25.254.142:/> cd pub/
lftp 172.25.254.142:/pub> ls
-rw-r--r-- 1 0 0 0 Apr 11 02:03 file ###新建file1不显示
lftp 172.25.254.142:/pub> quit
[root@localhost ~]# ls /var/ftp/pub/
file file1
[root@localhost ~]# ls -lZ /var/ftp/pub/
-rw-r--r--. root root system_u:object_r:public_content_t:s0 file ###文件上下文public_content_t
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0 file1 ###文件上下文mnt_t,与file的不一致
[root@localhost ~]# ps auxZ | grep vsftpd ###系统上下文ftpd_t,匹配的文件上下文是public_content_t
system_u:system_r:ftpd_t:s0-s0:c0.c1023 root 1322 0.0 0.0 52756 564 ? Ss 22:10 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 1928 0.0 0.0 112656 988 pts/0 S+ 22:14 0:00 grep --color=auto vsftpd
[root@localhost ~]# chcon -t public_content_t /var/ftp/pub/file1 ###一次性定制安全上下文,临时的
[root@localhost ~]# ls -lZ /var/ftp/pub/
-rw-r--r--. root root system_u:object_r:public_content_t:s0 file
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file1 ###文件上下文被修改为public_content_t
[root@localhost ~]# lftp 172.25.254.142
lftp 172.25.254.142:~> cd pub/
lftp 172.25.254.142:/pub> ls
-rw-r--r-- 1 0 0 0 Apr 11 02:03 file
-rw-r--r-- 1 0 0 0 Apr 11 02:12 file1 ###因文件安全上下文变一致,显示
lftp 172.25.254.142:/pub> quit
[root@localhost ~]#
[root@localhost vsftpd]# lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
lftp student@172.25.254.142:~> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp student@172.25.254.142:~> quit
[root@localhost vsftpd]# setenforce 0
[root@localhost vsftpd]# lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls
lftp student@172.25.254.142:~> put /etc/passwd
2042 bytes transferred
lftp student@172.25.254.142:~> put /etc/group
862 bytes transferred
lftp student@172.25.254.142:~> ls
-rw-r--r-- 1 1000 1000 862 Apr 11 02:27 group
-rw-r--r-- 1 1000 1000 2042 Apr 11 02:25 passwd
lftp student@172.25.254.142:~> quit
[root@localhost vsftpd]# getsebool -a | grep ftp ###显示布尔值
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost vsftpd]# setsebool -P ftp_home_dir on ###修改布尔值
[root@localhost vsftpd]# getsebool -a | grep ftp
ftp_home_dir --> on ###被修改,开启
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost vsftpd]# mkdir /student
[root@localhost vsftpd]# touch /student/file{1..5}
[root@localhost vsftpd]# ls /student/
file1 file2 file3 file4 file5
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#local_root=/student ###修改本地用户家目录为/student
[root@localhost vsftpd]# systemctl restart vsftpd.service
[root@localhost vsftpd]# lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls ###本地用户家目录中有五个文件
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file1
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file2
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file3
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file4
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file5
lftp student@172.25.254.142:~> quit
[root@localhost vsftpd]# ls -Zd /student/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /student/ ###安全上下文default_t,不一致,重启后文件将不再显示
[root@localhost vsftpd]# vim /etc/sysconfig/selinux ###重启selinux
#SELINUX=disabled
[root@localhost vsftpd]# reboot
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ ssh root@172.25.254.142 -X
root@172.25.254.142's password:
Last login: Mon Apr 10 22:11:30 2017 from 172.25.254.42
[root@localhost ~]# vim /etc/sysconfig/selinux
#SELINUX=enforcing
[root@localhost ~]# reboot
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ ssh root@172.25.254.142 -X
root@172.25.254.142's password:
Last login: Mon Apr 10 22:39:06 2017 from 172.25.254.42
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls ###用户家目录的五个文件不显示,安全上下文不一致
lftp student@172.25.254.142:~> quit
[root@localhost ~]# ls /student/
file1 file2 file3 file4 file5
[root@localhost ~]# semanage fcontext -l | grep /var/ftp/ ###显示文件上下文的规则
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
/var/ftp/lib(/.*)? all files system_u:object_r:lib_t:s0
/var/ftp/lib/ld[^/]*.so(.[^/]*)* regular file system_u:object_r:ld_so_t:s0
[root@localhost ~]# semanage fcontext -l | grep /student ###显示文件上下文的规则
[root@localhost ~]# semanage fcontext -a -t public_content_t '/student(/.*)?' ###修改文件上下文的规则
[root@localhost ~]# semanage fcontext -l | grep /student ###文件上下文被修改,永久性的
/student(/.*)? all files system_u:object_r:public_content_t:s0
[root@localhost ~]# restorecon /student/ -FvvR ###文件上下文都被修改为public_content_t
restorecon reset /student context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /student/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /student/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /student/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /student/file4 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /student/file5 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
[root@localhost ~]# lftp 172.25.254.142 -u student
口令:
lftp student@172.25.254.142:~> ls ###文件可以显示出来
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file1
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file2
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file3
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file4
-rw-r--r-- 1 0 0 0 Apr 11 02:33 file5
lftp student@172.25.254.142:~> quit
[root@localhost ~]#
第十一单元 系统恢复技术
一、系统引导过程概述
通电->bios 初始化->grub2 磁盘引导阶段->grub2 文件引导阶段->指定 boot 所在分区->启动内核,只读挂载/设备->启动 init 程序进入初始化阶段->启动 systemd 初始化进程->读取 /etc/systemd/中的文件->启动程序->启动登陆环境
二、bios 初始化
1.基本输入 / 输出系统 ( BIOS ) 是内置于标准 x86/x86-64硬件的固件接口 , 将硬件置于已知状态并准备好系统以加载操作系统
2.出现什么情况 ?
– 检测并初始化硬件
– 确定从中引导的设备
3.可能出现了什么错误 ?
– 错误或异常 BIOS 设置
– 错误引导设备顺序
4.可以如何中断或影响 ?
– 按特定于供应商的键
– 使用特定于供应商的配置实用程序
– 通常 , <F12> 可以执行一次引导顺序覆盖
三、grub 磁盘引导阶段
1.MBR
– mbr 的作用是为了记录 /boot 目录所在分区位置
– 磁盘的 0 磁道 1 扇区的前 446 字节
– dd if=/dev/zero of=/dev/xda bs=446 count=1
– grub2-install /dev/xda
eg:[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.000172568 秒,2.6 MB/秒
[root@localhost ~]# reboot
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ rht-vmctl view desktop
#系统无法启动
[kiosk@foundation42 Desktop]$ su -
密码:
上一次登录:Mon Apr 10 16:31:52 CST 2017pts/2 上
[root@foundation42 ~]# virt-manager
[root@foundation42 ~]#
#添加光驱
#光驱启动
#重启虚拟机,选择修复
#修复虚拟机
#确认
#确认
#确认
#修复,下载
#硬盘启动
#修复成功
四、grub 文件引导阶段
1./boot/grub2/grub.cfg
– 指定 /boot 分区位置
– 加载内核
– 启动系统初始化进程
– grub2-mkconfig
eg:[root@localhost ~]# cat /boot/grub2/grub.cfg
set root='hd0,msdos1'
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/vda1 10473900 6807112 3666788 65% /
devtmpfs 927072 0 927072 0% /dev
tmpfs 942660 84 942576 1% /dev/shm
tmpfs 942660 17036 925624 2% /run
tmpfs 942660 0 942660 0% /sys/fs/cgroup
/dev/sr0 3654720 3654720 0 100% /run/media/root/RHEL-7.0 Server.x86_64
[root@localhost ~]# rm -fr /boot/grub2/grub.cfg
[root@localhost ~]# grub2-mkconfig >/boot/grub2/grib.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-946cb0e817ea4adb916183df8c4fc817
Found initrd image: /boot/initramfs-0-rescue-946cb0e817ea4adb916183df8c4fc817.img
done
[root@localhost ~]# rm -fr /boot/grub2/grub.cfg
[root@localhost ~]# reboot
Connection to 172.25.254.142 closed by remote host.
Connection to 172.25.254.142 closed.
[kiosk@foundation42 Desktop]$ su -
密码:
上一次登录:Tue Apr 11 11:19:01 CST 2017pts/1 上
[root@foundation42 ~]# virt-manager
[root@foundation42 ~]#
#修复boot分区
#修复成功
五、内核引导阶段
1.检测硬件设备
2.设备驱动初始化
3.将/只读挂在
4.载入初始进程 systemd
5.内核文件丢失请重新安装内核
六、systemd 初始化
1.开启 selinux 和 systemd-tools
2.加载内核参数
3.加载系统时钟,键盘,主机名称
4.读写挂载 / 文件系统
5.激活 raid , lvm 设备
6.激活系统配额
7.启动 multi-user.target.wants 中的所有服务脚本
8.启用虚拟控台
9.启动图形
七、启动级别
runlever0.target -> poweroff.target
runlever1.target -> rescue.target
runlever2.target -> multi-user.target
runlever3.target -> multi-user.target
runlever4.target -> multi-user.target
runlever5.target -> grapical.target
runlever6.target -> reboot.target
八、设定启动级别
1.systemctl set-default + 启动级别
2./etc/systemd/system/default.target