杜坤福博客

Hi, 请登录

Linux文件存储共享服务器配置与实战


 I/O:网络、存储

存储:

DAS:Direct Attached Storage

接口类型:“block”

设备:SATA,SAS;IDE,SCSI;USB;

NAS:Network Attached Storage

接口类型:"file"

协议:CIFS(samba), NFS(Network File System)

RPC: Remote Procedure Call

SAN:Storage Area Network

接口类型:"block"

协议:iSCSI(IP-SAN), FCSAN, FCoE, ...

应用层:

ftp, ...

文件服务:ftp, cifs/nfs


ftp:

ftp:file transfer protocol,文件传输协议 ;

两类连接:

命令连接:传输命令

数据连接:传输数据

两种模式:

主动模式:PORT

Server: 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口;

被动模式:PASV

Server:打开一个随机端口,并等待客户端连接 

PAM:Pluggable Authenticate Module

认证框架:库,高度模块化;

协议:C/S

Server:

Windows: Serv-U, IIS, Filezilla

开源:wuftpd, proftpd, pureftpd, vsftpd(Very Secure FTP daemon), ...

Client:

Windows:ftp, Filezilla, CuteFTP, FlashFXP, ...

开源:lftp, ftp, Filezilla, gftp, ...

vsftpd:

vsftpd is a Very Secure FTP daemon. It was written completely from scratch.

URL:

SCHEME://username:password@HOST:PORT/PATH/TO/FILE

路径映射:

用户家目录:每个用户的URL的/映射到当前用户的家目录 ;

vsftpd以ftp用户的身份运行进程,默认认用户即为ftp用户,匿名用户的默认路径即ftp用户的家目录/var/ftp 

ftp, anonymous 

注意:一个用户通过文件共享服务访问文件系统上的文件的生效权限为此二者的交集;

程序环境:

主程序:/usr/sbin/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

数据根目录:/var/ftp 

Systemd Unit File: /usr/lib/systemd/system/vsftpd.service 

配置vsftpd:

用户类别:

匿名用户:anonymous --> ftp, /var/ftp 

系统用户: 至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd);

虚拟用户:非系统用户,用户账号非为可登录操作系统的用户账号(非/etc/passwd);

用户通过vsftpd服务访问到的默认路径,是用户自己的家目录;默认可以自己有权限访问的所有路径间切换;

禁锢用户于其家目录中;

配置文件:/etc/vsftpd/vsftpd.conf

directive value

注意:directive之前不能有多余字符;

匿名用户:

anonymous_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_umask=077

系统用户:

local_enable=YES

write_enable=YES

local_umask=022

辅助配置文件/etc/vsftpd/ftpusers;

列在此文件中的用户 均禁止使用ftp服务;


chroot_local_user=YES

禁锢所有本地用户 于其家目录;需要事先去除用户对家目录的写权限;

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

禁锢列表中文件存在的用户于其家目录中;需要事先去除用户对家目录的写权限;

传输日志:

xferlog_enable=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

守护进程的类型:

standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求; 

transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问请求时不启动;当托管方收到访问请求时,才启动服务进程;

CentOS 6:xinetd独立守护进程, /etc/xinetd.d/,

CentOS 7:由systemd代为监听;

控制可登录vsftpd服务的用户列表:

userlist_enable=YES

启用/etc/vsftpd/user_list文件来控制可登录用户;

userlist_deny=

YES:意味着此为黑名单;

NO:白名单;

上传下载速率:

anon_max_rate=0

local_max_rate=0

并发连接数限制:

max_clients=2000

max_per_ip=50

虚拟用户:

用户账号存储于何处?

文件、MySQL、Redis、...

vsftpd:认证功能托管给pam;

基于何种存储服务来存储用户信息,以及对存储服务的驱动要靠pam实现; 

pam_mysql:

# yum install mariadb-devel pam-devel

# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

# make && make install

创建数据库、授权用户、创建账号和密码;

提供配置文件:/etc/pam.d/vsftpd.vusers

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

配置vsftpd,添加或修改以下选项:

pam_service_name=vsftpd.vusers

guest_enable=YES

guest_username=vuser

虚拟用户的写权限,通过匿名一样的指令进行定义;

还能实现不同的用户有不同的权限;

user_config_dir=/etc/vsftpd/vusers_config/



nfs:

nfs: Network File System

nis:Network Information Service;

ldap:lightweight directory access protocol; ldap over ssl/tls;

NFSv1

NFSv2, NFSv3, NFSv4; 

nfsd: 2049/tcp

辅助类的服务:rpc, portmapper

rpc.mountd:认证;

rpc.lockd:加锁;

rpc.statd:状态; 

rpc: remote procedure call 

NFS  Server:

nfs-utils:

The nfs-utils package provides a daemon for the kernel NFS server and related tools, which provides a much higher level of performance than the traditional Linux NFS server used by most users.

/etc/exports或/etc/exports.d/*

/PATH/TO/SOME_DIR clients1(export_options, ...)  clients2(export_options, ...)

clients:

single host:ipv4, ipv6, FQDN;

network:address/netmask, 支持长短格式的掩码;

wildcards:主机名通配,例如:*.magedu.com; 

netgroups:NIS域内的主机组;@group_name;

anonymous:使用*通配所有主机;

General Options:

ro:只读

rw:读写;

sync:同步;

async:异步;

secure:客户端端口小于1024,否则就要使用insecure选项;

User ID Mapping:

root_squash:压缩root用户,一般指将其映射为nfsnobody;

no_root_squash:不压缩root用户;

all_squash:压缩所有用户;

anonuid and anongid:将压缩的用户映射为此处指定的用户;

 

NFS Client:

mount -t nfs servername:/path/to/share /path/to/mount_point  [-rvVwfnsh ] [-o options]

# exportfs -ar

# exportfs -au

showmount - show mount information for an NFS server

showmount -e NFS_SERVER_IP: 查看指定的nfs server上导出的所有文件系统; 

showmount -a:在nfs server上查看nfs服务的所有客户端列表;

exportfs:

exportfs 

-r:重新导出;

-a:所有文件系统; 

-v:详细信息;

-u:取消导出文件系统; 

其它参考文档:

man nfs:获取nfs文件系统专用的挂载选项;


samba:

smb: Service message block

cifs: common internet filesystem

samba:Andrew Tridgell;

功能:

文件系统共享;

打印机共享;

NetBIOS协议;

peer/peer(workgroup model)

domain model

程序环境:

服务端程序包:samba,samba-common, samba-libs

Server and Client software to interoperate with Windows machines.

主配置文件:/etc/samba/smb.conf, 由samba-common包提供;

主程序:

nmbd:NetBIOS name server

smbd:SMB/CIFS services

Unit File:

smb.service

nmb.service 

监听的端口:

137/udp, 138/udp 

139/tcp, 445/tcp 

主配置文件的配置段:

~ ]# grep -E -i "#(====| ---)"  /etc/samba/smb.conf

#======================= Global Settings =====================================

# ----------------------- Network-Related Options -------------------------

# --------------------------- Logging Options -----------------------------

# ----------------------- Standalone Server Options ------------------------

# ----------------------- Domain Members Options ------------------------

# ----------------------- Domain Controller Options ------------------------

# ----------------------- Browser Control Options ----------------------------

# --------------------------- Printing Options -----------------------------

# --------------------------- File System Options ---------------------------

#============================ Share Definitions ==============================

d:\data\tools:共享,共享名(software)

servicename: 

//172.18.0.70/software

客户端程序:

smbclient:交互式命令行客户端,类似于lftp;

mount.cifs:挂载cifs文件系统的专用命令;

samba的配置:

smb.conf

两类配置段:

全局配置

[global]

Network-Related Options

workgroup =

server string = 

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24

hosts allow = 127.  192.168.12.  192.168.13.

Logging Options

log file = /var/log/samba/log.%m

max log size = 50

Standalone Server Options

security = user

设定安全级别:取值有四个;

share:匿名共享;

user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;

server:由第三方服务进行统一认证;

domain:使用DC进行认证;基于kerberos协议进行;

passdb backend = tdbsam

Printing Options

load printers = yes

cups options = raw

共享文件系统配置

[SHARED_NAME]

有三类:

[homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;

[printers]:定义打印服务;

[shared_fs]:定义共享的文件系统; 

常用指令:

comment:注释信息;

path:当前共享所映射的文件系统路径;

browseable:是否可浏览,指是否可被用户查看;

guest ok:是否允许来宾账号访问;

public:是否公开所有用户;

writable:是否可写;

read only:是否为只读;

write list:拥有写权限的用户列表;

用户名

@组名

+组名

samba用户管理:

smbpasswd 

smbpasswd [options] USERNAME

-a:添加

-x:删除

-d:禁用

-e:启用

pdbedit

-L:列出samba服务中的所有用户;

-a, --create:添加用户为samba用户;

-u, --user=USER:要管理的用户;

-x, --delete:删除用户;

-t, --password-from-stdin:从标准输出接收字符串作为用户密码;

使用空提示符,而后将密码输入两次;

查看服务器端的共享:

smbclient -L SMB_SERVER  [-U USERNAME]

交互式文件访问:

smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]

挂载访问:

mount -t cifs //SMB_SERVER/SAHRE_NAME  -o username=USERNAME,password=PASSWORD

注意:挂载操作的用户,与-o选项中指定用户直接产生映射关系;

此时,访问挂载点,是以-o选项中的username指定的用户身份进行;本地用户对指定的路径访问,首先得拥有对应的本地文件系统权限;

smbstatus命令:

显示samba服务的相关共享的访问状态信息;

-b:显示简要格式信息;

-v:显示详细格式信息; 



相关推荐

评论

  • 昵称 (必填)
  • 邮箱
  • 网址
二维码
评论