Debian

覆蓋預設 $PATH

  • February 28, 2021

我試圖在 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定義?

它由 sshd 自己設置:

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

在它man ssh下面ENVIRONMENT說:

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.

引用自:https://serverfault.com/questions/1055181