筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2011-05-25
■ net/xrdp でログイン名が正しくセットされない問題の修正パッチ
FreeBSDで net/xrdp (xrdp-0.6.0.20110117cvs)を使用していると、ログイン名が正しくセットされず、以下の例のようにMySQLなどのアプリケーションで問題になる場合があります。
[meta@rose ~]$ mysql Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
この例では、ユーザ 'meta' でログインしているのに mysql が 'root' でログインしようとしてしまい、期待した動作をさせるためには mysql -u `whoami` などのオプションを付ける必要があります。この原因は `id -p` などを実行してみるとわかります。
[meta@rose ~]$ id -p login root uid meta groups meta
id コマンドの出力を見ると login が root になっています。ユーザ名の取得に getlogin() システムコールを使用しているため、setsid()/setlogin() によって正しくログインセッションが定義されていないと FreeBSD-SA-02:07.k5su や mysql などのアプリケーションで問題になります。これは xrdp がもともと setlogin() システムコールの存在しない Linux で開発されていたために、FreeBSD 上で xrdp を実行する際に顕在化する問題です。
FreeBSD-SA-02:07.k5su で言及されているように、getlogin() はプロセスを実行するユーザ名と異なるログイン名を返してしまう場合があるため、値のチェックなしで使用するべきではないのですが、ログインセッションを生成しない xrdp-sesman にも問題があります。
この問題を解決するため、xrdp-sesman がウィンドウマネージャを起動する際に新たなログインセッションを生成するように修正するパッチを作成しました。このパッチは OpenSSH のコードを利用しているため、OpenSSH のライセンスに従ってライセンスされています。
パッチは既にPR済なので、近いうちに Ports tree へコミットされるでしょう。
2011年10月27日 追記
このパッチにはバグがあったため、修正版のパッチを submit しました。 詳しくは 10月27日の記事を参照してください。