ストレージサーバのユーザ管理のための
ldapが管理データを操作するwebアプリを作成します。以下を実行します。
# cd /mnt/storage
# mkdir webapp
# chown apache:apache webapp
# cd webapp
# mkdir user
# cd /var/www/localhost/htdocs/
# ln -s /mnt/storage/dav/user user
# cd /mnt/storage/dav/user
# mkdir top
# cd top
# touch init.php
# touch index.php
# touch term.php
# cd ..
# mkdir group
# cd group
# touch group.php
# touch init.php
# touch term.php
# touch user.php
# touch useradd.php
# touch userdel.php
# touch useredit.php
# touch usernew.php
# mkdir webapp
# chown apache:apache webapp
# cd webapp
# mkdir user
# cd /var/www/localhost/htdocs/
# ln -s /mnt/storage/dav/user user
# cd /mnt/storage/dav/user
# mkdir top
# cd top
# touch init.php
# touch index.php
# touch term.php
# cd ..
# mkdir group
# cd group
# touch group.php
# touch init.php
# touch term.php
# touch user.php
# touch useradd.php
# touch userdel.php
# touch useredit.php
# touch usernew.php
ここで、
httpdで公開する各ディレクトリ毎にアクセス管理ができるのですが、
例えば、project1 と project2 を作成する場合について説明します。
以下を実行します。
/mnt/storage/webapp/user/top/*.phpの各ファイルの内容については最後に記します。
/mnt/storage/webapp/user/group/*.php
httpdで公開する各ディレクトリ毎にアクセス管理ができるのですが、
例えば、project1 と project2 を作成する場合について説明します。
以下を実行します。
# cd /mnt/storage/webappここで
# chown -R apache:apache user
# cd /mnt/storage/dav
# mkdir user
# cd user
# ln -s ../../webapp/user/top/index.php index.php
# ln -s ../../webapp/user/top/init.php init.php
# ln -s ../../webapp/user/top/term.php term.php
# mkdir project1
# cd project1
# vi .htaccessで内容を以下のようにします。
SSLRequireSSL続いて以下を実行します。
AuthType Basic
AuthName "hoge-project1-user"
AuthLDAPURL ldap://localhost/ou=project1,o=hoge,c=com?cn
require valid-user
# chmod 600 .htaccessproject2 についても同様に以下を実行していきます。
# ln -s ../../../webapp/user/group/group.php group.php
# ln -s ../../../webapp/user/group/init.php init.php
# ln -s ../../../webapp/user/group/term.php term.php
# ln -s ../../../webapp/user/group/user.php user.php
# ln -s ../../../webapp/user/group/useradd.php useradd.php
# ln -s ../../../webapp/user/group/userdel.php userdel.php
# ln -s ../../../webapp/user/group/useredit.php useredit.php
# ln -s ../../../webapp/user/group/usernew.php usernew.php
# echo '' > env.php
# cd ..ここで
# mkdir project2
# cd project2
# vi .htaccessで内容を以下のようにします。
SSLRequireSSL以下を実行します。
AuthType Basic
AuthName "hoge-project2-user"
AuthLDAPURL ldap://localhost/ou=project2,o=hoge,c=com?cn
require valid-user
# chmod 600 .htaccess以下を実行してパーミッションを整えます。
# ln -s ../../../webapp/user/group/group.php group.php
# ln -s ../../../webapp/user/group/init.php init.php
# ln -s ../../../webapp/user/group/term.php term.php
# ln -s ../../../webapp/user/group/user.php user.php
# ln -s ../../../webapp/user/group/useradd.php useradd.php
# ln -s ../../../webapp/user/group/userdel.php userdel.php
# ln -s ../../../webapp/user/group/useredit.php useredit.php
# ln -s ../../../webapp/user/group/usernew.php usernew.php
# echo '' > env.php
# cd /mnt/storage/dav最後になりますが、各スクリプトのソースは以下になります。
# chown -R apache:apache user
# more /mnt/storage/webapp/user/top/init.php
<?
$ldap=ldap_connect("hoge");
if(!$ldap){
echo "Could not connect to ldap server.<br/>";
exit;
}
if(!ldap_bind($ldap,"cn=root,o=hoge,c=com","<パスワード>")){
echo "Could not bind to ldap server.<br/>";
exit;
}
?>
# more /mnt/storage/webapp/user/top/term.php
<?
ldap_unbind($ldap);
?>
# more /mnt/storage/webapp/user/top/index.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>User control</h1>
<?
require("init.php");
?>
<?
$entries=ldap_search($ldap,"o=hoge,c=com","(objectclass=organizationalUnit)",array("ou"));
?>
<table border="1">
<tr><th>group</th><th>> </th></tr>
<?
for($entry=ldap_first_entry($ldap,$entries);$entry!=false;$entry=ldap_next_entry($ldap,$entry)){
$value=ldap_get_values($ldap,$entry,"ou");
printf("<tr><td>%s</td><td><a href=\"./%s/group.php?group=%s\">go</a></td></tr>\n",$value[0],$value[0],$value[0]);
}
?>
<?
require("term.php");
?>
</table>
</body>
</html>
# more /mnt/storage/webapp/user/group/init.php
<?
$ldap=ldap_connect("hoge");
if(!$ldap){
echo "Could not connect to ldap server.<br/>";
exit;
}
if(!ldap_bind($ldap,"cn=root,o=hoge,c=com","<パスワード>")){
echo "Could not bind to ldap server.<br/>";
exit;
}
require("./env.php");
?>
# more /mnt/storage/webapp/user/group/term.php
<?
ldap_unbind($ldap);
?>
# more /mnt/storage/webapp/user/group/group.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
$entries=ldap_search($ldap,"ou=".$env_group.",o=hoge,c=com","(objectclass=organizationalPerson)",array("cn"));
?>
<table border="1">
<tr><th>user</th><th>
<?
printf("<a href=\"./usernew.php?group=%s\">",$env_group);
?>
new</a></th></tr>
<?
for($entry=ldap_first_entry($ldap,$entries);$entry!=false;$entry=ldap_next_entry($ldap,$entry)){
$value=ldap_get_values($ldap,$entry,"cn");
printf("<tr><td>%s</td><td><a href="./user.php?group=%s&user=%s\">edit</a></td><td><a href=\"./userdel.php?group=%s&user=%s\">del</a></td></tr>\n",$value[0],$env_group,$value[0],$env_group,$value[0]);
}
?>
<?
require("term.php");
?>
</table>
</body>
</html>
# more /mnt/storage/webapp/user/group/user.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
$entries=ldap_search($ldap,"cn=".$_GET["user"].",ou=".$env_group.",o=hoge,c=com","(objectclass=organizationalPerson)");
$entry=ldap_first_entry($ldap,$entries);
if($entry==false){
echo "No user.<br/>";
exit;
}
$value=ldap_get_values($ldap,$entry,"cn");
?>
<form action="./useredit.php" method="post">
<?
printf("<input type=\"hidden\" name=\"group\" value=\"%s\">",$env_group);
printf("<input type=\"hidden\" name=\"cn\" value=\"%s\">",$value[0]);
?>
<table>
<?
printf("<tr><th>cn</th><td>%s</td></tr>",$value[0]);
$value=ldap_get_values($ldap,$entry,"sn");
printf("<tr><th>sn</th><td><input type=\"text\" name=\"sn\" value=\"%s\" /></td></tr>",$value[0]);
$value=ldap_get_attributes($ldap,$entry);
if($value["mail"]["count"]>0){
$value=ldap_get_values($ldap,$entry,"mail");
$mail=$value[0];
}
else
$mail="";
printf("<tr><th>mail</th><td><input type=\"text\" name=\"mail\" value=\"%s\" /></td></tr>",$mail);
?>
<tr><th>userPassword</th><td><input type="password" name="pass"></td></tr>
<tr><th align="right">(confirm)</th><td><input type="password" name="pass1"></td
></tr>
</table>
<input type="submit" value="OK">
</form>
<?
require("term.php");
?>
</body>
</html>
# more /mnt/storage/webapp/user/group/useradd.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
if($_SERVER["REMOTE_USER"]!="root"){
echo "root user only can.<br/>";
exit();
}
if($_POST["pass"]!=$_POST["pass1"]){
echo "password error.<br/>";
exit();
}
$p=exec("slappasswd -s ".$_POST["pass"]);
$data["objectclass"]="organizationalPerson";
$data["cn"]=$_POST["cn"];
$data["sn"]=$_POST["sn"];
$data["userPassword"]=$p;
$data["mail"]=$_POST["mail"];
$r=ldap_add($ldap,"cn=".$_POST["cn"].",ou=".$env_group.",o=hoge,c=com",$data);
if($r==true){
echo "OK.<br/>";
}
else{
echo "error.<br/>";
}
?>
<?
require("term.php");
?>
</body>
</html>
# more /mnt/storage/webapp/user/group/userdel.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
if($_SERVER["REMOTE_USER"]!="root"){
echo "root user only can.<br/>";
exit();
}
$r=ldap_delete($ldap,"cn=".$_GET["user"].",ou=".$env_group.",o=hoge,c=com");
if($r==true){
echo "OK.<br/>";
}
else{
echo "error.<br/>";
}
?>
<?
require("term.php");
?>
</body>
</html>
# more /mnt/storage/webapp/user/group/useredit.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
if(($_SERVER["REMOTE_USER"]!="root")&&($_SERVER["REMOTE_USER"]!=$_POST["cn"])){
echo "authentication error.<br/>";
exit();
}
if($_POST["pass"]!=$_POST["pass1"]){
echo "password error.<br/>";
exit();
}
if($_POST["pass"]!=""){
$p=exec("slappasswd -s ".$_POST["pass"]);
$data["userPassword"]=$p;
}
$data["sn"]=$_POST["sn"];
$entries=ldap_search($ldap,"cn=".$_POST["cn"].",ou=".$env_group.",o=hoge,c=com","(objectclass=organizationalPerson)");
$entry=ldap_first_entry($ldap,$entries);
if($entry==false){
echo "No user.<br/>";
exit;
}
$value=ldap_get_attributes($ldap,$entry);
if($value["mail"]["count"]==0){
$dummy["mail"]="";
ldap_mod_add($ldap,"cn=".$_POST["cn"].",ou=".$env_group.",o=hoge,c=com",$dummy);
}
$data["mail"]=$_POST["mail"];
$r=ldap_modify($ldap,"cn=".$_POST["cn"].",ou=".$env_group.",o=hoge,c=com",$data);
if($r==true){
echo "OK.<br/>";
}
else{
echo "error.<br/>";
}
?>
<?
require("term.php");
?>
</body>
</html>
# more /mnt/storage/webapp/user/group/usernew.php
<html>
<head>
<title>User control</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
require("init.php");
?>
<h1>User control - <? echo $env_group ?></h1>
<?
$entries=ldap_search($ldap,"ou=".$env_group.",o=hoge,c=com","(objectclass=organizationalPerson)",array("cn","sn","userPassword"));
$entry=ldap_first_entry($ldap,$entries);
if($entry==false){
echo "No user.<br/>";
exit;
}
$value=ldap_get_values($ldap,$entry,"cn");
?>
<form action="./useradd.php" method="post">
<?
printf("<input type=\"hidden\" name=\"group\" value=\"%s\">",$env_group);
?>
<table>
<tr><th>cn</th><td><input type="text" name="cn"></td></tr>
<tr><th>sn</th><td><input type="text" name="sn"></td></tr>
<tr><th>mail</th><td><input type="text" name="mail"></td></tr>
<tr><th>userPassword</th><td><input type="password" name="pass"></td></tr>
<tr><th align="right">(confirm)</th><td><input type="password" name="pass1"></td
></tr>
</table>
<input type="submit" value="OK">
</form>
<?
require("term.php");
?>
</body>
</html>
0 件のコメント:
コメントを投稿