最近想搭建一个git仓库给团队使用,虽然git-shell,但是还是想尝试用chroot,于是折腾了一下。

步骤一、 运行脚本

脚本内容请看

https://github.com/SweetTool/MakeChroot/blob/master/create_chroot_sharegit.sh

#!/bin/sh
# script to automate the creation of chroot jail
# w/ minimal executables to run gitexport CHROOT=/home/sunny/chrootfunction copy_binary()
{for i in $(ldd $*|grep -v dynamic|cut -d " " -f 3|sed 's/://'|sort|uniq)docp --parents $i $CHROOTdone# ARCH amd64if [ -f /lib64/ld-linux-x86-64.so.2 ]; thencp --parents /lib64/ld-linux-x86-64.so.2 $CHROOTfi# ARCH i386if [ -f  /lib/ld-linux.so.2 ]; thencp --parents /lib/ld-linux.so.2 $CHROOTfi
}# setup directory layout
mkdir $CHROOT
mkdir -p $CHROOT/{dev,etc,home,tmp,proc,root,var}# setup device
mknod $CHROOT/dev/null c 1 3
mknod $CHROOT/dev/zero c 1 5
mknod $CHROOT/dev/tty  c 5 0
mknod $CHROOT/dev/random c 1 8
mknod $CHROOT/dev/urandom c 1 9
chmod 0666 $CHROOT/dev/{null,tty,zero}
chown root.tty $CHROOT/dev/tty# copy programs and libraries
copy_binary /bin/{bash,ls,cp,rm,cat,mkdir,ln,grep,cut,sed} /usr/bin/{vim,ssh,head,tail,which,id,find,xargs}
copy_binary  `which git` `which git-receive-pack` `which git-shell` `which git-upload-archive` `which git-upload-pack` # copy git resource files
cp -r --parents /usr/share/git-core $CHROOT
# copy vim resource files
cp -r --parents /usr/share/vim $CHROOT
# copy basic system level files
cp --parents /etc/group $CHROOT
cp --parents /etc/passwd $CHROOT
cp --parents /etc/shadow $CHROOT
cp --parents /etc/nsswitch.conf $CHROOT
cp --parents /etc/resolv.conf $CHROOT
cp --parents /etc/hosts $CHROOT
cp --parents /lib/libnss_* $CHROOT
cp -r --parents /usr/share/terminfo $CHROOT# setup public key for root
#mkdir -p $CHROOT/root/.ssh
#chmod 0700 $CHROOT/root/.ssh
#cp {id_rsa,id_rsa.pub} $CHROOT/root/.ssh# setup public key for qbot
#mkdir -p $CHROOT/home/qbot/.ssh
#chmod 0700 $CHROOT/home/qbot/.ssh
#cp {id_rsa,id_rsa.pub} $CHROOT/home/qbot/.ssh
#chown -R qbot.qbot $CHROOT/home/qbot/.ssh# create symlinks
cd $CHROOT/usr/bin
ln -s vim viecho "chroot jail is created. type: chroot $CHROOT to access it"

2. 创建用户projects

3. 在chroot/home目录下创建相同的用户目录文件夹

4.  ssh配置chroot

$ sudo vim /etc/ssh/sshd_config

在最后添加

Match User skygitChrootDirectory ~/home/chroot

二、遇到的问题解决

1. ls命令不能存在“-bash: ls: command not found”

在centos上会存在这样的问题,这是因为centos上的命令是通过软链接引用的,实际的ls命令在/usr/bin下

[sunny@icentos ~]$ ls -al /
total 80
dr-xr-xr-x. 19 root root  4096 Mar 24 17:29 .
dr-xr-xr-x. 19 root root  4096 Mar 24 17:29 ..
-rw-r--r--   1 root root     0 Apr 21  2016 .autorelabel
lrwxrwxrwx   1 root root     7 May 25  2017 bin -> usr/bin
dr-xr-xr-x.  4 root root  4096 Jun 26  2017 boot
drwxr-xr-x   2 root root  4096 Apr 21  2016 data
drwxr-xr-x  18 root root  2900 Mar  4 10:17 dev
drwxr-xr-x. 91 root root 12288 Mar  4 10:17 etc
drwxr-xr-x.  5 root root  4096 Mar  3 00:45 home
lrwxrwxrwx   1 root root     7 May 25  2017 lib -> usr/lib
lrwxrwxrwx   1 root root     9 May 25  2017 lib64 -> usr/lib64
drwx------.  2 root root 16384 Apr 21  2016 lost+found
drwxr-xr-x.  2 root root  4096 Nov  5  2016 media
drwxr-xr-x.  2 root root  4096 Nov  5  2016 mnt
drwxr-xr-x.  3 root root  4096 Nov  5  2016 opt
dr-xr-xr-x  83 root root     0 Mar  4 10:17 proc
dr-xr-x---.  4 root root  4096 Mar 24 17:24 root
drwxr-xr-x  23 root root   800 Mar  5 02:34 run
lrwxrwxrwx   1 root root     8 May 25  2017 sbin -> usr/sbin
drwxr-xr-x.  2 root root  4096 Nov  5  2016 srv
dr-xr-xr-x  13 root root     0 Mar  4 10:17 sys
drwxrwxrwt.  7 root root  4096 Mar 24 03:22 tmp
drwxr-xr-x. 13 root root  4096 May 25  2017 usr
drwxr-xr-x. 19 root root  4096 Mar  4 10:17 var

而ssh登录上去的环境变量为“/usr/local/bin:/usr/bin”,github上的脚本只复制了/bin目录下的文件,显然没有拷贝/usr/bin目录下的命令,造成/bin的文件没有拷贝成功。

-bash-4.2$ echo $PATH
/usr/local/bin:/usr/bin

解决方案:按照根目录下/bin的格式从/usr/bin目录下拷贝文件。

2. 运行脚本./create_chroot_sharegit.sh: 7: ./create_chroot_sharegit.sh: Syntax error: "(" unexpected

在Ubuntu上运行chroot脚本会报错

sunny@sunny-virtual-machine:~/chroot/MakeChroot$ sudo ./create_chroot_sharegit.sh
[sudo] password for sunny:
./create_chroot_sharegit.sh: 7: ./create_chroot_sharegit.sh: Syntax error: "(" unexpected

这是因为chroot脚本用了bash脚本写,而Ubuntu默认是dash

Ubuntu

sunny@sunny-virtual-machine:~/chroot/MakeChroot$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 10月 31 11:22 /bin/sh -> dash

centos或者Fedora

[sunny@icentos ~]$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 May 25  2017 /bin/sh -> bash

解决方法: 直接用bash运行

$ sudo /bin/bash ./create_chroot_sharegit.sh

如何创建git账户的chroot相关推荐

  1. 建立自己的git账户并保存资料的重要性

    Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.创业公司可以用它来托管软件项目,开源项目可以免费托管,私有项目需付费.[2] GitHu ...

  2. 本地配置多个 Git 账户信息,满足不同的 Git 平台

    写在前面的话 因为工作的时候为了访问速度快,我把很多仓库都迁移到了码云.但是呢,个人的一些东西还是保留在了 GitHub 了.这样就存在一个不得不解决的问题,就是两个平台的注册时使用的邮箱不同,用户名 ...

  3. php 通过exec 创建git分支失败

    为什么80%的码农都做不了架构师?>>>    今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登 ...

  4. [Cocoa]为已有的XCode工程创建Git仓库

    [转]为已有的XCode工程创建Git仓库 原文链接:点击这里 XCode 会自动为新建的工程创建本地 Git 仓库,但是如何为已有的工程创建 Git 仓库呢?Google 到下面这篇文章,贴在下面了 ...

  5. 【Visual Studio 2019】上传代码到 GitHub ( 16.9.2 版本 | 安装 GitHub 扩展插件 | 创建 Git 仓库 | 推送到远程仓库 )

    文章目录 一.安装 GitHub 扩展插件 二.创建 Git 仓库 三.推送到远程仓库 今天将 Visual Studio 2019 从 16.3.6 版本升级到了 16.9.2 版本 , 发现相关操 ...

  6. oracle12c的scott,Oracle12C创建scott账户

    Oracle12C创建scott账户 具体步骤: 打开SqlPlus 输入用户名和密码 用户名:sys 口令:sys as sysdba 创建c##scott用户 CREATE USER c##sco ...

  7. 02_创建Git仓库,克隆仓库,git add,git commit,git push,git pull,同行冲突,不同行冲突的结局方案,git mergetool的使用

    1 创建Git资源库,残酷目录信息 创建git资源库的命令: git init –bare 仓库名称 (其中-bare表示的意思是空的库的意思) 进入E:\software\repository\gi ...

  8. git 添加用户名和邮箱_设置 Git 账户及邮箱

    当我们在GitHub中提交修改时,GitHub通过我们本地git配置文件中配置的邮箱地址,与我们的GitHub账户相关联,这样GitHub提交记录就可以关联提交者的GitHub账户. 那么我们怎么在本 ...

  9. VMM系列之VMM角色介绍以及创建运行方式账户

    在SCVMM2012 R2中主要通过创建用户角色来定义用户可管理的对象以及用户可执行的管理操作.VMM中微软内置5个用户角色用以管理对象: A:管理员:"管理员"用户角色的成员可对 ...

  10. 输入法问题_「图」KB4515384再爆新问题:OOBE时中文输入法阻止创建本地账户

    KB4515384可谓是近期BUG数量最多的累积更新了,继开始菜单出现严重错误.音频故障.网络适配器问题.PIN登陆系统无法使用之后,在支持文档中微软承认了在初次设置(OOBE)过程中,使用某些语言将 ...

最新文章

  1. 粒子滤波Matlab示例
  2. python计算一年有多少天_Python 案例 004 (计算当前时间是一年中的第几天)
  3. linux下超简单的ntp时间服务器
  4. ReactiveObjC(OC版ReactiveCocoa)的安装与使用
  5. shell 封装方法_反弹shell逃逸基于execve的命令监控(上)
  6. 数独问题流程图_数独求解算法
  7. mysql数据库初始化不成功_初始化mysql的数据库失败怎么办
  8. liteide+g:Goland多版本管理
  9. go mod 使用方法
  10. zz]Prisoners’ Dilemma Tit For Tat
  11. 2020-08-29 ---- 美团点评 笔试
  12. Hello ......
  13. 六轴机器人光机_四轴机器人与六轴机器人有什么区别?
  14. Verilog实现异步FIFO(重难点)
  15. Appium的一点一滴
  16. 利用栈进行数制转换和括号匹配(C语言)
  17. openpyxl官方教程参考手册(翻译)
  18. 手机端html跑马灯效果,js实现跑马灯效果 很好用
  19. 写一篇文章(writing a paper)
  20. ​IT 管理进化论:若运维是眼前的苟且,运营则是诗和远方

热门文章

  1. 【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)
  2. 【生信进阶练习1000days】day16~day22-RNA-seq data analysis with limma edgeR and Glimma
  3. UTM(Undergraduate Texts in Mathematics)书单 |附下载链接
  4. linux crontab怎么启动,【linux之crontab,启动】(示例代码)
  5. 创建线程的3种方式,线程池的参数详解
  6. 统计占比_Excel数据透视表:统计各项所占百分比
  7. js-01_面向对象选项卡
  8. 使用gatling做压力测试与负载测试
  9. Delphi判断是否有全屏程序
  10. onclick获取当前节点