[Bug 920749] Re: pam configuration for SSH prevents LANG override

Jeremy Kitchen 920749 at bugs.launchpad.net
Wed Jun 10 07:32:50 UTC 2020


I feel like this setup violates the principle of least surprise.

As a user, sshing into a machine, I have my ssh client configured to
SendEnv LC_* and LANG. Awesome. Look, /etc/ssh/sshd_config, the server
is even accepting these in its default configuration! Except some
setting that I *personally* never would have thought of in pam
configuration, completely outside of the control of a mere mortal (read:
non-root user) comes in and sets the locale to whatever the person who
set up the machine originally configured. And I have no real control
over it.

I do recognize the issue raised when there's a difference in
client/server locale meanings (my en_US is your en_US.utf8 I think is
one someone mentioned), but I feel like that's solveable on the client
side by specifying different values to be sent for those variables in
their ssh configuration (SetEnv option)

Even the ssh_config manpage specifies that...

> the Debian openssh-client package sets several options as standard in /etc/ssh/ssh_config which are not the default in ssh(1):
> * SendEnv LANG LC_*

So why would it then have a default configuration to stomp all over
those environment variables?

Am I missing something? I'm not even a non-english user, I was just
trying to figure out why emacs when I ssh in shows \u2505 instead of a
fancy pipe character, but when I use mosh it works fine, and fell down
this rabbit hole :)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to openssh in Ubuntu.
https://bugs.launchpad.net/bugs/920749

Title:
  pam configuration for SSH prevents LANG override

Status in portable OpenSSH:
  Confirmed
Status in openssh package in Ubuntu:
  Triaged
Status in openssh package in Debian:
  Confirmed

Bug description:
  The default /etc/pam.d/sshd configuration has:

  # Read environment variables from /etc/environment and
  # /etc/security/pam_env.conf.
  #auth       required     pam_env.so # [1]
  # In Debian 4.0 (etch), locale-related environment variables were moved to
  # /etc/default/locale, so read that as well.
  auth       required     pam_env.so envfile=/etc/default/locale

  The default SSH client configuration has "Send LC_*" and the default
  SSH server configuration has "Accept LC_*". The PAM configuration
  prevents any user-overrides for locale settings.

  For example, if /etc/default/locale has:
  LANG=en_US.UTF-8
  LC_COLLATE=C

  Then running "LANG=zh_SG.utf8 LC_COLLATE=en_US.UTF-8 ssh myspecialhost.foo.bar.com" yields:
  ubuntu at ip-10-12-15-243:~$ locale
  LANG=en_US.UTF-8
  LC_COLLATE=C
  (output truncated for clarity)

  While having a blank /etc/default/locale yeilds:
  ubuntu at ip-10-12-15-243:~$ locale
  locale: Cannot set LC_ALL to default locale: No such file or directory
  LANG=zh_SG.utf8
  LC_COLLATE=en_US.UTF-8
  (output truncated for clarity)

  I think, although I am not sure, that this is a bug with the default
  configuration. It means that in order for server to accept multple
  languages or LC_* bindings, the system locale default would have to be
  unset. Effectively this is forcing the system default on all users.

To manage notifications about this bug go to:
https://bugs.launchpad.net/openssh/+bug/920749/+subscriptions



More information about the foundations-bugs mailing list