免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5552 | 回复: 16
打印 上一主题 下一主题

怎么使用受限的shell来限制用户在特定的目录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 10:44 |只看该作者 |倒序浏览
新建一个普通用户user之后,想把他限定在/home/user目录下,user用户不能进入上级目录,不能执行系统的任何命令,只能执行/home/user目录下的几个命令,怎么实现了?

我尝试了以下办法,都没有实现

1.通过设定PATH变量来限制
vi .profile
#!/bin/sh
export PATH=/home/user:.
这样user用户不能执行系统命令,比如ls命令
但是可以通过/bin/ls来执行。

2.通过受限的shell来实现
在单独脚本中能够实现这种功能
vi test
#!/bin/sh
set -r
echo "Attempting directory change in restricted mode."
cd ..
echo "Still in `pwd`"

但是如果在passwd中更改admin用户的登陆shell为/bin/sh -r
提示错误:login: cannot run /bin/sh -r: No such file or directory

在admin的用户目录/home/admin下设置.profile文件的shell路径,
#!/bin/sh -r
export PATH=/home/admin:.
设置之后并不能限制用户

3.通过chroot来实现
建立chroot的环境脚本
#vi test
#!/bin/sh
ROOT=$1
libs=`find $ROOT -type f -perm /111 -exec "ldd" {} \;|cut -d \> -f 2|cut -d \( -f 1|sort |uniq`
echo $libs
for lib in $libs
do
if [ -f $lib ] ;then
if [ ! -f $ROOT/$lib ] ;then
dir=`dirname $ROOT$lib`
if [ ! -d $dir ];then
    mkdir -pv $dir
fi
cp -av $lib $ROOT$lib
if [ -h $lib ]; then
    source=`dirname $lib`/`readlink $lib`
    cp -av $source $ROOT$source
    #echo $source >> liblist
fi
fi
fi
done
echo "Done!"

#./test /home/admin
提示错误:applet not found

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2008-09-05 11:08 |只看该作者
-perm /111是啥意思?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2008-09-05 11:18 |只看该作者
find -perm +111 的新形式吧。

论坛徽章:
0
4 [报告]
发表于 2008-09-05 12:15 |只看该作者
写一个脚本,里面提供可以执行的命令的菜单,并在用户选择时通过系统调用执行
然后把passwd里的用户的shell改为这个脚本

论坛徽章:
0
5 [报告]
发表于 2008-09-05 14:03 |只看该作者
原帖由 welcome008 于 2008-9-5 12:15 发表
写一个脚本,里面提供可以执行的命令的菜单,并在用户选择时通过系统调用执行
然后把passwd里的用户的shell改为这个脚本

很感谢你的意见,可是我不会写限制用户的这种脚本,能不能有一个可参考的脚本给我了,谢谢!

我的user用户只有以下的权限:
通过telnet登陆到/home/admin目录
执行我放在/home/admin下面的几个命令
其它的任何操作都不能执行

论坛徽章:
0
6 [报告]
发表于 2008-09-05 14:17 |只看该作者
我也有同样的问题,之前我解决的办法是在profile文件中限定bin目录,不准这个用户使用cd命令........希望能看到更好的解决办法......

论坛徽章:
0
7 [报告]
发表于 2008-09-05 16:05 |只看该作者
原帖由 kidd05 于 2008-9-5 14:17 发表
我也有同样的问题,之前我解决的办法是在profile文件中限定bin目录,不准这个用户使用cd命令........希望能看到更好的解决办法......

你在profile中是怎么加上这个限定,禁止用户使用cd命令了?

论坛徽章:
0
8 [报告]
发表于 2008-09-05 16:11 |只看该作者
原帖由 qinquan 于 2008-9-5 14:03 发表

很感谢你的意见,可是我不会写限制用户的这种脚本,能不能有一个可参考的脚本给我了,谢谢!

我的user用户只有以下的权限:
通过telnet登陆到/home/admin目录
执行我放在/home/admin下面的几个命令
其它 ...



有点类似:

......
while ( 1== 1 )
do
    echo "1     cmd1"
    echo "2     cmd2"
    ...
    echo "请输入命令代码"
    read  var
    if( $var == 1) then
             system("cmd1")
    elif( $var == 2) then
             system("cmd2")
    ...
    endif
done

论坛徽章:
0
9 [报告]
发表于 2008-09-05 18:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2008-09-08 09:48 |只看该作者

回复 #7 qinquan 的帖子

就是在该用户的.bash_profile中把bin目录指向此用户目录下的bin目录(自己建一个),想让用户使用什么命令就cp命令到这个目录下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP