我有一个让我发疯的问题......我现在尝试修复它至少 2 小时 - 但我不是很成功。
问题本身:我在应该托管我们的 git 和 gitolite 环境的 VM 上安装了 CentoS7(我不知道它是否是 CentOs 7 的特定行为)。我安装了所需的服务和用户。一切运行良好,我可以通过 SSH 连接密码和基于密钥的身份验证。所有用户的主目录都在 /home/ 中。现在,我想用 /srv/data/home/git (/srv 在一个单独的分区上)添加一个新用户(git)作为主目录并启用基于密钥的身份验证。两个分区都是 ext4 格式。
grep git /etc/passwd
git:x:1000:1000::/srv/data/home/git:/bin/bash
我安装了 gitolite 并根据官方文档创建了用户:
su - git
mkdir -p ~/.ssh
chmod 700 ~/.ssh
mkdir gitclone-dir
cd gitclone-dir
git clone git://github.com/sitaramc/gitolite
cd gitclone-dir
gitolite/install -ln ~/bin
gitolite setup -pk /srv/data/home/git/.ssh/git_admin.pub
gitolite setup 命令的输出是:
在 /srv/data/home/git/repositories/gitolite-admin.git/ 中初始化空 Git 存储库 在 /srv/data/home/git/repositories/testing.git/ 中初始化空 Git 存储库 警告:/srv/data/home /git/.ssh/authorized_keys 丢失;创建一个新的(这在全新安装中是正常的)
下一步包括克隆 gitolite-admin 存储库,该存储库不断失败:
marcel@mw-ws:~/Sources/juwimm_git/ayeq-benu$ git ls-remote git@192.168.10.35:gitolite-admin.git
git@192.168.10.35's password:
X11 forwarding request failed on channel 0
fatal: 'gitolite-admin.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
请点击此链接查看整个 debug3 日志:http ://pastebin.com/eiZSTu55
最重要的几行:
Jul 18 17:45:40 bh-infra-s010 sshd[2739]: debug1: temporarily_use_uid: 1000/1000 (e=0/0)
Jul 18 17:45:40 bh-infra-s010 sshd[2739]: debug1: trying public key file /srv/data/home/git/.ssh/authorized_keys
Jul 18 17:45:40 bh-infra-s010 sshd[2739]: debug1: Could not open authorized keys '/srv/data/home/git/.ssh/authorized_keys': Permission denied
现在,我做了一些检查:
su - root
cat /srv/data/home/git/.ssh/authorized_keys
# the statement above works fine and I see the files content on the command line
su - git
cat /srv/data/home/git/.ssh/authorized_keys
# with the same result. It's working fine
我又做了一些测试。在下面找到我的测试用例的摘要: - 使用 /home/testuser 作为主目录创建了一个用户,重复了 .ssh 目录的步骤并将我的 pub 密钥移动到它。结果:工作正常!- 使用 /srv/testuser2 作为主目录创建了一个用户,并执行与上述完全相同的操作。结果:authorized_keys 文件上的权限被拒绝 - 使用 /home/testuserls 作为主目录创建了一个新用户,并为 .ssh 目录重复了这些步骤。现在我创建了一个从 /home/testuser3 到 /home/testuserls 的符号链接,并修改了 /etc/passwd 以将 /home/testuser3 设置为该用户的主目录。结果:工作正常!- 使用 /srv/testuser4 作为主目录创建一个新用户,放入 .ssh 文件夹并创建从 /home/testuser4 到 /srv/testuser4 的符号链接,并再次修改 /etc/passwd 以将他的主目录映射到 /home /testuser4. 结果:
ls -l /srv/data/home/git/.ssh/
这给了我:
total 16
-rw-------. 1 git git 1108 Jul 18 16:28 authorized_keys
-rw-------. 1 git git 1679 Jul 18 13:31 id_rsa
-rw-------. 1 git git 399 Jul 18 13:31 id_rsa.pub
我不知道为什么会发生这种情况以及如何解决这个问题。它与CentOS7有关吗?我是瞎子还是傻子?这是版本 openssh-server-6.4p1-8.el7.x86_64 中 ssh 守护程序的新限制吗?我在谷歌或这边没有发现任何类似的问题,也找不到任何解决方案......任何帮助将不胜感激!
更新 I 所有分区(当然交换除外)都被格式化为 ext4。/etc/mtab 中的相应行是:
/dev/vda1 /boot ext4 rw,seclabel,relatime,data=ordered 0 0
/dev/vda2 / ext4 rw,seclabel,relatime,data=ordered 0 0
/dev/vdb1 /srv ext4 rw,seclabel,relatime,data=ordered 0 0
我不使用任何 ACL。否则,它应该在上面的行中列为挂载选项,对吧?UID 1000 是用户 git 的 UID。
grep git /etc/passwd git:x:1000:1000::/srv/data/home/git:/bin/bash
让我们检查从 / 开始的权限
/srv: drwxr-xr-x. 10 root root 4096 Jul 18 16:48 srv
/srv/data: drwxr-xr-x. 3 root root 4096 Jul 18 12:25 data
/srv/data/home: drwxr-xr-x. 4 root root 4096 Jul 18 16:45 home
/srv/data/home/git: drwx------. 7 git git 4096 Jul 18 15:30 git
/srv/data/home/git/.ssh: drwxr-----. 2 git git 4096 Jul 18 16:40 .ssh
** 更新二 - 已修复 **
原来selinux被激活了。该问题已通过 .ssh-Folder 上的以下命令修复:
chcon -R --type=ssh_home_t .ssh