vsftpd配置虚拟用户

vsftpd的虚拟用户可以全部映射到一个真实的系统用户上, 对于有特殊权限要求的情况可以使用虚拟用户的方式. 这个方式的认证依赖于db4-utils, 需要使用它的db_load命令生成加密的认证文件. 本文基于CentoOS6 64bit.

1, 安装和配置vsftpd

$ yum install db4-utils vsftpd
$ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.ori
$ touch /etc/vsftpd/chroot_list
$ vim /etc/vsftpd/vsftpd.conf  #根据情况修改如下内容,也可以全部COPY
anonymous_enable=NO
#必须启用本地用户,因为虚拟用户是映射到www这个本地用户来访问的
local_enable=YES
write_enable=YES
local_umask=022

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES

idle_session_timeout=600
data_connection_timeout=120

chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

#指定新的pam认证文件
pam_service_name=ftp.vuser

#启用虚拟用户并将虚拟用户映射为本地www用户
#这两项配置可以写在这里,也可以写在下面的/etc/vsftpd/virtual_conf/user1里
#guest_enable=YES
#guest_username=www

#开启userlist,并禁止user_list文件中的用户登陆
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

tcp_wrappers=YES

#虚拟用户的配置文件目录
user_config_dir=/etc/vsftpd/virtual_conf

继续阅读

CentOS 6设置防跨站

利用open_basedir将PHP脚本的操作限定在某一个目录内,可以防止跨站攻击。本文基于CentOS 6,PHP 5.5.5版本。假设我们有一个网站位于/home/wwwroot/zhukun.net。

$ vim /usr/local/php/etc/php.ini    #保证php.ini文件里的相关设定未被修改
; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
; http://php.net/open-basedir
;open_basedir =        #这一项保持默认即可
......
; 建议关闭的函数
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
......
; 确保如下项保持默认
;;;;;;;;;;;;;;;;;;;;
; php.ini Options  ;
;;;;;;;;;;;;;;;;;;;;
; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini"
;user_ini.filename = ".user.ini"

; To disable this feature set this option to empty value
;user_ini.filename =

; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes)
;user_ini.cache_ttl = 300
$ vim /home/wwwroot/zhukun.net/.user.ini    #写入如下一行
open_basedir=/home/wwwroot/zhukun.net:/tmp/:/proc/

#相关安全权限设定
$ chmod 644 /home/wwwroot/zhukun.net/.user.ini
$ chown -R root:root /home/wwwroot/zhukun.net/.user.ini
$ chattr +i /home/wwwroot/zhukun.net/.user.ini

很多人觉得,我设定的open_basedir是否有效?很简单,只要将open_basedir后面的路径改一下,重启一下PHP服务,然后观察网站是否还能正常访问即可。

Ubuntu 14.04制作本地源

因工作需要,要在一个无网络的环境下安装Ubuntu14.04并更新相关软件包,于是有了本文。Ubuntu 14.04建立本地镜像源的过程,简单记录一下。

首先肯定要在一个有网络的情况下,安装一个精简版的系统,然后利用ap-get update及install完成所有依赖软件包,下载的所有软件包位于本机的/var/cache/apt/archives/目录下

$ cd /var/cache/apt/
$ tar zcvf ~/apt.tar.gz archives/

保存好这个apt.tar.gz文件。

然后是在无网络环境的情况下,安装好了Ubuntu14.04系统

$ tar zxvf apt.tar.gz -C ~   #假定文件解压到/home/bear下,所有的deb包都在/home/bear/archives下面
$ mkdir ~/dists/trusty/main/binary-amd64 -p
$ mkdir ~/dists/trusty/main/binary-i386 -p

#安装dpkg-dev以便使用dpkg-scanpackages命令
$ sudo dpkg -i ~/archives/dpkg-dev_* ~/archives/libdpkg-perl* ~/archives/make_* ~/archives/binutils_*
$ dpkg-scanpackages archives/ /dev/null | gzip > ~/dists/trusty/main/binary-amd64/Packages.gz -r
$ dpkg-scanpackages archives/ /dev/null | gzip > ~/dists/trusty/main/binary-i386/Packages.gz -r
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.ori
$ sudo vim /etc/apt/sources.list  #将文件中的内容全部删除,然后写成如下格式
deb file:///home/bear/ trusty main

然后可以测试一下自行搭建的源是否可以正常使用了

sudo apt-get update
sudo apt-get install XXX

OpenLDAP进阶使用

OpenLDAP进阶使用过程,记录一下。

1,设定用户密码定期修改及过期时间
向条目中添加一个名为shadowAccount的objectClass, 设定如下属性(attributes):
shadowLastChange: 密码从1970年1月1日开始, 到最近一次修改, 一共间隔了多少天. 比如这里指定成16967就表示2016年6月15日. 也可以直接获取当天的日期,方法为:在系统里useradd一个用户,查看/etc/shadow中该用户的第三个值, 即是该值. 该值如果设置成0, 则表示下次登陆将强制修改密码, 用户修改密码成功以后, 该值将发生对应的变化;
shadowMin: 密码从shadowLastChange指定的日期开始, 到多少天以后才能再次修改密码, 防止某些人天天没事就修改密码, 此值设置成0表示不限制;
shadowMax: 密码从shadowLastChange指定的日期开始, 到多少天以后过期(即多少天后必须更改密码);
shadowInactive: 密码过期以后还可以登陆多少天(每次登陆都会要求更改密码), 如果超过此值指定的天数, 下次登陆时会提示Your account has expired; please contact your system administrator;
shadowWarning: 提前多少天开始警告用户密码将会过期;
shadowExpire: 密码从1970年1月1日开始, 多少天以后将会过期, 这里一般用不到;
shadowFlag: 暂时无用.

一组建议的值
shadowLastChange: 0
shadowMin: 0
shadowMax: 90 #每隔90天强制更换密码
shadowInactive: 7 #过期以后还有7天可以登陆,每次登陆都会提示修改密码
shadowWarning: 8 #提前8天开始提示密码即将过期

Ubuntu系统下打开Atom编辑器时提示Xlib: extension “XInputExtension” missing on display “:5”.

Ubuntu系统下打开Atom编辑器时提示Xlib: extension “XInputExtension” missing on display “:5”.的过程, 记录一下. 本文同时适用于Ubuntu 12.04和14.04.

wget https://github.com/atom/atom/releases/download/v1.7.4/atom-amd64.deb
sudo dpkg -i atom-amd64.deb

$ atom 1.txt
Xlib:  extension "XInputExtension" missing on display ":5".
Xlib:  extension "XInputExtension" missing on display ":5".
libGL error: failed to load driver: swrast
App load time: 891ms
Xlib:  extension "XInputExtension" missing on display ":5".
Xlib:  extension "XInputExtension" missing on display ":5".

解决办法

在系统里找到libxcb.so.1
sudo cp /usr/lib/x86_64-linux-gnu/libxcb.so.1 /usr/share/atom/
cd /usr/share/atom
sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/' libxcb.so.1

继续阅读

OpenLDAP提示ldap_result: Can’t contact LDAP server (-1)

近日, 出现在频繁登陆不了LDAP服务的情况, 登陆时总提示ldap_result: Can’t contact LDAP server (-1)的错误,

检查系统日志, 出现如下错误

slapd[1044]: warning: cannot open /etc/hosts.deny: Too many open files

基本上可以判断, slapd进程的文件句柄数量达到限制了.

原因分析

$ pidof slapd | xargs lsof -a -p | wc -l    #查看slapd当前的文件句柄数量

$ cat /proc/`pidof slapd`/limits    #查看系统对slapd进程的文件句柄数量限制
Limit                     Soft Limit           Hard Limit           Units     
……
Max open files            4096                 4096                 files     
……

$ ulimit -a    #也可以通过这条命令来查看
……
open files                      (-n) 1024
……

“open files (n) 1024 “是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目). 这个值可用ulimit命令来修改, 但ulimit命令修改的数值只对当前登录用
户的目前使用环境有效, 系统重启或者用户退出后就会失效.

cat /proc/sys/fs/file-max    #查看系统总限制
cat /proc/sys/fs/file-nr    #查看系统目前使用的文件句柄数量

解决办法
不想重启的话,可以按照如下办法来解决

$ vim /etc/init.d/slapd
function start() {          #找到start()函数
……
        harg="$SLAPD_URLS"
        ulimit -HSn 4096    #添加这一行
……

$ /etc/init.d/slapd restart

然后可以切换到一个普通用户, 执行ulimit -a看看是否发生了变化.

建议采取的办法

$ vim /etc/security/limits.conf    #添加如下两行,注意slapd进程使用的用户是ldap
ldap		soft	nofile		4096
ldap		hard	nofile		4096

然后重启即可.

参考文档:
Troubleshooting slapd error: too many open files

====================================================

2016.07.27补充:

公司使用的OpenLDAP, 在/etc/security/limits.conf指了soft和hard均为4096, 重启以后现在soft limit又变成1024, 但hard limit变成了4096. 经过一翻搜索得知, 原来OpenLDAP进程启动时会自行修改soft limit. 解决办法为

$ vim /etc/sysconfig/ldap    #指定如下参数
......
SLAPD_ULIMIT_SETTINGS="-n 4096"
......

Ubuntu系统里可能是/etc/default/ldap(不确定).

Linux内核参数设置sysctl命令详解

sysctl是一个允许您改变正在运行中的Linux系统的接口. 它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能. 用sysctl可以读取设置超过五百个系统变量. 基于这点, sysctl提供两个功能:读取和修改系统设置.

常用参数

-w 临时改变某个指定参数的值,如sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

以下是实例

$ sysctl -a     #查看所有可读变量

$ sysctl net.ipv4.ip_forward    #查看某个变量
net.ipv4.ip_forward = 1

$ sysctl -n net.ipv4.ip_forward    #获取某个变量的值
1

$ sysctl -w kernel.yama.ptrace_scope=0   #临时修改某个变量的当前值,即虚拟文件系统/proc下的值,重启失效
kernel.yama.ptrace_scope = 0

$ echo 1 > /proc/sys/net/ipv4/ip_forward  #临时修改某个变量的当前值,效果同上

#使用sed命令永久修改某值
#把kernel.yama.ptrace_scope开头的行修改为后面的值,注意第2个/后面有个c表示change
$ sudo sed -i "/^kernel.yama.ptrace_scope/ckernel.yama.ptrace_scope = 0" /etc/sysctl.d/10-ptrace.conf
$ sysctl -p    #将sysctl.conf文件中的修改读取到系统中,即虚拟文件系统/proc下的值

继续阅读

Page 6 of 149« First...456789...203040...Last »