SSH限制普通用户到家目录

在这个例子中,建立了一个"迷你监狱"用来测试一个只有 ls 命令的 Bash shell。首先用 mkdir 命令设定好 abc "监狱" 路径。

1.创建用户abc

useradd abc

passwd abc

2.用root用户建立目录 :

mkdir -p /chroot/{etc,dev,proc,lib,bin,lib64,home,usr}
mkdir -p /chroot/usr/bin
mkdir -p /chroot/home/abc

chown abc /chroot/home/abc

3. 创建passwd文件

tail -1 /etc/passwd >/chroot/etc/passwd

4.把bash文件拷贝到/chroot/bin下.(对于RHEL6,应该使用cp -a来拷贝文件。)

cp -a /bin/bash /chroot/bin/

5. 查看bash命令需要哪些.so文件,拷贝到chroot相应的目录中(为ldd /bin/bash的结果)

cp -a /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /chroot/lib64/

拷贝完成后,ls -l,会发现拷贝的是软链接文件:

# ll /lib64/

total 0

lrwxrwxrwx. 1 root root 10 Feb 6 13:58 ld-linux-x86-64.so.2 -> ld-2.12.so

lrwxrwxrwx. 1 root root 12 Feb 6 13:58 libc.so.6 -> libc-2.12.so

lrwxrwxrwx. 1 root root 13 Feb 6 13:58 libdl.so.2 -> libdl-2.12.so

lrwxrwxrwx. 1 root root 15 Jan 16 22:36 libtinfo.so.5 -> libtinfo.so.5.7

拷贝原始文件:

cp -a /lib64/{ld-2.12.so,libc-2.12.so,libdl-2.12.so,libtinfo.so.5.7} /chroot/lib64/

简单测试一下,看看chroot命令是否可以用该目录当做/环境。

chroot /chroot

没有错误信息即可,正常应显示bash的信息。

6、ssh设置

/etc/ssh/sshd_config

确保

UsePAM yes

默认即为yes

7. pam验证增加chroot模块

vim /etc/pam.d/sshd

在最下面添加一行:

session    required     pam_chroot.so

一定要确保输入正确,否则可能造成ssh无法登陆。

pam_chroot.so执行后会读取配置文件以决定是否使用chroot环境。

vim /etc/security/chroot.conf

# /etc/security/chroot.conf

# format:

# username_regex        chroot_dir

#matthew                /home

添加一行

abc /chroot

8、调试ssh服务

测试:

ssh [email protected]

登陆失败,打开/var/log/secure日志查看:

Jun  6 09:40:42 abc sshd[18769]: pam_env(sshd:setcred): Unable to open config file: /etc/security/pam_env.conf: No such file or directory

Jun  6 09:40:42 abc sshd[18694]: error: openpty: No such file or directory

Jun  6 09:40:42 abc sshd[18769]: error: session_pty_req: session 0 alloc failed

#cp -a /etc/security /chroot/etc

为chroot准备dev环境,准备pts环境

mount --bind /dev /chroot/dev

mount -t devpts -o gid=5,mode=620 devpts /chroot/dev/pts

准备proc环境

mount -t proc /proc /chroot/proc/

再次登陆测试:

ssh [email protected]

Jun  6 09:50:04 abc sshd[21426]: pam_env(sshd:setcred): Unable to open env file: /etc/environment: No such file or directory

Jun  6 09:50:04 abc sshd[21390]: error: ssh_selinux_setup_pty: security_compute_relabel: No such file or directory

cp -a /etc/environment /chroot/etc/

重新测试:

ssh [email protected]

[email protected]‘s password:

-bash-4.1$

OK,可以正常登陆了。

如果访问系统的某个目录?

mount --bind /usr/local/123 /chroot/usr/local/123

9、复制 ls 命令所需的库文件到chroot相应的目录中。用 ldd 命令打印出 ls 命令依赖的共享库:

cp -a /bin/ls /chroot/bin/

ldd /bin/ls

输出样例:

linux-vdso.so.1=>(0x00007fff68dff000)

libselinux.so.1=>/lib64/libselinux.so.1(0x00000032f8a00000)

librt.so.1=>/lib64/librt.so.1(0x00000032f7a00000)

libcap.so.2=>/lib64/libcap.so.2(0x00000032fda00000)

libacl.so.1=>/lib64/libacl.so.1(0x00000032fbe00000)

libc.so.6=>/lib64/libc.so.6(0x00000032f7200000)

libdl.so.2=>/lib64/libdl.so.2(0x00000032f6e00000)

/lib64/ld-linux-x86-64.so.2(0x00000032f6a00000)

libpthread.so.0=>/lib64/libpthread.so.0(0x00000032f7600000)

libattr.so.1=>/lib64/libattr.so.1(0x00000032f9600000)

你可以一个个的复制库文件,为了更高效的作业,我们也可以使用bash shell 的循环指令实现:

list="$(ldd /bin/ls | egrep -o ‘/lib.*\.[0-9]‘)"

for i in $list;do cp -a "$i" /chroot/"${i}";done

拷贝原始文件:

list=`ll $(ldd /bin/ls | egrep -o ‘/lib.*\.[0-9]‘) |awk -F ‘>‘ ‘{print $2}‘`

for i in $list;do cp -a /lib64/"$i" /chroot/lib64/"${i}";done

最后,chroot 到你的新abc:

chroot /chroot/home/abc /bin/bash

尝试浏览一下 /etc 或 /var:

# ls /

10、环境设置

最简单的就是不设置环境,使用bash版本号作为提示符。

或者也可以按正常的用户一样设置提示符,需要做的操作比较多。

#cp -a /etc/{profile,profile.d,bashrc} /chroot/etc/

ssh [email protected]

[email protected]‘s password:

-bash: id: command not found

-bash: id: command not found

-bash: uname: command not found

-bash: /bin/grep: No such file or directory

-bash: /bin/grep: No such file or directory

-bash: /bin/grep: No such file or directory

-bash: /usr/bin/id: No such file or directory

-bash: [: =: unary operator expected

#whereis id

id: /usr/bin/id /usr/share/man/man1p/id.1p.gz /usr/share/man/man1/id.1.gz

cp -a /usr/bin/id /chroot/usr/bin/

cp -a /bin/grep  /chroot/bin/

cp -a /bin/uname  /chroot/bin/

#  ldd /chroot/usr/bin/id

linux-vdso.so.1 =>  (0x00007fff4cba1000)

libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003690200000)

libc.so.6 => /lib64/libc.so.6 (0x000000368e600000)

libdl.so.2 => /lib64/libdl.so.2 (0x000000368ea00000)

/lib64/ld-linux-x86-64.so.2 (0x000000368e200000)

按上面的方法解决即可。

时间: 2024-08-09 13:16:42

SSH限制普通用户到家目录的相关文章

[添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码,usermod的ysuum安装包。飞

usermod的yum安装包: shadow-utils 将nobody用户添加到nogroup 组: usermod -g nogroup nobody cat /etc/passwd|grep nobody nobody:x:65534:65534:nobody:/var/lib/nobody:/bin/bash 第3个字段是65534:意思就是,UID(用户的ID)是500. 第4个字段是65534:意思就是.GID(用户的组ID)的500. 使用usermod -g nogroup no

centos下配置sftp且限制用户访问目录

第一步:创建sftp服务用户组,创建sftp服务根目录 groupadd sftp #此目录及上级目录的所有者(owner)必须为root,权限不高于755,此目录的组最好设定为sftp mkdir /srv/sftp chown -R root:sftp /srv/sftp chmod -R 0755 /srv/sftp 第二步:备份sshd配置文件然后编辑 mv /etc/ssh/sshd_config ~/backup/sshd_config_xxx vim /etc/ssh/sshd_c

linux用户家目录无损迁移到独立硬盘

学完磁盘管理之后,不知道同学们有没有想过一个问题,之前安装操作系统的时候,用户家目录没有给单独的分区,而如今用户家目录里面的数据越来越大,已经占用了服务器磁盘的大量空间,如果任其发展的话,很有可能会因为家目录的数据占用完服务器的磁盘空间导致系统崩溃.做为名运维人员来讲,我们不可能坐视这种情况的发生吧.那该怎么办了,于是,很多人在想,我们能再用一个新的硬盘创建一个更大的分区给挂载到当前的系统home目录下吗.到底行不行,就让我们一起来验证一下吧.当然要想做此迁移操作,必须提前通知所有用户注销登录.

烂泥:vsftpd单用户多目录配置

本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 一.实际问题 在使用vsftpd过程中,我们会经常发现vsftpd在默认情况下一个用户(无论是系统用户还是虚拟用户)只能拥有一个目录,一般是根目录. 如果此时再要向该用户添加其它目录的话,比如系统的其他目录也需要此用户访问,那么就无法直接添加了. vsftpd不像FileZilla_Server等类似的ftp服务器软件一样可以直接给用户添加多目录,如下: 所以我们只能借助其他方式实现

Linux下如何修改用户默认目录

Linux下默认的用户目录一般为/home/xxx(root用户除外),有些时候我们可能需要修改这个目录,下面我就给大家分享2中修改的方法 工具/原料 Linux操作系统 方法/步骤 1 1.切换到root用户,直接修改/etc/passwd文件,找到你的用户名你一行,如下图所示修改路径,然后保存即可. 2 2.切换到root用户,使用usermod命令,例如usermod -d /tmp test (test为你的用户名),使用该命令请确保该用户下没有运行的软件或进程 3 最后切换到普通账户,

vsftp建立虚拟用户不同目录分配不同权限操作步骤详解

vsftpd服务器同时支持匿名用户.本地用户和虚拟用户三类用户账号,使用虚拟用户账号可以提供集中管理的FTP根目录,方便了管理员的管理,同时将用于FTP登录的用户名.密码与系统用户账号区别开,进一步增强了FTP服务器的安全性. 1.在/etc/vsftpd/vsftpd.conf加入或者更改以下配置语句: ************************************************************************************************

Linux 下搭建ftp服务器 指定用户指定目录及其他操作

搭建 Linux下 rpm -qa |grep vsftpd查看是否安装 没安装yum安装 /etc/vsftpd/目录下有vsftpd.conf配置文件 根据需求 进行配置  是否使用匿名用户以及文件目录权限是否可写等等 给用户指定目录的话 在命令行下进行配置   useradd -d /root/123 user123  给user123用户指定目录 /root/123 然后给该用户添加密码  passwd user123 连接ftp后进行文件的上传或其他操作  提示“could not c

ubuntu server vsftpd 虚拟用户及目录

ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时,该ftp用户,只能用于ftp操作,不能用于登陆ubuntu server 二:配置 1:先建立虚拟网站: 同样先创建apache2 网站配置文件,然后启用站点: 比如这里我的测试 网站 :www.cocoa.com 内网访问 站点: 网站目录在:/var/www/cocoa/web 在该目录下,建

ssh自动输入密码脚本 切换目录脚本

利用expect的,首先查看expect,命令:which expect #!/usr/bin/expect -f spawn ssh 用户名@ip地址 expect "assword:" send "password\r" interact 自动输入密码,切换目录 #!/usr/bin/expect -f spawn ssh 用户名@ip地址 -t "cd xxxxx;bash --login" expect "assword:&qu