linux – 用于管理文件和git存储库的受限shell

linux – 用于管理文件和git存储库的受限shell,第1张

概述想想一个想让用户通过ssh管理文件和git存储库的网络托管公司.这包括: >安全副本(scp) >创建,复制,移动/重命名和删除文件 >为源代码控制和文本编辑执行一个狭窄的命令子集(git,vim,nano) 我们想实现它并查看以下选项: > rssh > scponly 这些将允许scp部分,但使用git似乎不可能.在Launchpad有一个补丁,但我不知道该怎么做.还有git-shell,但它 想想一个想让用户通过ssh管理文件和git存储库的网络托管公司.这包括:

>安全副本(scp)
>创建,复制,移动/重命名和删除文件
>为源代码控制和文本编辑执行一个狭窄的命令子集(git,vim,nano)

我们想实现它并查看以下选项:

> rssh
> scponly

这些将允许scp部分,但使用git似乎不可能.在Launchpad有一个补丁,但我不知道该怎么做.还有git-shell,但它似乎不允许编辑.也许vim甚至太多了,因为它可以用来执行更多的代码,所以我们可以放弃它(vim,或文本编辑器完全,如果必须的话),如果它太多了.

我们基本上想要锁定shell,因此用户可以管理(和编辑)文件和git存储库,但用户不应该能够执行系统上的任何其他程序.最大的问题是滥用网络和计算资源,但也使用系统作为代理.你说它的名字.有没有办法做到这一点,或者我们甚至可能在这个问题上采取错误的方法?

解决方法 您有两种互补的方式来实现这一点:

授予用户远程使用git存储库的权限

使用gitolite3提供一个hub-live存储库模式(详见here),它基本上要求你有一个裸存储库(一个集线器仓库)让你的用户推/拉和一个签出版本的例如,/ srv / www / HTML中的相同仓库(实时仓库)位于相应的路径中.

我喜欢使用gitolite3来处理集线器回购,但这不是必需的,但如果需要的话,拥有fine-grained access control bound to your LDAP of choice会相当方便. gitolite3可以提供细粒度控制到分支级别.

通过sudo限制gitolite3用户的功能也是一种很好的做法,并通过sudo调用来处理钩子.这是一个使用gitolite3钩子的工作示例(随意调整它们 – 或者增强/修复它们 – 以满足您的需要):

> / etc / sudoers或/etc/sudoers.d/gitolite3的相关内容将类似于:

Cmnd_Alias        GITOliTE_Cmds = /usr/bin/git,/bin/chown,/bin/find,/usr/bin/xargs,/bin/chmod,/sbin/restorecon,/usr/local/sbin/publisher-hub2liveCmnd_Alias GITOliTE_APACHE_Cmds = /usr/sbin/apachectl gracefulDefaults:gitolite3 !requirettyDefaults:gitolite3 lecture=nevergitolite3                ALL = (root)nopASSWD: GITOliTE_Cmdsgitolite3       APACHE_HOSTS = (root)nopASSWD: GITOliTE_APACHE_Cmds

> hub repo post-update hook:

#!/bin/shecho "****"echo "**** Calling publisher-hub2live script [Hub's post-update hook]"echo "****"sudo /usr/local/sbin/publisher-hub2live "/srv/www/HTML" "root:apache" "2750" "640"exit 0

> publisher-hub2live脚本:

#!/bin/shecho "****"echo "**** Pulling changes into live [publisher-hub2live]"echo "****"cd "" || exitumask 0022unset GIT_DIR/usr/bin/git pull hub master# custom actions here# e.g call grunt tasks/bin/chown -R "" ""/bin/find "" -type d -exec chmod "" {} +/bin/find "" -type f -exec chmod "" {} +/bin/chmod u+x ""/.git/hooks/post-commit/sbin/restorecon -R -v ""exec /usr/bin/git update-server-infoexit 0

限制在登录shell中执行未授权命令的能力

您需要实现的是一种可重现的,可审计的方法,用于限制用户执行严格允许的 *** 作以外的 *** 作的能力.

它不是必需的,但如果您的用户在LDAP中注册,并且您已经部署了执行LDAP身份验证的机制,无论是通过PAM模块还是使用freeIPA和sssd,它都会有所帮助.

为了实现这种情况,我目前做的是以下内容(请注意,这种限制要求满足几个条件,否则可以轻松规避限制):

>用户不属于wheel组,唯一授权使用su(通过PAM强制执行).通常,存在非LDAP用户(sysadm),以允许受信任的管理员在灾难恢复或LDAP不可用时执行 *** 作.
>为用户提供一个正确安全的rbash,其中只有一个指向私有〜/ bin的PATH,这个〜/ bin /目录包含指向所有允许命令的链接,例如:

$ll ~/bintotal 0lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egreP*lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgreP*lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 git -> /usr/bin/git*lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/greP*lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rvIEw -> /bin/rvIEw*lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*

>为用户提供受限制的只读环境(考虑LESSSECURE,TMOUT,HISTfile等变量).这是为了避免shell减少命令,例如less并确保可审计性.
>出于同样的原因,唯一允许的编辑器isrvim.用户只能执行sudoedit,配置为在sudo配置中运行rvim:

Defaults editor=/usr/bin/rvim

>如果MAC限制到位(您使用的特定GNU / linux发行版已启用SElinux),则用户将映射到SElinux用户staff_u,并有权通过sudo按需要执行其他用户的命令.需要仔细检查允许的特定漏洞以防止用户绕过这些限制,并且还可以在现有LDAP基础结构中部署(这是freeIPA功能之一).
>用户’/ home,/ tmp和/ var / tmp通过/etc/security/namespace.conf进行多实例化:

/tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root/var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root$HOME      $HOME/$USER.inst/              tmpdir:create   root

目录的多实例化并不是一项新功能,现在已经有很长时间了.作为参考,请参见this article from 2006.事实上,许多模块默认使用pam_namespace,但/etc/security/namespace.conf中的默认配置不启用多实例化.
此外,/ etc / security / namedspace.init应使所有骨架文件对用户只读,并由root拥有.

通过这种方式,您可以选择是否代表其他用户(通过sudo)代表自己(通过private / / bin目录中的链接,通过/ etc / skel提供,如上所述)代表自己执行任何命令(或通过/ etc / skel提供)一个都没有.

总结

以上是内存溢出为你收集整理的linux – 用于管理文件和git存储库的受限shell全部内容,希望文章能够帮你解决linux – 用于管理文件和git存储库的受限shell所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1043975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存