LDAP用户管理,实现客户端增删改查

LDAP简称对应

o– organization(组织-公司)
ou – organization unit(组织单元/部门)
c - countryName(国家)
dc - domainComponent(域名组件)
sn – suer name(真实名称)
cn - common name(常用名称)
dn - distinguished name(专有名称)

查看用户列表

ldapsearch -x -b "ou=People,dc=163,dc=com" | grep dn

这一步需要注意:
如果是在客户端查询,需要加入-H ldap://192.168.x.x参数
如果是通过ldif导入的系统用户,其DN是uid=UserNmae,ou=People,dc=163,dc=com
而如果通过phpldapadmin或者LAM等第三方工具建立的用户,其DN是cn=UserNmae,ou=People,dc=163,dc=com
如果使用ldapsearch或者ldappasswd命令查询/修改用户信息的时候,请注意这一点

查询单个用户信息

ldapsearch -x -b "用户DN"    #根据上面的用户列表,找到用户的DN
ldapsearch -x -b "uid=ldapuser8,ou=People,dc=163,dc=com"

查看组列表

ldapsearch -x -b "ou=Group,dc=163,dc=com" | grep dn

继续阅读

解决LDAP出现ldap_bind: Invalid credentials (49)错误

LDAP最经常遇到的就是ldap_bind: Invalid credentials (49)错误,本文阐述了错误原因及解决办法:

比如在某LDAP客户端,使用rootdn(管理员)权限为某用户修改密码时

$ ldappasswd -H ldap://192.168.32.1 -x -D "cn=admin,ou=People,dc=115,dc=com" -W -S "uid=zhang3,ou=People,dc=115,dc=com"
New password: 
Re-enter new password: 
Enter LDAP Password: 
ldap_bind: Invalid credentials (49)

错误原因1:管理员DN或者用户DN错误
管理员DN是在/etc/openldap/slapd.conf中指定的rootdn,其格式
应该是”cn=admin,dc=115,dc=com”
而不是”cn=admin,ou=People,dc=115,dc=com”
而普通用户的DN才应该是”uid=zhang3,ou=People,dc=115,dc=com”。
也可以执行如下命令查看该用户的DN是否存在

查询用户列表,不需要密码
$ ldapsearch -H ldap://192.168.32.1 -x -b "ou=People,dc=115,dc=com" | grep dn

继续阅读

CentOS 6安装配置LDAP管理工具:phpldapadmin和LAM

为OpenLDAP安装配置图片化管理工具的过程,这里记录一下,本文基于Centos6。本文中第2步和第三步分别介绍了phpldapadmin和LDAP Account Manager的安装方法,它们都是基于WEB的LDAP管理工具,可以任选其一安装,也可以两者都安装。其中LDAP Account Manager相对简单,比较适合新手。

1,安装epel源及基础软件包

根据系统版本打开相应的链接:
CentOS 5 32位:http://download.fedoraproject.org/pub/epel/5/i386/
CentOS 5 64位:http://download.fedoraproject.org/pub/epel/5/x86_64/
CentOS 6 32位:http://download.fedoraproject.org/pub/epel/6/i386/
CentOS 6 64位:http://download.fedoraproject.org/pub/epel/6/x86_64/
查找“epel”,应该会找到一个“epel-release-X-X.noarch.rpm”的软件包。下载,安装之。

$ yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap php-pear

$ vim /etc/httpd/conf/httpd.conf #修改如下内容
……
DirectoryIndex index.html index.php
……


$ vim /etc/php.ini #修改如下内容
……
date.timezone = "Asia/Shanghai"
……

继续阅读

Samba用户管理

samba有三种用户密码验证方式:smbpasswd、tdbsam和ldapsam。

smbpasswd是使用一个smbpasswd文件来存储用户信息(通常位于/etc/samba/smbpasswd,文件格式类似于/etc/passwd),使用smbpasswd命令来管理用户,要添加/管理的用户必须先是系统用户。
在旧版本的Samba中,如果指定了passdb backend = smbpasswd,那么还需要指定smb passwd file =/etc/samba/smbpasswd。

tdbsam是使用一个.db的文件来存储用户信息,使用pdbedit命令来管理用户,要添加/管理的用户必须先是系统用户。

新版Samba的密码验证方式已使用tdbsam取代smbpasswd,但如果要继续延用旧版smbpasswd也是可以的。新版的tdbsam需要用pdbedit命令来管理帐号密码。

$ grep backend /etc/samba/smb.conf 
   passdb backend = tdbsam

使用新版tdbsam管理帐号

pdbedit -a username    #新建Samba账户
pdbedit -x username    #删除Samba账户
pdbedit -v username    #显示账户详细信息
pdbedit -L             #列出Samba用户列表,读取passdb.tdb数据库文件
pdbedit -Lv            #列出Samba用户列表详细信息

继续阅读

在Ubuntu上使用XFS文件系统

虽说ext4格式的文件系统支持超过16TB的容量,但一旦给16TB以上的分区扩容时,问题就来了,因为resize2fs工具不支持给16TB以上的文件系统扩容,怎么办呢?改用XFS文件系统。本文是在Ubuntu 12.04 64bit系统上配置LVM+XFS的过程,记录一下。

遇到的问题
当给lv容量超出16TB以上时,lvextend为逻辑卷扩容可以成功,但resize2fs时就会失败。因Ubuntu系统自带的e2fsprogs版本不支持扩容16TB以上的分区,谷歌了一阵,貌似最新版本的e2fsprogs可以支持超过16TB的系统分区,但升级完成以后,再次尝试resize2fs的时候,又报出如下错误:

$ sudo lvscan
  ACTIVE            '/dev/vg_02/lv-release' [5.00 TiB] inherit
  ACTIVE            '/dev/vg_02/lv-product-b' [23.80 TiB] inherit
$ sudo resize2fs /dev/vg_02/lv-product-b
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/vg_02/lv-product-b is mounted on /data/product-b; on-line resizing required
old_desc_blocks = 2791, new_desc_blocks = 3047
resize2fs: Filesystem does not support online resizing 

很搞笑,这三条提示前后互相矛盾,前面说on-line resizing required,后面说does not support online resizing。

尝试解决办法:修改blocksize
要修改blocksize的话,重新mkfs是肯定的了。这里重新格式化以后,发现根本无法mount。

$ sudo mkfs.ext4 -b 8192 /dev/dm-3
Warning: blocksize 8192 not usable on most systems.
Proceed anyway? (y,n) y
mkfs.ext4: 8192-byte blocks too big for system (max 4096)
Proceed anyway? (y,n) y
Warning: 8192-byte blocks too big for system (max 4096), forced to continue
……
Writing superblocks and filesystem accounting information: done

$ sudo mount -t ext4 -o blocksize=8192 /dev/dm-3 /data/output-b
mount: wrong fs type, bad option, bad superblock on /dev/dm-3,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

后来查了一下原因,貌似是blocksize不能超出系统的pagesize。这简直是在断我的后路呀。 继续阅读

Samba访问控制(高级权限设置)

Samba的访问控制通过hosts allow、hosts deny两个参数实现。

在Samba中使用hosts allow、hosts deny参数时,该参数可以出现在全局配置部分,用于允许或拒绝可连接到Samba服务器的客户端,也可以出现在具体的共享目录配置中用于允许或拒绝可访问该目录的客户端。如果在全局配置部分的hosts allow、hosts deny优先级与具体共享目录的配置发生冲突时会怎么样呢?通过Samba的工作过程不难看出Samba客户端首先要可以连接到Samba服务器,才能访问其共享目录,所有全局配置部分的hosts allow、hosts deny优先级与具体共享目录的配置发生冲突时使用以下规则:

1,全局配置中hosts deny指定客户端,此时无法访问Samba服务器任何共享目录;
2,全局配置中hosts allow指定客户端,分以下几种情况
(1):如具体共享目录中只指定了hosts deny且与全局配置不冲突时,客户端可以访问具体共享目录。
(2):如具体共享目录中只指定了hosts allow且是全局配置的子集时,只有具体共享目录中指定的客户端可以访问。
(3):如具体共享目录中既指定了hosts allow又指定了hosts deny时,会优先考虑hosts allow,其实再考虑hosts deny,因为在Samba中hosts allow比hosts deny优先级要高

以下是一些范例。

1,使用IP地址控制

#不允许IP地址为192.168.0.20的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = 192.168.0.20

#只允许IP地址为192.168.0.25的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = 192.168.0.25

#下例中,IP地址为192.168.0.99的客户端是可以访问Samba服务器上的smbtest目录的
#因为在Samba中hosts allow比hosts deny优先级要高
[smbtest]
   path = /test
   hosts allow = 192.168.0.99
   hosts deny = 192.168.0.99

继续阅读

SVN从Windows迁移至Linux

将多个SVN从一台Windows服务器, 迁移到Linux系统的过程, 记录一下, 本文的Linux版本为CentOS 6 64bit.

1,在Windows上导出SVN信息

svnadmin dump D:\SVN\NDS_BJ > D:\svnbak\NDS_BJ.bak
svnadmin dump D:\SVN\NDS_EVO > D:\svnbak\NDS_EVO.bak
svnadmin dump D:\SVN\NDS_FDC > D:\svnbak\NDS_FDC.bak

提示:
1, dump命令会导出每个版本的详细信息,保证了之前的历史信息不会丢失.
2, 该命令仅会导出版本信息,不会导出配置及用户名等信息,因此还需要单独备份conf目录.

2,在CentOS 6系统上安装配置SVN

yum install subversion
mkdir /data/svn
svnserve -d -r /data/svn/  #启动SVN,监听端口为3690
echo 'svnserve -d -r /data/svn/' >> /etc/rc.local

killall svnserve           #关闭SVN

初始化repository(项目库)

svnadmin create /data/svn/NDS_BJ    #建立repository

vim /data/svn/NDS_BJ/conf/svnserve.conf
取消如下几行的注释:
anon-access=none或者anon-access=read
auth-access=write
password-db=passwd
authz-db = authz

注意,取消注释时,要把每项前面的空格也删掉,否则客户端连接的时候会报出svnserve.conf:12: Option expected的错误. 继续阅读