lshell构建受限bash

       有时候想限制用户登陆系统后在shell中能使用的系统命令,普通的bash没有这些定制功能,听说360自己定制了bash,无奈咱暂时没那功底啊,不过前段时间偶然发现了lshell这个东西,是从free bsd上移植过来的,看了一下功能,完全就是我想要的东西啊,下面具体介绍一下这个东西怎么用

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

下面看看lshell的使用方法:

OPTIONS

       --config <FILE>
              指定配置文件
       --log <DIR>
              指定日志目录
       --<param> <value>
              param可以是配置文件中的任何一个参数
       -h, --help
              显示帮助信息
       --version

              显示版本信息


CONFIGURATION

       你也可以在配置文件中对lshell进行配置:
              On Linux -> /etc/lshell.conf
       lshell的配置文件有四个小节:
              [global] -> lshell的系统配置 (only 1)
              [default] -> lshell的默认用户配置 (only 1)
              [foo] -> 指定UNIX的系统用户"foo"的特别的配置
              [grp:bar] -> 指定UNIX用户组"bar"的特别的配置
       当加载参数的时候遵循以下顺序:
              1- User configuration
              2- Group configuration

              3- Default configuration

    [global]
       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 
              指定用户的密码 (default is empty)
       path 
             严格限制用户可以去的地理位置,可以使用通配符list of path to restrict the user geographically. It is possible to use wildcards (e.g. '/var/log/ap*').
       prompt 
             设置用户的prompt格式(default: username)
                  %u -> username
                  %h -> hostname
       prompt_short
              set sort prompt current directory update - set to 1 or 0 overssh list of command allowed to execute over ssh (e.g. rsync, rdiff-
              backup, scp, etc.)
       scp 
              允许或者禁止使用scp连接 - set to 1 or 0
       scpforce
              强制文件通过scp传输到一个特定目录
       scp_download
              设置成0,则禁止scp下载(default is 1)
       scp_upload
              设置成0,则禁止scp上传(default is 1)
       sftp 
             允许或者禁止使用sftp连接 - set to 1 or 0
       sudo_commands
              一组命令组成的列表,用户可以执行sudo 
       timer 
               会话维持的秒数
       strict 
                日志严格记录,如果设置成1,任何unknow的命令都被禁止,并且降低用户警告数,如果设置成0,unknow命令只是警告。 (i.e. *** unknown synthax) 
       warning_counter

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

SHELL BUILTIN COMMANDS

       下面是一些lshell始终可用的命令:
       clear 
             清屏
       help, ?
              打印可用命令
       history
              打印命令历史
       lpath 
               列出所有允许和禁止的路径
       lsudo 

                列出所有允许sudo的命令

EXAMPLES

       $ lshell
             default ${PREFIX}/etc/lshell.conf as configuration file.
       $ lshell --config /path/to/myconf.file --log /path/to/mylog.log
             

USE CASE

       User foo:
               - must be able to access /usr and /var but not /usr/local
               - user all command in his PATH but 'su'
               - has a warning counter set to 5
               - has his home path set to '/home/users'
       User bar:
               - must be able to access /etc and /usr but not /usr/local
               - is allowed default commands plus 'ping' minus 'ls'
               - strictness is set to 1 (meaning he is not allowed to type an unknown command)
       In this case, my configuration file will look something like this:
              # CONFIURATION START
              [global]
              logpath : /var/log/lshell/
              loglevel : 2
              [default]
              allowed : ['ls','pwd']
              forbidden : [';', '&', '|']
              warning_counter : 2
              timer : 0
              path : ['/etc', '/usr']
              env_path : ':/sbin:/usr/bin/'
              scp : 1 # or 0
              sftp : 1 # or 0
              overssh : ['rsync','ls']
              aliases : {'ls':'ls --color=auto','ll':'ls -l'}
              [grp:users]
              warning_counter : 5
              overssh : - ['ls']
              [foo]
              allowed : 'all' - ['su']
              path : ['/var', '/usr'] - ['/usr/local'] 
              home_path : '/home/users'
              [bar]
              allowed : + ['ping'] - ['ls']
              path : - ['/usr/local']
              strict : 1
              scpforce : '/home/bar/uploads/'
             

NOTES

       为了记录用户日志,需要创建相关目录
              # addgroup --system lshell
              # mkdir /var/log/lshell
              # chown :lshell /var/log/lshell
              # chmod 770 /var/log/lshell
       然后增加用户到lshell group:
              # usermod -aG lshell user_name
      改变用户默认shell,使用lshell作为默认shell:
              On Linux:
              # chsh -s /usr/bin/lshell user_name


转载于:https://my.oschina.net/guol/blog/337374

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值