Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0
suEXEC 機能ã«ã‚ˆã‚Šã€Apache ユーザ㯠Web サーãƒã‚’実行ã—ã¦ã„るユーザ ID ã¨ã¯ ç•°ãªã‚‹ãƒ¦ãƒ¼ã‚¶ ID ã§ CGI プãƒã‚°ãƒ©ãƒ ã‚„ SSI プãƒã‚°ãƒ©ãƒ を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚CGI プãƒã‚°ãƒ©ãƒ ã¾ãŸã¯ SSI プãƒã‚°ãƒ©ãƒ を実行ã™ã‚‹å ´åˆã€é€šå¸¸ã¯ web サーãƒã¨åŒã˜ãƒ¦ãƒ¼ã‚¶ã§å®Ÿè¡Œã•れã¾ã™ã€‚
é©åˆ‡ã«ä½¿ç”¨ã™ã‚‹ã¨ã€ã“ã®æ©Ÿèƒ½ã«ã‚ˆã‚Šãƒ¦ãƒ¼ã‚¶ãŒå€‹åˆ¥ã® CGI ã‚„ SSI プãƒã‚°ãƒ©ãƒ を開発ã—実行ã™ã‚‹ã“ã¨ã§ç”Ÿã˜ã‚‹ã‚»ã‚ュリティ上ã®å±é™ºã‚’〠ã‹ãªã‚Šæ¸›ã‚‰ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€suEXEC ã®è¨å®šãŒä¸é©åˆ‡ã ã¨ã€ 多ãã®å•題ãŒç”Ÿã˜ã€ã‚ãªãŸã®ã‚³ãƒ³ãƒ”ãƒ¥ãƒ¼ã‚¿ã«æ–°ã—ã„ã‚»ã‚ュリティホールを 作ã£ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã‚ãªãŸãŒ setuid root ã•れãŸãƒ—ãƒã‚°ãƒ©ãƒ ã¨ã€ãれらã‹ã‚‰ç”Ÿã˜ã‚‹ã‚»ã‚ュリティ上ã®å•題ã®ç®¡ç†ã« 詳ã—ããªã„よã†ãªã‚‰ã€suEXEC ã®ä½¿ç”¨ã‚’検討ã—ãªã„よã†ã«å¼·ã推奨ã—ã¾ã™ã€‚
ã“ã®æ–‡æ›¸ã®å…ˆé ã«é£›ã¶å‰ã«ã€Apache グループã¨ã“ã®æ–‡æ›¸ã§ã®ä»®å®šã‚’知ã£ã¦ãŠãã¹ãã§ã—ょã†ã€‚
第 1 ã«ã€ã‚ãªãŸãŒ setuid 㨠setgid æ“作ãŒå¯èƒ½ãª UNIX ç”±æ¥ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ を使ã£ã¦ã„ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚ ã“れã¯ã€ã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ä¾‹ã«ã‚ã¦ã¯ã¾ã‚Šã¾ã™ã€‚ ãã®ä»–ã®ãƒ—ラットホームã§ã¯ã€ã‚‚ã— suEXEC ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãŸã¨ã—ã¦ã‚‚è¨å®šã¯ç•°ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
第 2 ã«ã€ã‚ãªãŸãŒä½¿ç”¨ä¸ã®ã‚³ãƒ³ãƒ”ュータ㮠セã‚ュリティã«é–¢ã™ã‚‹åŸºæœ¬çš„ãªæ¦‚念ã¨ã€ãれらã®ç®¡ç†ã«ã¤ã„ã¦è©³ã—ã„ã“ã¨ã‚’ 想定ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€setuid/setgid æ“作ã€ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ 上ã§ã®ãã®æ“作ã«ã‚ˆã‚‹æ§˜ã€…ãªåŠ¹æžœã€ ã‚»ã‚ュリティレベルã«ã¤ã„ã¦ã‚ãªãŸãŒç†è§£ã—ã¦ã„ã‚‹ã¨ã„ã†ã“ã¨ã‚’å«ã¿ã¾ã™ã€‚
第 3 ã«ã€æ”¹é€ ã•れã¦ã„ãªã„ suEXEC コードã®ä½¿ç”¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚suEXEC ã®ã‚³ãƒ¼ãƒ‰ã¯ã€ 多ãã®ãƒ™ãƒ¼ã‚¿ãƒ†ã‚¹ã‚¿ã ã‘ã§ãªãã€é–‹ç™ºè€…ã«ã‚ˆã£ã¦ã‚‚æ³¨æ„æ·±ã精査ã•れ テストã•れã¦ã„ã¾ã™ã€‚ãã‚Œã‚‰ã®æ³¨æ„ã«ã‚ˆã‚Šã€ç°¡æ½”ã§ä¿¡é ¼ã§ãる安全㪠コードã®åŸºç›¤ãŒä¿è¨¼ã•れã¾ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’改変ã™ã‚‹ã“ã¨ã§ã€ 予期ã•れãªã„å•題や新ã—ã„ã‚»ã‚ュリティ上ã®å±é™ºãŒç”Ÿã˜ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ ã‚»ã‚ュリティプãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®è©³ç´°ã«é€šã˜ã¦ã„ã¦ã€ ä»Šå¾Œã®æ¤œè¨Žã®ãŸã‚ã«æˆæžœã‚’ Apache グループã¨å…±æœ‰ã—よã†ã¨æ€ã†ã®ã§ãªã‘れã°ã€suEXEC コードã¯å¤‰ãˆãªã„ã“ã¨ã‚’ å¼·ãæŽ¨å¥¨ã—ã¾ã™ã€‚
第 4 ã«ã€ã“ã‚ŒãŒæœ€å¾Œã§ã™ãŒã€suEXEC ã‚’ Apache ã®ãƒ‡ãƒ•ォルトインストールã«ã¯å«ã‚ãªã„ã“ã¨ãŒ Apache ã‚°ãƒ«ãƒ¼ãƒ—ã§æ±ºå®šã•れã¦ã„ã¾ã™ã€‚ã“れã¯ã€suEXEC ã®è¨å®šã«ã¯ç®¡ç†è€…ã®è©³ç´°ã«ã‚ãŸã‚‹æ…Žé‡ãªæ³¨æ„ãŒå¿…è¦ã ã‹ã‚‰ã§ã™ã€‚ suEXEC ã®æ§˜ã€…ãªè¨å®šã«ã¤ã„ã¦æ¤œè¨ŽãŒçµ‚ã‚れã°ã€ç®¡ç†è€…㯠suEXEC を通常ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“れらã®è¨å®šå€¤ã¯ã€suEXEC 機能ã®ä½¿ç”¨ä¸ã«ã‚·ã‚¹ãƒ†ãƒ ã‚»ã‚ュリティをé©åˆ‡ã«ä¿ã¤ãŸã‚ã«ã€ 管ç†è€…ã«ã‚ˆã£ã¦æ…Žé‡ã«æ±ºå®šã•れ指定ã•れるã“ã¨ãŒå¿…è¦ã§ã™ã€‚ ã“ã®è©³ç´°ãªæ‰‹é †ã«ã‚ˆã‚Šã€Apache グループã¯ã€suEXEC ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã¤ã„ã¦ã€æ³¨æ„æ·±ãååˆ†ã«æ¤œè¨Žã—ã¦ãれを使用ã™ã‚‹ã“ã¨ã‚’ 決定ã—ãŸå ´åˆã«é™ã£ã¦ã„ãŸã ããŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
ãれã§ã‚‚進ã¿ã¾ã™ã‹? よã‚ã—ã„。ã§ã¯ã€å…ˆã¸é€²ã¿ã¾ã—ょã†!
suEXEC ã®è¨å®šã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’å§‹ã‚ã‚‹å‰ã«ã€ ã¾ãšå®Ÿè£…ã—よã†ã¨ã—ã¦ã„ã‚‹ã‚»ã‚ュリティモデルã«ã¤ã„ã¦è«–ã˜ã¦ãŠãã¾ã™ã€‚ ãれã«ã¯ã€suEXEC ã®å†…部ã§è¡Œãªã‚れã¦ã„ã‚‹ã“ã¨ã€ システムã®ã‚»ã‚ュリティをä¿è¨¼ã™ã‚‹ãŸã‚ã«è¦å‘Šã•れるã“ã¨ã‚’ よãç†è§£ã—ã¦ãŠã„ãŸæ–¹ãŒã‚ˆã„ã§ã—ょã†ã€‚
suEXEC ã¯ã€Apache web サーãƒã‹ã‚‰å‘¼ã³å‡ºã•れる setuid ã•れ㟠"wrapper" プãƒã‚°ãƒ©ãƒ ãŒåŸºæœ¬ã¨ãªã£ã¦ã„ã¾ã™ã€‚è¨è¨ˆã—㟠CGIã€ã¾ãŸã¯ SSI プãƒã‚°ãƒ©ãƒ ã¸ã® HTTP リクエストãŒã‚ã‚‹ã¨ã€ã“ã® wrapper ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚ã‚‹ã¨ã€Apache ã¯ãã®ãƒ—ãƒã‚°ãƒ©ãƒ ãŒå®Ÿè¡Œã•れる際ã®ãƒ—ãƒã‚°ãƒ©ãƒ åã¨ãƒ¦ãƒ¼ã‚¶ ID ã¨ã‚°ãƒ«ãƒ¼ãƒ— ID を指定ã—㦠suEXEC wrapper を実行ã—ã¾ã™ã€‚
ãれã‹ã‚‰ã€wrapper ã¯æˆåŠŸã¾ãŸã¯å¤±æ•—を決定ã™ã‚‹ãŸã‚ 以下ã®å‡¦ç†ã‚’行ãªã„ã¾ã™ã€‚ã“れらã®çŠ¶æ…‹ã®ã†ã¡ä¸€ã¤ã§ã‚‚失敗ã—ãŸå ´åˆã€ プãƒã‚°ãƒ©ãƒ ã¯å¤±æ•—ã‚’ãƒã‚°ã«è¨˜éŒ²ã—ã¦ã‚¨ãƒ©ãƒ¼ã§çµ‚了ã—ã¾ã™ã€‚ ãã†ã§ãªã‘れã°ã€å¾Œã®å‡¦ç†ãŒç¶šã‘られã¾ã™ã€‚
ã“れã¯ã€wrapper を実行ã—ã¦ã„るユーザ㌠本当ã«ã‚·ã‚¹ãƒ†ãƒ ã®åˆ©ç”¨è€…ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã§ã™ã€‚
wrapper ã¯é©åˆ‡ãªæ•°ã®å¼•æ•°ãŒä¸Žãˆã‚‰ã‚ŒãŸå ´åˆã«ã®ã¿å®Ÿè¡Œã•れã¾ã™ã€‚ é©åˆ‡ãªå¼•æ•°ã®ãƒ•ォーマット㯠Apache Web サーãƒã«è§£é‡ˆã•れã¾ã™ã€‚ é©åˆ‡ãªæ•°ã®å¼•æ•°ã‚’å—ã‘å–らãªã‘れã°ã€æ”»æ’ƒã‚’ã•れãŸã‹ ã‚ãªãŸã® Apache ãƒã‚¤ãƒŠãƒªã® suEXEC ã®éƒ¨åˆ†ãŒ ã©ã“ã‹ãŠã‹ã—ã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
ã“ã®ãƒ¦ãƒ¼ã‚¶ã¯ wrapper 実行を許å¯ã•れãŸãƒ¦ãƒ¼ã‚¶ã§ã™ã‹? ãŸã 一人ã®ãƒ¦ãƒ¼ã‚¶ (Apache ユーザ) ã ã‘ãŒã€ ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œã‚’許å¯ã•れã¾ã™ã€‚
対象㮠CGI, SSI プãƒã‚°ãƒ©ãƒ ㌠'/' ã‹ã‚‰å§‹ã¾ã‚‹ã€ã¾ãŸã¯
'..' ã«ã‚ˆã‚‹å‚照を行ãªã£ã¦ã„ã¾ã™ã‹? ã“れらã¯è¨±å¯ã•れã¾ã›ã‚“。
対象ã®ãƒ—ãƒã‚°ãƒ©ãƒ 㯠suEXEC ã®ãƒ‰ã‚ュメントルート
(下記㮠--with-suexec-docroot=DIR
ã‚’å‚ç…§)
内ã«å˜åœ¨ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
対象ã¨ãªã‚‹ãƒ¦ãƒ¼ã‚¶åã¯å˜åœ¨ã—ã¦ã„ã¾ã™ã‹?
対象ã¨ãªã‚‹ã‚°ãƒ«ãƒ¼ãƒ—åã¯å˜åœ¨ã—ã¦ã„ã¾ã™ã‹?
今ã®ã¨ã“ã‚ã€suEXEC 㯠root
ã«ã‚ˆã‚‹ CGI/SSI
プãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œã‚’許å¯ã—ã¦ã„ã¾ã›ã‚“。
最å°ãƒ¦ãƒ¼ã‚¶ ID 番å·ã¯è¨å®šæ™‚ã«æŒ‡å®šã•れã¾ã™ã€‚ã“れã¯ã€ CGI/SSI プãƒã‚°ãƒ©ãƒ 実行を許å¯ã•れるユーザ ID ã®ã¨ã‚Šã†ã‚‹æœ€å°å€¤ã§ã™ã€‚ã“れ㯠"system" 用ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’é–‰ã‚出ã™ã®ã«æœ‰åйã§ã™ã€‚
今ã®ã¨ã“ã‚ã€suEXEC 㯠'root' グループã«ã‚ˆã‚‹ CGI/SSI プãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œã‚’許å¯ã—ã¦ã„ã¾ã›ã‚“。
最å°ã‚°ãƒ«ãƒ¼ãƒ— ID 番å·ã¯è¨å®šæ™‚ã«æŒ‡å®šã•れã¾ã™ã€‚ã“れã¯ã€ CGI/SSI プãƒã‚°ãƒ©ãƒ 実行を許å¯ã•れるグループ ID ã®ã¨ã‚Šã†ã‚‹æœ€å°å€¤ã§ã™ã€‚ ã“れ㯠"system" 用ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é–‰ã‚出ã™ã®ã«æœ‰åйã§ã™ã€‚
ã“ã“ã§ã€setuid 㨠setgid ã®èµ·å‹•ã«ã‚ˆã‚Šãƒ—ãƒã‚°ãƒ©ãƒ ã¯å¯¾è±¡ã¨ãªã‚‹ãƒ¦ãƒ¼ã‚¶ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã«ãªã‚Šã¾ã™ã€‚ グループアクセスリストã¯ã€ ユーザãŒå±žã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§åˆæœŸåŒ–ã•れã¾ã™ã€‚
ディレクトリãŒå˜åœ¨ã—ãªã„ãªã‚‰ã€ãã®ãƒ•ァイルもå˜åœ¨ã—ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。 ディレクトリã«ç§»å‹•ã§ããªã„ã®ã§ã‚れã°ã€ãŠãらãå˜åœ¨ã‚‚ã—ãªã„ã§ã—ょã†ã€‚
リクエストãŒã‚µãƒ¼ãƒå†…ã®ã‚‚ã®ã§ã‚れã°ã€ è¦æ±‚ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒ suEXEC ã®ãƒ‰ã‚ュメントルートé…下ã«ã‚りã¾ã™ã‹? リクエスト㌠UserDir ã®ã‚‚ã®ã§ã‚れã°ã€è¦æ±‚ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒ suEXEC ã®ãƒ¦ãƒ¼ã‚¶ã®ãƒ‰ã‚ュメントルートé…下ã«ã‚りã¾ã™ã‹? (suEXEC è¨å®šã‚ªãƒ—ション å‚ç…§)
ディレクトリを他ユーザã«é–‹æ”¾ã—ãªã„よã†ã«ã—ã¾ã™ã€‚ 所有ユーザã ã‘ãŒã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®å†…容を改変ã§ãるよã†ã«ã—ã¾ã™ã€‚
å˜åœ¨ã—ãªã‘れã°å®Ÿè¡Œã§ãã¾ã›ã‚“。
所有者以外ã«ã¯ CGI/SSI プãƒã‚°ãƒ©ãƒ を変更ã™ã‚‹æ¨©é™ã¯ä¸Žãˆã‚‰ã‚Œã¾ã›ã‚“。
UID/GID ã‚’å†åº¦å¤‰æ›´ã—ã¦ã®ãƒ—ãƒã‚°ãƒ©ãƒ 実行ã¯ã—ã¾ã›ã‚“
ユーザãŒãã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‰€æœ‰è€…ã§ã™ã‹?
suEXEC ã¯ã€å®‰å…¨ãªç’°å¢ƒå¤‰æ•°ã®ãƒªã‚¹ãƒˆ (ã“れらã¯è¨å®šæ™‚ã«ä½œæˆã•れã¾ã™) 内ã®å¤‰æ•°ã¨ã—ã¦æ¸¡ã•れる安全㪠PATH 変数 (è¨å®šæ™‚ã«æŒ‡å®šã•れã¾ã™) ã‚’è¨å®šã™ã‚‹ã“ã¨ã§ã€ プãƒã‚»ã‚¹ã®ç’°å¢ƒå¤‰æ•°ã‚’クリアã—ã¾ã™ã€‚
ã“ã“ã§ suEXEC ãŒçµ‚了ã—ã€å¯¾è±¡ã¨ãªã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ãŒé–‹å§‹ã•れã¾ã™ã€‚
ã“ã“ã¾ã§ãŒ suEXEC ã® wrapper ã«ãŠã‘ã‚‹ã‚»ã‚ãƒ¥ãƒªãƒ†ã‚£ãƒ¢ãƒ‡ãƒ«ã®æ¨™æº–çš„ãªå‹•作ã§ã™ã€‚ã‚‚ã†å°‘ã—厳é‡ã« CGI/SSI è¨è¨ˆã«ã¤ã„ã¦ã®æ–°ã—ã„制é™ã‚„è¦å®šã‚’å–り入れるã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ suEXEC ã¯ã‚»ã‚ãƒ¥ãƒªãƒ†ã‚£ã«æ³¨æ„ã—ã¦æ…Žé‡ã«å°‘ã—ãšã¤é–‹ç™ºã•れã¦ãã¾ã—ãŸã€‚
ã“ã®ã‚»ã‚ュリティモデルを用ã„㦠サーãƒè¨å®šæ™‚ã«ã©ã®ã‚ˆã†ã«è¨±ã™ã“ã¨ã‚’制é™ã™ã‚‹ã‹ã€ã¾ãŸã€suEXEC ã‚’é©åˆ‡ã«è¨å®šã™ã‚‹ã¨ã©ã®ã‚ˆã†ãªã‚»ã‚ュリティ上ã®å±é™ºã‚’é¿ã‘られるã‹ã« é–¢ã™ã‚‹ã‚ˆã‚Šè©³ã—ã„æƒ…å ±ã«ã¤ã„ã¦ã¯ã€"ã¨ã‹ã’ã«æ³¨æ„" (Beware the Jabberwock) ã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
ã“ã“ã‹ã‚‰æ¥½ã—ããªã‚Šã¾ã™ã€‚
suEXEC
è¨å®šã‚ªãƒ—ション
--enable-suexec
--enable-suexec
オプションã«ã‚ã‚ã›ã¦å°‘ãªãã¨ã‚‚一ã¤ã¯ --with-suexec-xxxxx
ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæŒ‡å®šã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。--with-suexec-bin=PATH
suexec
ãƒã‚¤ãƒŠãƒªã®ãƒ‘スã¯ã‚µãƒ¼ãƒã«
ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚デフォルトã®ãƒ‘スを
変ãˆãŸã„ã¨ãã¯ã“ã®ã‚ªãƒ—ションを使ã£ã¦ãã ã•ã„。例ãˆã°ã€
--with-suexec-bin=/usr/sbin/suexec
ã®ã‚ˆã†ã«ã€‚--with-suexec-caller=UID
--with-suexec-userdir=DIR
--with-suexec-docroot=DIR
--datedir
ã« "/htdocs"
ã¨ã„ã†ã‚µãƒ•ィックスをã¤ã‘ãŸã‚‚ã®ã§ã™ã€‚
"--datadir=/home/apache
" ã¨ã—ã¦è¨å®šã™ã‚‹ã¨ã€
suEXEC wrapper ã«ã¨ã£ã¦ "/home/apache/htdocs"
ãŒãƒ‰ã‚ュメントルートã¨ã—ã¦ä½¿ã‚れã¾ã™ã€‚--with-suexec-uidmin=UID
--with-suexec-gidmin=GID
--with-suexec-logfile=FILE
--logfiledir
) ã«ç½®ã‹ã‚Œã¾ã™ã€‚
--with-suexec-safepath=PATH
suEXEC wrapper
ã®ã‚³ãƒ³ãƒ‘イルã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«
--enable-suexec
オプション㧠suEXEC 機能を有効ã«ã™ã‚‹ã¨ã€
"make" コマンドを実行ã—ãŸæ™‚ã« suexec
ã®ãƒã‚¤ãƒŠãƒª (Apache 自体も)
ãŒè‡ªå‹•çš„ã«ä½œæˆã•れã¾ã™ã€‚
ã™ã¹ã¦ã®æ§‹æˆè¦ç´ ãŒä½œæˆã•れるã¨ã€ãれらã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã¯
make install
コマンドãŒå®Ÿè¡Œã§ãã¾ã™ã€‚ãƒã‚¤ãƒŠãƒªã‚¤ãƒ¡ãƒ¼ã‚¸ã® suexec
㯠--sbindir
ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚
デフォルトã®å ´æ‰€ã¯ "/usr/local/apache/sbin/suexec" ã§ã™ã€‚
インストール時ã«ã¯ root
権é™ãŒå¿…è¦ãªã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。wrapper ãŒãƒ¦ãƒ¼ã‚¶ ID
ã‚’è¨å®šã™ã‚‹ãŸã‚ã«ã€æ‰€æœ‰è€… root
ã§ã®ã‚»ãƒƒãƒˆãƒ¦ãƒ¼ã‚¶ ID
ビットをãã®ãƒ•ァイルã®ãƒ¢ãƒ¼ãƒ‰ã«è¨å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
安全ãªãƒ‘ーミッションをè¨å®šã™ã‚‹
suEXEC ラッパーã¯ã€--with-suexec-caller
configure
ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã—ãŸæ£ã—ã„ユーザã§èµ·å‹•ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ãŒã€
システム上ã§ã“ã®ãƒã‚§ãƒƒã‚¯ãŒè¡Œãªã‚れるå‰ã«ã€
suEXEC ãŒå‘¼ã¶ã‚·ã‚¹ãƒ†ãƒ やライブラリãŒè„†å¼±ã§ã‚ã‚‹å¯èƒ½æ€§ã¯æ®‹ã‚Šã¾ã™ã€‚対抗ç–ã¨ã—ã¦ã€
一般ã«è‰¯ã„ç¿’æ…£ã¨ã‚‚ã•れã„ã¾ã™ãŒã€
ファイルシステムパーミッションを使ã£ã¦
Apache ã®å®Ÿè¡Œæ™‚ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ãŒ suEXEC を実行ã§ãるよã†ã«
ã™ã‚‹ã®ãŒè‰¯ã„ã§ã—ょã†ã€‚
ãŸã¨ãˆã°ã€æ¬¡ã®ã‚ˆã†ã«ã‚µãƒ¼ãƒãŒè¨å®šã•れã¦ã„ãŸã¨ã—ã¾ã™ã€‚
User www
Group webgroup
suexec
㌠"/usr/local/apache2/sbin/suexec"
ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãŸå ´åˆã€æ¬¡ã®ã‚ˆã†ã«è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec
ã“れ㧠Apache ãŒå®Ÿè¡Œã•れるグループã®ã¿ãŒ suEXEC ラッパーを実行ã§ãã‚‹ã¨ã„ã†ã“ã¨ã‚’ 確証ã—ã¾ã™ã€‚
起動時ã«ã€Apache 㯠--sbindir
オプションã§è¨å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§
suexec
を探ã—ã¾ã™
(デフォルト㯠"/usr/local/apache/sbin/suexec") 。
é©åˆ‡ã«è¨å®šã•れ㟠suEXEC ãŒã¿ã¤ã‹ã‚‹ã¨ã€
エラーãƒã‚°ã«ä»¥ä¸‹ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºåŠ›ã•れã¾ã™ã€‚
[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)
サーãƒèµ·å‹•時ã«ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºãªã„å ´åˆã€ 大抵ã¯ã‚µãƒ¼ãƒãŒæƒ³å®šã—ãŸå ´æ‰€ã§ wrapper プãƒã‚°ãƒ©ãƒ ãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸã‹ã€ setuid root ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã‹ã§ã™ã€‚
suEXEC ã®ä»•組ã¿ã‚’使用ã™ã‚‹ã®ãŒåˆã‚ã¦ã§ã€Apache ãŒæ—¢ã«å‹•作ä¸ã§ã‚れã°ã€ Apache ã‚’ kill ã—ã¦ã€å†èµ·å‹•ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。HUP シグナルや USR1 シグナルã«ã‚ˆã‚‹å˜ç´”ãªå†èµ·å‹•ã§ã¯ä¸å分ã§ã™ã€‚
suEXEC を無効ã«ã™ã‚‹å ´åˆã¯ã€suexec
ファイルを削除ã—ã¦ã‹ã‚‰
Apache ã‚’ kill ã—ã¦å†èµ·å‹•ã—ã¾ã™ã€‚
CGI プãƒã‚°ãƒ©ãƒ ã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒ suEXEC ラッパーを呼ã¶ã®ã¯ã€
SuexecUserGroup
ディレクティブを
å«ã‚€ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ›ã‚¹ãƒˆã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‹ã€mod_userdir
ã«ã‚ˆã‚Š
処ç†ã•れãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å ´åˆã«é™ã‚Šã¾ã™ã€‚
仮想ホスト:
suEXEC wrapper ã®ä½¿ã„æ–¹ã¨ã—ã¦ã€
VirtualHost
è¨å®šã§ã®
SuexecUserGroup
ディレクティブを通ã—ãŸã‚‚ã®ãŒã‚りã¾ã™ã€‚
ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–をメインサーãƒã®ãƒ¦ãƒ¼ã‚¶ ID
ã¨ç•°ãªã‚‹ã‚‚ã®ã«ã™ã‚‹ã¨ã€CGI リソースã¸ã®ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã€ãã®
<VirtualHost>
ã§æŒ‡å®šã•れ㟠User ã¨
Group ã¨ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚<VirtualHost>
ã§ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€
メインサーãƒã®ãƒ¦ãƒ¼ã‚¶ ID ãŒæƒ³å®šã•れã¾ã™ã€‚
ユーザディレクトリ:
mod_userdir
ã«ã‚ˆã‚Šå‡¦ç†ã•れãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯
リクエストã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ãƒ¦ãƒ¼ã‚¶ ID ã§ CGI プãƒã‚°ãƒ©ãƒ ã‚’
実行ã™ã‚‹ãŸã‚ã« suEXEC ラッパーを呼ã³ã¾ã™ã€‚
ã“ã®æ©Ÿèƒ½ã‚’動作ã•ã›ã‚‹ãŸã‚ã«å¿…è¦ãªã“ã¨ã¯ã€CGI
ã‚’ãã®ãƒ¦ãƒ¼ã‚¶ã§å®Ÿè¡Œã§ãã‚‹ã“ã¨ã€ãã®ã‚¹ã‚¯ãƒªãƒ—トãŒä¸Šè¨˜ã®ã‚»ã‚ュリティ検査をパスã§ãã‚‹ã“ã¨ã§ã™ã€‚
コンパイル
時ã®ã‚ªãƒ—ション --with-suexec-userdir
ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。
suEXEC wrapper ã¯ã€ä¸Šè¨˜ã§è¿°ã¹ãŸ --with-suexec-logfile
ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れãŸãƒ•ァイルã«ãƒã‚°æƒ…å ±ã‚’è¨˜éŒ²ã—ã¾ã™ã€‚
wrapper ã‚’é©åˆ‡ã«è¨å®šã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¦ã„ã‚‹ã¨æ€ã†å ´åˆã€
ã©ã“ã§è¿·ã£ã¦ã„ã‚‹ã‹è¦‹ã‚ˆã†ã¨ã™ã‚‹ãªã‚‰ã“ã®ãƒã‚°ã¨ã‚µãƒ¼ãƒã®
エラーãƒã‚°ã‚’見るã¨ã‚ˆã„ã§ã—ょã†ã€‚
注æ„! ã“ã®ç« ã¯å®Œå…¨ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ç« ã®æœ€æ–°æ”¹è¨‚版ã«ã¤ã„ã¦ã¯ã€ Apache グループ㮠オンラインドã‚ュメント版をå‚ç…§ã—ã¦ãã ã•ã„。
サーãƒã®è¨å®šã«åˆ¶é™ã‚’ã‚‚ã†ã‘ã‚‹ wrapper ã«ã¤ã„ã¦ã€ ã„ãã¤ã‹èˆˆå‘³æ·±ã„点ãŒã‚りã¾ã™ã€‚suEXEC ã«é–¢ã™ã‚‹ "ãƒã‚°" ã‚’å ±å‘Šã™ã‚‹å‰ã«ã“れらを確èªã—ã¦ãã ã•ã„。
ã‚»ã‚ュリティã¨åŠ¹çŽ‡ã®ç†ç”±ã‹ã‚‰ã€suEXEC
ã®å…¨ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯
仮想ホストã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ãŠã‘る最上ä½ã®ãƒ‰ã‚ュメントルート内ã‹ã€
ユーザディレクトリã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ãŠã‘る個々ã®ãƒ¦ãƒ¼ã‚¶ã®æœ€ä¸Šä½ã®
ドã‚ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ«ãƒ¼ãƒˆå†…ã«æ®‹ã‚‰ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
例ãˆã°ã€å››ã¤ã®ä»®æƒ³ãƒ›ã‚¹ãƒˆã‚’è¨å®šã—ã¦ã„ã‚‹å ´åˆã€
仮想ホスト㮠suEXEC ã«æœ‰åˆ©ãªã‚ˆã†ã«ã€ãƒ¡ã‚¤ãƒ³ã® Apache
ドã‚ュメント階層ã®å¤–å´ã«å…¨ã¦ã®ä»®æƒ³ãƒ›ã‚¹ãƒˆã®ãƒ‰ã‚ュメントルートを
構築ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚(例ã¯å¾Œæ—¥è¨˜è¼‰)
ã“れを変更ã™ã‚‹ã®ã¯å±é™ºã§ã™ã€‚ã“ã®æŒ‡å®šã«å«ã¾ã‚Œã‚‹å„ãƒ‘ã‚¹ãŒ ä¿¡é ¼ã§ãã‚‹ ディレクトリã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 世界ã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ã‚ˆã‚Šã€èª°ã‹ãŒãƒ›ã‚¹ãƒˆä¸Šã§ãƒˆãƒã‚¤ã®æœ¨é¦¬ を実行ã§ãるよã†ã«ã¯ã—ãŸããªã„ã§ã—ょã†ã€‚
繰り返ã—ã¾ã™ãŒã€ä½•ã‚’ã‚„ã‚ã†ã¨ã—ã¦ã„ã‚‹ã‹æŠŠæ¡ã›ãšã«ã“れをやる㨠大ããªå•題を引ãèµ·ã“ã—ã‹ãã¾ã›ã‚“。 å¯èƒ½ãªé™ã‚Šé¿ã‘ã¦ãã ã•ã„。