我正在使用 Jenkins,我想将文件从 Jenkins 目录复制到我的世界user 目录,但我不知道如何解决这个问题,就像我运行时一样
cp build/versions/*.info /home/*minecraft*/www/files/Minecraft/versions
我收到“权限被拒绝”
答案1
传统的方法是使用组。用户 Jenkins 被添加到minecraft-group(用户minecraft的对应组)。然后,minecraft-user 向 minecraft-group 授予相关目录的写入权限(例如chmod g+w ~minecraft/some_directory
)。当然,也可以(对于root)创建一个仅与该目录一起使用的自定义组(例如,一个新组minewriters 或其他组)。如果minecraft用户是minecraft组的管理员,他可以使用gpasswd -a user group
( gpasswd -a jenkins minecraft
)将用户添加到组中 - 否则root必须将用户添加到组中。
一种更新、更好、更精细的方法(尽管有点复杂)是使用访问控制列表 (acl),其中文件或目录的所有者可以向特定用户和/或组授予对文件或目录的访问权限。 minecraft 用户只需将 jenkins 添加到相关目录的“访问列表”中,并授予 jenkins 对该目录的写入权限。
setfacl -m user:jenkins:rwx ~minecraft/some_directory
这将赋予用户 jenkins 创建新文件 (w)、使用 ls (r) 列出内容并更改到目录 (x) 的权限。
+++
对文件和目录的访问在某种程度上取决于用户对上述目录的访问。如果用户 jenkins 无法进入用户 minecraft 的主目录 (/home/minecraft),那么他也无法访问该目录下的任何目录...即使他已被授予特定目录的 chmod
权限。setfacl
所以用户minecraft也必须隐式或显式地给用户jenkins至少对其主目录的执行 (x) 权限(并且应允许其主目录和 jenkins 目录之间的所有目录进行写入)。目录的执行权限,赋予“进入”目录的权利(例如使用命令cd
)。大多数用户还会喜欢拥有读取权限(r) - 这使他们有权使用类似命令列出目录内容ls
- 这样他们就可以定位自己。
如果 Minecraft 的主目录的权限已经是“rwxr-x---”或“rwxr-xr-x”(通常是)就足够了......如果是“rwx-----”那么必须修改访问权限,以至少授予 Minecraft 组的成员或用户 jenkins 访问权限。
+++
chmod a+t ~minecraft/some_directory
将粘性位添加到应允许 jenkins 写入的目录(即。 )也是一个好主意。这可以防止具有目录写入权限的用户删除属于该目录的文件其他用户(目录所有者除外,他仍然可以删除任何文件)。