有些特殊情况下需要实现将系统内普通用户限定在指定目录下,并且只能使用系统管理员设定的命令。lshell就是实现这样功能的一个神器。
lshell提供了一个针对每个用户可配置的限制性shell,lshell的配置文件非常的简单,可以和ssh
的authorized_keys
或者/etc/shell
、/etc/passwd
耦合使用,lshell可以很容易的严格限制用户可以访问哪些命令。
项目地址: https://github.com/ghantoos/lshell
lshell安装
RHEL、CentOS
1 | $ yum install lshell #EPEL源 |
Debian、Ubuntu
1 | $ apt-get install lshell |
lshell使用
- lshell语法格式
1 | $ lshell --help |
- lshell配置
Linux下配置文件为/etc/lshell.conf
1 | # lshell.py configuration file |
- lshell的配置文件详解
配置文件一共有四个小节
[global] -lshell的系统配置(只能有一个)
[default] -lshell的默认用户配置(只能有一个)
[foo] -指定UNIX的系统用户"foo"的特别的配置
[grp:bar] -指定UNIX用户组"bar"的特别的配置当加载参数的时候遵循以下顺序
1.User configuration
2.Group configuration
3.Default configurationlogpath
日志路径(默认是/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
更新用户的环境变量PATHenv_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 -hostnamescp
允许或者禁止使用scp连接(0禁止、1允许)。scpforce
强制文件通过scp传输到一个特定目录scp_download
允许或者禁止使用scp下载(0禁止、1允许)。scp_upload
允许或者禁止使用scp上传(0禁止、1允许,默认为1)。sftp
允许或者禁止使用sftp连接(0禁止、1允许)。sudo_commands
一组命令组成的列表,用户可以执行sudotimer
会话维持的秒数strict
日志严格记录,如果设置成1,任何unknow的命令都被禁止,并且降低用户警告数,如果设置成0,unknow命令只是警告。 (i.e. *** unknown synthax)warning_counter
警告次数,如果用户达到该警告次数,则会被强制退出lshell,设置成-1,则禁止计数。
- lshell下始终可使用的指令
1 | 清屏 |
lshell实例
为了记录用户日志,首先需要创建相关目录
1 | $ groupadd --system lshell |
添加test用户
1 | $ useradd test -d /home/test -s /usr/bin/lshell |
然后增加test用户到lshell group
1 | $ usermod -aG lshell test |
改变test用户默认shell,使用lshell作为默认shell
1 | $ chsh -s /usr/bin/lshell test |
修改配置文件让test用户只能使用受限命令
1 | [test] |
home_path
和path
注释掉则限制用户只能访问自己的家目录及其子目录。如果需要能访问其他目录,则需要在path中加入相应的目录,当前设置下用户可以访问家目录及其子目录,也可以访问/tmp
目录及其子目录,但不能访问这以外的目录,比如/etc
。
allowed
中添加我们限定用户所能使用的命令,这里限定只能使用ls
、echo
、cd
、ll
四个命令。
测试登陆
1 | $ ssh test@127.0.0.1 |
命令使用
1 | test:~$ cd /etc |
参考文档
http://www.google.com
https://github.com/ghantoos/lshell
http://m.oschina.net/blog/337374