新闻详情

新闻详情

首页 / 资讯中心 / 详情

Samba服务从零搭建:文件共享、权限映射与配额限制实战

发布时间:2026/9/29 7:23:05来源:尧图网络
Samba服务从零搭建:文件共享、权限映射与配额限制实战
折腾Samba这个英文词我第一次见的时候还以为是某种舞蹈直到在公司机房帮同事解决“Windows访问不了Linux文件”的问题才知道它是Linux和Windows之间文件共享的桥头堡。这次做Linux网络实战系列第三篇本来计划半天搞定Samba服务器搭建结果光是用户权限这一关就卡了我整整一个下午。准确说标题里写的“三四关写了好久”一点都不夸张到了第三关用户与权限映射、第四关目录大小限制我连配置文件都重写了好几遍才把整套逻辑捋顺。这篇文章把我从零开始搭Samba的过程完整还原包括为什么这么设计、每一步改了什么参数、踩过哪些坑以及最终能直接仿写的配置。适合刚接触Linux服务管理、想在混合系统里做文件共享的运维新手也适合正在准备阶段性实操验证的人。我自己常年维护着几台文件服务器Samba算是用得最多的服务之一所以下面提到的很多细节不是官方文档里的漂亮话而是真正跑起来之后才发现的硬道理。1. 项目背景与整体设计思路1.1 为什么选Samba而不是NFS或FTP做文件共享的方案不少NFS、FTP、Samba、甚至后面流行的对象存储都能用。但这个项目一开始就定下来用Samba核心原因是客户端里既有Windows又有Linux而Samba基于SMB/CIFS协议Windows系统几乎是原生支持不需要装任何额外客户端。Linux通过cifs-utils挂载也很快一个命令就能接上对使用者来说几乎没有学习成本。再说NFS它在Linux和Linux之间确实性能好、配置简单但Windows客户端要访问NFS共享就得装额外的组件还得处理NFS版本和权限映射普通同事根本不会愿意折腾。FTP就更尴尬了只能做到“上传下载”这种半在线模式如果你想让文件像本地磁盘一样被Word、Excel直接打开编辑FTP就会频繁出现“文件被占用”“保存失败”的体验问题而且FTP在权限细化、文件锁方面远不如SMB协议成熟。所以我把这个选型类比成“公司前台”Samba能接待各种系统来的“访客”NFS像是只跟同系统打交道的“内部专线”FTP则是只负责收发包裹的“快递柜”。内网混合环境里的日常办公共享Samba确实是综合成本最低、兼容性最好的选择。1.2 实验环境与网络拓扑设计这次实验我准备了两台物理机加一台Windows笔记本服务器用一台Ubuntu 22.04 LTS另一台是Rocky Linux 9用来验证跨发行版的一致性。Windows客户端就是日常用的Win10。三台机器放在同一个二层网段服务器IP固定为192.168.10.20客户端IP为192.168.10.100网关统一指向192.168.10.1。为什么强调固定IP因为Samba共享牵扯到目录挂载、网络驱动器映射和后续的配额限制如果服务器IP是DHCP分配的哪天地址变了所有客户端的挂载都会悄悄断掉。我一般会给文件服务器做IP-MAC绑定或者在交换机上配置保留地址这是很多新手会忽略的细节。共享需求也提前捋清楚了。第一需要一个公共目录所有人都能读部分外部协作人员能写入但不涉及敏感数据。第二需要一个项目组私有目录只有指定用户能和指定组访问其他用户连看都看不到。第三项目组目录还要限制大小避免个别同事往里塞大视频把整个磁盘撑爆。第三和第四关说白了就是围绕“权限细化”和“容量管控”这两个核心点来设计的。2. Samba服务部署从安装到启动2.1 安装Samba服务端与客户端Ubuntu和Rocky的包管理不一样但安装思路完全一致。先更新索引再装samba服务端和客户端工具# Ubuntu / Debian sudo apt update sudo apt install -y samba smbclient # Rocky / CentOS / RHEL sudo dnf install -y samba samba-client安装完成后Ubuntu下服务名是smbdRocky下既有smb也有nmb。nmbd负责NetBIOS名称解析如果局域网里需要通过主机名访问共享就必须把nmbd也启起来。这里我统一启动并设置开机自启# Ubuntu sudo systemctl enable --now smbd nmbd # Rocky sudo systemctl enable --now smb nmb启动之后先做个表面检查看进程和端口是否正常ss -tlnp | grep -E 445|139 smbstatus正常情况下能看到smbd监听在445和139端口。如果445没起来多半是端口被占用或者配置语法有问题。这一步虽然简单但能省掉后面很多排查时间。我在实际搭建时还有一个习惯是把testparm跑一遍它是Samba自带的配置检查工具能直接报出语法错误和非法参数比手动翻配置靠谱得多。2.2 防火墙与SELinux新手最容易卡住的第一关很多教程只写到“安装启动成功”但客户端还是连不上十有八九是防火墙拦住了。Samba需要放行UDP 137/138和TCP 139/445可以用系统自带的防火墙服务来开放。Ubuntu上如果开着ufw直接执行sudo ufw allow sambaRocky上如果默认用firewalld执行sudo firewall-cmd --permanent --add-servicesamba sudo firewall-cmd --reload这里特别注意Firewalld的samba服务其实包含了上述协议和端口不需要再手动加端口。如果你用了云厂商的安全组还需要在安全组规则里放行445端口。Windows访问Linux共享时445端口的连通性几乎决定了成败我见过太多人配好了Samba却忘了安全组最后怎么查都查不到原因。Rocky这类系统还有一道SELinux的坎这是最容易卡住新手的地方。SELinux像是小区门口严格的保安光有门禁卡还不够你还得在保安手里的访客名单上。为了让Samba能共享自定义目录需要设置两个东西。第一是开启samba相关的布尔值sudo setsebool -P samba_enable_home_dirs on sudo setsebool -P samba_export_all_rw on第二是把共享目录打上samba_share_t标签sudo semanage fcontext -a -t samba_share_t /data(/.*)? sudo restorecon -Rv /datasemanage命令如果在系统里不存在需要先安装policycoreutils-python-utils。这个标签的作用是告诉SELinux“这个目录可以被Samba服务读写”。否则即使权限全放SELinux也会默然拒绝。我最初在Rocky上测试时客户端连接一直超时服务端日志里什么权限错误都没有直到用ausearch -m avc -ts recent查审计日志才发现是SELinux拦截那一刻真想拍桌子。3. 共享目录与用户权限配置3.1 创建系统用户与Samba账户映射Samba的账户体系比较特别它并不另起炉灶而是依赖于Linux系统用户但密码又是单独管理的。也就是说你想让用户user1能访问Samba首先得有一个名为user1的系统账号然后还要用smbpasswd给这个账号设置一个Samba密码。这样的设计看起来绕其实有它的道理Samba可以直接复用Linux的文件权限模型目录的属主、属组、权限位都能直接映射给Windows客户端而不需要再维护一套独立的权限数据库。我先创建一个项目组和一个公共账号sudo groupadd sambagroup sudo useradd -M -s /sbin/nologin user1 sudo useradd -M -s /sbin/nologin user2 sudo usermod -aG sambagroup user1 sudo usermod -aG sambagroup user2 sudo smbpasswd -a user1 sudo smbpasswd -a user2-M表示不创建家目录-s /sbin/nologin表示这个用户不能登录Shell只能用于Samba身份认证。这样做既安全又干净避免给纯文件共享用户开放一个可交互的Shell。如果后面还要加一个guest账号可以再创建一个类似guestuser的账户专门映射匿名访问。这里有个经验Samba密码尽量和系统密码分开设置并且不要用太简单的弱口令。因为SMB协议在早期版本里有凭据泄露的风险如果Samba密码和SSH密码一样一旦SMB账号失守服务器就跟着危险了。3.2 设计共享目录结构与管理权限目录规划是权限设计的地基我采用了一个最经典的布局/data ├── public # 公共共享所有人都能浏览guest可写 └── project # 项目组共享仅sambagroup组可读写创建目录之后关键是设置好Linux文件权限。这里我们用组权限来统一管理而不是给每个用户单独授权sudo mkdir -p /data/public /data/project sudo chown root:sambagroup /data/project sudo chmod 2770 /data/project sudo chown root:root /data/public sudo chmod 1777 /data/public2770里的2是setgid位意思是只要在/data/project里新建文件或子目录它们的属组会自动继承为sambagroup而不是创建者的默认组。这个细节非常实用否则用户user1创建的文件只有user1的组权限其他组员进来反而写不了。1777用于/data/public类似/tmp目录的权限所有用户都能创建文件但不能删除别人的文件。权限设计讲究“最小够用”公共目录让guest可写但保留sticky位防误删项目目录只让指定组进入其他用户连路径都看不到。这样既满足了业务需求又不会过度开放。3.3 编写smb.conf核心参数逐个解释Samba的主配置文件是/etc/samba/smb.conf写之前最好备份一份sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date %F)这次实验最终使用的配置如下[global] workgroup WORKGROUP server string Samba Server security user map to guest Bad User unix charset UTF-8 dos charset CP936 server min protocol SMB2_10 [public] comment Public Share path /data/public browseable yes writable yes guest ok yes create mask 0664 directory mask 0775 [project] comment Project Team Share path /data/project browseable no valid users sambagroup read only no create mask 0660 directory mask 0770逐个说下关键参数。security user表示所有连接都必须通过用户名和密码验证这是最常用也最安全的模式。map to guest Bad User的意思是如果客户端输入了不存在的用户名或错误密码就自动降级为guest身份这样匿名用户访问public共享时不用强制输入密码。server min protocol SMB2_10用来禁止老旧的SMB1协议避免安全风险和兼容性问题。[public]段里guest ok yes允许匿名访问writable yes允许写入mask参数控制新创建文件的默认权限。注意这里的mask是逻辑“与”运算即使客户端请求更开放的权限最终权限也不会超过mask指定的范围。[project]段里valid users sambagroup表示只有sambagroup组里的用户能访问。browseable no会让这个共享在Windows网络的浏览列表里不可见但只要知道路径比如\\192.168.10.20\project有权限的用户依然可以访问。这不是隐藏数据只是让界面更干净。配置写好之后执行testparm检查语法没问题就重启服务sudo testparm sudo systemctl restart smbd如果testparm输出的结果和预期一致说明配置语法没问题。我见过不少人写完配置不检查直接重启结果服务启动失败客户端提示找不到网络路径其实只是末尾多了个空格或方括号没配对。3.4 限制共享目录大小第四关容量配额第三关权限解决之后第四关“限制共享目录大小”更是绕了不少弯路。网上很多人问Samba有没有直接限制共享大小的参数我明确说smb.conf里没有这种参数它本身不具备目录配额功能。真正能限制目录大小的手段还是要靠Linux底层的磁盘配额机制或者用LVM给共享目录单独分配一个固定大小的分区。我想了一个比较清晰的做法把/data单独做成一个LVM逻辑卷挂载时启用用户配额和组配额然后针对Samba用户设置soft limit和hard limit。这样既限制了个别用户的使用量又能控制整个/data目录的总大小。先创建单独分区的逻辑这里不细说假设/data已经是一个独立LVM卷。开启配额需要安装quota工具sudo apt install -y quota # Ubuntu sudo dnf install -y quota # Rocky修改/etc/fstab在/data那一行的挂载参数末尾加上usrquota,grpquota。例如/dev/mapper/vg-data /data ext4 defaults,usrquota,grpquota 0 0然后重新挂载并生成配额数据库sudo mount -o remount /data sudo quotacheck -cug /data sudo quotaon /data给用户user1设置配额sudo edquota -u user1打开编辑器后会看到类似这样的内容Disk quotas for user user1 (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/mapper/vg-data 0 51200 61440 0 0 0soft和hard的单位是KBsoft表示软限制超过后用户有宽限期hard是硬限制超过就直接写不进去了。我这里给user1设置soft为50GBhard为60GB业务上完全够用。设置完组配额后可以用repquota -a查看所有配额使用情况。这一步做完第四关才算真正“成功”。我最初的误区是以为Samba配置里写一个max disk size就能搞定结果翻了半天文档没有这个参数最后才意识到应该把配额下沉到文件系统层面。做运维就是这样有些需求并不能在服务层直接解决得回到操作系统底层去找方案。4. 客户端挂载与访问验证4.1 Linux客户端通过CIFS挂载服务端配好后客户端验证是“成功”与否的关键。Linux客户端先装cifs-utilssudo apt install -y cifs-utils # Ubuntu sudo dnf install -y cifs-utils # Rocky然后创建一个挂载点用mount命令接上Samba共享sudo mkdir -p /mnt/samba/project sudo mount -t cifs //192.168.10.20/project /mnt/samba/project -o usernameuser1,vers3.0,uid1000,gid1000vers3.0指定使用SMB 3.0协议可以避免在部分老客户端上默认协商到低版本导致性能差或兼容问题。uid和gid最好指定为本地登录用户的ID否则挂载后文件在本地会显示为root所有普通用户编辑起来很别扭。如果想开机自动挂载我建议不要直接在/etc/fstab里明文写密码而是写一个单独的凭据文件sudo vim /etc/samba/credentials内容usernameuser1 password你的密码权限改成600sudo chmod 600 /etc/samba/credentials然后在/etc/fstab里追加//192.168.10.20/project /mnt/samba/project cifs credentials/etc/samba/credentials,vers3.0,uid1000,gid1000,_netdev 0 0_netdev这个参数会告诉系统在网络就绪之后再挂载不然开机时网络还没起来挂载会失败。我在第五小节会详细说这个坑。4.2 Windows客户端访问SambaWindows访问Samba简单很多WinR输入\\192.168.10.20回车就会弹出凭据框输入user1和对应的Samba密码即可看到有权限的共享目录。如果你想把它变成网络驱动器右键“此电脑”选择“映射网络驱动器”文件夹填\\192.168.10.20\project勾选“使用其他凭据连接”然后输入账号密码。Windows最容易遇到的一个问题是以前访问过其他服务器的SMB共享缓存了错误凭据。新服务搭好后怎么都连不上却提示“用户名或密码不正确”。这时可以在命令行执行net use * /delete把旧的连接缓存清掉再重新尝试。另外Windows的网络发现如果没开启在“网络”里看不到服务器但直接用IP访问是没问题的。所以我在给同事发通知时永远都会把完整路径带上而不是让他们自己去网络里找。4.3 验证文件读写与权限边界配置和挂载都做完之后一定要做一轮完整的读写验证不能只看“能连接”就宣布成功。我习惯用四个维度来检查。第一公共目录匿名访问不开Windows凭据弹窗直接用guest身份访问\\192.168.10.20\public能读能写就算通过。第二项目组私有访问用user1访问project创建文件查看文件属主和权限是否符合预期。如果创建出的文件组是user1而不是sambagroup说明之前配置的setgid位没生效。第三越权检查换一个不在sambagroup里的用户尝试访问project共享应该被拒绝。如果还能看到目录说明valid users参数或者Linux目录权限没写对。第四写入配额验证往/data/project里拷一个大文件超过hard limit后系统会报“磁盘配额超出”这时候说明第四关的容量限制真的生效了。这四个维度跑通才算真正“全部成功”。我之前只测了前两项结果第二天有人反馈某些账号能进不该进的目录一查发现是valid users里少了个符号权限直接对所有人开放了。所以越权检查千万不能省。5. 实战中踩过的坑问题排查与解决方案5.1 客户端报“参数错误”或“拒绝访问”怎么办最常见的问题就是Windows访问时报“发生系统错误 53”或“拒绝访问”。这里我总结了一套排查顺序能解决绝大多数情况。第一步先看服务端本地的Samba服务是否正常smbclient //127.0.0.1/public -U user1如果本地都连不上说明配置文件或服务状态有问题先去查/var/log/samba/log.smbd日志。如果本地能连上说明Samba本身没问题问题出在网络层。第二步检查网络连通性。在客户端单独测试445端口telnet 192.168.10.20 445不通就重点检查防火墙和云安全组。通了再继续下一步。第三步在服务端查日志。Samba日志路径一般在/var/log/samba/里面有log.smbd和客户端IP分离的日志。如果看到NT_STATUS_ACCESS_DENIED问题往往出在Linux文件权限或SELinux而不是Samba配置。我实际操作中最常犯的错误就是把valid users sambagroup写成了valid users sambagroup少了个Samba就会把sambagroup当成一个普通用户名而不是组名导致所有用户都被拒绝。这种权限语法错误光看配置很难发现一定要用testparm并加上测试用户的smbclient命令反复验证。5.2 中文文件名乱码字符集配置不能少搭好Samba后Windows上传的中文文件名在Linux服务器上显示成乱码或者反过来Linux上的中文文件在Windows里显示成乱码。这个问题的根源在于Linux和Windows默认使用的字符集不一致。解决办法是在[global]里明确指定字符集unix charset UTF-8 dos charset CP936 display charset UTF-8unix charset是Linux端文件名使用的编码dos charset是Windows端使用的编码CP936是简体中文Windows默认的GBK编码。Samba会在两种编码之间自动转换避免文件名变成“锟斤拷”之类的东西。有个容易忽略的点如果之前已经创建了一堆乱码文件单纯改配置不会修复旧文件名只能用convmv工具批量转换。我在实验时临时造了一批测试文件改完配置后重新创建新文件才正常旧的直接删掉重来了。遇到真实数据时千万别贸然转码先备份再操作。5.3 重启后失联固定IP和_netdev服务器和客户端都重启之后Linux客户端的挂载丢失是最常见的问题。如果你在/etc/fstab里写了Samba挂载项但没加_netdev开机时系统可能会在网络服务启动之前就去挂载结果找不到共享路径然后产生一个“挂载失败”的状态。正确写法//192.168.10.20/project /mnt/samba/project cifs credentials/etc/samba/credentials,vers3.0,uid1000,gid1000,_netdev 0 0加_netdev之后系统会等到网络可用时再挂载。如果还是失败可以检查systemctl status mnt-samba-project.mount或者直接用mount -a手动测试。另外服务器IP地址的稳定性也极其重要。如果服务器重启后从DHCP拿了个新IP所有客户端的挂载都会失效所以一定给文件服务器绑定固定IP或者在路由里做IP-MAC绑定。这种问题排查起来最费时间因为客户端和服务端看起来都正常就是连不上其实只是IP变了。5.4 配额限制几天后失效第四关的配额设置完后我特意多等了两天验证。结果发现重启后配额限制竟然失效了一查是配额内核模块没有自动加载。quota工具依赖内核模块比如quota_v1或quota_v2如果系统重启后模块没自动加载quotaon状态会变成关闭。解决办法是把模块写进自动加载列表echo quota_v2 | sudo tee /etc/modules-load.d/quota.conf然后在配置好配额后用quotaon -aug和repquota -a检查状态。如果显示配额已开启而且用户超过硬限制后无法写入就说明这个坑填平了。这里还要注意如果共享目录不是独立分区而是在根文件系统上配额设置会作用于整个根分区很容易波及系统其他目录。所以更稳妥的做法还是像前面说的用LVM给共享目录单独分一个卷。这也算是在第四关里我踩过最深的一个坑。6. 从“能访问”到“规范化管理”的一些建议6.1 备份配置与做变更记录Samba配置随着业务调整会越来越复杂我见过同事在smb.conf里堆了几十个共享段最后自己都不敢改。这里有两个习惯非常值得养成。第一每次变更前完整备份配置文件文件名带上日期sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date %F_%H%M)第二使用testparm -s导出一份“净化后”的配置去掉所有注释和空行保存为快照文档。这样下次排查时可以快速对比是哪个参数发生了变化。6.2 用smbstatus和日志做日常巡检Samba自带smbstatus命令可以实时查看当前有哪些连接、哪些文件被锁定。我会在巡检脚本里定期执行再配合日志检查有没有异常IP在反复尝试密码认证。日志方面/var/log/samba/log.smbd会记录认证和访问信息。如果发现大量NT_STATUS_LOGON_FAILURE记录说明有人在暴力猜密码这时候要考虑开启fail2ban或者干脆限制源IP。文件服务器上的账号越少越安全samba用户最好也只给需要访问的人。6.3 第三、四关的实战体会这次Samba服务搭建真正让我觉得有价值的地方不是“配出来了”而是把权限与容量管理从“能用”推进到了“可控”。第三关的组权限、valid users、setgid位这些参数单独看都很简单组合在一起却决定了整个目录的访问边界第四关的配额管理则让一个共享目录有了明确的使用边界不会因为个别人的操作拖垮整台服务器。搭完之后我再回头看Samba作为Linux网络服务里最常遇到的“硬骨头”其实难点不在于安装而在于你对Linux基础权限、文件系统、网络服务运行机制的理解是否扎实。如果只照着教程抄一遍遇到问题还是会卡住如果理解了它背后的设计逻辑很多问题就能顺藤摸瓜找到答案。最后再分享一个小技巧我习惯把常用的Samba排查命令做成一个/usr/local/bin/sambacheck脚本一键执行端口、smbstatus、日志路径、testparm这几个关键检查。以后不管在哪台机器上搭Samba跑一下这个脚本就能快速定位问题区间省去重复敲命令的功夫。这次“三四关写了好久”的经历最终换来的就是这套更稳的运维习惯。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电商购物车与支付模块功能测试实战:用XMind解构业务契约 2026/9/29 8:17:59

电商购物车与支付模块功能测试实战:用XMind解构业务契约

1. 这不是教科书,是我在电商项目里写崩三次购物车测试用例后总结的实战手册功能测试、测试用例、xmind、购物车、支付——这五个词凑在一起,不是考试题,而是我去年在一家中型电商平台做质量保障时,连续三周被产品和开发轮番“灵魂…

阅读更多 →
TensorFlow本质:张量计算图与生产级AI部署 2026/9/29 8:17:58

TensorFlow本质:张量计算图与生产级AI部署

1. 这不是“装个库”那么简单:TensorFlow到底在解决什么问题?你搜“tensorflow”,页面上跳出来的全是“安装失败”“版本冲突”“CUDA不匹配”——但真正卡住你的,从来不是那几行报错,而是你根本没想清楚:T…

阅读更多 →
从对话历史到长期记忆:用Dify构建AI“后见之明”复盘工作流 2026/9/29 8:17:51

从对话历史到长期记忆:用Dify构建AI“后见之明”复盘工作流

1. 为什么要把"后见之明"塞进 AI 系统里如果你做过 AI 对话类应用,一定遇到过这种尴尬:用户昨天明明在对话里说了自己养了一只叫"豆包"的猫、最讨厌吃香菜、目前在准备法考,今天换个话题又问了一句"你记得我上次说的…

阅读更多 →
绝区零一条龙(ZenlessZoneZero-OneDragon)情报板全自动代行委托模块深入解析:发布、挑战与奖励的周循环实现 2026/9/29 8:17:44

绝区零一条龙(ZenlessZoneZero-OneDragon)情报板全自动代行委托模块深入解析:发布、挑战与奖励的周循环实现

桌面应用RPA计算机视觉 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 点击查看 免费下载 本篇文章聚焦开源项目 Zenl…

阅读更多 →
OpenClaw 源码解读(18)用日志追踪 Embedded Agent Runner 执行全链路:从配置到验证 2026/9/29 8:17:44

OpenClaw 源码解读(18)用日志追踪 Embedded Agent Runner 执行全链路:从配置到验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek本地部署实战:Ollama+Dify搭建私有化RAG知识库 2026/9/29 8:17:44

DeepSeek本地部署实战:Ollama+Dify搭建私有化RAG知识库

1. 为什么要在本地跑DeepSeek,以及Ollama在其中扮演什么角色先聊一个很多人问过我的问题:DeepSeek官方API已经那么便宜了,为什么还要折腾本地部署?我自己的答案是三个字:私有化。把数据交给外部API,哪怕再便…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉