繁体   English   中英

Jenkins Linux文件访问或组问题

[英]Jenkins Linux file access or group issue

我面临一个奇怪的文件访问问题。

Linux系统是RedHat 5.5

在这台机器上,当我以给定用户:deploy_user身份登录时,可以看到我具有对/path/to/the/folder/subfolder/file.txt的有效访问权限

ls -l / path / to / the / folder显示(这意味着我可以看到内容的路径):

13:50:53 drwxr-x--- 2 root dbgroup    4096 Apr 27 14:38 subfolder

在文件夹子文件夹中 ,file.txt具有以下访问权限( ls -l输出)

13:50:53 -rwxr----- 1 root dbgroup  1620 Dec  9 15:28 file.txt

在$提示符下的服务器上,如果执行以下操作: id deploy_user我看到我在dbgroup中 (即deploy_user )(即dbgroup组中的任何人都可以将目录更改为子文件夹 ),并且可以读取文件file.txt

当我在自由样式的Jenkins作业中运行相同的命令并将该作业作为节点/从属服务器在Linux机器上运行时(其中Jenkins仅使用用户的deploy_user成功使用它的SSH密钥连接到该节点/从属计算机 ),我可以“T cd(更改目录),列表或LS和阅读或这个文件。

注意 :我限制jenkins作业在特定的从属服务器上运行(使用标签),即它将仅在给定的机器上运行该作业(如上所述)。

在jenkins作业中,我正在运行的是以下命令:

echo "I'm `whoami`"
echo "I'm in: $(id `whoami`)"
echo
groups
echo
echo "Again, my groups for: $(groups `whoami`)"
echo
cat /etc/group | grep "^dbgroup"
echo
echo
cd /path/to/the/folder
pwd && echo "It works! upto /path/to/the/folder path in Jenkins job."
echo
echo
cd /path/to/the/folder/subfolder || echo "cd to subfolder - didnt work"
echo
ls -l /path/to/the/folder/subfolder/file.txt || echo "ls on file.txt - didn't work"
echo
echo "Sleeping for 60 seconds ..." && sleep 60

Jenkins工作的主要输出是:

13:50:53 I'm - deploy_user
13:50:53 I'm in: uid=3000(deploy_user) gid=3000(deploy_user) groups=4000(deployer),6001(dba),6081(osinstall),10121(dbgroup)
13:50:53
13:50:53 deployer dba osinstall
13:50:53
13:50:53 Again, my groups for: deploy_user : deployer dba osinstall dbgroup
13:50:53
13:50:53 dbgroup:x:10121:user1,user2,appuser3,svcuser4,deploy_user
13:50:53
13:50:53
13:50:53 /path/to/the/folder
13:50:53 It works! upto /path/to/the/folder path in Jenkins job.
13:50:53
13:50:53
13:50:53 /tmp/hudson58581.sh: line 7: cd: /path/to/the/folder/subfolder: Permission denied
13:50:53: cd to subfolder - didnt work
13:50:53
13:50:53 ls: /path/to/the/folder/subfolder/file.txt: Permission denied
13:50:53 ls on file.txt - didn't work
13:50:53
13:50:53 Sleeping for 60 seconds ...

为什么组deploy_user的输出不同的任何想法。 默认情况下,groups命令适用于当前登录的用户(whoami,它显示我是deploy_user)。

我还在子文件夹/file.txt的ls -l输出中检查了groupID,它是10121

谢谢。

好的,问题是最近有人添加了dbgroup用户,但是在创建/配置/启动节点后才添加了该用户,即,为了使节点读取新设置,必须重新启动它。

这就是为什么在机器本身上,一切都在$提示下运行良好,但在Jenkins的工作中却失败了。

重新启动节点后(正在运行作业,也就是将作业限制为仅在带有标签的给定从属上运行),拒绝权限错误消失了。

现在,命令组“ whoami”都显示相同的组数。

詹金斯通常跨多台机器构建主机和从机。

检查两台机器的groupId是否具有相同的“ id号”。 如果不是,那么您可能会将主节点上的“ dbgroup”与从节点上的“ dbgroup”混淆,从节点是完全不同的组。 Linux仅使用数字。

您也可以使用“打印组ID”选项(而不是默认的“打印组名称”)再次进行测试。 ls -ln

另外,请记住,Jenkins作业(在/tmp/hudson58581.sh/tmp/hudson58581.sh可能正在以其他用户身份运行)。 生成前脚本,生成脚本和生成后脚本都具有自己的外壳程序,这意味着可以从一个外壳中收集的内容很少可以应用于其他外壳。

而且,詹金斯(Jenkins)处理“在主服务器上”从服务器的方式与远程主服务器完全不同。 如果要在主站的从站上构建,建议您立即迁移到远程从站。 这是因为远程从站可以扩展,并且不值得积累不会扩展的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM