問題ID: 14708
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID: 14708
msg# 1
ゲスト
投稿数: 0
ユーザおよびグループのsshアクセス制限について以下のような説明がされていましたので、実際に試してみました。
--------------------------------------
DenyUsers、AllowUsers、DenyGroups、AllowGroupsの順に処理されます。
--------------------------------------
試した内容:
1. ユーザtest2をグループtest2に所属させておく。
2. /etc/ssh/sshd_configを次のように設定
AllowUsers test2
DenyGroups test2
3. ユーザtest2でログインできるか確認
上記説明の順序で処理されるならば、test2はログインできるはずですが、実際はできませんでした。
正しくはDenyUsersおよびDenyGroups、AllowUsersおよびAllowGroupsの順番で処理されるのではないでしょうか。
(参考資料) つねに「許可」よりも「禁止」が優先する
http://www.unixuser.org/~euske/doc/openssh/book/chap5.html
--------------------------------------
DenyUsers、AllowUsers、DenyGroups、AllowGroupsの順に処理されます。
--------------------------------------
試した内容:
1. ユーザtest2をグループtest2に所属させておく。
2. /etc/ssh/sshd_configを次のように設定
AllowUsers test2
DenyGroups test2
3. ユーザtest2でログインできるか確認
上記説明の順序で処理されるならば、test2はログインできるはずですが、実際はできませんでした。
正しくはDenyUsersおよびDenyGroups、AllowUsersおよびAllowGroupsの順番で処理されるのではないでしょうか。
(参考資料) つねに「許可」よりも「禁止」が優先する
http://www.unixuser.org/~euske/doc/openssh/book/chap5.html
Re: 問題ID: 14708
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
引用:あー…
これハマるんですよねぇ。
まず、sshd_configのmanページからですが
引用:あくまで「processed in the following order(以下の順に処理されます)」なんですよね。
で、ackey1112さんと似たような認識で「ドキュメントバグだ!」ってopenssh-unix-devメーリングリストにPATCH投げた人がいるんですが
[PATCH] document evaluation of {Allow|Deny}{Users|Groups}
https://lists.mindrot.org/pipermail/openssh-unix-dev/2015-February/033465.html
引用:ばっさり切り捨てられてるんですね
https://lists.mindrot.org/pipermail/openssh-unix-dev/2015-February/033485.html
引用:
じゃーmanは正しいのか?ってことでopenssh-6.8p1のソース見てみたら、auth.cの88行目からのint allowed_user(struct passwd * pw)でここの判定がされてるみたいです。false(数字の0)が返却されたら許可されてないユーザーだとみなすという。
実際の判定は189行目からで、
・DenyUsersに書いてあるユーザーとマッチしたらfalse
・AllowUsersになんか書いてあるけどそこに書いてあるユーザーにマッチしなかったらfalse
213行目からはグループ判定で、DenyGroupsかAllowGroupsのどっちかが設定されてる時に
・DenyGroups, AllowGroupsどっちのグループにも所属してなかったらfalse(不明なのは拒否)
・DenyGroupsに書いてあるグループに所属してたらfalse
・AllowGroupsになんか書いてあるけど、ユーザーのどの所属グループもそこに書いてあるグループにマッチしなかったらfalse
で、そこを全部パスして252行目に来ると
引用:ってことで、ちゃんとmanにある通り
DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups
の順に処理されてるんですね。で、Denyする理由がなかったら許可されると。
「Denyに書いてあったらその意図の通りDenyするよ!」ってことは間違いないです。でも解説にある順番も、公式manページ通り間違ってないです。
ややこしー
正しくはDenyUsersおよびDenyGroups、AllowUsersおよびAllowGroupsの順番で処理されるのではないでしょうか。
これハマるんですよねぇ。
まず、sshd_configのmanページからですが
引用:
AllowGroups
This keyword can be followed by a list of group name patterns, separated by spaces. If speci‐
fied, login is allowed only for users whose primary group or supplementary group list matches
one of the patterns. Only group names are valid; a numerical group ID is not recognized. By
default, login is allowed for all groups. The allow/deny directives are processed in the fol‐
lowing order: DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.
で、ackey1112さんと似たような認識で「ドキュメントバグだ!」ってopenssh-unix-devメーリングリストにPATCH投げた人がいるんですが
[PATCH] document evaluation of {Allow|Deny}{Users|Groups}
https://lists.mindrot.org/pipermail/openssh-unix-dev/2015-February/033465.html
引用:
From: Christoph Anton Mitterer <mail at christoph.anton.mitterer.name>
• Document what the evaluation order of AllowUsers, DenyUsers, AllowGroups and
DenyGroups actually means.
Fixes bug #2292.
(略)
https://lists.mindrot.org/pipermail/openssh-unix-dev/2015-February/033485.html
引用:
> +The first one that matches determines whether the login is allowed or
> +denied, with the later processed directives being ignored.
This is actually not true. You can specify {Allow|Deny}{Users|Groups}
multiple times and all of the rows are applied.
超意訳)
全然合ってないし。どこに書いても何回書いても有効だから。
じゃーmanは正しいのか?ってことでopenssh-6.8p1のソース見てみたら、auth.cの88行目からのint allowed_user(struct passwd * pw)でここの判定がされてるみたいです。false(数字の0)が返却されたら許可されてないユーザーだとみなすという。
実際の判定は189行目からで、
・DenyUsersに書いてあるユーザーとマッチしたらfalse
・AllowUsersになんか書いてあるけどそこに書いてあるユーザーにマッチしなかったらfalse
213行目からはグループ判定で、DenyGroupsかAllowGroupsのどっちかが設定されてる時に
・DenyGroups, AllowGroupsどっちのグループにも所属してなかったらfalse(不明なのは拒否)
・DenyGroupsに書いてあるグループに所属してたらfalse
・AllowGroupsになんか書いてあるけど、ユーザーのどの所属グループもそこに書いてあるグループにマッチしなかったらfalse
で、そこを全部パスして252行目に来ると
引用:
/* We found no reason not to let this user try to log on... */
(超意訳)
ログオンしにきたやつを拒否する理由がねぇよ…
return 1; ←True返却=このユーザーはログインできる
DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups
の順に処理されてるんですね。で、Denyする理由がなかったら許可されると。
「Denyに書いてあったらその意図の通りDenyするよ!」ってことは間違いないです。でも解説にある順番も、公式manページ通り間違ってないです。
ややこしー