Samba和ftp使用指南

一、samba

1.1 安装smb

yum install samba-client cifs-utils -y

1.2 配置文件

主配置文件路径/etc/samba/smb.conf

1.3 配置文件详解

1.3.1全局设置——global

workgroup = MYGROUP#工作组,只有同工作组的计算机才能访问。
server string = Samba Server Version %v
#服务器介绍信息,%v为sabma服务器版本号
security = user#安全验证的方式,有4种。
#share 来访主机无需验证口令。
#user 需要验证来访主机的口令。
#server 使用独立的远程主机来验证来访主机的口令(集中管理账户)。
#domain 使用域控制器进行口令验证
sassdb backend = tdbsam
#定义用户后台的类型,有3种。
#smbpasswd 使用smbpasswd命令为系统用户设定samba服务程序的密码。
#tdbsam 创建数据库文件并使用pdbedit命令建立samba服务程序的用户。
#dapsam 基于LDAP服务进行账户验证。

1.3.2自定义资源设置

[sharefilles]
#共享资源的共享名,这也是来访者看到的共享名。
comment = 提示信息
path = /sharefile
#共享文件的路径
public = no
#关闭“所有人可见”,也就表示要使用账户验证(通过pdbedit命令建立用户)
writable = yes
#允许写入操作。

1.4 samba服务的用户管理命令pdbedit

格式:pdbedit [参数] 
账户命令:
pdbedit -a -u ciri-a 
建立用户
-x 删除用户
-L 列出所有账户
-Lv 列出账户详细信息
使用此命令建立的用户,必须是本地系统中已有的用户。只不过是设置了一个专用samba的密码。

1.5启动smb

systemctl enable smb && systemtl start smb

1.6 在linux之间通过sabma共享文件

1、安装支持文件共享服务的软件包yum install cifs-utils
2、创建auth.smb,即保存了登录验证信息的文件。格式:username=smb用户password=smb密码domain=MYGROUP#工作组名称0
3.创建本地的共享资源挂载点。例如:/share
4.在fstab中写入挂载信息//192.168.3.10/share /share cifs credentials=/root/auth.smb 0 0
#目标samba服务器地址与共享名(非文件夹名称) 
#本地的挂载点#使用cifs远程挂载
#credentials后指定登录验证信息文件的路径
# 0 0 表示不校验
5.挂载共享资源mount -a

1.7 总结

global全局设置。自定义共享资源设置。

使用tdbsam账户信息数据库管理samba用户。

samba用户为已存在的本地用户,文件归属于该用户。


二、VSFTP

2.1 FTP服务

FTP服务的特性

FTP是明文传输的sftp-server可以提供加密的数据传输ftps可以通过ssl加密。

FTP服务使用的端口号(默认)

端口21:命令通道。

端口20:数据传输通道客户端使用随机选取的大于1024的端口号进行传输。
FTP服务器的工作模式

模式说明
主动连接模式当有文件传输需求时,FTP服务器的20端口号主动连接到客户端随机选取的一个大于1024的端口号。
被动连接模式FTP服务器 随机选取一个大于1024的端口号告知客户端 ,客户端主动连接到服务器进行数据传输。

2.2 安装vsftpd

yum install vsftpd -y

2.3 vaftpd的软件及软件结构

软件

所需软件只有一个:vsftpd,通过yum仓库安装。

主要文件

/etc/vsftpd/vsftpd.conf
#主配置文件,变量设置方式:“参数=设置值”。等号两边不能用空白。

/etc/pam.d/vsftpd
#vsftpd使用pam模块时的相关配置文件。主要用来做身份认证时用。

/etc/vsftpd/ftpusers
#与上一个文件有关系,也就是pam模块所指定的那个无法登陆的用户配置文件。
#这个文件的配置很简单,只要将不想让它登陆的FTP账号写入这个文件,一行一个账号。
#绝大部分的系统账号都在这个文件内,也就是说系统账号默认是没有办法使用vsftpd的。
#如果你还想要让某些用户无法登陆,写在这里是最快的。

/etc/vsftpd/user_list
#这个文件能否生效与主配置文件中的两个参数有关,分别是userlist_enable和userlist_deny。
#如果说/etc/vsftpd/ftpusers是PAM模块的阻挡访问项目,那么/etc/vsftpd/user_list则是vsftpd自定义的阻挡访问项。
#事实上这个文件与/etc/vsftpd/ftpusers几乎一模一样。
#在默认情况下,你可以将禁止登陆的用户账号写入这里。
#不过这个文件是否会发生作用由/vsftpd.conf配置文件中的userlist_deny={YES/NO}来决定。

/etc/vsftpd/chroot_list
#这个配置文件默认是不存在的,需要手动建立。
#这个文件的功能是将某些账号的用户chroot建立在他们的默认用户主目录下。
#这个文件的生效与主配置文件内的chroot_list_enable、chroot_list_file两个参数有关。

/usr/sbin/vsftpd
#这就是vsftpd的主要执行文件。vsftpd只有这个一个执行文件而已。

/var/ftp
#这是vsftpd默认匿名用户的根目录。其实这与ftp这个账号的用户主目录有关。

2.4 vsftpd.conf配置说明

/etc/vsftpd/vsftpd.conf是一个挺详细的配置文件,使用 man 5 vsftpd.conf可以得到完整的参数说明。

服务器环境参数

connect_from_port_20=YES
#ftp的数据传输端口号

listen_poart=20
#vsftpd的命令通道端口。这个设置值仅适合以stand alone方式启动。

dirmessage_enable=YES
#当用户进入某个目录时,显示该目录需要注意的内容。显示的文件默认是.

messagemessage_file=.message
#当dirmessage_enable=YES时生效。指定保护有提示内容的文件。

listen=YES
#设置为YES表示vsftpd是以stand alone的方式启动。

pasv_enable=YES
#支持数据流的被动连接模式。

use_localtime=YES
#使用本地时间。默认时间会比中国晚8小时。

write_enable=YES
#当允许用户上传时,要启动此项。

connect_timeout=60
#主动模式下,服务器发出的连接信号60s后得不到客户端相应,强制断线。

accept_timeout=YES
#被动模式下,服务器启用端口,并等待60s后,客户端无响应,则强制断线。

data_connection_timeout=300
#如果数据连接成功建立,但是300秒内没有完成数据传输,则强制断线。

idle_session_timeout=300
#如果300秒内没有任何操作,强制断线。

max_client=0
#限制客户端数量

max_per_ip=0
#限制单个IP的连接数量

pasv_min_port=0、pasv_max_port=0
#设定被动模式用于数据连接的接口范围。0表示随机取用,不指定。

ftpd_banner=一些说明文字
#当用户进入到vsftpd时,在FTP客户端软件上显示说明文字。这个设置值数据比较少。

banner_file=/path/file
#这个项目可以指定文件,用作vfstpd登录时的欢迎文字。

匿名用户相关参数

anonymous_enable=YES
#匿名用户允许登录。

anon_world_readable_only=YES
#允许匿名用户下载拥有可读权限的文件。

anon_other_write_enable=YES
#允许匿名用户写入,可以删除及修改服务器上的文件和文件名。
#(让vsftpd的PID拥有者有写入权限才行。)

anon_mkdir_write_enable=YES
#匿名用户可以建立目录。

anon_upload_enable=YES
#匿名用户可以上传文件。

anon_max_rate=30000
#匿名用户的传输速度为30KB/s。

anon_umask=077
#匿名用户上传文件的权限,如果是007,则表示anonymous用户上传的文件的权限会是-rw-------。

chown_uploads=YES
#这个项目开启上传的文件,变更所有人的功能。

chown_username=daemon
#上传的文件所有者将会变成daemon用户。

实体用户相关参数

guest_enable=YES
#任何实体账号会被假设成guest(所以默认是不开放的)。
#访客在vsftpd当中默认会取得ftp这个用户的相关权限。但可以通过guest_username来修改。

guest_username=ftp
#在guest_enable=YES时生效,指定访客的身份。

local_enable=YES
#为YES时,实体用户才允许登录。

local_umask=002
#实体用户上传的文件的权限。022表示-rwxr-xr-x。

local_max_rate=0
#实体用户的传输速度,0为不限制,30000为30KB/s。

chroot_local_user=YES
#是否将用户限制在自己的用户主目录之内(chroot)。YES表示用户默认会被chroot。

chroot_list_enable=YES
#开启chroot写入列表功能。这个项目开启,chroot_list_file项目才会生效。

chroot_list_file=/etc/vsftpd.chroot_list
#当chroot_list_enable=YES时,可以设置此项目的文件路径。

userlist_enable=YES
#是否借助vsftpd的阻挡机制来阻挡账号。与userlist_deny=YES有关。

userlist_deny=YES
#当userlist_enable=YES时,列入某个文件的用户当不能登录。在userlist_file项目中指定文件。

userlist_file=/etc/vsftpd/user-list
#当userlist_deny=YES时,指定的路径文件中包含的用户将不能登录。

系统安全相关参数

nopriv_user=nobody
#我们的vsftpd默认以nobody作为此服务执行者的权限。
#因为nobody的权限相当低,所以入侵者仅能取得nobody权限。

pam_service_name=vsftpd
#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd中的及时这个。

2.5虚拟用户模式

创建用户清单文件vuser.list(文件名任意),格式如下:

#vuser.list文件的内容:
用户名1
密码1
用户名2
密码2
用户名3
密码3

db_load命令

db_load命令是用来生成db数据库使用的(hash码型的数据库文件)。

yum install db4 -y
#yum安装db4。

db_load -T -t hash -f  */vuser.list   */vuser.db
#执行加密命令,将vuser.list文件加密后输出为vuser.db。

db_load命令参数说明

参数描述
-T选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。如果指定了选项-T,那么一定要追跟子选项-t。
-t子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。
-f参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码

创建一个本地用户用以映射虚拟用户

虚拟用户创建的文件的属性也都归属于这个系统本地用户。

为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本地用户进行登录。

useradd -d /var/ftproot -s /sbin/nologin ftpuser
#创建用户ftpuser。
-d指定家目录
-s指定shell为/sbin/nologin,禁止登陆系统。

chmod -Rf 755 /var/ftproot/
#设置virtual用户的家目录权限为755 -Rf 对子目录生效。
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)。
-f : 若该文件权限无法被更改也不要显示错误讯息。

建立用于支持虚拟用户的PAM文件。

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀。

#PAM文件的路径:
/etc/pam.d/vsftpd.vu(自定义名称的PAM文件,在配置文件中指定这个文件。)

#PAM文件的内容:
auth    required   pam_userdb.so db=/etc/vsftpd/vuser (通过db_load转换过的数据库文件,不带.db的后缀名。)
account  required   pam_userdb.so db=/etc/vsftpd/vuser(通过db_load转换过的数据库文件,不带.db的后缀名。)

在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。现在我们要做的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件即可。

FTP虚拟用户部署脚本

#!/bin/bash

u_ftp_root="/data/ftpdata"
u_local_user="ftpuser"
u_anon_allow="NO"
#u_anon_allow="NO"|"YES"

yum install -y vsftpd
yum install -y db4
useradd ${u_local_user} -d ${u_ftp_root} -M -s /sbin/nologin
mkdir ${u_ftp_root} -p
chown -R ${u_local_user}.${u_local_user} ${u_ftp_root} 

cat << EOF > /etc/vsftpd/vuser.list
admin
admin12345
user
user12345
EOF

db_load -T -t hash -f  /etc/vsftpd/vuser.list   /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.list   /etc/vsftpd/vuser.db

cat << EOF > /etc/pam.d/vsftpd.vu
auth    required   pam_userdb.so db=/etc/vsftpd/vuser
account  required   pam_userdb.so db=/etc/vsftpd/vuser
EOF

mkdir /etc/vsftpd/vuser.d

cat << EOF > /etc/vsftpd/vuser.d/admin
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF

cat << EOF > /etc/vsftpd/vuser.d/user
anonymous_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
EOF

sed -i "/^anonymous_enable=/c anonymous_enable=${u_anon_allow}" /etc/vsftpd/vsftpd.conf
sed -i "/^local_enable=/c local_enable=YES" /etc/vsftpd/vsftpd.conf
sed -i "/^#chroot_local_user=/c chroot_local_user=YES" /etc/vsftpd/vsftpd.conf
sed -i "/^pam_service_name=/c pam_service_name=vsftpd.vu" /etc/vsftpd/vsftpd.conf


cat << EOF >>/etc/vsftpd/vsftpd.conf
anon_umask=022
guest_enable=YES
guest_username=${u_local_user}
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vuser.d
EOF

systemctl enable --now vsftpd
systemctl status vsftpd

标签: none

添加新评论