LShell or Limited Shell is written in python for limiting user for specific set of commands and directories. You can create user environment with limited access, you can also enable disable commands over SSH access.

Advertisement

Install Limited Shell

Use the following command to install LShell package on your Debian based system. For other operating system, You need to Google for package of lshell for your distribution.

$ sudo apt-get install lshell

Switch User to LShell

Now set the LShell as default shell for users for which you are required. For example to change the shell of user sarah.

$ sudo chsh sarah

Changing the login shell for sarah
Enter the new value, or press ENTER for the default
	Login Shell [/bin/lshell]: /usr/bin/lshell 

You may also set the lshell as default shell for user during creation of user account as following.

$ sudo adduser --shell /usr/bin/lshell raj

Configure LShell

Now start with the configuration of lshell. Edit lshell configuration file /etc/lshell.conf. There are 4 basic sections in configuration file.

  • [global] : In this section we defines the settings which applied globally. For example logs.
  • [default] : In this section we set default values which applied all users and groups. The settings of this section can be overridden with user and group specific settings.
  • [USERNAME] : In this section we specify user specific settings. This section settings applied to user only
  • [grp:GROUPNAME] : In this section we specify group specific settings. This section settings applied to all users of group

A [default] profile is applied for all users using lshell. You can create [username] section or a group [grp:groupname] section to customize users and group specific preferences.

The priority order is User >> Group >> Default. User section has highest priority and Default has lowest priority.

[global]
logpath         : /var/log/lshell/
loglevel        : 2

[default]
allowed         : ['ls','pwd','cd','cat','cp']
forbidden       : [';', '&', '|','`','>','[grp:wheel]
warning_counter : 5
overssh         : - ['ls']

[raj]
allowed         : 'all' - ['su','rm','mv']
path            : ['/etc', '/usr'] - ['/usr/local']
home_path       : '/home/raj'

[sarah]
allowed         : + ['ping'] - ['ls']
path            : - ['/usr/local']
strict          : 1
scpforce        : '/home/sarah/uploads/'

For example User ‘rja’ and user ‘sarah’ both belong to the ‘wheel’ UNIX group:
Group wheel:

  • Users of wheel group has a warning counter set to 5
  • Users of wheel group is not allowed ‘ls’ command.

User raj:

  • Can access /etc and /var but not /usr/local
  • Can access all commands in his PATH execpt commands – su, rm, vm
  • has a warning counter set to 5 [default]
  • has his home path set to ‘/home/raj’

User sarah:

  • Can access /home and /usr but not /usr/local
  • is allowed default command ‘ping’ but not ‘ls’
  • strictness is set to 1 (he is not allowed to type an unknown command)
Option nameExplanation
logpathlog directory (default /var/log/lshell/ )
loglevelset log level to 0, 1, 2, 3 or 4 (0: no logs, 1: least verbose, 4: log all commands)
logfilenameconfigure log file name (default is %u i.e. username.log)
allowedlist of the allowed commands or ‘all’ to allow all commands in user’s PATH
forbiddena list of forbidden character or commands — deny vim, as it allows to escape lshell
sudo_commandsa list of allowed command to use with sudo(8)
warning_counternumber of warnings when user enters a forbidden value before getting exited from lshell, set to -1 to disable.
aliasescommand aliases list (similar to bash’s alias directive)
introintroduction text to print (when entering lshell)
promptconfigure your promt using %u or %h (default: username)
prompt_shortset sort prompt current directory update (default: 0)
timera value in seconds for the session timer
pathlist of path to restrict the user “geographicaly”
home_pathset the home folder of your user
env_pathset the environment variable $PATH of the user
allowed_cmd_patha list of path; all executable files inside these path will be allowed
env_varsadd environment variables
scpallow or forbid the use of scp (set to 1 or 0)
scp_uploadforbid scp upload
scp_downloadforbid scp download
sftpallow of forbid the use of sftp (set to 1 or 0)
oversshlist of command allowed to execute over ssh
strictlogging strictness. 1 for any unknown command is considered as forbidden and 0 as unknown
scpforceforce files sent through scp to a specific directory
history_sizehistory file maximum size
history_fileset history file name (default is /home/%u/.lhistory)
login_scriptdefine the script to run at user login
Share.

3 Comments

Reply To A.M Cancel Reply


Exit mobile version