目的:
限制用戶在特定目錄(不能看到上級或者根目錄)
只能執行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,這個最直接了。
posted on 2011-07-13 02:25
我愛佳娃 閱讀(787)
評論(0) 編輯 收藏 所屬分類:
網管 、
MAC