• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

shell脚本编程练习进阶

2020-07-05

1. 实验目的

  • FTP、NFS、DHCP、Samba、DNS服务器的自动安装与自动配置
    • 配置远程目标主机的SSH免密root登录,安装脚本、配置文件可以从工作主机(执行启动脚本所在的主机)上通过scp或rsync方式拷贝或同步到远程目标主机,然后再借助SSH的远程命令执行功能实现远程控制安装和配置

2. 实验环境

  • host: ubuntu 18.04.4 wsl
  • server:ubuntu 18.04.4 server
    • 192.168.50.129

3. 实验原理

3.1. FTP

FTP是 File Transfer Protocol (文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet 上的控制文件的双向传输。同时,它也是一个应用程序( Application )

FTP的默认端口是20,21
FTP的端口号20、21的区别一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定。


  • FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
  • FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

3.2. vsftpd

vsftpd 是“ very secure FTP daemon ”的缩写,安全性是它的一个最大的特点。 vsftpd是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux 、 BSD 、 Solaris 、HP UNIX 等系统上面,是一个完全免费的、开放源代码的 ftp 服务器软件,支持很多其他的FTP 服务器所不支持的特征。

3.2.1. 匿名登录

在FTP服务器中,匿名用户的用户名和密码都是ftp ;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;可能有类似下面的一行;

1
ftp:x:14:50:FTP User:/var/ftp:/sbin/> nologin

3.3. NFS

网络文件系统(英语:Network File System,缩写作 NFS)是一种分布式文件系统,力求客户端主机可以访问服务器端文件,并且其过程与访问本地存储时一样


​NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;

NFS一般用来存储共享视频,图片等静态数据。


当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。

既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了

3.4. Samba

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件

4. 实验内容

4.1. 配置工作主机远程SSH免密登录到目标主机(假设未开启root免密)

1
2
3
4
5
6
7
8
9
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

sudo sed -i 's/^[# ]*PermitRootLogin [a-z\-]*$/PermitRootLogin yes/' /etc/ssh/sshd_config

sudo sed -i 's/^[# ]*PasswordAuthentication [a-z\-]*$/PermitRootLogin yes/' /etc/ssh/sshd_config

sudo systemctl restart ssh

ssh-copy-id -i ~/.ssh/id_rsa cuc@192.168.50.129
1
2
3
4
5
6
7
sudo ssh host@192.168.50.129

sudo sed -i 's/^[# ]*PasswordAuthentication [a-z\-]*$/PermitRootLogin no/' /etc/ssh/sshd_config

sudo sed -i 's/^[# ]*PermitRootLogin [a-z\-]*$/PermitRootLogin without-password/' /etc/ssh/sshd_config

sudo systemctl restart ssh

4.2. FTP

4.2.1. vsftpd安装

1
2
3
4
5
6
7
8
sudo systemctl status vsftpd
if [ "$?" -nq "0" ];
sudo apt install vsftpd -y

sudo systemcl start vsftpd && pgrep vsftpd

sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT

4.2.2. 配置一个提供匿名访问的FTP服务器,匿名访问者可以访问1个目录且仅拥有该目录及其所有子目录的只读访问权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
d="/etc/vsftpd.conf"

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.$(date +%s).bak

anon_path="/var/ftp/pub"
if [ ! -d $anon_path ];
then
mkdir -p $anon_path
fi

chown nobody:nogroup $anon_path

echo "vsftpd test file" | sudo tee "$anon_path/test.txt"

sudo sed -i 's/^[# ]*anonymous_enable=[a-zA-Z]*$/anonymous_enable=yes/g' $d

sudo sed -i 's/^[# ]*anon_upload_enable=[a-zA-Z]*$/anon_upload_enable=yes/g' $d

sudo sed -i 's/^[# ]*anon_mkdir_write_enable=[a-zA-Z]*$/anon_mkdir_write_enable=yes/g' $d

sudo grep -q "anon_root=" $d && sudo sed -i 's/[# ]*anon_root=[a-zA-Z]*$/anon_root=\/var\/ftp\/pub/g' $d || echo "anon_root=/var/ftp/pub"| sudo tee -a $d

sudo grep -q "no_anon_password=" $d && sudo sed -i 's/^[# ]*no_anon_password=[a-zA-Z]*$/no_anon_password=YES/g' $d || echo "no_anon_password=YES" |sudo tee -a $d

4.2.3. 配置一个支持用户名和密码方式访问的账号,该账号继承匿名访问者所有权限,且拥有对另1个独立目录及其子目录完整读写(包括创建目录、修改文件、删除文件等)权限,(该账号仅可用于FTP服务访问,不能用于系统shell登录)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
usr="ftpusr"

sudo adduser $usr
# not useradd

# adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
# useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。

# sudo passwd $usr

usr_path="/home/$usr/ftp"

if [ ! -d $usr_path ];
then
sudo mkdir $usr_path
fi

ls $usr_path

# sudo chown nobody:nogroup $usr_path
sudo chmod 777 -R $usr_path
sudo chmod 755 /etc/vsftpd.userlist

usr_write_path=$usr_path/files

if [ ! -d $usr_write_path ];
then
sudo mkdir $usr_write_path
fi
sudo chown $usr:$usr $usr_write_path

echo "vsftpd test file" |sudo tee $usr_write_path/test.txt

conf=/etc/vsftpd.conf

sed -i -e "/local_enable=/s/^[#]//g;/local_enable=/s/NO/YES/g" "$conf"
sed -i -e "/write_enable=/s/^[#]//g;/^write_enable=/s/NO/YES/g" "$conf"

sed -i -e "/chroot_local_user=/s/^[#]//g;/chroot_local_user=/s/NO/YES/g" "$conf"

port_min=40000
port_max=50000

grep -q "pasv_min_port=" "$conf" && sed -i -e "/pasv_min_port=/s/^[#]//g;/pasv_min_port=/s/\=.*/=${port_min}/g" "$conf" || echo "pasv_min_port=$port_min"| sudo tee -a "$conf"

grep -q "pasv_max_port=" "$conf" && sed -i -e "/pasv_max_port=/s/^[#]//g;/pasv_max_port=/s/\=.*/=${port_max}/g" "$conf" || echo "pasv_max_port=${port_max}" | sudo tee -a "$conf"

grep -q $usr /etc/vsftpd.userlist || echo $usr | sudo tee -a /etc/vsftpd.userlist

grep -q "anonymous" /etc/vsftpd.userlist || echo "anonymous" |sudo tee -a /etc/vsftpd.userlist


grep -q "userlist_enable=" "$conf" && sed -i -e "/userlist_enable=/s/^[#]//g;/userlist_enable=/s/\=.*/=YES/g" "$conf" || echo "userlist_enable=YES" |sudo tee -a "$conf"

grep -q "userlist_file=" "$conf" && sed -i -e "#userlist_file=#s#^[#]##g;#userlist_file=#s#\=.*#=/etc/vsftpd.userlist#g" "$conf" || echo "userlist_file=/etc/vsftpd.userlist" |sudo tee -a "$conf"

grep -q "userlist_deny=" "$conf" && sed -i -e "/userlist_deny=/s/^[#]//g;/userlist_deny=/s/\=.*/=NO/g" "$conf" || echo "userlist_deny=NO" |sudo tee -a "$conf"

grep -q "tcp_wrappers=" "$conf" && sed -i -e "/tcp_wrappers=/s/^[#]//g;/tcp_wrappers=/s/NO/YES/g" "$conf" || echo "tcp_wrappers=YES" | sudo tee -a "$conf"
grep -q "vsftpd:ALL" /etc/hosts.deny || echo "vsftpd:ALL" | sudo tee -a /etc/hosts.deny
grep -q "vsftpd:ALL:allow" /etc/hosts.allow || echo "vsftpd:ALL:allow" | sudo tee -a /etc/hosts.allow
grep -q "allow_writeable_chroot=" "$conf" && sed -i -e "/allow_writeable_chroot=/s/^[#]//g;/allow_writeable_chroot=/s/NO/YES/g" "$conf" || echo "allow_writeable_chroot=YES" | sudo tee -a "$conf"

sudo systemctl restart vsftpd

4.3. NFS

4.3.1. 在1台Linux上(目标主机T)配置NFS服务,另1台电脑上(工作主机W)配置NFS客户端挂载2个权限不同的共享目录,分别对应只读访问和读写访问权限

服务器端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo apt install -y nfs-kernel-server -y

echo "mountd 192.168.50." | sudo tee -s /etc/hosts.allow

if [ ! -d "/public" ];
then
sudo mkdir "/public"
fi

if [ ! -d "/protected" ];
then
sudo mkdir "/protected"
fi

echo test | sudo tee /public/test.txt
echo test | sudo tee /protected/test.txt

echo "/public *(rw,sync,no_root_squash,insecure)" | tee -a /etc/exports
echo "/protected *(ro,sync,no_root_squash,insecure)" | tee -a /etc/exports

sudo exportfs -a

sudo systemctl start nfs-kernel-server ||sudo systemctl restart nfs-kernel-server

客户端

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt install nfs-common -y

showmount -e 192.168.50.129
rpcinfo -p 192.168.50.129 | grep nfs

sudo mkdir /mnt/public
sudo mkdir /mnt/protected


sudo mount -t nfs 192.168.50.129:/public /mnt/public

sudo mount -t nfs 192.168.50.129:/protected /mnt/protected

4.4. DHCP

4.4.1. 2台虚拟机使用Internal网络模式连接,其中一台虚拟机上(目标主机T)配置DHCP服务,另一台服务器(工作主机W)作为DHCP客户端,从该DHCP服务器获取网络地址配置

服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sudo apt install isc-dhcp-server -y

cat<<EOF >>/etc/dhcp/dhcpd.conf
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.101 192.168.50.254;
default-lease-time 600;
max-lease-time 6400;
}
EOF

cat<<EOF >> 50-cloud-init.yaml
enp0s8:
dhcp4: false
addresses:
- 192.168.50.129
EOF


sudo sed -i -e "/INTERFACESv4=/s/^[#]//g;/INTERFACESv4=/s/\=.*/=\"enp0s8\"/g" /etc/default/isc-dhcp-server

sudo systemctl restart isc-dhcp-server

客户端

1
2
3
4
5
6
7
8
cat<<EOF >> 50-cloud-init.yaml
enp0s8:
dhcp4: true
EOF

netplan generate

netplan applay

4.5. Samba

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt install samba -y
sudo apt install smbclient -y

sudo adduser samba
sudo mkdir /samba
sudo chmod o+w /samba

cat <<EOF >> /etc/samba/smb.conf
[samba]
comment = Home Directories
browseable = no
writable = yes
path = /samba
public = yes
EOF
sudo systemctl restart smbd
  • 若要read-only:read only = yes

4.6. DNS

4.6.1. 基于上述Internal网络模式连接的虚拟机实验环境,在DHCP服务器上(目标主机T)配置DNS服务,使得另一台作为DNS客户端的主机可以通过该DNS服务器进行DNS查询

服务器端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sudo apt install bind9 -y

sudo touch /etc/bind/db.test.com

cat <<EOF >> /etc/bind/named.conf.default-zones
zone "test.com" {
type master;
file "/etc/bind/db.test.com";
};
EOF

cat <<EOF >> /etc/bind/db.test.com
$TTL 604800
@ IN SOA test.com. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
test.com IN NS 192.168.100.1

aa IN A 192.168.100.1
bb IN A 192.168.100.1
cc IN CNAME bb
EOF

sudo systemctl start bind9||sudo systemctl restart bind9

客户端

1
2
3
4
sudo apt install resolvconf -y

echo "nameserver 192.168.50.129"| sudo tee -a /etc/resolv.conf

5. 参考

  • VSFTPD的使用详解 - 知乎
  • FTP的默认端口_wonder-CSDN博客_ftp默认端口
  • 关于Linux环境下安装配置vsftpd服务全攻略(踩坑)_苦逼的程序猿☺-CSDN博客_先安装vsftpd服务
  • Linux的vsFTPd服务器详解
  • vsftpd:421 Service not available-emailwht-ChinaUnix博客
  • samba配置与windows - 我就是我没毛病 - 博客园
  • ubuntu下配置bind9为局域网的DNS服务器_lyhDream的专栏-CSDN博客_在ubuntu下安装bind9做dns服务器
  • Lab
  • Operating System
  • Linux
  • Lab
ansible实验
高级数据库笔记-事务管理
  1. 1. 1. 实验目的
  2. 2. 2. 实验环境
  3. 3. 3. 实验原理
    1. 3.1. 3.1. FTP
    2. 3.2. 3.2. vsftpd
      1. 3.2.1. 3.2.1. 匿名登录
    3. 3.3. 3.3. NFS
    4. 3.4. 3.4. Samba
  4. 4. 4. 实验内容
    1. 4.1. 4.1. 配置工作主机远程SSH免密登录到目标主机(假设未开启root免密)
    2. 4.2. 4.2. FTP
      1. 4.2.1. 4.2.1. vsftpd安装
      2. 4.2.2. 4.2.2. 配置一个提供匿名访问的FTP服务器,匿名访问者可以访问1个目录且仅拥有该目录及其所有子目录的只读访问权限
      3. 4.2.3. 4.2.3. 配置一个支持用户名和密码方式访问的账号,该账号继承匿名访问者所有权限,且拥有对另1个独立目录及其子目录完整读写(包括创建目录、修改文件、删除文件等)权限,(该账号仅可用于FTP服务访问,不能用于系统shell登录)
    3. 4.3. 4.3. NFS
      1. 4.3.1. 4.3.1. 在1台Linux上(目标主机T)配置NFS服务,另1台电脑上(工作主机W)配置NFS客户端挂载2个权限不同的共享目录,分别对应只读访问和读写访问权限
    4. 4.4. 4.4. DHCP
      1. 4.4.1. 4.4.1. 2台虚拟机使用Internal网络模式连接,其中一台虚拟机上(目标主机T)配置DHCP服务,另一台服务器(工作主机W)作为DHCP客户端,从该DHCP服务器获取网络地址配置
    5. 4.5. 4.5. Samba
    6. 4.6. 4.6. DNS
      1. 4.6.1. 4.6.1. 基于上述Internal网络模式连接的虚拟机实验环境,在DHCP服务器上(目标主机T)配置DNS服务,使得另一台作为DNS客户端的主机可以通过该DNS服务器进行DNS查询
  5. 5. 5. 参考
© 2024 何决云 载入天数...