chroot限制普通用户登录特定目录 Linux教程 安全防御



---普通用户登陆到服务器上只能执行ssh,ls,cat等有限的基础命令,另外要求把用户锁定在特定目录中,不能看到其他任何目录下文件


1.创建查看日志的用户

adduser -g opt -d /data/opt/app -s /sbin/nologin app  # 添加用户,指定主目录,禁止ssh登录

usermod -a -G opt  app  # 把用户添加到sftp的用户组

---新建用户组

groupadd  opt

userdel -rf  app

---新建用户并将用户添加到分组当中

-d宿主目录  -g 用户(app)分到哪个组(opt) 

useradd -d /data/opt/app  -g  opt  -m app  -s /bin/bash

---给刚新建的用户(app)设置密码

passwd  app

-> QazWsx

---看下用户是否设置成功了

groups  app

2.列出指定目录必须包含支持用户会话所必需的文件和目录

ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

crw-rw-rw- 1 root root 1, 3  4月  6 21:35 /dev/null

crw-rw-rw- 1 root root 1, 8  4月  6 21:35 /dev/random

lrwxrwxrwx 1 root root   15  4月  6 21:35 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx 1 root root   15  4月  6 21:35 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx 1 root root   15  4月  6 21:35 /dev/stdout -> /proc/self/fd/1

crw-rw-rw- 1 root tty  5, 0  4月  6 21:35 /dev/tty

crw-rw-rw- 1 root root 1, 5  4月  6 21:35 /dev/zero

-用 mknod 命令创建 /dev 下的文件。

-m 标志用来指定文件权限位,

-c意思是字符文件,

-两个数字分别是文件指向的主要号和次要号

mkdir -p  /data/opt/app/dev/

cp -vf  /dev/{null,zero,random,tty}  /data/opt/app/dev/

cd  /data/opt/app/dev/

mknod -m 666 null c 1 3

mknod -m 666 tty c 5 0

mknod -m 666 zero c 1 5

mknod -m 666 random c 1 8

ls

null  random  tty  zero


-配置opt用户并设置安全密码, 注:若添加更多用户,则需要执行操作

cp -vf  /etc/{group,passwd}  /data/opt/app/etc/

vim  /data/opt/app/etc/group

opt:x:1005:

vim /data/opt/app/etc/passwd

app:x:1002:1005::/data/opt/app:/bin/bash


-在 chroot 监狱中设置合适的权限。

-注意 chroot 监狱和它的子目录以及子文件必须被 root 用户所有,

-并且对普通用户或用户组不可写

chown app:opt   /data/opt/app

chmod 750  /data/opt/app


3.初始化chroot环境

vim  /data/opt/app/chroot.sh

mkdir /data/opt/app
mkdir  /data/opt/app/{bin,dev,lib,lib64,etc,home}
CMD="/bin/bash /bin/ls /bin/cp  /bin/rm  /usr/bin/vim /bin/cat /usr/bin/tail"
CHROOT="/data/opt/app/"
lib1=`ldd $CMD | awk '{ print $1 }' | grep "/lib" | sort | uniq`
lib2=`ldd $CMD | awk '{ print $3 }' | grep "/lib" | sort | uniq`
for i in $CMD
do
    cp -a $i $CHROOT/bin/ && echo "$i done"
done
for j in $lib1
do
cp -f $j $CHROOT/lib64/ && cp -f $j $CHROOT/lib/  && echo "$j done"
done
for k in $lib2
do
cp -f $k $CHROOT/lib64/ && cp -f $k $CHROOT/lib/ && echo "$k done"
done
chown -R root:root  /data/opt/app/
chmod -R 755  /data/opt/app/

chmod -R 777  /data/opt/chroot.sh

sh  /data/opt/chroot.sh


4.创建用户目录

mkdir  /data/opt/app/home/opt

chown -R app:opt  /data/opt/app/home/opt


5. sshd_config

vim /etc/ssh/sshd_config

#UseDNS no #注释掉

#AddressFamily inet #注释掉

#SyslogFacility AUTHPRIV #注释掉

Subsystem sftp internal-sftp

# 用户组配置方式,用户组的所有用户都能登录访问

Match group  opt

# 单一用户配置方式,可以为不同用户配置不同主目录

Match User app

ChrootDirectory /data/opt/app

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp


systemctl restart sshd


6.日志目录挂载

mount --bind /var/logs  /data/opt/app/home/opt

修改/etc/fstab文件,开机自挂载:

echo "/var/logs     /data/opt/app/home/opt    none    rw,bind        0    0" >> /etc/fstab



签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回