Bash – Set default shell as bash for users not in /etc/passwd

active-directorybashcommand line

On my company's Ubuntu 15.10 desktop system, I log in via Active Directory using some magic based upon PBIS. Thus, my user account is not listed in /etc/passwd even though I have a home directory under /home/local/FOOBAR/dotancohen/. How can I configure bash as the shell when there is no /etc/passwd line to edit and so cannot use chsh?

I do have another account on this machine with admin access, so I can configure the system as admin if needed. However, if there is a user-only solution I would prefer that for use in the future when I won't have admin access!

Here are the results of a few key commands, run from opening Gnome Terminal in Unity (the Ubuntu desktop):

$ echo $HOME
/home/local/TECHMARKETING/dotan
$ whoami
FOOBAR\dotancohen
$ grep dotan /etc/passwd
$ grep sourced ~/.profile
echo 'sourced .profile'
$ grep sourced ~/.bashrc
echo "sourced .bashrc"
$ echo $SHELL
/bin/sh
$ echo $TERM
xterm
$ bash
sourced .bashrc
 - dotan-tm():~$ echo $SHELL
/bin/sh
 - dotan-tm():~$ echo $TERM
xterm-256color

As can be seen, both .bashrc and .profile echo when they have been sourced. It seems that .profile is not run when the default shell starts, but .bashrc is run when bash starts. I used this answer to open bash from dash, but since .profile is not run obviously that script is not having any effect.

Here is my complete ~/.profile file for reference:

$ cat .profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.bin" ] ; then
    PATH="$HOME/.bin:$PATH"
fi

xmodmap ~/.Xmodmap

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash" -l
      fi
    fi
esac

echo 'sourced .profile'
$ 

Best Answer

Using PBIS you can define the default shell for all users:

#/opt/pbis/bin/config LoginShellTemplate /bin/bash

This as to be done as root, there is no possibility to change this setting by user or as an unprivileged user. This will be the default shell for all AD users.

Related Question