1、FTP协议及相关概念 2、FTP安装配置 3、实现FTPS 4、基于文件实现虚拟用户认证 5、FTP MariaDB数据库存储FTP账号密码 6、NFS 7、SMBA ================================================================================================================================================ FTP协议及相关概念 1、文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层,基于TCP工作。 2、不同主机实现文件共享 网络文件系统:像自己的数据一样使用远程文件系统 nfs cifs 应用层协议:C/S ftp 文件系统同步:基于文件系统同步数据 rsync + inotify 机制 sersync 3、两类会话 基于TCP的命令连接:始终存在,由客户端决定断开 基于TCP的数据连接:数据传输连接,传输完毕断开 4、数据连接,对于服务器端而言: 主动模式:客户端取一个非特权的端口N去连接ftp服务器21号端口,然后客户端监听N+1号端口,并告知服务器,我的N+1号端口可以连接,然后服务器 端用20端口去连接客户端告知的端口,从而建立数据连接。在这种模式下,有一个缺陷,客户端通常会有严格的防火墙规则,有可能会拒绝 服务器端的主动请求,从而导致数据传输失败。 被动模式:和主动模式一样客户端首先与服务器端建立命令连接,协商使用被动模式,然后服务器端取一个用于数据连接的随机端口返回给客户端,客 户端收到服务器端返回的指定端口后,客户端取一个自己的随机端口主动去连接服务器,从而建立数据连接。这种模式下,同时带来一个问 题,就是服务器端的随机端口打开同样会对服务器端的安全造成不安全因素,但是,Linux有一种机制:追踪连接机制,可以实现防火墙放行 随机端口。 4、服务器ftp软件 wu-ftpd protftpd pureftp vsftpd:Very Secure ftpd,单机最多可支持15000个并发 5、客户端程序 ftp:ftp客户端匿名用户名默认为anonymous或者ftp lftp lftpget wget curl 6、用户认证 hash file:Linux系统用户,使用/etc/shadow文件认证 mysql 数据库 匿名用户 7、响应码 1XX:信息 125:数据连接打开 2XX:成功类状态 200:命令OK 230:登录成功 3XX:补充类 331:用户名OK 4XX:客户端错误 425:不能打开数据连接 5XX:服务器错误 530:不能登录 8、传输文件格式 二进制:不会对文件格式改变 文本格式:会做文本格式转换 ================================================================================================================================================ FTP安装配置 1、安装 yum install vsftpd 2、文件列表 /etc/logrotate.d/vsftpd # 日志滚动脚本 /etc/pam.d/vsftpd # 基于pam认证的配置文件 /usr/lib/systemd/system/vsftpd.service # 服务脚本 /etc/vsftpd # 配置文件目录 /etc/vsftpd/ftpusers # 使用pam认证的用户列表 /etc/vsftpd/user_list # 访问控制的用户列表 /etc/vsftpd/vsftpd.conf # 配置文件 /var/ftp # 数据文件根目录。可以通过usermod -d /path/to/dir ftp修改ftp的家目录从而修改数据的根目录 /var/ftp/pub # 匿名用户的下载目录 3、配置文件 端口配置: listen_port=21 # 命令连接端口,默认为21端口 connect_from_port_20=YES # 主动模式端口为20,即使用20端口去连接客户端进行数据传输 ftp_data_port=20 # 指定主动模式的端口 pasv_min_prot=6000 # 被动模式的最小端口 pasv_max_port=6060 # 被动模式的最大端口 use_localtime=YES # 使用本地时间 nopriv_user=nobody # 指定运行vsftpd的用户 匿名用户配置: anonymous_enable=YES # 是否启用匿名用户访问文件目录,如果禁用则需要用户认证 no_anon_password=YES|NO # 匿名用户略过口令检查 *anon_world_readable_only=YES # (默认YES)只能下载全部读的文件{所有人都有读权限的文件才能下载} *anon_upload_enable=YES # 是否启用匿名用户上传,本地文件系统要开放权限 *anon_other_write_enable=YES # 是否允许匿名用户删除文件 *anon_mkdir_write_enable=YES # 是否允许匿名用户创建目录 anon_umask=077 # 指定匿名上传的umask chown_uploads=YES # 默认为NO,是否指定上传文件的默认所有者和权限 chown_username=USER_NAME # 指定所有者 chown_upload_mode=0644 # 指定上传文件的默认权限 系统用户配置: guest_enable=YES # 所有系统用户都映射成guest用户 guest_username=ftp # 配合上面选项才生效,指定guest用户 local_enable=YES # 是否[允许本地]用户登录,用户登录之后,默认在用户的家目录 write_enable=YES # 允许linux用户上传文件 local_umask=022 # 指定系统用户上传文件的默认权限 local_root=/ftproot # 非匿名用户登录所在目录 chroot_local_user={Yes|NO} # 对本地用户进行chroot,禁锢系统用户在自己的家目录中,默认为NO chroot_list_enable=YES # 启用不chroot的列表 chroot_list_file=/etc/vsftpd/chroot_list # 所控制的用户的列表。当chroot_local_user=YES时,则chroot_list中用户不禁锢 当chroot_local_user=NO时,则chroot_list中用户禁锢 日志配置: wu-ftp日志: xferlog_enable=YES #(默认)启用记录上传下载日志 xferlog_std_format=YES #(默认)使用wu-ftp日志格式 xferlog_file=/var/log/xferlog #(默认)可自动生成 vsftpd日志:默认为不启用 dual_log_enable=YES # 使用vsftpd日志格式,默认不启用 vsftpd_log_file=/var/log/vsftpd.log #(默认)可自动生成 登录信息:(只有在windows下才生效) dirmessage_enable=YES # 登录欢迎信息 ftpd_banner="welcome to mage ftp server" banner_file=/etc/vsftpd/ftpbanner.txt # 优先上面项生效 目录访问提示:(只有在windows下才生效) dirmessage_enable=YES message_file=.message # 信息存放在指定目录下的.message文件中 使用pam完成用户认证: pam_service_name=vsftpd # 启用pam认证机制(vsftpd.conf配置文件)pam配置文件:/etc/pam.d/vsftpd /etc/vsftpd/ftpusers # 默认情况下,此文件中的用户列表不能登录 使用列表文件控制用户登录: userlist_enable=YES # 默认有此设置 userlist_deny=YES # (默认值)黑名单,不提示口令,NO为白名单 userlist_file=/etc/vsftpd/users_list # 此为默认值 连接限制: max_clients = # 最大并发连接数 max_per_ip = # 每个IP可以同时发起的并发连接 设定vsftpd为xinetd启动方式: 1、cp /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd /etc/xinetd.d/vsftpd 2、修改配置文件 # vsftpd is the secure FTP server. service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd port = 21 protocol = tcp log_on_success += PID HOST DURATION log_on_failure += HOST instances = 20 disable = no } 3、修改vsftpd.conf listen=NO listen_ipv6=NO 传输速率: anon_max_rate = # 匿名用户的最大传输速率,单位是字节/秒,0表示不限制 local_max_rate = # 本地用户的最大传输速率 连接时间:秒为单位 connect_timeout=60 # 主动模式数据连接超时时长 accept_timeout=60 # 被动模式数据连接超时时长 data_connection_timeout=300 # 数据连接无数据输超时时长 idle_session_timeout=60 # 无命令操作超时时长 传输方式: ascii_upload_enable=YES # 启用后,ASCII模式的数据传输将在上传时保留 ascii_download_enable=YES # 启用后,ASCII模式的数据传输将在下载时保留 Note: 1、如果chroot_local_user=NO,则chroot_list中的用户则是chroot的用户列表 2、新版本的vsftp,如果限定了chroot的用户,则因为用户对用户家目录不能有写权限,所以无法登录。 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 解决:chmod a-w /home/user_dir_name write_enable=YES # 是否允许本地用户上传 3、上传权限要考虑文件系统权限和服务器配置权限,可以在用户的家目录下创建目录,然后对相应的用户进行授权 匿名用户以ftp用户的身份登录。可以使用setfacl设置目录权限。 4、Linux客户端默认使用被动模式,windows客户端默认使用主动模式 =============================================================================================================================================== 实现FTPS 1、查看是否支持SLL ldd `which vsftpd` | grep ssl 2、创建自签名证书 cd /etc/pki/tls/certs/ make vsftpd.pem openssl x509 -in vsftpd.pem -noout –text 3、配置 ssl_enable=YES # 启用 SSL allow_anon_ssl=NO # 匿名不支持 SSL force_local_logins_ssl=YES # 本地用户登录加密 force_local_data_ssl=YES # 本地用户数据传输加密 rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem rsa_private_key_file=/etc/vsftpd/ssl/private/vsftpd.key ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO ================================================================================================================================================ 基于文件实现虚拟用户认证 1、所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控 制参数进行指定 。 2、虚拟用户账号的存储方式可以是文本或者数据库。在文本方式存储时,需要将文件编码为hash格式 db_load -T -t hash -f VirtualAccount.txt VirtualAccount.db 3、配置文件 vim /etc/vsftpd/VirtualAccount.txt xuejinwei1 123 xuejinwei2 123 cd /etc/vsftpd/ db_load -T -t hash -f VirtualAccount.txt VirtualAccount.db chmod 600 VirtualAccount.db 4、创建pam配置文件 vim /etc/pam.d/vsftpd.db auth required pam_userdb.so db=/etc/vsftpd/VirtualAccount account required pam_userdb.so db=/etc/vsftpd/VirtualAccount 5、vsftp.conf vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vusers pam_service_name=VirtualAccount.db 6、SElinux 禁用SELinux 或者 setsebool -P ftpd_full_access 1 7、虚拟用户建立独立的配置文件 mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径  vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/  cd /etc/vsftpd/vusers.d/  进入此目录允许wang用户可读写,其它用户只读  vim xuejinwei1 创建各用户自已的配置文件 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES  vim xuejinwei2 创建各用户自已的配置文件 登录目录改变至指定的目录 local_root=/xuejinwei2 Note:此处的目录不是虚拟用户初始的映射目录 8、创建用户和访问FTP的目录 useradd -d /var/ftproot -s /sbin/nologin vusers chmod +rx /var/ftproot/ 9、 CentOS7+ chmod -w /var/ftproot/ mkdir /var/ftproot/upload setfacl -m u:vusers:rwx /var/ftproot/upload ================================================================================================================================================ FTP MariaDB数据库存储FTP账号密码 1、编译pam_mysql ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security make make install 2、创建数据库 CREATE DATABASE vsftpd; USE vsftpd; SHOW TABLES; CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); mysql>DESC users; 3、vi /etc/pam.d/vsftpd.mysql auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=users sercolumn=name passwdcolumn=password crypt=2 auth 表示认证 account 验证账号密码正常使用 required 表示认证要通过 pam_mysql.so 模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数 user=vsftpd 为登录mysql的用户 passwd=magedu 登录mysql的的密码 host=mysqlserver mysql服务器的主机名或ip地址 db=vsftpd 指定连接msyql的数据库名称 table=users 指定连接数据库中的表名 usercolumn=name 当做用户名的字段 passwdcolumn=password 当做用户名字段的密码 crypt=2 密码的加密方式为mysql password()函数加密 crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示 sha1加密 4、SElinux配置 restorecon -R /lib64/security setsebool -P ftpd_connect_db 1 setsebool -P ftp_home_dir 1 chcon -R -t public_content_rw_t /var/ftproot/ 5、实验步骤 环境说明:172.18.26.3作为vsftpd服务器,172.18.26.4作为MariaDB服务器 1、数据库服务器配置 1、安装 $ yum install mariadb-server $ systemctl start mariadb.service $ systemctl enable mariadb.sevice 2、执行安全初始化脚本 $ mysql_secure_installation 3、在建立数据库服务器建立虚拟用户的数据库和数据库用户以及远程用户授权 # 创建数据库 CREATE DATABASE userdb; # 授权用户远程登录及查询权限 GRANT SELECT ON userdb.* TO 'vsftpd'@'172.18.%.%' IDENTIFIED BY 'xjw,./qwe'; # 创建存储账号信息的表 USE vsftpd; SHOW TABLES; CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); # 查看表结构 DESC users; # 测试用户是否可以登录 mysql -u vsftpd -h 172.18.26.4 -p # 添加虚拟用户 INSERT INTO users(name,password) VALUES('test1',Password('123')); ...... # 查看用户信息 SELECT * FROM users; 2、vsftpd服务器配置 1、安装vsftpd $ yum install vsftpd 2、编译安装pam_mysql # 依赖包安装 $ yum install gcc $ yum install mariadb-server.x86_64 mariadb-devel $ yum install gcc-c++ $ yum install pam-devel # make && make install # 查看生成的文件 /usr/lib64/security/pam_mysql.so 3、pam认证配置 vim /etc/pam.d/vsftpd.mysql auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=xjw,./qwe host=172.18.26.4 db=userdb table=users usercolumn=name passwdcolumn=Password crypt=2 account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=xjw,./qwe host=172.18.26.4 db=userdb table=users usercolumn=name passwdcolumn=Password crypt=2 4、建立虚拟映射账号 $ useradd -s /sbin/nologin -d /var/vuserdir vuser 5、在虚拟账号映射目录下创建目录 $ mkdir test{1,2,3,4} 6、配置特殊权限 $ setfacl -m u:vuser:rwx /var/vuserdir/upload 7、vsftpd.conf配置 pam_service_name=vsftpd.mysql guest_enable=YES guest_username=vuser 8、测试登录 lftp -u test1,123 172.18.26.3 3、创建每个虚拟用户拥有不同的访问权限 Note:vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以 定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用 户的用户名。 配置文件目录可以是任意未使用目录,只需要在 vsftpd.conf指定其路径及名称即可。 1、vsftpd.conf配置文件配置 user_config_dir=/etc/vsftpd/vuser_config 2、创建每个虚拟用户的配置文件存放目录 mkdir /etc/vsftpd/vuser_config 3、添加配置文件 cd /etc/vsftpd/vuser_config touch test4 Note:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件 在里面添加如下 选项并设置为YES即可,只读则设为NO注意:需确保对应的映射用户对于文件系统有写权限 虚拟用户要对目录有写权限。 $ chmod a+w vuserdir/ vim test3 anon_upload_enable=YES # 是否启用匿名用户上传,本地文件系统要开放权限 anon_other_write_enable=YES # 是否允许匿名用户删除文件 anon_mkdir_write_enable=YES # 是否允许匿名用户创建目录 ================================================================================================================================================ NFS 1、介绍 NFS:Network File Systerm。是由Sun公司1984年发布的分布式文件系统协议。它允许客户端将远程文件系统挂在到本地,像访问本地 文件一样地访问网络上的文件。NFS协议,在类unix系统上实现文件共享的文件系统。 2、实现原理 NFS文件系统同其他文件系统类似,也是在内核中实现的。 NFS文件系统的实现是将本地文件系统的接口映射到网络远程服务器的文件 系统上。这种机制叫远程过程调用。 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计 算机的子程序。客户端程序在运行时在本地发起过程调用,但这个调用不是由本地来处理,而是基于rpc协议通过网络发送给另外一台 远程主机,然后远程服务器在本地处理调用请求过程,在本地执行完毕后,将结果响应给服务器端监听程序,然后返回给客户端。远程 服务器的应用程序监听在某个端口,等待客户端程序的调用请求。NFS服务器不支持账号密码对客户端进行认证,认证方式是通过IP地址 进行认证的。nfs的实现需要服务器端和客户端,客户端访问保存在服务器端的数据。 3、rpc和nfs的关系 nfs本身没有提供信息传输的协议功能,而是使用了rpc的功能。 nfs服务在CentOS下需要两个套件 nfs-utils rpcbind,日志文件在/var/lib/nfs 服务器端服务进程: nfsd 监听在TCP/2049或者UDP/2049端口,处理客户端的请求 mountd 该守护进程处理来自远程系统的文件系统挂载请求并提供访问控制。以确定哪些文件系统可用于远程挂载,以及哪些系统 允许执行远程挂载。 rpcbind 提供rpc服务的进程叫portmapper,portmapper监听在一个固定的端口111远程过程调用实现端口绑定。RPC 服务 在 CentOS 6.5 之后改名为 rpcbind,它监听在一个固定端口,其他基于 RPC 的服务进程需要监听时,先向 RPC 服务注册,RPC 服务为其分配一个随机端口供其使用。客户端在请求时,先向 RPC 服务请求对应服务监听的端口, 然后再向该服务发出调用请求。 rpc.statd 非必要,检查文件一致性,可修复文件 rpc.lockd 非必要,管理文件锁,避免同时写出错 4、配置NFS服务器 1、安装 yum install nfs-utils rpcbind 2、导出共享文件系统 /etc/exports /etc/pxports.d/NAME.exportfs 这个文件指定要共享或者输出的文件系统,以及那些IP的客户端可以挂载使用。同时可以配置访问权限及其他属性 格式:/path/to/shared_dir_fs client1(option1, option2) client2(option1, option2) IP地址: 172.18.0.0/255.255.0.0 172.18.0.0/16 通配: *.xuejinwei.com # 只能主机名通配,例如*.xuejinwei.com * # 表示通配所有客户端 client: ipv4、FQDN、ipv6 选项: 默认选项:(ro,sync,root_squash,no_all_squash) secure: 这个选项是默认选项,表示选用1024以下的端口与客户端建立连接,insecure 可以禁用。 rw: 这个选项允许 NFS 客户机进行读/写访问。默认是只读的 sync: 同步。将数据同步写入磁盘,会影响性能,但可以保持数据一致性 async: 异步。这个选项可以改进性能,但是如果没有同步完数据,发生断电或故障的情况,可能会造成数据丢失。 no_wdelay: 这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项 no_subtree_check: 即使共享目录是一个子目录,nfs服务器略过检查父目录的权限 root_squash:默认开启。客户端使用root用户的身份去访问文件系统时,将root用户的身份压缩为nfs服务器端nobody的身份, 而映射后的身份是没有写权限的。 no_root_squash:允许root用户访问文件系统,与root_sqash相反,但普通用户依然没权限写权限 all_squash: 全部压缩用户身份为nobody。设置是 no_all_squash no_all_squash: 全部不压缩用户身份为nobody。设置是 no_all_squash 只允许某一个用户有写权限,可是在服务器端创建一个和这个用户同uid的用户,然后在服务器端给这个用户acl权限 no_auth_nlm: 这个选项也可以作为 insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题, 就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。 mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录。 fsid=num: 这个选项通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。 anonuid 和 anongid: 这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。anonuid=150,anongid=100 showmount -e IP # 查看NFS服务器共享的文件系统 3、挂载NFS文件系统 mount -t nfs server:/path/to/dir /path/to/mount_dir 4、开机自动挂载nfs文件系统 /etc/fstab server_IP:/path/to/dir /mount_point nfs deults,_netdev 0 0 5、配置NFS使用固定端口 vim /etc/sysconfig/nfs RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 # rpc.mountd进程监听端口 STATD_PORT=662 STATD_OUTGOING_PORT=2020 防火墙除开放上述端口,还需开放TCP和UDP的111和2049共4个端口 5、rpcinfo命令 显示服务器rpc服务器状态是否处于工作状态,及监听端口信息此命令可生成有关系统上正在运行的 RPC 服务的信息。 rpcinfo -p server_IP 6、exportfs命令 exportfs -v # 查看本机所有共享NFS exportfs -ar # 重新导出共享的文件系统 exportfs -au # 关闭所有共享的文件系统 exportfs -u fs # 关闭指定的共享的文件系统 7、NFS有关的挂载选项 fg(默认)前台挂载,bg后台挂载 hard(默认)持续请求,soft 非持续请求 intr 和hard配合,请求可中断 rsize和 wsize 一次读和写数据最大字节数,rsize=32768 _netdev 无网络不挂载 vers=3|4 挂载时指定NFS版本 8、NFS配置SElinux CentOS7 默认 SELinux 的布尔值 nfs_export_all_ro 和 nfs_export_all_rw 都启用. 这允许NFS服务可以读写任意文件,基于安全考虑可关闭. 对于只读的NFS目录SELinux安全上下文件应设为 public_content_t 或 nfs_t 对于读写的NFS目录SELinux安全上下文件应设为 public_content_rw_t 或 nfs_t context,并且布尔值 nfsd_anon_write Boolean 必须启用,以允许写操作. 帮助参考nfsd_selinux(8)( selinux-policy-devel 包)nfs(5), mount(8), mount.nfs(8), exportfs(8), exports(5), nfsd_selinux(8) 9、注意 1、nfs的客户端访问nfs服务器时,nfs的客户端的root用户映射为nfs服务器端的nfsnobody用户,普通用户则映射为服务器端UID与客户端UID相同的用户的身份。 2、共享目录的子目录也可以被挂载 12、NFSv4版本支持共享"根" 含义:NFS服务器共享出来一个父目录,例如:创建一个目录/nfsroot 在 /nfsroot 目录下创建要共享的空目录名。然后使用--bind的方式将NFS服务器上 要共享出来的目录挂载在 /nfsroot 目录下的所对应的空目录下 配置: /nfsroot *(rw,fsid=0,crossmnt) /nfsroot/dir1 *(rw) /nfsroot/dir2 *(ro) 11、自动挂载服务 autofs的主要配置文件有两个,分别是/etc下的auto.master和auto.misc。其中,auto.master是起控制作用的,它定义了挂载点和automount动作的 文件。其内容如下: vim /etc/auto.master 相对路径 /misc /etc/auto.misc # /misc是定义的自动mount的挂载点,/etc/auto.misc里定义了mount的动作 /home /etc/auto.home # /home是定义的自动mount的挂载点;/etc/auto.home定义了mount的动作 Note: /etc/auto.misc /etc/auto.home 这些文件定义了挂载文件系统的动作 cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom # 将/dev/cdrom自动挂载到/misc/cd/下 boot -fstype=ext2 :/dev/hda1 # 将本地磁盘分区/dev/hda1自动挂载到/misc/boot下 floppy -fstype=auto :/dev/fd0 # 将软盘设备/dev/fd0自动挂载到/misc/floppy下 这些资源只有在你试图访问的时候才会去自动挂载,而在一段时间之后,如果你不再使用这些资源,autofs会自动卸载这些资源。默认时间为5分钟(300秒), 此选项由/etc/sysconfig/autofs定义,根据需要可以修改。 示例: 挂载NFS文件系统:* -rw,soft,intr :172.16.78.142:/home/& Note: 1、绝对路径: vim /etc/auto.master /- /etc/auto.misc vim /etc/auto.misc /mnt/cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom 2、/net -hosts cd /net/172.18.26.3 # 可直接挂载NFS服务器的文件系统 ================================================================================================================================================ SAMBA 1、介绍 SMB,网络文件共享服务 在类UNIX上实现数据共享的文件系统是NFS,Windows上实现数据共享的文件系统是CIFS(Common Internet File),一种应用层协议。CIFS消息一般使用NetBIOS或 TCP协议发送,分别使用不同的端口139或445,目前倾向于使用445端口。CIFS的消息包括一个信头(32字节)和消息体(1个或多个,可变长)。 CIFS是微软基于SMB开发。 2、SAMBA(Server Message Block) SAMBA使用NetBIOS(Network Basic Input/Output System, NetBIOS)通讯协议。类似于NFS网络文件系统的RPC。可以实现windows和Linux之间共享文件系统。 3、SAMBA服务进程: nmbd:监听在UDP/137,138端口负责名称解析,实现NetBIOS协议(Windows基于主机名实现互相通信的机制) smbd:监听在TCP/139,TCP/445数据传输,实现SMB(CIFS协议)协议 4、NetBIOS 网络基本输入输出系统(Network Basic Input/Output System)。使用广播的方式在局域网内解析主机名和主机对应关系。 5、windows UNC 路径: \\server—IP:\shared\dir 例如:\\192.168.1.150\var\lib\samba\drivers 6、smbclient # 列出服务共享的文件系统 smbclient -L ServerIP -U username # 以交互模式连人服务器的共享 smbclient //192.168.1.150/ayy -U ayy # 挂载方式访问 mount -t cifs //192.168.1.150/fs /path/to/fs -o username=smbname,password=XXXX # 开机自动挂载 /etc/fstab 可以用文件代替用户名和密码的输入 //server/homes /mnt cifs credentials=/etc/smb.txt 0 0 cat /etc/smb.txt username=wang password=password chmod 600 /etc/smb.txt 4、工作模式 对等模式:两台主机都充当服务器的角色及客户端的角色 主控模式:有一台主机负责验证账号密码信息 5、安装配置 1、软件结构 samba:主要提供服务的程序。smbd、nmbd samba-client:Linux下的samba服务客户端 samba-common:服务器端和客户端通用组件,配置文件、语法检测工具等 cifs-utils:smb客户端工具 samba-winbind:和AD相关 samba-swat:图形管理工具 2、配置文件 /etc/samba/smb.conf # 主配置文件 /etc/samba/lmhosts # 设定NetBIOS name对应的IP /usr/bin/smbstatus # 服务器功能,列出目前samba的状态 /usr/bin/testparm # samba配置文件语法检测 /usr/lib/systemd/system/nmb.service # 服务脚本 /usr/lib/systemd/system/smb.service # 服务脚本 3、启动服务 systemctl restart smb.service systemctl restart nmb.service 4、samba认证用户 1、系统用户,但密码是独立的,非 /etc/passwd 中的密码 使用smbpasswd为系统用户设定访问samba密码 -a add user # 新增一个用户 -n set no password # 设置用户没有密码 -x delete user # 删除一个用户 pdbedit -Lv # 查看samba账号 2、本地用户 3、虚拟用户 6、windows连接 Ctrl+r \\IP 每个用户默认可以访问的目录是服务器端系统用户的家目录 7、配置文件 /etc/samba/smb.conf 全局设置: [global] 服务器通用或全局设置的部分 特定共享设置: [homes] 用户的家目录共享(公共配置段) [printers] 定义打印机资源和服务 [sharename] 自定义的共享目录配置 其中:#和;开头的语句为注释,大小写不敏感 创建共享目录,所有用户登录都可以读写的目录 宏定义: %m 客户端主机的NetBIOS名 %M 客户端主机的FQDN %H 当前用户家目录路径 %U 当前用户用户名 %g 当前用户所属组 %h samba服务器的主机名 %L samba服务器的NetBIOS名 %I 客户端主机的IP %T 当前日期和时间 %S 可登录的用户名 %M 客户端主机的FQDN %U 当前用户用户名 %h samba服务器的主机名 %I 客户端主机的IP %S 可登录的用户名 [global] workgroup = MYGROUP server string = Samba Server Version %v netbios name = MYSERVER # netbios名称,乐意使用netbios名称连接samba服务器 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 # 监听的网卡和地址 hosts allow = 127. 192.168.12. 192.168.13. # 白名单,允许那个主机或者网络访问 log file = /var/log/samba/log.%m # 日志文件 log level = 2 # 定义日志级别 max log size = 50 # 日志的最大存储 security = user # 必须提供账号和密码访问 passdb backend = tdbsam # 账号密码存放格式 config file=/etc/samba/conf.d/%U # 用户独立的配置文件。可以针对每个用户进行配置 [homes] comment = Home Directories # 注释信息 browseable = no # 如果目录的属组属主不是登录用户,则必须开启此选项,意思为是否让用户浏览目录 writable = yes # 是否可写 valid users = %S # 有效用户 valid users = MYDOMAIN\%S # valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔 [shar_name] # 共享名 comment = All Printers # 注释显示信息 path = /var/spool/samba # 共享目录路径 writable = yes # 写权限 write list = username,username # 定义写权限列表 ,可以定义多个用户 write list = @groupname # 定义一个组 public = yes|no # 不属于用户的文件,是否予以显示 guest ok = no # 是否允许来宾账号访问 read only = # 定义读写。和writable=yes等价,如与以上设置冲突,放。后面的设置生效,默认只读 browseable = # 是否让所有的用户看到这个目录 valid users = %S # 有效用户 valid users = MYDOMAIN\%S # valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔,删除用户 即使生效。添加删除用户即使生效 create mask = 0444 # 用户上传的默认权限 Note: 1、匿名用户创建上传的文件属组属主是nobody 8、访问权限是服务控制权限和文件系统权限的交集,新增一个用户 #新增一个用户 useradd centos #为用户给共享目录添加读写权限 setfacl -m u:centos:rwx shardfs #添加到samba服务列表 用户名和密码存放在 /lib/samba/private目录下 smbpasswd -a centos #配置权限 write list = username 9、配置文件语法检测 testparm #检测配置文件语法,并显示最终生效的配置选项 10、SElinux semanage fcontext -a -t samba_share_t '/testdir/multiuser (/.*)?' restorecon /testdir/multiuser 11、多用户挂载 客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限 useradd samba1 # 在客户端添加与samba服务器上samba用户同名的用户 useradd samba2 useradd samba3 //server/homes /mnt cifs multiuser,credentials=/etc/smb.txt 0 0 # 添加多用户挂载选项 su - samba1 # 切换到指定用户 cifscreds add 172.18.26.1 # 验证用户身份 6、示例操作 1、windows充当服务器端 # Linux客户端 smbclient -L 172.18.250.14 -U haha # 交互式方式查看 smbclient //172.18.250.14/test -U haha # Linux客户端挂载 mount -t cifs //172.18.250.14/test /media -o username=haha,password=123 2、windows充当客户端 # 创建samba用户 useradd samba1 # 加入系统用户为samba用户 smbpasswd -a samba1 3、自定义共享目录:所有用户都可以访问到的目录 1、vim /etc/samba/smb.conf [shared] comment = My Shared Test. path = /shared guest = yes writable = yes 2、创建共享目录及设置权限 mkdir shared setfacl -m u:samba1:rwx shared/ 3、测试 smbclient //172.18.26.2/shared -U samba1 smb: \> lcd /etc smb: \> put issue 4、使用图形界面管理 yum install samba-swat service swat { port = 901 socket_type = stream wait = no only_from = 172.18.26.100 user = root server = /usr/sbin/swat log_on_failure += USERID disable = no } ================================================================================================================================================