用scponly限制只能拷文件,不能登陆(MAC版)

目的:

限制用户在特定目录(不能看到上级或者根目录)

只能执行scp或者sftp拷贝特别目录下的文件

不能SSH登陆,其它命令不能执行

机制:

SSH登陆成功后,scponly会接管SHELL,并CHROOT到特别目录,让用户“以为”这个目录就是根目录

它只会响应SFTP和SCP命令

只影响配置SHELL为SCPONLY的用户,其它用户不受影响

MAC下安装:

LINUX下安装SCPONLY非常简单,不多说,特说下MAC的

GOOGLE一下scponly,下载解压后编译安装:

./configure --enable-chrooted-binary --enable-rsync-compat --enable-scp-compat --enable-sftp-logging-compat --with-sftp-server=/usr/libexec/sftp-server

make clean all

sudo make install

会安装好:/usr/local/sbin/scponlyc

用workgroup manager建立下载用户,比方说是dnld,并配置其login shell到上述路径

因为CHROOT后执行的命令都以用户目录/Users/dnld做为根目录,所以要把scponly用到的scp和sftp-server两个可执行文件和信赖库拷到其下。以ROOT用户登录,且CD至/Users/dnld,执行以下脚本就会把这件事做好:

perl ./printlib.pl /usr/bin/scp

perl ./printlib.pl /usr/libexec/sftp-server

我写的脚本源码,自动搜索信赖关系,并在当前目录建立目录结构:

#!/bin/perl
%result=();
$result{$ARGV[0]}=1;

sub addlib{
@a = `otool -L \"$_[0]\"`;
#print @a;
for $i (@a){
    if ($i =~/\s*([a-z|A-Z|\.|0-9|\/|\+|\-]*)\s*/){
        #print "$1\n";
        $result{$1}=1;
    }
}
}

$before  = 1;
$after = 0;

while ($before != $after){
$before = scalar keys %result;

for $i (keys %result){
    addlib($i);
}
$after = scalar keys %result;
print "before $before, after $after\n";
}

for $i (keys %result){
#print "$i\n";
if ($i =~ /(.*)\/([~\/]*)/){
system ("mkdir -p \.$1");
system ("cp $i \.$1/");

}
}

调试:

加大LOG级别:

cat 7 /usr/local/scponly/etc/scponly/debuglevel

从其它机器或者本机用dnld用户来拷贝文件,看登陆LOG:

tail -f /var/log/*

dstruss类似strace来看进程在做什么

直接到SCPONLY里加LOG,这个最直接了。

http://www.blogjava.net/alwayscy/archive/2011/07/13/354216.html

-----------------------------------------------------------------------

4.8以上SSHD配置特定用户只能在特定目录SFTP,不能进行其它命令操作

限制用户在自己目录下载文件:

建立nagiosdnld

指向软链接:/usr/local/nagios/dnld -> /Users/nagiosdnld/dnld

编辑/etc/sshd_config

Match User nagiosdnld

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

ChrootDirectory /Users/nagiosdnld

重启下服务:

launchctl stop org.openbsd.ssh-agent

launchctl start org.openbsd.ssh-agent

@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

http://www.blogjava.net/alwayscy/archive/2011/10/03/359940.html

时间: 2024-08-07 12:40:19

用scponly限制只能拷文件,不能登陆(MAC版)的相关文章

linux学习——拷文件

1.本地拷文件 cp [option] 源文件 目标文件 -a 尽可能将档案状态.权限等资料都照原状予以复制. -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地. -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制. [[email protected] test]$ cp helloworld.c ../ [[email protected] test]$ cd .. [[email protected] liyan]$ ls -lt total 2

scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名

对拷文件夹 (包括文件夹本身) scp -r   /home/wwwroot/www/charts/util [email protected]:/home/wwwroot/limesurvey_back/scp 对拷文件夹下所有文件 (不包括文件夹本身) scp   /home/wwwroot/www/charts/util/* [email protected]:/home/wwwroot/limesurvey_back/scp 对拷文件并重命名 scp   /home/wwwroot/ww

从外置U盘中拷文件到Linux(挂载)

第一步: 将U盘插入电脑,在Linux系统中会有反应,类似sda.sdb……,然后去/dev目录查看是否有这个文件 第二步: 新建一个目录:/mnt/mine 第三步: 将u盘挂载到/mnt/mine下:mount /dev/sdb /mnt/mine 第四步: 查看是否挂载成功:df -h,看是否有/mnt/mine 第五步: 如果挂载成功,u盘中的数据就全部在/mnt/mine中了 第六步: 使用cp -rp命令,就可以互拷了,大功告成! 从外置U盘中拷文件到Linux(挂载)

对拷 使用scp命令在两台linux上对拷文件或者文件夹

以前一直是在服务器上tar打包压缩,下载到本地电脑上,再上传到另外一台服务器上,再解压. 其实使用scp命令就可以直接对拷文件或者文件夹了. scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. 最简单的应用如下:  scp  本地用户名@IP地址:文件名1   远程用户名@IP地址:文件名2 [本地用户名@IP地址:] 可以不输入,可能需要输入远程用户名所对

linux和windows双系统互拷文件乱码问题

如果你需要在linux下面用到windows下的文件,拷贝上去后经常发现中文显示乱码..原因是Windows中默认的文件格式是 GBK(gb2312),而Linux一般都是UTF-8.比较繁琐的方法是在windows下用程序把内容转换为utf-8编码格式的,但是相当麻烦, 而且遇到一个文件转一回.下面介绍一下,在Linux中如何一劳永逸的解决这个问题,查看文件的编码及如何进行对文件进行编码转换. 查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:se

关于从其他mac上拷贝过来的工程文件只有my mac 没有其他设备的问题

关于从其他mac上拷贝过来的工程文件只有my mac 没有其他设备的问题 PS:刚刚碰到这样一个问题,就随手记录下来.从从其他mac上拷贝过来的工程文件只有my mac 没有其他设备的问题   上图: 1.首先先关闭Xcode 2. 找到我们拷贝过来的工程文件夹,找到后缀为xcodeproj右键显示包内容 3.然后就是这样的三个文件 4.因为每个mac的xcode都会自动生成这样一个文件,从而导致拷贝到其他工程时读取的是拷贝之前的文件.把xcuserdata移动到废纸篓,再从新打开即可 5.效果

mysql5.7未生成初始密码.mysql_secert文件,登陆数据库

今天在CentOS 6.5上安装mysql5.7时遇到一个问题,没有初始化密码. 在mysql5.7之前的版本首次登陆是无需密码的,但是5.7起会生成一个初始化密码/root/.mysql_secert cat /root/.mysql_secert 就可以查看初始化密码了 但是我的安装没有发现.mysql_secert文件. 这种情况的解决方案: mysqld_safe --user=mysql --skip-grant-tables & #跳过授权验证方式启动mysql mysql -uro

doPost无法跳转显示信息,只能下载文件查看

今天学习了servlet,搞了一个登陆的html,method是post <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text

Struts2文件配置 登陆页面

Struts 版本号 struts-2.3.16.3 web.xml 配置 <?xml version=”1.0″ encoding=”UTF-8″?> <web-app version=”3.0″ xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/jav