Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 如何确定由于您的组,您是否可以使用SFTP写入目录?_Ssh_Permissions_Sftp - Fatal编程技术网

Ssh 如何确定由于您的组,您是否可以使用SFTP写入目录?

Ssh 如何确定由于您的组,您是否可以使用SFTP写入目录?,ssh,permissions,sftp,Ssh,Permissions,Sftp,引用 您可以执行mode&00002来查看[directory]是否可由公众写入 您可以获取目录列表,查看 与您登录的用户匹配(尽管stat不匹配 通常为SFTPv3服务器返回longname,这是您需要的 需要从中获取用户名)但是组权限呢 在对该帖子的回答中,有人建议,使用SFTP测试文件可写性的更好方法是实际打开该文件进行写入。类似于fopen('filename.ext','w') 我的问题是。。。使用SFTP确定目录可写性的最佳方法是什么?您不能像打开文件一样打开目录进行写入。我的最佳猜

引用

您可以执行
mode&00002
来查看[directory]是否可由公众写入 您可以获取目录列表,查看
与您登录的用户匹配(尽管
stat
不匹配 通常为SFTPv3服务器返回
longname
,这是您需要的 需要从中获取用户名)但是组权限呢

在对该帖子的回答中,有人建议,使用SFTP测试文件可写性的更好方法是实际打开该文件进行写入。类似于fopen('filename.ext','w')

我的问题是。。。使用SFTP确定目录可写性的最佳方法是什么?您不能像打开文件一样打开目录进行写入。我的最佳猜测是:只是尝试在有问题的目录中上载一个临时文件

比如可能使用SSH_FXF_create和SSH_FXF_EXCL?尽管文件可能已经存在,但这会使事情变得复杂。我猜可以获得一个目录列表,然后可以尝试上载一个不存在的文件名,但事实上,这需要读取权限,即使它也无法正常工作,如果目录是超大的


有什么想法吗?

登录脚本会对该用户在该目录上执行一个操作吗

如果要使用
sshd
,您可以使用(pam auth模块来执行脚本)在目录中简单地执行
触摸测试文件创建。您需要添加到pam sshd配置中

如果目录不可写,您将在登录时收到一条消息
触摸:测试文件\u创建:权限被拒绝
。当然,你可以用它做更多的花哨的事情,但这将是最基本的。

@MartinPrikryl-有什么想法吗?给投票结束这项活动的人。。。你知道SSH_FXF_create和SSH_FXF_EXCL是什么吗?它们是SFTP规范的一部分:。我不是问如何使用任意的SFTP客户端——我是问,如IETF草案中所述,需要使用什么样的SFTP数据包组合来进行特定的确定。说“你可以做sftp——选择任何东西”来得到想要的答案不是我想要的。也许我应该把这个问题发布在travel.stackexchange.com上,因为我想问的是包裹应该如何旅行!因此,SFTP不实现触摸。它可以用SSH\u FXP\u OPEN和SSH\u FXF\u WRITE、SSH\u FXF\u CREATE、SSH\u FXF\u EXCL作为标志来模拟,但这不适用于目录。更新登录脚本可能会起作用,但有时服务器将具有SFTP访问权限,而不具有shell访问权限(或者更确切地说,它们将具有监狱shell或类似的权限),这将阻止该方法在纯SFTP客户端中工作。@neubert这是一个一般的想法。如果你能模仿这种行为,那就没有区别了。如果您试图在指定了
O\TRUNC
的目录中执行
SSH\u FXF\u WRITE
SSH\u FXF\u create
(使用
SSH\u FXF\u EXCL
)的
SSH\u FXF\u OPEN
。如果您没有写入权限,则会收到消息
SSH\u FX\u permission\u DENIED
。如果此操作由守护进程本身执行,则不需要shell权限。我的测试表明它不是这样工作的。当我发送SSH_FXP_OPEN请求时,我得到一个SSH_FXP_状态响应,该响应显示“失败”。如果我有写权限,我应该得到的是SSH\u FXP\u句柄,但我没有。显示我得到了什么。我试着用SSH_FXF_WRITE也写了一封信,结果收到了。问题是。。。我正在测试的/root/.ssh目录是可写的(我以root身份登录)。我之所以知道这一点,是因为我能够毫无问题地上传测试文件。而且tbh idk认为这种行为让我感到惊讶。(SFTPv3)打开SSH_FXP_以打开文件,打开SSH_FXP_OPENDIR以打开目录。前者有一个标志字段,您可以在其中请求打开文件进行写入,后者则没有。通过SSH_FXP_OPENDIR不写入目录-通过SSH_FXP_OPEN不在目录上而是在目录中的(新)文件上使用SSH_FXF_CREAT写入目录。在旧文件上执行此操作是不够的,因为旧文件可以独立于dir@neubert那么可能唯一的选择就是上传一个测试文件。