云网牛站
所在位置:首页 > Linux教程 > 利用lshell来构建一个受限的用户SHELL环境

利用lshell来构建一个受限的用户SHELL环境

2018-06-23 11:01:53作者:hi-linux稿源:运维之美

lshell提供了一个针对每个用户可配置的限制性shell,lshell的配置文件非常的简单,可以和ssh的authorized_keys或者/etc/shell、/etc/passwd耦合使用,lshell可以很容易的严格限制用户可以访问哪些命令。

有些特殊情况下需要实现将系统内普通用户限定在指定目录下,并且只能使用系统管理员设定的命令。lshell就是实现这样功能的一个工具。

lshell项目地址。最新版本为lshell_0.9.18.tar.gz

 

lshell安装

RHEL、CentOS等Linux版本:

$ yum install lshell #EPEL源

Debian、Ubuntu等Linux版本:

$ apt-get install lshell

官网提供的安装方法:

利用lshell来构建一个受限的用户SHELL环境

 

lshell使用

1.lshell语法格式

$ lshell --help

Usage: lshell [OPTIONS]

--config <file> : Config file location (default /etc/lshell.conf)  #指定配置文件

--log    <dir>  : Log files directory                              #指定日志目录

-h, --help      : Show this help message                           #显示帮助信息

--version       : Show version                                     #显示版本信息

2.lshell配置

Linux下配置文件为/etc/lshell.conf

# lshell.py configuration file

#

# $Id: lshell.conf,v 1.27 2018/6/18 19:05:17 ghantoos Exp $

[global]

##  log directory (default /var/log/lshell/ )

logpath         : /var/log/lshell/

##  set log level to 0, 1, 2, 3 or 4  (0: no logs, 1: least verbose,

##                                                 4: log all commands)

loglevel        : 2

##  configure log file name (default is %u i.e. username.log)

#logfilename     : %y%m%d-%u

#logfilename     : syslog

##  in case you are using syslog, you can choose your logname

#syslogname      : myapp

[default]

##  a list of the allowed commands or 'all' to allow all commands in user's PATH

allowed         : ['ls','echo','cd','ll']

##  a list of forbidden character or commands

forbidden       : [';', '&', '|','`','>','<', '$(', '${']

##  a list of allowed command to use with sudo(8)

#sudo_commands   : ['ls', 'more']

##  number of warnings when user enters a forbidden value before getting 

##  exited from lshell, set to -1 to disable.

warning_counter : 2

##  command aliases list (similar to bash’s alias directive)

aliases         : {'ll':'ls -l', 'vi':'vim'}

##  introduction text to print (when entering lshell)

#intro           : "== My personal intro ==\nWelcome to lshell\nType '?' or 'help' to get the list of allowed commands"

##  configure your promt using %u or %h (default: username)

#prompt          : "%u@%h"

##  a value in seconds for the session timer

#timer           : 5

##  list of path to restrict the user "geographicaly"

#path            : ['/home/bla/','/etc']

##  set the home folder of your user. If not specified the home_path is set to 

##  the $HOME environment variable

#home_path       : '/home/bla/'

##  update the environment variable $PATH of the user

#env_path        : ':/usr/local/bin:/usr/sbin'

##  add environment variables

#env_vars        : {'foo':1, 'bar':'helloworld'}

##  allow or forbid the use of scp (set to 1 or 0)

#scp             : 1

## forbid scp upload

#scp_upload       : 0

## forbid scp download

#scp_download     : 0

##  allow of forbid the use of sftp (set to 1 or 0)

#sftp            : 1

##  list of command allowed to execute over ssh (e.g. rsync, rdiff-backup, etc.)

#overssh         : ['ls', 'rsync']

##  logging strictness. If set to 1, any unknown command is considered as 

##  forbidden, and user's warning counter is decreased. If set to 0, command is

##  considered as unknown, and user is only warned (i.e. *** unknown synthax)

#strict          : 1

##  force files sent through scp to a specific directory

#scpforce        : '/home/bla/uploads/'

##  history file maximum size 

#history_size     : 100

##  set history file name (default is /home/%u/.lhistory)

#history_file     : "/home/%u/.lshell_history"

3.lshell的配置文件详解

配置文件一共有四个小节

[global] -lshell的系统配置(只能有一个)

[default] -lshell的默认用户配置(只能有一个)

[foo] -指定UNIX的系统用户”foo”的特别的配置

[grp:bar] -指定UNIX用户组”bar”的特别的配置

当加载参数的时候遵循以下顺序

1].User configuration

2].Group configuration

3].Default configuration

logpath

日志路径(默认是/var/log/lshell/)

loglevel

日志记录级别,0, 1, 2, 3 or 4 (0: no logs -4: logs everything)

logfilename

如果设置成syslog关键字,则表示日志记录到syslog中

如果设置成一个文件名, e.g. %u-%y%m%d (i.e foo-20091009.log):

%u -username

%d -day [1..31]

%m -month [1..12]

%y -year [00..99]

%h -time [00:00..23:59]

syslogname

如果你打算记录进syslog中,则要设置你的syslog名称,默认是lshell

[default]或者[username]或者[grp:groupname] 三个小节可用的配置项

aliases

命令别名

allowed

一个允许执行的命令列表,或者设置成all,则允许在user PATH中的所有命令可用

allowed_cmd_path

一个路径组成的列表,所有在路径中的可执行文件都被允许

env_path

更新用户的环境变量PATH

env_vars

设置用户的环境变量

forbidden

一个非法字符或者命令组成的列表

history_file

history的文件名,%u -username (e.g. ‘/home/%u/.lhistory’)

history_size

history文件记录的maximum size(in lines)

home_path (deprecated)

默认是$HOME,不赞成使用,下一版会取消。%u -username (e.g. ‘/home/%u’)

intro

在登陆时打印出入门信息

login_script

用户登陆时执行的脚本

passwd

指定用户的密码(默认为空)

path

严格限制用户可以去的系统路径,可以使用通配符(e.g. ‘/var/log/ap*’)

prompt

设置用户的prompt格式(default: username)

%u -username

%h -hostname

scp

允许或者禁止使用scp连接(0禁止、1允许)。

scpforce

强制文件通过scp传输到一个特定目录

scp_download

允许或者禁止使用scp下载(0禁止、1允许)。

scp_upload

允许或者禁止使用scp上传(0禁止、1允许,默认为1)。

sftp

允许或者禁止使用sftp连接(0禁止、1允许)。

sudo_commands

一组命令组成的列表,用户可以执行sudo

timer

会话维持的秒数

strict

日志严格记录,如果设置成1,任何unknow的命令都被禁止,并且降低用户警告数,如果设置成0,unknow命令只是警告。 (i.e. *** unknown synthax)

warning_counter

警告次数,如果用户达到该警告次数,则会被强制退出lshell,设置成-1,则禁止计数。

4.lshell下始终可使用的指令:

清屏

clear

打印可用命令

help, ?

打印命令历史

history

列出所有允许和禁止的路径

lpath 

列出所有允许sudo的命令

lsudo

 

lshell实例

1.为了记录用户日志,首先需要创建相关目录

$ groupadd --system lshell

$ mkdir /var/log/lshell

$ chown :lshell /var/log/lshell

$ chmod 770 /var/log/lshell

2.添加test用户

$ useradd test -d /home/test -s /usr/bin/lshell

3.然后增加test用户到lshell group

$ usermod -aG lshell test

4.改变test用户默认shell,使用lshell作为默认shell

$ chsh -s /usr/bin/lshell test

5.修改配置文件让test用户只能使用受限命令

[test]

allowed         : ['ls','echo','cd','ll']      ##允许使用的命令

home_path       : '/home/test'                 ##设置用户的家目录

path            : ['/home/test','/tmp']             ##限制用户的目录

home_path和path注释掉则限制用户只能访问自己的家目录及其子目录。如果需要能访问其他目录,则需要在path中加入相应的目录,当前设置下用户可以访问家目录及其子目录,也可以访问/tmp目录及其子目录,但不能访问这以外的目录,比如/etc。

allowed中添加我们限定用户所能使用的命令,这里限定只能使用ls、echo、cd、ll四个命令。

6.测试登陆

$ ssh test@127.0.0.1                                                    

test@127.0.0.1's password: 

You are in a limited shell.

Type '?' or 'help' to get the list of allowed commands

test:~$

7.命令使用

test:~$ cd /etc

*** forbidden path -> "/etc/"

*** You have 1 warning(s) left, before getting kicked out.

This incident has been reported.

test:~$ touch test.txt

*** unknown command: touch

 

相关主题

Shell脚本学习(Linux命令行)第二章:什么是shell

精选文章
热门文章