ãã®ããŒãžã¯æ©æ¢°ç¿»èš³ãããã®ã§ãã
PAM ãã©ã¬ãã«èªèšŒã¯ãåçšè£œåã§ãã MySQL Enterprise Edition ã«å«ãŸããæ¡åŒµæ©èœã§ãã åçšè£œåã®è©³çްã¯ãhttps://www.mysql.com/products/ ãåç §ããŠãã ããã
MySQL Enterprise Edition ã¯ãMySQL Server ã PAM (Pluggable Authentication Module) ã䜿çšã㊠MySQL ãŠãŒã¶ãŒãèªèšŒã§ããããã«ããèªèšŒæ¹åŒããµããŒãããŠããŸãã PAM ã䜿çšãããšãã·ã¹ãã ã¯æšæºã€ã³ã¿ãã§ãŒã¹ã䜿çšããŠãåŸæ¥ã® Unix ãã¹ã¯ãŒãã LDAP ãã£ã¬ã¯ããªãªã©ã®ããŸããŸãªçš®é¡ã®èªèšŒæ¹åŒã«ã¢ã¯ã»ã¹ã§ããŸãã
PAM ãã©ã¬ãã«èªèšŒã¯ãæ¬¡ã®æ©èœãæäŸããŸã:
å€éšèªèšŒ: PAM èªèšŒã䜿çšãããšãMySQL Server ã¯ãMySQL ä»äžããŒãã«ã®å€éšã§å®çŸ©ãããPAM ã§ãµããŒããããŠããæ¹æ³ã䜿çšããŠèªèšŒãããŠãŒã¶ãŒããã®æ¥ç¶ãåãå ¥ããããšãã§ããŸãã
ãããã·ãŠãŒã¶ãŒã®ãµããŒã: PAM èªèšŒã¯ãå€éšãŠãŒã¶ãŒãã¡ã³ããŒã«ãªã£ãŠãã PAM ã°ã«ãŒããšæå®ãããèªèšŒæååã«åºã¥ããŠãã¯ã©ã€ã¢ã³ãããã°ã©ã ã«ãã£ãŠæž¡ãããå€éšãŠãŒã¶ãŒåãšã¯ç°ãªããŠãŒã¶ãŒåã MySQL ã«è¿ãããšãã§ããŸãã ã€ãŸãããã®ãã©ã°ã€ã³ã¯ãå€éš PAM ã§èªèšŒããããŠãŒã¶ãŒãæã€ã¹ãæš©éãå®çŸ©ãã MySQL ãŠãŒã¶ãŒãè¿ãããšãã§ããŸãã ããšãã°ã
joeãšãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒã¯ãdeveloperãšãã MySQL ãŠãŒã¶ãŒã«æ¥ç¶ããŠæš©éãæã€ããšãã§ããŸãã
PAM ãã©ã¬ãã«èªèšŒã¯ãLinux ããã³ macOS ã§ãã¹ããããŠããŸãã
次ã®è¡šã«ã¯ããã©ã°ã€ã³ããã³ã©ã€ãã©ãªãã¡ã€ã«ã®ååã瀺ããŸãã ãã¡ã€ã«åã®ãµãã£ã¯ã¹ã¯ãã·ã¹ãã ã«ãã£ãŠç°ãªãå ŽåããããŸãã ãã¡ã€ã«ã¯ãplugin_dir ã·ã¹ãã 倿°ã§æå®ããããã£ã¬ã¯ããªã«é
眮ããå¿
èŠããããŸãã ã€ã³ã¹ããŒã«ã«é¢ããæ
å ±ã«ã€ããŠã¯ãPAM ãã©ã¬ãã«èªèšŒã®ã€ã³ã¹ããŒã«ãåç
§ããŠãã ããã
衚 6.16 PAM èªèšŒçšã®ãã©ã°ã€ã³ããã³ã©ã€ãã©ãªå
| ãã©ã°ã€ã³ãŸãã¯ãã¡ã€ã« | ãã©ã°ã€ã³ãŸãã¯ãã¡ã€ã«å |
|---|---|
| ãµãŒããŒåŽãã©ã°ã€ã³ | authentication_pam |
| ã¯ã©ã€ã¢ã³ãåŽãã©ã°ã€ã³ | mysql_clear_password |
| ã©ã€ãã©ãªãã¡ã€ã« | authentication_pam.so |
ãµãŒããŒåŽ PAM ãã©ã°ã€ã³ãšéä¿¡ããã¯ã©ã€ã¢ã³ãåŽ mysql_clear_password ã¯ãªã¢ããã¹ããã©ã°ã€ã³ã¯ãlibmysqlclient ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã«çµã¿èŸŒãŸããŠãããã³ãã¥ããã£ãŒé
åžãå«ããã¹ãŠã®é
åžã«å«ãŸããŸãã ãã¹ãŠã® MySQL ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ã¯ã©ã€ã¢ã³ãåŽã®ã¯ãªã¢ããã¹ããã©ã°ã€ã³ãå«ãããšãä»»æã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ããããµãŒããŒåŽ PAM ãã©ã°ã€ã³ãããŒããããŠãããµãŒããŒã«æ¥ç¶ã§ããããã«ãªããŸãã
次ã®åã»ã¯ã·ã§ã³ã§ã¯ãPAM ãã©ã¬ãã«èªèšŒã«åºæã®ã€ã³ã¹ããŒã«ããã³äœ¿ç𿹿³ã«ã€ããŠèª¬æããŸã:
MySQL ã®ãã©ã¬ãã«èªèšŒã«é¢ããäžè¬çãªæ
å ±ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³6.2.17ããã©ã¬ãã«èªèšŒããåç
§ããŠãã ããã mysql_clear_password ãã©ã°ã€ã³ã®è©³çްã¯ãã»ã¯ã·ã§ã³6.4.1.4ãã¯ã©ã€ã¢ã³ãåŽã¯ãªã¢ããã¹ããã©ã¬ãã«èªèšŒã ãåç
§ããŠãã ããã ãããã·ãŠãŒã¶ãŒã«ã€ããŠã¯ãã»ã¯ã·ã§ã³6.2.18ããããã·ãŠãŒã¶ãŒããåç
§ããŠãã ããã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQL ãš PAM ã飿ºã㊠MySQL ãŠãŒã¶ãŒãèªèšŒããæ¹æ³ã®æŠèŠã«ã€ããŠèª¬æããŸãã ç¹å®ã® PAM ãµãŒãã¹ã䜿çšããããã« MySQL ã¢ã«ãŠã³ããèšå®ããæ¹æ³ã瀺ãäŸã«ã€ããŠã¯ãPAM ãã©ã¬ãã«èªèšŒã®äœ¿çš ãåç §ããŠãã ããã
-
ã¯ã©ã€ã¢ã³ãããã°ã©ã ãšãµãŒããŒã¯éä¿¡ããã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«ã¯ã©ã€ã¢ã³ããŠãŒã¶ãŒå (ããã©ã«ãã§ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãŠãŒã¶ãŒå) ãšãã¹ã¯ãŒããéä¿¡ããŸã:
ã¯ã©ã€ã¢ã³ããŠãŒã¶ãŒåã¯å€éšãŠãŒã¶ãŒåã§ãã
PAM ãµãŒããŒåŽèªèšŒãã©ã°ã€ã³ã䜿çšããã¢ã«ãŠã³ãã®å Žåã察å¿ããã¯ã©ã€ã¢ã³ãåŽãã©ã°ã€ã³ã¯
mysql_clear_passwordã§ãã ãã®ã¯ã©ã€ã¢ã³ãåŽãã©ã°ã€ã³ã¯ãã¹ã¯ãŒãããã·ã¥ãå®è¡ããããã®çµæãã¯ã©ã€ã¢ã³ãã¯ãã¹ã¯ãŒããã¯ãªã¢ããã¹ããšããŠãµãŒããŒã«éä¿¡ããŸãã
-
ãµãŒããŒã¯ãå€éšãŠãŒã¶ãŒåãšã¯ã©ã€ã¢ã³ãã®æ¥ç¶å ã®ãã¹ãã«åºã¥ããŠãäžèŽãã MySQL ã¢ã«ãŠã³ããæ€çŽ¢ããŸãã PAM ãã©ã°ã€ã³ã¯ãMySQL Server ã«ãã£ãŠæž¡ãããæ å ± (ãŠãŒã¶ãŒåããã¹ãåããã¹ã¯ãŒããèªèšŒæååãªã©) ã䜿çšããŸãã PAM ã䜿çšããŠèªèšŒãã MySQL ã¢ã«ãŠã³ããå®çŸ©ããå ŽåãèªèšŒæååã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸã:
PAM ãµãŒãã¹åãã·ã¹ãã 管çè ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®èªèšŒæ¹åŒãåç §ããããã«äœ¿çšã§ããååã§ãã åäžã®ããŒã¿ããŒã¹ãµãŒããŒã€ã³ã¹ã¿ã³ã¹ã«è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãé¢é£ä»ããããšãã§ããããããµãŒãã¹åã®éžæã¯ SQL ã¢ããªã±ãŒã·ã§ã³éçºè ã«ä»»ãããŸãã
ãªãã·ã§ã³ã§ããããã·ã䜿çšããå Žåã¯ãPAM ã°ã«ãŒããã MySQL ãŠãŒã¶ãŒåãžã®ãããã³ã°ã
-
ãã©ã°ã€ã³ã¯ãèªèšŒæååã§æå®ããã PAM ãµãŒãã¹ã䜿çšããŠãŠãŒã¶ãŒè³æ ŒèšŒæã確èªãã
'Authentication succeeded, Username isãŸãã¯user_name''Authentication failed'ãè¿ããŸãã ãã¹ã¯ãŒãã¯ãPAM ãµãŒãã¹ã§äœ¿çšããããã¹ã¯ãŒãã¹ãã¢ã«é©ããŠããå¿ èŠããããŸãã äŸ:åŸæ¥ã® Unix ãã¹ã¯ãŒãã®å ŽåããµãŒãã¹ã¯
/etc/shadowãã¡ã€ã«ã«æ ŒçŽãããŠãããã¹ã¯ãŒããæ€çŽ¢ããŸããLDAP ã®å ŽåããµãŒãã¹ã¯ LDAP ãã£ã¬ã¯ããªã«æ ŒçŽãããŠãããã¹ã¯ãŒããæ€çŽ¢ããŸãã
è³æ ŒèšŒæãã§ãã¯ã倱æãããšããµãŒããŒã¯æ¥ç¶ãæåŠããŸãã
ãã以å€ã®å ŽåãèªèšŒæååã¯ãããã·ãçºçãããã©ããã瀺ããŸãã æååã« PAM ã°ã«ãŒããããã³ã°ãå«ãŸããŠããªãå Žåããããã·ã¯çºçããŸããã ãã®å ŽåãMySQL ãŠãŒã¶ãŒåã¯å€éšãŠãŒã¶ãŒåãšåãã§ãã
-
ãã以å€ã®å Žåããããã·ã¯ PAM ã°ã«ãŒããããã³ã°ã«åºã¥ããŠç€ºãããMySQL ãŠãŒã¶ãŒåã¯ãããã³ã°ãªã¹ãå ã®æåã«äžèŽããã°ã«ãŒãã«åºã¥ããŠæ±ºå®ãããŸãã ããPAM ã°ã«ãŒãããã®æå³ã¯ PAM ãµãŒãã¹ã«ãã£ãŠç°ãªããŸãã äŸ:
åŸæ¥ã® Unix ãã¹ã¯ãŒãã®å Žåãã°ã«ãŒãã¯
/etc/groupãã¡ã€ã«ã§å®çŸ©ããã Unix ã°ã«ãŒãã§ã/etc/security/group.confãªã©ã®ãã¡ã€ã«å ã®è¿œå PAM æ å ±ãè£è¶³ããå¯èœæ§ããããŸããLDAP ã®å Žåãã°ã«ãŒã㯠LDAP ãã£ã¬ã¯ããªã§å®çŸ©ããã LDAP ã°ã«ãŒãã§ãã
ãããã·ãŠãŒã¶ãŒ (å€éšãŠãŒã¶ãŒ) ããããã·èšå®ããã MySQL ãŠãŒã¶ãŒåã«å¯Ÿãã
PROXYæš©éãæã£ãŠããå Žåããããã·èšå®ã¯ããããã·èšå®ããããŠãŒã¶ãŒããããã·èšå®ããããŠãŒã¶ãŒã®æš©éãåŒãåããç¶æ ã§è¡ãããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãPAM èªèšŒãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«ã«ã€ããŠã®äžè¬çãªæ å ±ã¯ãã»ã¯ã·ã§ã³5.6.1ããã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«ããã³ã¢ã³ã€ã³ã¹ããŒã«ããåç §ããŠãã ããã
ãµãŒããŒã§äœ¿çšã§ããããã«ããã«ã¯ããã©ã°ã€ã³ã©ã€ãã©ãªãã¡ã€ã«ã MySQL ãã©ã°ã€ã³ãã£ã¬ã¯ã㪠(plugin_dir ã·ã¹ãã 倿°ã§æå®ããããã£ã¬ã¯ããª) ã«é
眮ããå¿
èŠããããŸãã å¿
èŠã«å¿ããŠããµãŒããŒã®èµ·åæã« plugin_dir ã®å€ãèšå®ããŠãã©ã°ã€ã³ãã£ã¬ã¯ããªã®å Žæãæ§æããŸãã
ãã©ã°ã€ã³ã©ã€ãã©ãªãã¡ã€ã«ã®ããŒã¹å㯠authentication_pam ã§ãã ãã¡ã€ã«åã®æ¥å°ŸèŸã¯ããã©ãããã©ãŒã ããšã«ç°ãªããŸã (ããšãã°ã.so for Unix and Unix-like systems, .dll for Windows)ã
ãµãŒããŒã®èµ·åæã«ãã©ã°ã€ã³ãããŒãããã«ã¯ã--plugin-load-add ãªãã·ã§ã³ã䜿çšããŠããã©ã°ã€ã³ãå«ãã©ã€ãã©ãªãã¡ã€ã«ã«ååãä»ããŸãã ãã®ãã©ã°ã€ã³ã®ããŒãæ¹åŒã§ã¯ããµãŒããŒãèµ·åãããã³ã«ãªãã·ã§ã³ãæå®ããå¿
èŠããããŸãã ããšãã°ããµãŒã㌠my.cnf ãã¡ã€ã«ã«æ¬¡ã®è¡ãå
¥åããå¿
èŠã«å¿ããŠãã©ãããã©ãŒã ã® .so æ¥å°ŸèŸã調æŽããŸã:
[mysqld]
plugin-load-add=authentication_pam.so
my.cnf ã倿Žããããæ°ããèšå®ãæå¹ã«ããããã«ãµãŒããŒãåèµ·åããŸãã
ãŸãã¯ãå®è¡æã«ãã©ã°ã€ã³ãããŒãããã«ã¯ã次ã®ã¹ããŒãã¡ã³ãã䜿çšããŠãå¿
èŠã«å¿ããŠãã©ãããã©ãŒã ã® .so æ¥å°ŸèŸã調æŽããŸã:
INSTALL PLUGIN authentication_pam SONAME 'authentication_pam.so';
INSTALL PLUGIN ã¯ãã©ã°ã€ã³ããã ã¡ã«ããŒãããmysql.plugins ã·ã¹ãã ããŒãã«ã«ãç»é²ããŠã--plugin-load-add ãå¿
èŠãšããã«åŸç¶ã®éåžžã®èµ·åã®ãã³ã«ãµãŒããŒããã©ã°ã€ã³ãããŒãããããã«ããŸãã
ãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«ã確èªããã«ã¯ãINFORMATION_SCHEMA.PLUGINS ããŒãã«ã調ã¹ãããSHOW PLUGINS ã¹ããŒãã¡ã³ãã䜿çšããŸã (ã»ã¯ã·ã§ã³5.6.2ããµãŒããŒãã©ã°ã€ã³æ
å ±ã®ååŸã ãåç
§)ã äŸ:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%pam%';
+--------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------------+---------------+
| authentication_pam | ACTIVE |
+--------------------+---------------+
ãã©ã°ã€ã³ã®åæåã«å€±æããå Žåã¯ããµãŒããŒãšã©ãŒãã°ã§èšºæã¡ãã»ãŒãžã確èªããŠãã ããã
MySQL ã¢ã«ãŠã³ãã PAM ãã©ã°ã€ã³ã«é¢é£ä»ããã«ã¯ãPAM ãã©ã¬ãã«èªèšŒã®äœ¿çš ãåç §ããŠãã ããã
PAM èªèšŒãã©ã°ã€ã³ã®ã¢ã³ã€ã³ã¹ããŒã«ã«äœ¿çšãããæ¹æ³ã¯ãã€ã³ã¹ããŒã«æ¹æ³ã«ãã£ãŠç°ãªããŸã:
--plugin-load-addãªãã·ã§ã³ã䜿çšããŠãµãŒããŒã®èµ·åæã«ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããå Žåã¯ããªãã·ã§ã³ãªãã§ãµãŒããŒãåèµ·åããŸãã-
INSTALL PLUGINã¹ããŒãã¡ã³ãã䜿çšããŠå®è¡æã«ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããå ŽåããµãŒããŒã®åèµ·ååŸãã€ã³ã¹ããŒã«ããããŸãŸã«ãªããŸãã ã¢ã³ã€ã³ã¹ããŒã«ããã«ã¯ãUNINSTALL PLUGINã䜿çšããŸã:UNINSTALL PLUGIN authentication_pam;
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãPAM èªèšŒãã©ã°ã€ã³ã䜿çšã㊠MySQL ã¯ã©ã€ã¢ã³ãããã°ã©ã ãããµãŒããŒã«æ¥ç¶ããäžè¬çãªçšèªã«ã€ããŠèª¬æããŸãã æ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãPAM èªèšŒãç¹å®ã®æ¹æ³ã§äœ¿çšããæé ã«ã€ããŠèª¬æããŸãã PAM ãã©ã¬ãã«èªèšŒã®ã€ã³ã¹ããŒã« ã§èª¬æãããŠããããã«ããµãŒããŒããµãŒããŒåŽ PAM ãã©ã°ã€ã³ãæå¹ã«ããŠå®è¡ãããŠããããšãåæãšããŠããŸãã
CREATE USER ã¹ããŒãã¡ã³ãã® IDENTIFIED WITH å¥ã§ PAM èªèšŒãã©ã°ã€ã³ãåç
§ããã«ã¯ãauthentication_pam ãšããååã䜿çšããŸãã äŸ:
CREATE USER user
IDENTIFIED WITH authentication_pam
AS 'auth_string';
èªèšŒæååã«ã¯ã次ã®ã¿ã€ãã®æ å ±ãæå®ãããŸãã
PAM ãµãŒãã¹å (MySQL ãŠãŒã¶ãŒã® PAM èªèšŒã®ä»çµã¿ ãåç §)ã æ¬¡ã®èª¬æã®äŸã§ã¯ãåŸæ¥ã® Unix ãã¹ã¯ãŒãã䜿çšããèªèšŒã«
mysql-unixã®ãµãŒãã¹åã䜿çšããLDAP ã䜿çšããèªèšŒã«mysql-ldapã䜿çšããŸãããããã·ãµããŒãã®ããã«ãPAM ã¯ãã¯ã©ã€ã¢ã³ãããã°ã©ã ããµãŒããŒã«æ¥ç¶ãããšãã«æž¡ãããå€éšãŠãŒã¶ãŒå以å€ã® MySQL ãŠãŒã¶ãŒåã PAM ã¢ãžã¥ãŒã«ããµãŒããŒã«è¿ãæ¹æ³ãæäŸããŸãã èªèšŒæååã䜿çšããŠãå€éšãŠãŒã¶ãŒåãã MySQL ãŠãŒã¶ãŒåãžã®ãããã³ã°ãå¶åŸ¡ããŸãã ãããã·ãŠãŒã¶ãŒã®æ©èœã掻çšããã«ã¯ããã®çš®é¡ã®ãããã³ã°ãèªèšŒæååã«å«ããå¿ èŠããããŸãã
ããšãã°ãã¢ã«ãŠã³ãã mysql-unix PAM ãµãŒãã¹åã䜿çšããroot ããã³ users PAM ã°ã«ãŒãã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒã developer ããã³ data_entry MySQL ãŠãŒã¶ãŒã«ãããããããããå¿
èŠãããå Žåã¯ã次ã®ãããªã¹ããŒãã¡ã³ãã䜿çšããŸã:
CREATE USER user
IDENTIFIED WITH authentication_pam
AS 'mysql-unix, root=developer, users=data_entry';
PAM èªèšŒãã©ã°ã€ã³ã§ã®èªèšŒæååã®æ§æã¯ã次ã®ãããªã«ãŒã«ã«åŸã£ãŠããŸãã
-
æåå㯠PAM ãµãŒãã¹åã§æ§æããããªãã·ã§ã³ã§ PAM ã°ã«ãŒããããã³ã°ãªã¹ããç¶ããŸããPAM ã°ã«ãŒããããã³ã°ãªã¹ãã¯ãPAM ã°ã«ãŒãåãš MySQL ãŠãŒã¶ãŒåãæå®ãã 1 ã€ä»¥äžã®ããŒã¯ãŒããšå€ã®ãã¢ã§æ§æãããŸã:
pam_service_name[,pam_group_name=mysql_user_name]...ãã©ã°ã€ã³ã¯ãã¢ã«ãŠã³ãã䜿çšãã忥ç¶è©Šè¡ã®èªèšŒæååãè§£æããŸãã ãªãŒããŒããããæå°éã«æããã«ã¯ãã§ããã ãæååãçãä¿ã¡ãŸãã
å
ãã¢ã®åã«ã«ã³ããä»ããå¿ èŠããããŸããpam_group_name=mysql_user_nameäºéåŒçšç¬Šã§å²ãŸããŠããªãå é ããã³æ«å°Ÿã®ç©ºçœæåã¯ãç¡èŠãããŸãã
åŒçšç¬Šã§å²ãŸããŠããªã
pam_service_nameãpam_group_nameããã³mysql_user_nameã®å€ã«ã¯ãçå·ãã«ã³ããŸãã¯ç©ºçœä»¥å€ã®ä»»æã®å€ãå«ããããšãã§ããŸããpam_service_nameãpam_group_nameãŸãã¯mysql_user_nameã®å€ãäºéåŒçšç¬Šã§å²ãŸããŠããå ŽåãåŒçšç¬Šã®éã®ãã¹ãŠãå€ã®äžéšã«ãªããŸãã ããšãã°ãå€ã«ç©ºçœæåãå«ãŸããŠããå Žåã¯ããããå¿ èŠã§ãã äºéåŒçšç¬Šããã³ããã¯ã¹ã©ãã·ã¥ (\) ãé€ããã¹ãŠã®æåã¯æå¹ã§ãã ã©ã¡ããã®æåãå«ããã«ã¯ãããã¯ã¹ã©ãã·ã¥ã䜿çšããŠãšã¹ã±ãŒãããŸãã
ãã©ã°ã€ã³ãå€éšãŠãŒã¶ãŒå (ã¯ã©ã€ã¢ã³ãããæž¡ãããåå) ãæ£åžžã«èªèšŒãããšãèªèšŒæååå ã§ PAM ã°ã«ãŒããããã³ã°ãªã¹ããæ€çŽ¢ãããååšããå Žåã¯ãããã䜿çšããŠãå€éšãŠãŒã¶ãŒãã¡ã³ããŒã«ãªã£ãŠãã PAM ã°ã«ãŒãã«åºã¥ããŠå¥ã® MySQL ãŠãŒã¶ãŒåã MySQL ãµãŒããŒã«è¿ãããŸã:
èªèšŒæååã« PAM ã°ã«ãŒããããã³ã°ãªã¹ããå«ãŸããŠããªãå Žåããã©ã°ã€ã³ã¯å€éšåãè¿ããŸãã
èªèšŒæååã« PAM ã°ã«ãŒããããã³ã°ãªã¹ããå«ãŸããŠããå Žåããã©ã°ã€ã³ã¯ãªã¹ãå ã®å
ãã¢ãå·Šããå³ã«æ€æ»ããèªèšŒããããŠãŒã¶ãŒã«å²ãåœãŠãããã°ã«ãŒãã® non-MySQL ãã£ã¬ã¯ããªå ã§pam_group_name=mysql_user_namepam_group_nameå€ã®äžèŽãèŠã€ããããšããèŠã€ãã£ãæåã®äžèŽã«ã€ããŠmysql_user_nameãè¿ããŸãã ã©ã® PAM ã°ã«ãŒãã«ãäžèŽãããã®ãèŠã€ãããªãå Žåããã©ã°ã€ã³ã¯å€éšåãè¿ããŸãã ãã©ã°ã€ã³ã¯ããã£ã¬ã¯ããªå ã®ã°ã«ãŒããæ€çŽ¢ã§ããªãå ŽåãPAM ã°ã«ãŒããããã³ã°ãªã¹ããç¡èŠããŠå€éšåãè¿ããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãPAM èªèšŒãã©ã°ã€ã³ã䜿çšããããã€ãã®èªèšŒã·ããªãªãèšå®ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
-
ãããã·ãŠãŒã¶ãŒãªãã ããã§ã¯ããã°ã€ã³åãšãã¹ã¯ãŒãããã§ãã¯ããéã«ã®ã¿ PAM ã䜿çšãããŸãã MySQL Server ãžã®æ¥ç¶ãèš±å¯ããããã¹ãŠã®å€éšãŠãŒã¶ãŒã«ã¯ãPAM èªèšŒã䜿çšããããã«å®çŸ©ãããäžèŽãã MySQL ã¢ã«ãŠã³ããå¿ èŠã§ãã (
'ã® MySQL ã¢ã«ãŠã³ããå€éšãŠãŒã¶ãŒãšäžèŽããã«ã¯ãuser_name'@'host_name'user_nameãå€éšãŠãŒã¶ãŒåã§ãããhost_nameãã¯ã©ã€ã¢ã³ãã®æ¥ç¶å ã®ãã¹ããšäžèŽããå¿ èŠããããŸãã) PAM ã§ãµããŒããããŠããããŸããŸãªæ¹åŒã§ãèªèšŒãå®è¡ã§ããŸãã åŸã§ãåŸæ¥ã® Unix ãã¹ã¯ãŒãããã³ LDAP ã®ãã¹ã¯ãŒãã䜿çšããŠã¯ã©ã€ã¢ã³ãè³æ ŒèšŒæãèªèšŒããæ¹æ³ã«ã€ããŠèª¬æããŸããPAM èªèšŒã¯ããããã·ãŠãŒã¶ãŒãŸã㯠PAM ã°ã«ãŒããä»ããŠè¡ãããªãå ŽåãMySQL ãŠãŒã¶ãŒåããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒåãšåãã§ããå¿ èŠããããŸãã MySQL ãŠãŒã¶ãŒå㯠32 æåã«å¶éãã (ã»ã¯ã·ã§ã³6.2.3ãä»äžããŒãã«ã ãåç §)ãPAM éãããã·èªèšŒã¯æå€§ 32 æåã®ååãæã€ Unix ã¢ã«ãŠã³ãã«å¶éãããŸãã
ãããã·ãŠãŒã¶ãŒã®ã¿ (PAM ã°ã«ãŒããããã³ã°ã䜿çš)ã ãã®ã·ããªãªã§ã¯ãç°ãªãæš©éã»ãããå®çŸ©ãã 1 ã€ä»¥äžã® MySQL ã¢ã«ãŠã³ããäœæããŸãã (çæ³çã«ã¯ããããã®ã¢ã«ãŠã³ãã䜿çšããŠèª°ãæ¥ç¶ããªãã§ãã ããã) 次ã«ãPAM ãä»ããŠèªèšŒããããã©ã«ããŠãŒã¶ãŒãå®çŸ©ããŸããPAM ã¯ããªãããã®ãããã³ã°ã¹ããŒã (éåžžããŠãŒã¶ãŒãã¡ã³ããŒã«ãªã£ãŠããå€éš PAM ã°ã«ãŒãã«åºã¥ã) ã䜿çšããŠããã¹ãŠã®å€éšãŠãŒã¶ãŒåããæš©éã»ãããä¿æããå°æ°ã® MySQL ã¢ã«ãŠã³ãã«ãããããŸãã ã¯ã©ã€ã¢ã³ããŠãŒã¶ãŒåãšããŠå€éšãŠãŒã¶ãŒåãæ¥ç¶ããã³æå®ããã¯ã©ã€ã¢ã³ãã¯ãããããã® MySQL ã¢ã«ãŠã³ãã«ãããããããã®æš©éã䜿çšããŸãã ããã§ã¯ãåŸæ¥ã® Unix ãã¹ã¯ãŒãã䜿çšããŠãããèšå®ããæ¹æ³ã瀺ããŸãããLDAP ãªã©ã®ã»ãã® PAM æ¹æ³ã代ããã«äœ¿çšããããšãã§ããŸãã
ãããã®ã·ããªãªã«ã¯ã次ã®ããªãšãŒã·ã§ã³ããããŸã:
äžéšã®ãŠãŒã¶ãŒã¯ (ãããã·ã䜿çšããã«) çŽæ¥ãã°ã€ã³ã§ããŸãããä»ã®ãŠãŒã¶ãŒã¯ãããã·ã¢ã«ãŠã³ããä»ããŠæ¥ç¶ããå¿ èŠããããŸãã
PAM èªèšŒã¢ã«ãŠã³ãéã§ç°ãªã PAM ãµãŒãã¹åã䜿çšããããšã§ããã PAM èªèšŒæ¹æ³ãäžéšã®ãŠãŒã¶ãŒã«äœ¿çšããå¥ã®æ¹æ³ãä»ã®ãŠãŒã¶ãŒã«äœ¿çšã§ããŸãã ããšãã°ãäžéšã®ãŠãŒã¶ãŒã«ã¯
mysql-unixPAM ãµãŒãã¹ã䜿çšãããã®ä»ã®ãŠãŒã¶ãŒã«ã¯mysql-ldapã䜿çšã§ããŸãã
ãã®äŸã¯ã次ã®ããšãåæãšãªã£ãŠããŸãã ã·ã¹ãã ãç°ãªãæ¹æ³ã§èšå®ãããŠããå Žåã¯ãå€å°ã®èª¿æŽãå¿ èŠã«ãªãããšããããŸãã
ãã°ã€ã³åãšãã¹ã¯ãŒãã¯ããããã
antonioãšantonio_passwordã§ãã ãããããèªèšŒãããŠãŒã¶ãŒã«å¯Ÿå¿ããããã«å€æŽããŸããPAM æ§æãã£ã¬ã¯ããªã¯
/etc/pam.dã§ããPAM ãµãŒãã¹åã¯ãèªèšŒæ¹åŒ (ãã®èª¬æã§ã¯
mysql-unixãŸãã¯mysql-ldap) ã«å¯Ÿå¿ããŸãã ç¹å®ã® PAM ãµãŒãã¹ã䜿çšããã«ã¯ãPAM æ§æãã£ã¬ã¯ããªã«åãååã® PAM ãã¡ã€ã«ãèšå®ããå¿ èŠããããŸã (ãã¡ã€ã«ãååšããªãå Žåã¯äœæããŸã)ã ãŸããPAM ãµãŒãã¹ã䜿çšããŠèªèšŒããã¢ã«ãŠã³ãã®å Žåã¯ãCREATE USERã¹ããŒãã¡ã³ãã®èªèšŒæååã« PAM ãµãŒãã¹ãæå®ããå¿ èŠããããŸãã
PAM èªèšŒãã©ã°ã€ã³ã¯ããµãŒããŒã®èµ·åç°å¢ã§ AUTHENTICATION_PAM_LOG ç°å¢å€ãèšå®ãããŠãããã©ãããåæåæã«ãã§ãã¯ããŸãã ãã®å Žåããã©ã°ã€ã³ã䜿çšãããšãæšæºåºåãžã®èšºæã¡ãã»ãŒãžã®ãã®ã³ã°ãæå¹ã«ãªããŸãã ãµãŒããŒã®èµ·åæ¹æ³ã«ãã£ãŠã¯ãã³ã³ãœãŒã«ãŸãã¯ãšã©ãŒãã°ã«ã¡ãã»ãŒãžã衚瀺ãããå ŽåããããŸãã ãããã®ã¡ãã»ãŒãžã¯ããã©ã°ã€ã³ãèªèšŒãå®è¡ãããšãã«çºçãã PAM é¢é£ã®åé¡ã®ãããã°ã«åœ¹ç«ã¡ãŸãã 詳现ã¯ãPAM èªèšŒã®ãããã°ãåç
§ããŠãã ããã
ãã®èªèšŒã·ããªãªã§ã¯ãPAM ã䜿çšããŠããããã·ã䜿çšããã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒåããã³ Unix ãã¹ã¯ãŒãã«é¢ããŠå®çŸ©ãããå€éšãŠãŒã¶ãŒããã§ãã¯ããŸãã MySQL Server ãžã®æ¥ç¶ãèš±å¯ããããã¹ãŠã®å€éšãŠãŒã¶ãŒã«ã¯ãåŸæ¥ã® Unix ãã¹ã¯ãŒãã¹ãã¢ãä»ãã PAM èªèšŒã䜿çšããããã«å®çŸ©ããããäžèŽãã MySQL ã¢ã«ãŠã³ããå¿ èŠã§ãã
åŸæ¥ã® Unix ãã¹ã¯ãŒãã¯ã/etc/shadow ãã¡ã€ã«ã䜿çšããŠãã§ãã¯ãããŸãã ãã®ãã¡ã€ã«ã«é¢é£ããŠçºçããå¯èœæ§ã®ããåé¡ã®è©³çްã¯ãUnix ãã¹ã¯ãŒãã¹ãã¢ãžã® PAM èªèšŒã¢ã¯ã»ã¹ ãåç
§ããŠãã ããã
Unix èªèšŒã§ããŠãŒã¶ãŒåã
antonioã§ãã¹ã¯ãŒããantonio_passwordã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãžã®ãã°ã€ã³ãèš±å¯ãããŠããããšã確èªããŸãã-
/etc/pam.d/mysql-unixãšããååã®mysql-unixPAM ãµãŒãã¹ãã¡ã€ã«ãäœæããŠãåŸæ¥ã® Unix ãã¹ã¯ãŒãã䜿çšã㊠MySQL æ¥ç¶ãèªèšŒããããã« PAM ãèšå®ããŸãã ãã¡ã€ã«ã®å 容ã¯ã·ã¹ãã ã«äŸåããããã/etc/pam.dãã£ã¬ã¯ããªå ã®æ¢åã®ãã°ã€ã³é¢é£ãã¡ã€ã«ããã§ãã¯ããŠãããããã©ã®ããã«è¡šç€ºããããã確èªããŸãã Linux ã§ã¯ãmysql-unixãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸã:#%PAM-1.0 auth include password-auth account include password-authmacOS ã®å Žåã¯ã
password-authã§ã¯ãªãloginã䜿çšããŸããPAM ãã¡ã€ã«åœ¢åŒã¯ãäžéšã®ã·ã¹ãã ã§ç°ãªãå ŽåããããŸãã ããšãã°ãUbuntu ããã³ãã®ä»ã® Debian ããŒã¹ã®ã·ã¹ãã ã§ã¯ããããã«æ¬¡ã®ãã¡ã€ã«ã³ã³ãã³ãã䜿çšããŸã:
@include common-auth @include common-account @include common-session-noninteractive -
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒåãšåããŠãŒã¶ãŒåã§ MySQL ã¢ã«ãŠã³ããäœæããPAM ãã©ã°ã€ã³ããã³
mysql-unixPAM ãµãŒãã¹ã䜿çšããŠèªèšŒããããã«å®çŸ©ããŸã:CREATE USER 'antonio'@'localhost' IDENTIFIED WITH authentication_pam AS 'mysql-unix'; GRANT ALL PRIVILEGES ON mydb.* TO 'antonio'@'localhost';ããã§ãèªèšŒæååã«ã¯ PAM ãµãŒãã¹å (
mysql-unix) ã®ã¿ãå«ãŸããŠãããããã«ãã£ãŠ Unix ãã¹ã¯ãŒããèªèšŒãããŸãã -
mysql ã³ãã³ãã©ã€ã³ã¯ã©ã€ã¢ã³ãã䜿çšããŠã
antonioãšã㊠MySQL ãµãŒããŒã«æ¥ç¶ããŸãã äŸ:shell> mysql --user=antonio --password --enable-cleartext-plugin Enter password: antonio_passwordãµãŒããŒã¯æ¥ç¶ãèš±å¯ããå¿ èŠããããæ¬¡ã®ã¯ãšãªãŒã¯æ¬¡ã®ãããªåºåãè¿ããŸã:
mysql> SELECT USER(), CURRENT_USER(), @@proxy_user; +-------------------+-------------------+--------------+ | USER() | CURRENT_USER() | @@proxy_user | +-------------------+-------------------+--------------+ | antonio@localhost | antonio@localhost | NULL | +-------------------+-------------------+--------------+ããã¯ã
antonioMySQL ãŠãŒã¶ãŒã«ä»äžãããæš©éãæã€ããã«antonioãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒãèªèšŒããããããã·ãçºçããŠããªãããšã瀺ããŠããŸãã
ã¯ã©ã€ã¢ã³ãåŽã® mysql_clear_password èªèšŒãã©ã°ã€ã³ã§ã¯ããã¹ã¯ãŒãã¯ãã®ãŸãŸæ®ããããããã¯ã©ã€ã¢ã³ãããã°ã©ã ã¯ã¯ãªã¢ããã¹ããšã㊠MySQL ãµãŒããŒã«éä¿¡ããŸãã ããã«ããããã¹ã¯ãŒãããã®ãŸãŸ PAM ã«æž¡ãããšãã§ããŸãã ãµãŒããŒåŽ PAM ã©ã€ãã©ãªã䜿çšããã«ã¯ã¯ãªã¢ããã¹ãã®ãã¹ã¯ãŒããå¿
èŠã§ãããäžéšã®æ§æã§ã»ãã¥ãªãã£ãŒã®åé¡ãçºçããå¯èœæ§ããããŸãã ãããã®ã¡ãžã£ãŒã«ããããªã¹ã¯ãæå°éã«æããããŸã:
mysql_clear_passwordãã©ã°ã€ã³ã誀ã£ãŠäœ¿çšããå¯èœæ§ãäœãããã«ã¯ãMySQL ã¯ã©ã€ã¢ã³ãã§æç€ºçã«æå¹ã«ããå¿ èŠããããŸã (ããšãã°ã--enable-cleartext-pluginãªãã·ã§ã³ã䜿çš)ã ã»ã¯ã·ã§ã³6.4.1.4ãã¯ã©ã€ã¢ã³ãåŽã¯ãªã¢ããã¹ããã©ã¬ãã«èªèšŒããåç §ããŠãã ãããmysql_clear_passwordãã©ã°ã€ã³ãæå¹ã«ããŠãã¹ã¯ãŒãã®å ¬éãåé¿ããã«ã¯ãMySQL ã¯ã©ã€ã¢ã³ãã¯æå·åãããæ¥ç¶ã䜿çšã㊠MySQL ãµãŒããŒã«æ¥ç¶ããå¿ èŠããããŸãã ã»ã¯ã·ã§ã³6.3.1ãæå·åæ¥ç¶ã䜿çšããããã® MySQL ã®æ§æããåç §ããŠãã ããã
ãã®èªèšŒã·ããªãªã§ã¯ãPAM ã䜿çšããŠããããã·ã䜿çšããã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãŠãŒã¶ãŒåããã³ LDAP ãã¹ã¯ãŒãã«é¢ããŠå®çŸ©ãããå€éšãŠãŒã¶ãŒããã§ãã¯ããŸãã MySQL Server ãžã®æ¥ç¶ãèš±å¯ããããã¹ãŠã®å€éšãŠãŒã¶ãŒã«ã¯ãLDAP ãä»ãã PAM èªèšŒã䜿çšããããã«å®çŸ©ãããäžèŽãã MySQL ã¢ã«ãŠã³ããå¿ èŠã§ãã
MySQL ã§ PAM LDAP ãã©ã¬ãã«èªèšŒã䜿çšããã«ã¯ã次ã®åææ¡ä»¶ãæºããå¿ èŠããããŸã:
PAM LDAP ãµãŒãã¹ãéä¿¡ããã«ã¯ãLDAP ãµãŒããŒã䜿çšå¯èœã§ããå¿ èŠããããŸãã
MySQL ã«ãã£ãŠèªèšŒããã LDAP ãŠãŒã¶ãŒã¯ãLDAP ãµãŒããŒã«ãã£ãŠç®¡çããããã£ã¬ã¯ããªã«ååšããå¿ èŠããããŸãã
MySQL ãŠãŒã¶ãŒèªèšŒã« LDAP ã䜿çšããå¥ã®æ¹æ³ã¯ãLDAP åºæã®èªèšŒãã©ã°ã€ã³ã䜿çšããããšã§ãã ã»ã¯ã·ã§ã³6.4.1.7ãLDAP ãã©ã¬ãã«èªèšŒããåç §ããŠãã ããã
PAM LDAP èªèšŒçšã® MySQL ãæ¬¡ã®ããã«æ§æããŸã:
Unix èªèšŒã§ããŠãŒã¶ãŒåã
antonioã§ãã¹ã¯ãŒããantonio_passwordã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãžã®ãã°ã€ã³ãèš±å¯ãããŠããããšã確èªããŸãã-
/etc/pam.d/mysql-ldapãšããååã®mysql-ldapPAM ãµãŒãã¹ãã¡ã€ã«ãäœæããŠãLDAP ã䜿çšã㊠MySQL æ¥ç¶ãèªèšŒããããã« PAM ãèšå®ããŸãã ãã¡ã€ã«ã®å 容ã¯ã·ã¹ãã ã«äŸåããããã/etc/pam.dãã£ã¬ã¯ããªå ã®æ¢åã®ãã°ã€ã³é¢é£ãã¡ã€ã«ããã§ãã¯ããŠãããããã©ã®ããã«è¡šç€ºããããã確èªããŸãã Linux ã§ã¯ãmysql-ldapãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸã:#%PAM-1.0 auth required pam_ldap.so account required pam_ldap.soPAM ãªããžã§ã¯ããã¡ã€ã«ã®ãµãã£ã¯ã¹ãã·ã¹ãã äžã®
.soãšç°ãªãå Žåã¯ãæ£ãããµãã£ã¯ã¹ã«çœ®ãæããŠãã ãããPAM ãã¡ã€ã«åœ¢åŒã¯ãäžéšã®ã·ã¹ãã ã§ç°ãªãå ŽåããããŸãã
-
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒåãšåããŠãŒã¶ãŒåã§ MySQL ã¢ã«ãŠã³ããäœæããPAM ãã©ã°ã€ã³ããã³
mysql-ldapPAM ãµãŒãã¹ã䜿çšããŠèªèšŒããããã«å®çŸ©ããŸã:CREATE USER 'antonio'@'localhost' IDENTIFIED WITH authentication_pam AS 'mysql-ldap'; GRANT ALL PRIVILEGES ON mydb.* TO 'antonio'@'localhost';ããã§ãèªèšŒæååã«ã¯ PAM ãµãŒãã¹å
mysql-ldapã®ã¿ãå«ãŸããLDAP ã䜿çšããŠèªèšŒãããŸãã ãµãŒããŒãžã®æ¥ç¶ã¯ããããã·ãŠãŒã¶ãŒã䜿çšããªã PAM Unix ãã¹ã¯ãŒãèªèšŒ ã§èª¬æãããŠããæ¥ç¶ãšåãã§ãã
ããã§èª¬æããèªèšŒã¹ããŒã ã§ã¯ããããã·ãš PAM ã°ã«ãŒãã®ãããã³ã°ã䜿çšããŠãPAM ã䜿çšããŠèªèšŒããæ¥ç¶ MySQL ãŠãŒã¶ãŒããç°ãªãç¹æš©ã»ãããå®çŸ©ããã»ãã® MySQL ã¢ã«ãŠã³ãã«ãããããŸãã ãŠãŒã¶ãŒã¯ãæš©éãå®çŸ©ããã¢ã«ãŠã³ãã䜿çšããŠçŽæ¥æ¥ç¶ããŸããã ãããã«ãPAM ã䜿çšããŠèªèšŒãããããã©ã«ãã®ãããã·ã¢ã«ãŠã³ããä»ããŠæ¥ç¶ãããã¹ãŠã®å€éšãŠãŒã¶ãŒãæš©éãä¿æãã MySQL ã¢ã«ãŠã³ãã«ããããããããã«ããŸãã ãããã·ã¢ã«ãŠã³ãã䜿çšããŠæ¥ç¶ãããŠãŒã¶ãŒã¯ãå€éšãŠãŒã¶ãŒã«èš±å¯ãããããŒã¿ããŒã¹æäœã決å®ããæš©éã§ããããããã® MySQL ã¢ã«ãŠã³ãã®ããããã«ããããããŸãã
ããã«ç€ºãæé ã§ã¯ãUnix ãã¹ã¯ãŒãèªèšŒã䜿çšãããŸãã 代ããã« LDAP ã䜿çšããã«ã¯ãååã§ç€ºãããããã·ãŠãŒã¶ãŒã䜿çšããªã PAM LDAP èªèšŒã®æé ãåç §ããŠãã ããã
åŸæ¥ã® Unix ãã¹ã¯ãŒãã¯ã/etc/shadow ãã¡ã€ã«ã䜿çšããŠãã§ãã¯ãããŸãã ãã®ãã¡ã€ã«ã«é¢é£ããŠçºçããå¯èœæ§ã®ããåé¡ã®è©³çްã¯ãUnix ãã¹ã¯ãŒãã¹ãã¢ãžã® PAM èªèšŒã¢ã¯ã»ã¹ ãåç
§ããŠãã ããã
Unix èªèšŒã§ããŠãŒã¶ãŒåã
antonioã§ãã¹ã¯ãŒããantonio_passwordã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãžã®ãã°ã€ã³ãèš±å¯ãããŠããããšã確èªããŸããantonioãrootãŸãã¯usersPAM ã°ã«ãŒãã®ã¡ã³ããŒã§ããããšã確èªããŸãã-
/etc/pam.d/mysql-unixãšããååã®ãã¡ã€ã«ãäœæããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒãä»ããŠmysql-unixPAM ãµãŒãã¹ãèªèšŒããããã« PAM ãèšå®ããŸãã ãã¡ã€ã«ã®å 容ã¯ã·ã¹ãã ã«äŸåããããã/etc/pam.dãã£ã¬ã¯ããªå ã®æ¢åã®ãã°ã€ã³é¢é£ãã¡ã€ã«ããã§ãã¯ããŠãããããã©ã®ããã«è¡šç€ºããããã確èªããŸãã Linux ã§ã¯ãmysql-unixãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸã:#%PAM-1.0 auth include password-auth account include password-authmacOS ã®å Žåã¯ã
password-authã§ã¯ãªãloginã䜿çšããŸããPAM ãã¡ã€ã«åœ¢åŒã¯ãäžéšã®ã·ã¹ãã ã§ç°ãªãå ŽåããããŸãã ããšãã°ãUbuntu ããã³ãã®ä»ã® Debian ããŒã¹ã®ã·ã¹ãã ã§ã¯ããããã«æ¬¡ã®ãã¡ã€ã«ã³ã³ãã³ãã䜿çšããŸã:
@include common-auth @include common-account @include common-session-noninteractive -
å€éš PAM ãŠãŒã¶ãŒããããã·èšå®ãããã¢ã«ãŠã³ãã«ãããããããã©ã«ããããã·ãŠãŒã¶ãŒ (
''@'') ãäœæããŸã:CREATE USER ''@'' IDENTIFIED WITH authentication_pam AS 'mysql-unix, root=developer, users=data_entry';ããã§ãèªèšŒæååã«ã¯ PAM ãµãŒãã¹å (
mysql-unix) ãå«ãŸããŠãããUnix ãã¹ã¯ãŒããèªèšŒããŸãã ãŸããèªèšŒæååã¯ãrootããã³usersPAM ã°ã«ãŒãå ã®å€éšãŠãŒã¶ãŒããããããdeveloperããã³data_entryMySQL ãŠãŒã¶ãŒåã«ãããããŸãããããã·ãŠãŒã¶ãŒãèšå®ãããšãã¯ãPAM ãµãŒãã¹åã®ããšã« PAM ã°ã«ãŒããããã³ã°ãªã¹ããå¿ èŠã§ãã ããããªããšããã©ã°ã€ã³ã¯ãå€éšãŠãŒã¶ãŒåããé©åãªãããã· MySQL ãŠãŒã¶ãŒåãžã®ãããã³ã°ã®å®è¡æ¹æ³ãèªèã§ããŸããã
泚èšMySQL ã€ã³ã¹ããŒã«ã«å¿åãŠãŒã¶ãŒãå«ãŸããŠããå Žåãããã©ã«ãã®ãããã·ãŠãŒã¶ãŒãšç«¶åããå¯èœæ§ããããŸãã ãã®åé¡ãšãã®å¯ŸåŠæ¹æ³ã®è©³çްã¯ãããã©ã«ãã®ãããã·ãŠãŒã¶ãŒãšå¿åãŠãŒã¶ãŒã®ç«¶å ãåç §ããŠãã ããã
-
ãããã·èšå®ãããã¢ã«ãŠã³ããäœæããåã¢ã«ãŠã³ãã«æ¬¡ã®æš©éãä»äžããŸã:
CREATE USER 'developer'@'localhost' IDENTIFIED WITH mysql_no_login; CREATE USER 'data_entry'@'localhost' IDENTIFIED WITH mysql_no_login; GRANT ALL PRIVILEGES ON mydevdb.* TO 'developer'@'localhost'; GRANT ALL PRIVILEGES ON mydb.* TO 'data_entry'@'localhost';ãããã·èšå®ãããã¢ã«ãŠã³ãã¯ã
mysql_no_loginèªèšŒãã©ã°ã€ã³ã䜿çšããŠãã¯ã©ã€ã¢ã³ããã¢ã«ãŠã³ãã䜿çšã㊠MySQL ãµãŒããŒã«çŽæ¥ãã°ã€ã³ã§ããªãããã«ããŸãã 代ããã«ãPAM ã䜿çšããŠèªèšŒãããŠãŒã¶ãŒã¯ãPAM ã°ã«ãŒãã«åºã¥ããŠãããã·ã«ãã£ãŠdeveloperãŸãã¯data_entryã¢ã«ãŠã³ãã䜿çšããããšãæåŸ ãããŸãã (ããã¯ããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãããŠããããšãåæãšããŠããŸãã æé ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³6.4.1.8ããã°ã€ã³ãªãã®ãã©ã¬ãã«èªèšŒã ãåç §ããŠãã ããã) ãããã·èšå®ãããã¢ã«ãŠã³ããçŽæ¥äœ¿çšããªãããã«ä¿è·ããå¥ã®æ¹æ³ã«ã€ããŠã¯ããããã·ã¢ã«ãŠã³ããžã®çŽæ¥ãã°ã€ã³ã®é²æ¢ ãåç §ããŠãã ããã -
ãããã·ãããåã¢ã«ãŠã³ãã®
PROXYæš©éããããã·ã¢ã«ãŠã³ãã«ä»äžããŸã:GRANT PROXY ON 'developer'@'localhost' TO ''@''; GRANT PROXY ON 'data_entry'@'localhost' TO ''@''; -
mysql ã³ãã³ãã©ã€ã³ã¯ã©ã€ã¢ã³ãã䜿çšããŠã
antonioãšã㊠MySQL ãµãŒããŒã«æ¥ç¶ããŸããshell> mysql --user=antonio --password --enable-cleartext-plugin Enter password: antonio_passwordãµãŒããŒã¯ãããã©ã«ãã®
''@''ãããã·ã¢ã«ãŠã³ãã䜿çšããŠæ¥ç¶ãèªèšŒããŸãã çµæãšããŠçæãããantonioã®æš©éã¯ãantonioãã¡ã³ããŒã«ãªã£ãŠãã PAM ã°ã«ãŒãã«ãã£ãŠç°ãªããŸããantonioãrootPAM ã°ã«ãŒãã®ã¡ã³ããŒã§ããå ŽåãPAM ãã©ã°ã€ã³ã¯ãdeveloperMySQL ãŠãŒã¶ãŒåã«rootãããããããã®ååããµãŒããŒã«è¿ããŸãã ãµãŒããŒã¯ã''@''ãdeveloperã«å¯ŸããPROXYæš©éãæã£ãŠããããšã確èªããæ¥ç¶ãèš±å¯ããŸãã æ¬¡ã®ã¯ãšãªãŒã¯ã次ã«ç€ºããããªåºåãè¿ããŸã:mysql> SELECT USER(), CURRENT_USER(), @@proxy_user; +-------------------+---------------------+--------------+ | USER() | CURRENT_USER() | @@proxy_user | +-------------------+---------------------+--------------+ | antonio@localhost | developer@localhost | ''@'' | +-------------------+---------------------+--------------+ããã¯ã
antonioãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒãdeveloperMySQL ãŠãŒã¶ãŒã«ä»äžãããæš©éãæã€ããã«èªèšŒããããããã·ãããã©ã«ãã®ãããã·ã¢ã«ãŠã³ããä»ããŠè¡ãããããšã瀺ããŠããŸããantonioãrootPAM ã°ã«ãŒãã®ã¡ã³ããŒã§ã¯ãªããusersPAM ã°ã«ãŒãã®ã¡ã³ããŒã§ããå Žåãåæ§ã®ããã»ã¹ãçºçããŸããããã©ã°ã€ã³ã¯userPAM ã°ã«ãŒãã¡ã³ããŒã·ãããdata_entryMySQL ãŠãŒã¶ãŒåã«ããããããã®ååããµãŒããŒã«è¿ããŸã:mysql> SELECT USER(), CURRENT_USER(), @@proxy_user; +-------------------+----------------------+--------------+ | USER() | CURRENT_USER() | @@proxy_user | +-------------------+----------------------+--------------+ | antonio@localhost | data_entry@localhost | ''@'' | +-------------------+----------------------+--------------+ããã¯ã
antonioãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒãdata_entryMySQL ãŠãŒã¶ãŒã®æš©éãæã€ããã«èªèšŒããããã®ãããã·ãããã©ã«ãã®ãããã·ã¢ã«ãŠã³ããä»ããŠè¡ãããããšã瀺ããŠããŸãã
ã¯ã©ã€ã¢ã³ãåŽã® mysql_clear_password èªèšŒãã©ã°ã€ã³ã§ã¯ããã¹ã¯ãŒãã¯ãã®ãŸãŸæ®ããããããã¯ã©ã€ã¢ã³ãããã°ã©ã ã¯ã¯ãªã¢ããã¹ããšã㊠MySQL ãµãŒããŒã«éä¿¡ããŸãã ããã«ããããã¹ã¯ãŒãããã®ãŸãŸ PAM ã«æž¡ãããšãã§ããŸãã ãµãŒããŒåŽ PAM ã©ã€ãã©ãªã䜿çšããã«ã¯ã¯ãªã¢ããã¹ãã®ãã¹ã¯ãŒããå¿
èŠã§ãããäžéšã®æ§æã§ã»ãã¥ãªãã£ãŒã®åé¡ãçºçããå¯èœæ§ããããŸãã ãããã®ã¡ãžã£ãŒã«ããããªã¹ã¯ãæå°éã«æããããŸã:
mysql_clear_passwordãã©ã°ã€ã³ã誀ã£ãŠäœ¿çšããå¯èœæ§ãäœãããã«ã¯ãMySQL ã¯ã©ã€ã¢ã³ãã§æç€ºçã«æå¹ã«ããå¿ èŠããããŸã (ããšãã°ã--enable-cleartext-pluginãªãã·ã§ã³ã䜿çš)ã ã»ã¯ã·ã§ã³6.4.1.4ãã¯ã©ã€ã¢ã³ãåŽã¯ãªã¢ããã¹ããã©ã¬ãã«èªèšŒããåç §ããŠãã ãããmysql_clear_passwordãã©ã°ã€ã³ãæå¹ã«ããŠãã¹ã¯ãŒãã®å ¬éãåé¿ããã«ã¯ãMySQL ã¯ã©ã€ã¢ã³ãã¯æå·åãããæ¥ç¶ã䜿çšã㊠MySQL ãµãŒããŒã«æ¥ç¶ããå¿ èŠããããŸãã ã»ã¯ã·ã§ã³6.3.1ãæå·åæ¥ç¶ã䜿çšããããã® MySQL ã®æ§æããåç §ããŠãã ããã
äžéšã®ã·ã¹ãã ã§ã¯ãUnix èªèšŒã¯ãéåžžã¯ã¢ã¯ã»ã¹æš©éãå¶éãããŠãããã¡ã€ã«ã§ãã/etc/shadow ãªã©ã®ãã¹ã¯ãŒãã¹ãã¢ã䜿çšããŸãã ããã«ãããMySQL PAM ããŒã¹ã®èªèšŒã倱æããå¯èœæ§ããããŸãã æ®å¿µãªãããPAM å®è£
ã§ã¯ããããã¹ã¯ãŒããäžèŽããŸãããããšã®ãããã¹ã¯ãŒãã確èªã§ããŸããã§ããããã®åºå¥ (ããšãã°ã/etc/shadow ãèªã¿åããªããã) ã¯èš±å¯ãããŠããŸããã PAM èªèšŒã« Unix ãã¹ã¯ãŒãã¹ãã¢ã䜿çšããŠããå Žåã¯ã次ã®ããããã®æ¹æ³ã䜿çšã㊠MySQL ãããã¹ã¯ãŒãã¹ãã¢ãžã®ã¢ã¯ã»ã¹ãæå¹ã«ã§ããŸã:
-
MySQL ãµãŒããŒã
mysqlãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¢ã«ãŠã³ãããå®è¡ãããŠããå Žåã¯ã/etc/shadowã¢ã¯ã»ã¹æš©ãæã€shadowã°ã«ãŒãã«ãã®ã¢ã«ãŠã³ããé 眮ããŸã:/etc/groupã§shadowã°ã«ãŒããäœæããŸããmysqlãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒã/etc/groupã®shadowã°ã«ãŒãã«è¿œå ããŸãã-
/etc/groupãshadowã°ã«ãŒãã«å²ãåœãŠãã°ã«ãŒãã®èªåãæš©éãæå¹ã«ããŸã:chgrp shadow /etc/shadow chmod g+r /etc/shadow MySQL Server ãåèµ·åããŸãã
-
pam_unixã¢ãžã¥ãŒã«ããã³ unix_chkpwd ãŠãŒãã£ãªãã£ã䜿çšããŠããå Žåã¯ã次ã®ããã«ãã¹ã¯ãŒãã¹ãã¢ãžã®ã¢ã¯ã»ã¹ãæå¹ã«ããŸã:chmod u-s /usr/sbin/unix_chkpwd setcap cap_dac_read_search+ep /usr/sbin/unix_chkpwdãã©ãããã©ãŒã ã«å¿ããŠãunix_chkpwd ãžã®ãã¹ã調æŽããŸãã
PAM èªèšŒãã©ã°ã€ã³ã¯ãåæåæã« AUTHENTICATION_PAM_LOG ç°å¢ã®å€ãèšå®ãããŠãããã©ããããã§ãã¯ããŸã (å€ã¯åé¡ãããŸãã)ã ãã®å Žåããã©ã°ã€ã³ã䜿çšãããšãæšæºåºåãžã®èšºæã¡ãã»ãŒãžã®ãã®ã³ã°ãæå¹ã«ãªããŸãã ãããã®ã¡ãã»ãŒãžã¯ããã©ã°ã€ã³ãèªèšŒãå®è¡ãããšãã«çºçãã PAM é¢é£ã®åé¡ã®ãããã°ã«åœ¹ç«ã€å ŽåããããŸãã
äžéšã®ã¡ãã»ãŒãžã«ã¯ãPAM ãã©ã°ã€ã³ãœãŒã¹ãã¡ã€ã«ãšè¡çªå·ãžã®åç §ãå«ãŸããŠããŸããããã䜿çšãããšããã©ã°ã€ã³ã¢ã¯ã·ã§ã³ããããçºçããã³ãŒãå ã®å Žæã«ãããç·å¯ã«é¢é£ä»ããããšãã§ããŸãã
æ¥ç¶é害ããããã°ããæ¥ç¶è©Šè¡äžã«äœãèµ·ãã£ãŠãããã倿ããå¥ã®ææ³ã¯ãPAM èªèšŒãæ§æããŠãã¹ãŠã®æ¥ç¶ãèš±å¯ããã·ã¹ãã ãã°ãã¡ã€ã«ã確èªããããšã§ãã ãã®æ¹æ³ã¯ temporary ããŒã¹ã§ã®ã¿äœ¿çšããæ¬çªãµãŒããŒã§ã¯äœ¿çšããªãã§ãã ããã
/etc/pam.d/mysql-any-password ãšãã PAM ãµãŒãã¹ãã¡ã€ã«ã次ã®å
å®¹ã§æ§æããŸã (äžéšã®ã·ã¹ãã ã§ã¯åœ¢åŒãç°ãªãå ŽåããããŸã):
#%PAM-1.0
auth required pam_permit.so
account required pam_permit.so
PAM ãã©ã°ã€ã³ã䜿çšããã¢ã«ãŠã³ããäœæããmysql-any-password PAM ãµãŒãã¹ã«ååãä»ããŸã:
CREATE USER 'testuser'@'localhost'
IDENTIFIED WITH authentication_pam
AS 'mysql-any-password';
mysql-any-password ãµãŒãã¹ãã¡ã€ã«ã䜿çšãããšãäžæ£ãªãã¹ã¯ãŒãã®å Žåã§ããèªèšŒè©Šè¡ã§ true ãè¿ãããŸãã èªèšŒã®è©Šè¡ã倱æããå Žåã¯ãæ§æã®åé¡ã MySQL åŽã«ããããšã瀺ããŸãã ãã以å€ã®å Žåã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã /PAM åŽã§åé¡ãçºçããŸãã äœãèµ·ãã£ãŠãããã確èªããã«ã¯ã/var/log/secure, /var/log/audit.log, /var/log/syslog ã/var/log/messages ãªã©ã®ã·ã¹ãã ãã°ãã¡ã€ã«ã確èªããŸãã
åé¡ç¹ãç¹å®ããããmysql-any-password PAM ãµãŒãã¹ãã¡ã€ã«ãåé€ã㊠any-password ã¢ã¯ã»ã¹ãç¡å¹ã«ããŸãã