missing-cn 阅读(73) 评论(0)
前言:chroot是个比较古老的安全配置方法,05年我最早在solaris上使用过。特别是不使用虚拟化的时候,相比虚拟化的优点是,更加节省空间;性能和物理机无区别。去年的时候为了节约磁盘和最大化的 性能使用chroot配置,下面节抄第一版文档如下。

原文档标题:centos下chroot实现nodejs配置






1、下载和安装
1.1 安装 rmpforge的 扩展yum包
rpm -Uvh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
1.2 安装jailkit
yum install jailkit -y


2、nodejs的chroot配置


2.1 建议chroot 的系统用户的主目录及设定权限及用户
mkdir /opt/node_dev
chown root:root /opt/node_dev
chmod 0755 /opt/node_dev
mkdir -p /opt/node_dev/home
useradd node_dev -g node -d /opt/node_dev/home/node_dev -s /bin/bash
2.2 建立需要chroot的所需要资源
a、设定登录shell,可以登录,如果不需要登录则将bash修改为jk_lsh
jk_init -j /opt/node_dev jk_lsh
jk_init -j /opt/node_dev bash

b、增加nodejs的应用,其中node需要在/etc/jailkit/jk_init.ini中定义

echo "[nodejs]" >> /etc/jailkit/jk_init.ini

\ echo "comment= the nodejs program" >> /etc/jailkit/jk_init.ini
echo "paths = /usr/local/node" >> /etc/jailkit/jk_init.ini
c、执行jk_init命令
jk_init -j /opt/node_dev nodejs
#jk_init -j /opt/node_dev forever
#jk_init -j /opt/node_dev bash

# dns用到
jk_init -j /opt/node_test netbasics

# scp上传用到
jk_init -j /opt/node_test scp    
# scp用到/dev/null
jk_init -j /opt/node_test cvs 
2.3 增加编辑器环境


jk_init -j /opt/node_dev editors
2.4 建立可以chroot的用户


a、建立命令
jk_addjailuser  /opt/node_dev node_dev
b、建立用户不成功的解决办法,原因是chroot的主目录下没有home目录,其脚本调用useradd的时候不主动建立,导致建立home
的下级目录失败
  mkdir /opt/node_dev/home

2.5 启动jailkit(chroot)服务


service jailkit start

3、修正


3.1 关于vi

editors 增加 /bin/vi
[extendedshell 增加/usr/bin/id
增加 env
     /usr/bin/id,/bin/env
paths = 最后增加


4、上述命令执行脚本


#for node_dev的脚本
rpm -Uvh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
yum install jailkit -y
mkdir /opt/node_dev
chown root:root /opt/node_dev
chmod 0755 /opt/node_dev
mkdir -p /opt/node_dev/home
useradd node_dev -g node -d /opt/node_dev/home/node_dev -s /bin/bash
jk_init -j /opt/node_dev jk_lsh
jk_init -j /opt/node_dev bash
echo "[nodejs]" >> /etc/jailkit/jk_init.ini
echo "comment= the nodejs program" >> /etc/jailkit/jk_init.ini
echo "paths = /usr/local/node" >> /etc/jailkit/jk_init.ini
jk_init -j /opt/node_dev nodejs
jk_jailuser  -j /opt/node_dev -s /bin/bash node_dev
service jailkit start




For node_test的脚本


rpm -Uvh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
yum install jailkit -y
mkdir /opt/node_test
chown root:root /opt/node_test
chmod 0755 /opt/node_test
mkdir -p /opt/node_test/home
useradd node_test -g node -d /opt/node_test/home/node_test 
jk_init -j /opt/node_test jk_lsh
#jk_init -j /opt/node_test basicshell
#jk_init -j /opt/node_test editors
jk_init -j /opt/node_test extendedshell
echo "[nodejs]" >> /etc/jailkit/jk_init.ini
echo "comment= the nodejs program" >> /etc/jailkit/jk_init.ini
echo "paths = /usr/local/node" >> /etc/jailkit/jk_init.ini
jk_init -j /opt/node_test nodejs
jk_jailuser -j /opt/node_test -s /bin/bash node_test
echo "PATH=$PATH:/usr/local/node/bin:$HOME/bin" >>/opt/node_test/home/node_test/.bash_profile
echo "NODE_PATH=/usr/local/node:/usr/local/node/lib/node_modules" >>/opt/node_test/home/node_test/.bash_profile
echo "export PATH"  >>/opt/node_test/home/node_test/.bash_profile
service jailkit start


5、问题


5.1 jk_jailuser命令增加的用户不能自动运行.bash_profile里面环境变量设置,只能手动运行才生效






6、chroot udp接收程序


6.1 增加 jdk 在jk_init.ini里面
vi /etc/jailkit/jk_init.ini
 


6.2 udp 开发

用户名: udp_dev
chroot:/opt/udp_dev


  cd /opt
  mkdir udp_dev
  mkdir -p /opt/udp_dev/home
  chown root:root /opt/udp_dev
  chmod 0755 udp_dev
  useradd udp_dev
  jk_init -j /opt/udp_dev extendedshell
  
  
  
  jk_init -j /opt/udp_dev cvs
  mkdir -p /opt/udp_dev/proc
  mount -o bind /proc /opt/udp_dev/proc
  passwd udp_dev
  ssh udp_dev@localhost
 
  6.3 udp 测试
 
用户名: udp_test
chroot:/opt/udp_test

<textarea></textarea>
  cd /opt
  mkdir udp_test
  chmod 0755 udp_test
  mkdir -p /opt/udp_test/home
  useradd udp_test
  jk_init -j /opt/udp_test extendedshell
  jk_jailuser -j /opt/udp_test -s /bin/bash udp_test
  jk_init -j /opt/udp_test cvs
  mkdir -p /opt/udp_test/proc
  mount -o bind /proc /opt/udp_test/proc
  passwd udp_test
  ssh udp_test@localhost
  
 
 1100  22/05/12 11:22:32 ssh tj_dev@localhost




错误解决方法
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
[tj_dev@b101 ~]$ 


 mkdir -p /opt/tj_dev/proc
 mount -o bind /proc /opt/tj_dev/proc