Mira yo estoy programando una aplicación que usa una jaula chroot, creo que muy segura ..
te la paso es un script en python se ejecuta como root. y usa un script en bash
este lo guardas con el nombre
makejail.py y lo ejecutas como root
python makejail.py
funciona python 2.7 o cualquier 2.x
Código Python:
Ver original#!/usr/bin/python2
#-*-cuserjaulag: utf-8 -*
try:
import os
import subprocess
import re
except ImportError:
platform_specific_module = None
"""Classes and functions related to the creation of chroot jail. """
class MakeJailX:
""" MakeJail creates jail
======================
- Create the directory tree
- Set permissions
- Copying the necessary binaries
- Use chroot
- Dependencies ** sys ssh rssh **
Sets the type of OS and takes the route of the binary
using script Written by nixCraft <http://www.cyberciti.biz/tips/>
(c) 2006 nixCraft under GNU GPL v2.0+.tanks you nixCraft :).
"""
def setJail(self):
""" Set of directory
"""
os.system('groupadd userjaula')
#tomo el parametro de user_available.conf
os.system('useradd -g userjaula -s /bin/false -d /dev/null userjaula')
userjaula = 'aqui el usuario o los usuarios separados por coma'
adduseagroup = 'gpasswd -M ' + userjaula + ' userjaula'
os.system(adduseagroup)
userjaula2=userjaula.replace(","," ")
os.system('mkdir -p /var/www/userjaula/')
os.system('chown root.userjaula /var/www/userjaula/')
os.system('chmod 710 /var/www/userjaula/')
paths=os.system('pwd')
paths = subprocess.Popen(['pwd'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, error = paths.communicate()
output_split_line = out.split('\n')
os.chdir('/var/www/userjaula/')
os.system('mkdir -p dev etc lib usr bin home var')
os.chdir('/var/www/userjaula/home/')
os.system('mkdir -p '+usersuserjaula2)
os.chdir('/var/www/userjaula/var/')
os.system('mkdir -p log')
os.chdir('/var/www/userjaula/usr/')
os.system('mkdir -p bin')
os.system('mknod -m 666 /var/www/userjaula/dev/null c 1 3')
os.system('cp -R /etc/ld* /var/www/userjaula/etc/')
os.system('cp /etc/nsswitch.conf /var/userjaula/etc/')
os.system('cp /etc/hosts /var/www/userjaula/etc')
## !! no integrar lko que no se decee
os.system('cp /usr/bin/rssh /var/www/userjaula/usr/bin/')
os.system('cp /bin/bash /var/www/userjaula/bin/')
os.system('chown -R userjaula /var/www/userjaula/*')
os.system('chgrp -R userjaula /var/www/userjaula/*')
os.system('chmod -R 710 /var/www/userjaula/*')
os.system('chown '+usersuserjaula2+ ' /var/www/userjaula/home/'+userjaula2)
os.system('chmod -R 710 /var/www/userjaula/home/'+userjaula2)
os.chdir(output_split_line[0])
os.system('pwd')
# !!! cambiar la ruta al sshd_config del sisema
f = open ("/etc/ssh/sshd_config", "a")
f.write("""\n# Set Jail
Match group userjaula
ChrootDirectory /var/www/userjaula/
X11Forwarding no
AllowTcpForwarding no \n""")
f.close()
os.system("sh l2chroot.sh /bin/bash")
#!! REINICIAR EL DEMONIO SSH LUEGO DE INSTALR O NO FUNCIONA LA JAULA
# instantiate
if __name__ == "__main__":
print "Is not shown if import"
jail = MakeJailX()
jail.setJail()
print " enjoy "
Guardas este script en el mismo lugar que el anterior con este nombre -->
l2chroot.sh
Código bash:
Ver original#!/bin/bash
# Use this script to copy shared (libs) files to Apache/Lighttpd chrooted
# jail server.
# ----------------------------------------------------------------------------
# Written by nixCraft <http://www.cyberciti.biz/tips/>
# (c) 2006 nixCraft under GNU GPL v2.0+
# + Added ld-linux support
# + Added error checking support
# ------------------------------------------------------------------------------
# See url for usage:
# http://www.cyberciti.biz/tips/howto-setup-lighttpd-php-mysql-chrooted-jail.html
# -------------------------------------------------------------------------------
# Set CHROOT directory name
BASE="/var/www/userjaula"
if [ $# -eq 0 ]; then
echo "Syntax : $0 /path/to/executable"
echo "Example: $0 /usr/bin/php5-cgi"
exit 1
fi
[ ! -d $BASE ] && mkdir -p $BASE || :
# iggy ld-linux* file as it is not shared one
FILES="$(ldd $1 | awk '{ print $3 }' |egrep -v ^'\(')"
echo "Copying shared files/libs to $BASE..."
for i in $FILES
do
d="$(dirname $i)"
[ ! -d $BASE$d ] && mkdir -p $BASE$d || :
/bin/cp $i $BASE$d
done
# copy /lib/ld-linux* or /lib64/ld-linux* to $BASE/$sldlsubdir
# get ld-linux full file location
sldl="$(ldd $1 | grep 'ld-linux' | awk '{ print $1}')"
# now get sub-dir
sldlsubdir="$(dirname $sldl)"
if [ ! -f $BASE$sldl ];
then
echo "Copying $sldl $BASE$sldlsubdir..."
/bin/cp $sldl $BASE$sldlsubdir
else
:
fi
tal vez tenga cosas que no te sirvan, por lo que te toca modificarlo, si tienes algún problema me avisas.
Con ese script el usuario solo tiene acceso a sftp