覆盖默认的 $PATH

覆盖默认的 $PATH

我正在尝试锁定 Raspbian 安装中的普通用户。我将使用rbash它。

我想编辑 PATH 文件以便只有~/bin文件可以被执行。

我已经剥离$PATH/etc/profile/

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH=""
fi
export PATH

我已经剥离$PATH/etc/login.defs

# cat /etc/login.defs | grep PATH=
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=""

/etc/environment文件是空的:

~ # cat /etc/environment
~ #

本地用户的.profile文件仅包含以下内容:

$ cat .profile
# 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"
fi

运行时效果很好ssh user@host

$ free
-rbash: free: command not found
$ uname
-rbash: uname: command not found
$ echo $PATH
/home/user/bin

但是,当ssh -t user@host bash --noprofile .profile未执行运行时,我仍然可以访问完全正常工作的 $PATH:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games
$ uname
Linux

我这里遗漏了什么?$PATH文件还在哪里定义?

答案1

它是由 sshd 本身设置的:

$ strings /usr/sbin/sshd | grep games
/usr/local/bin:/usr/bin:/bin:/usr/games

下面写道man sshENVIRONMENT

 ssh will normally set the following environment variables:
 (...)
 PATH                  Set to the default PATH, as specified when compiling ssh.

为防止 sshd 将 PATH 设置为默认值

PermitUserEnvironment yes

在 /etc/ssh/sshd_config 中,并在 ~/.ssh/environment 中设置 PATH 的新值,例如

PATH=~/bin

并重新启动 SSH 服务:

sudo service ssh restart

顺便说一句,您可以从 获取所有这些信息man sshd_config

相关内容