上次我删除 /usr/lib/systemd/system 中的文件夹系统。我不知道如何,但是 ubuntu 服务器 18.04 的文件夹系统有多重要?我应该期待什么后果?
亲切的问候,
黑胡子
上次我删除 /usr/lib/systemd/system 中的文件夹系统。我不知道如何,但是 ubuntu 服务器 18.04 的文件夹系统有多重要?我应该期待什么后果?
亲切的问候,
黑胡子
我的 CGI 应用程序正在尝试使用 SSPI Schannel 创建与另一台服务器的 TLS 连接。 http://www.coastrd.com/c-schannel-smtp
握手过程首先检查“我的”证书存储中的证书 http://msdn.microsoft.com/en-us/library/aa376560(VS.85).aspx
这个函数返回零,GetLastError 也返回零!?我认为这是一个权限问题。例如,如何在不将 IUSR 提升为管理员的情况下使其正常工作?
添加
访问用户证书需要以特定用户身份运行,访问用户私钥需要用户已使用密码在本地登录,或者服务器已启用委派。
每个人都可以读取机器证书,但访问私钥需要管理员权限(或本地用户),除非您调整 ACL。
添加
在这种情况下,证书没有限制,但是“我的”证书存储是空的,我不想为此购买证书。
我目前正在使用 WS2003。我连接的服务器是 gmail.com 使用 TLS 发送电子邮件。我的代码可以查找证书,但我没有。在我所做的阅读中,获得证书似乎是一个巨大的头痛,注册和购买和安装,否则你只是得到一个没有帮助的临时解决方案。除非您知道获取证书的简单方法,否则这比我想从 CGI 应用程序发送电子邮件要麻烦得多。还有其他方法吗?
我非常感谢您的帮助 Joe,但 30 美元/年 x nServers 不是一个选择。我想知道是否有办法将任务交给以管理员权限运行的另一个进程,比如服务?我什至可以创建一个应用程序,它计划从给定文件夹中读取并发送在那里找到的任何电子邮件。除此之外,我将不得不尝试将 CGI 应用程序提升为管理员。
添加
Goyuix,谢谢你的建议。挑战在于提供一个独立的解决方案,而无需求助于其他库,如 .NET (60MB) 或 ASP 以及随之而来的问题。
你是对的,我只需要服务器身份验证。我不知道只能对一侧进行身份验证。您的声明:“没有客户端证书不应阻止您为 SMTP 建立安全通道。您可能只需要围绕握手的那一部分进行编码。” 原来是解决方案。
这让我想起了以前的水管工笑话。管道工被要求疏通排水管。他看了一眼,掏出一把锤子,在管子上敲了一下。他要求为 5 分钟的工作支付 180 美元,其中包括 30 美元的标注费用和 150 美元的费用,以了解在哪里打管道。
谢谢你们俩。这是一个漫长的上坡路。
IIS6 启动的应用程序(作为 HTTP 请求的结果)未能初始化 dll。如果我在本地通过双击登录时以管理员身份启动它,一切都很好。
此应用通过名为 cryptlib 的第三方 DLL 使用 TLS 加密。 http://www.coastrd.com/smtps/cryptlib 这本身应该没什么大不了的,因为我的大多数 CGI 应用程序都使用 MySQL/zlib/... 等 dll 没有问题。在这种情况下(可能是由于创建 SSL/TLS 会话的性质),如果以管理员身份双击启动,应用程序运行良好,但由于传入请求而由 IIS 启动时不会运行。IIS 使用帐户“Internet Guest Account... (...IUSR)”(我们假设)从一个简单的网页 HTTP POST 请求执行 CGI 应用程序。
我尝试完全控制应用程序、dll 和文件夹上的 IUSR 帐户,但没有任何乐趣。接下来我打开 ProcMon 并寻找“拒绝访问”的结果。我唯一能找到的是由于 CreateFile Desired Access: Read Attributes, Delete, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, C:\WINDOWS\Debug\UserMode\ChkAcc.log
这令人费解,因为我的应用程序没有写入该日志文件(我假设 IIS 是这样,为什么会出现问题?)
接下来,我将成功启动管理员的 ProcMon 输出与 IUSR 启动进行比较,发现失败的启动中不存在“ReadFile”操作。我没有收到 ACCESS DENIED 错误,操作只是没有发生。
cl32.dll 的顺序操作顺序应该是: QueryOpen CreateFile CreateFileMapping QueryStandardInformationFile CreateFileMapping CreateFileMapping CloseFile Load Image ReadFile
我假设这是将 DLL 加载到内存中以供使用的地方。
而不是 ReadFile 操作(在失败的启动中)有:RegOpenKey HKU\S-1-5-21-4122272316-1273673783-4216733774-1003 NAME NOT FOUND
它有点像这里描述的“绕过遍历检查”问题 http://forums.iis.net/t/1153139.aspx http://technet.microsoft.com/en-us/library/cc739389(WS.10 ).aspx 但这并没有解决问题。
在这一点上,我们已经大大超出了我对用户帐户和权限的了解。有一点很清楚,这是一个权限问题。问题是,哪个权限?
添加
将 ISUR 添加到管理员: 1. 右键单击桌面上的我的电脑,然后单击管理。2. 当计算机管理窗口打开时,展开本地用户和组 3. 选择组并双击右窗格中的管理员。4. 单击添加按钮 5. 单击高级,然后单击立即查找并选择 IUSR 6. 单击确定。7.重启IIS
这并没有解决问题。我挖出了 Filemon v7.3,它是 IUSR
er.exe:2240 OPEN C:\WINDOWS\system32\USERENV.dll SUCCESS Options: Open Access: 00100021
er.exe:2240 CLOSE C:\WINDOWS\system32\USERENV.dll SUCCESS
er.exe:2240 OPEN C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
er.exe:2240 CREATE C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
在这一点上,我会在黑暗中采取任何行动,这可能是什么许可:)
添加
我更改了文件 ChkAcc.log 和文件夹 UserMode 的权限,我还检查了高级权限,发现应用程序和 Dll 被拒绝。我把它们都删了。我重新启动了 IIS,甚至重新启动了机器。仍然没有运气。
我想知道 ACCESS DENIED 是否真的是问题所在。我重写了该应用程序以创建并写入该文件夹中的文件,并且它起作用了:
OPEN C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Options: OpenIf Access: 00120196
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 0
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 0
WRITE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Offset: 0 Length: 41
WRITE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Offset: 41 Length: 2
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 43
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 43
CLOSE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS
这让我怀疑文件夹权限根本不是问题,但 DLL 由于某种原因未能初始化。
有什么方法可以给 IUSR 与 ADMIN 相同的权限吗?那么也许我可以将它们一一删除。也许我什至可以创建第二个具有 ADMIN 权限的用户并让 IIS 使用它而不是 IUSR 来处理传入的 CGI 请求?
显然,将 IUSR 添加到 ADMIN 组与以 ADMIN 身份运行应用程序不同。
添加
实际上问题是由于 dll 在启动时执行了各种健全性检查测试,包括读取文件的能力。为此,它会尝试读取用户的主目录(或在 Windows 术语中为用户的配置文件目录)
在 Windows 2003 Server 机器上的测试中,我发现
IUSR
CSIDL_APPDATA = C:\WINDOWS\system32\config\systemprofile\应用程序数据
行政人员
CSIDL_APPDATA = C:\Documents and Settings\Administrator.MY-SERVER\Application Data
我怀疑 cgi 进程被拒绝访问任何 system32 文件夹。在将IUSR添加到管理员之前,这是我所期望的行为,然后我希望这可以工作....但事实并非如此。解决办法是重新编写dll,但我仍然对此感到困惑