Ubuntu GNU/Linux 12.04では、johndoe
グループの一部であるsftponly
というユーザーがいます。sftp
をchroot
jailに設定すると、
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
/etc/ssh/ssh_config
の末尾。ユーザーのhome
ディレクトリのすべてのコンポーネントは、root
が所有するディレクトリであり、man sshd_config
(ChrootDirectory
の下)で説明されているように、他のユーザーまたはグループは書き込みできません。彼のchroot
刑務所の中に、書き込み可能なディレクトリfiles
があります:
Sudo groupadd sftponly
Sudo mkdir -p /home/sftponly/johndoe/files
Sudo useradd -d /home/sftponly/johndoe -g sftponly -s /usr/sbin/nologin johndoe
Sudo chmod go-w /home/sftponly/{,johndoe}
Sudo chown johndoe:sftponly /home/sftponly/johndoe/files
Sudo chmod ug+rwX /home/sftponly/johndoe/files
(シェルを/bin/false
に設定すると、ssh
もsftp
も機能しませんでした。nologin
をシェルとして使用すると、ssh
が接続し、「MOTD」を表示してから切断します。これは、予期される動作です。)
しかし、sftp
はReceived message too long 1416128883
というメッセージで失敗します。 sftp
が「クリーンなログイン」を期待しているため、この失敗の原因は「MOTD」(今日のメッセージ)であることを知っています。 (これらの結果)で、以下を使用してサーバー上のすべての「MOTD」部分を無効にしてみました:
PrintLastLog no
の最後にPrintMotd no
と/etc/ssh/ssh_config
を追加し、restart ssh
を使用してssh
を再起動します。 (影響なし。ssh
を使用したテストでは、「MOTD」と「最終ログイン:」の両方が表示されます。)
session optional pam_motd.so
の/etc/pam.d/sshd
をコメント化しています。 (MOTDを防ぐ。ただし、「LastLog」に対応するエントリがないため、ssh
、 "Last Login:"を使用したテストは引き続き表示されるため、sftp
はまだ失敗します。)
session optional pam_lastlog.so
のsession optional pam_motd.so
と/etc/pam.d/login
をコメント化します。 (影響なし。ssh
を使用したテストでは、MOTDと「最終ログイン:」の両方が表示されます。)
.hushlogin
を使用して、クライアントでtouch ~/.hushlogin
ファイルを作成します。 (効果なし。)
アイデアが足りません。この「最終ログイン:」メッセージがどこから送信され、どのようにして無効にできるか(理想的には、sftp
の場合のみで、ssh
のログインの場合はできませんが、sftp
がssh
を使用していると想像すると、メッセージは両方またはどちらかに表示されますなし)?
私の誤植は、私が上で経験している不合理な行動の原因でした。編集する必要があるのは/etc/ssh/sshd_config
(ssh
デーモンに対応)であり、/etc/ssh/ssh_config
(ssh
クライアントに対応)ではありません。他の人の役に立つかもしれないので、この質問はここに残します。
私が使用するスクリプトで/ etc/motdをフィルタリングするために(この例はプログラムgit用です)git pull 2>&1 | grep -vF -f ~/bin/remote.motd | egrep -v "^$|^ $"
ファイル〜/ bin/remote.motdは、リモートシステムから提供されたmotdのコピーと貼り付けです。
/ var/log/lastlogを削除しましたが、「最終ログイン」メッセージが永久に消えてしまいました。私がテストしたすべてのディストリビューション、UbuntuとSUSEで動作しました。
どのようにしてこのアイデアを思いついたのですか?
どのログイン strings/bin/login |最後のgrep
私のシステムでは、Pamからのものです。
/etc/pam.d/postlogin
正確に。
既存の行をコメント化して追加することにより、メッセージを取り除きました:
session optional pam_lastlog.so silent