You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows可执行文件在Linux Samba服务器运行时无法访问共享PDF目录

解决C#程序在Linux服务器远程执行时访问Samba共享的认证问题
  • 在Linux服务器上预挂载Samba共享
    既然程序跑在Linux服务器上,直接把目标Samba共享挂载成服务器本地目录,程序里直接访问本地路径即可。

    • 临时挂载命令:
      mount -t cifs //目标机器IP/共享名 /本地挂载目录 -o username=AD域用户名,password=密码,domain=AD域名
      
    • 开机自动挂载:编辑/etc/fstab添加一行,确保重启后挂载依然生效:
      //目标机器IP/共享名 /本地挂载目录 cifs username=AD域用户名,password=密码,domain=AD域名 0 0
      

    之后程序里直接写/本地挂载目录/xxx.pdf就能访问,完全绕开Windows端的认证环节。

  • 在C#代码中手动添加Samba认证逻辑
    用Windows API的WNetAddConnection2函数在程序启动时手动建立带认证的网络连接,之后再访问共享路径。示例代码:

    using System;
    using System.Runtime.InteropServices;
    
    public class SambaAuthHelper
    {
        [StructLayout(LayoutKind.Sequential)]
        private struct NETRESOURCE
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        }
    
        [DllImport("mpr.dll")]
        private static extern int WNetAddConnection2(ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
    
        public static int EstablishSambaConnection(string remoteSharePath, string username, string password, string domain)
        {
            NETRESOURCE resource = new NETRESOURCE();
            resource.dwType = 0x00000001; // 指定为磁盘资源
            resource.lpRemoteName = remoteSharePath;
            return WNetAddConnection2(ref resource, password, $"{domain}\\{username}", 0);
        }
    }
    
    // 在访问共享PDF前调用认证
    // SambaAuthHelper.EstablishSambaConnection(@"\\目标IP\共享目录", "你的AD用户名", "密码", "AD域名");
    

    注意:密码别硬编码,存在配置文件或环境变量里更安全。

  • 以域用户身份运行Linux上的程序
    既然服务器已经加入AD域,可以让程序以域用户身份启动,继承域认证权限访问Samba共享:

    • 先获取域用户票据:
      kinit 你的AD用户名@AD域名
      
    • 再用mono运行程序:
      mono 你的程序.exe
      

    也可以配置systemd服务,指定运行用户为域用户,确保服务启动时自动完成域认证。

  • 检查Samba共享的权限配置
    确认目标Samba共享允许Linux服务器的AD账户访问:

    • 编辑Samba配置文件/etc/samba/smb.conf,对应共享段添加:
      valid users = @AD域组名 你的AD用户名
      
    • 重启Samba服务生效:
      service smbd restart
      

内容的提问来源于stack exchange,提问作者Diego Gavani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:52:39