用ChrootDirectory限制SFTP登录的用户只能访问指定目录且不能进行ssh登录

useradd -d /data/html/test1 -s /sbin/nologin test1 添加用户test1 不能ssh登录
passwd test1 // 修改用户密码
vim /etc/ssh/sshd_config
#Subsystem	sftp	/usr/libexec/openssh/sftp-server //将原先的注释掉

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

Subsystem	sftp	internal-sftp
Match User test1
ForceCommand	internal-sftp
ChrootDirectory	/data/html/test1/
ChrootDirectory配置的主目录权限问题,需特别注意这两点:
1. ChrootDirectory所指向的文件夹,属主必须是root,属组是sftp用户所属的用户组。
2. ChrootDirectory所指向的文件夹到系统根路径上的所有途径文件夹,属主都必须是root,且权限不允许有群组用户写入权限,即权限只能为750或755,如果任意一个是777,则会出现连接失败的问题

chown root:test1 /data/html/test1
chown -R 777 /data/html/test1/child/ //必须在test1的目录下新增一个给test1权限的问题,不能就会出现只能读不能写
最后执行
systemctl restart sshd.service

如果出现错误,执行sshd -t 查看原因

/etc/bashrc 和 /etc/profile 和 .bash_profile 的区别是什么

/etc/profile
推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;
/root/.bashrc
修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的.bashrc文件就可以了。
1./etc/bashrc,用户目录下.bashrc有什么区别?  
一个是针对整个系统所有用户的,一个是针对特定用户的./etc/bashrc修改了以后要重启系统才生效,而用户目录下.bashrc修改了以后重新登录就生效  
2./etc/profile与/etc/bashrc的区别?  
前一个主要用来设置一些系统变量,比如JAVA_HOME等等,后面一个主要用来保存一些bash的设置.   
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 
并从/etc/profile.d目录的配置文件中搜集shell的设置.  
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.  
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该  
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.  
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该  
该文件被读取.  
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.  
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.  
~/.bash_profile 是交互式、login 方式进入 bash 运行的  
~/.bashrc 是交互式 non-login 方式进入 bash 运行的  
通常二者设置大致相同,所以通常前者会调用后者。  
.bash_profile 文件在通过控制台(或远程登录, 比如ssh)登录(login)系统的时候被执行的shell脚本.  
而 .bashrc 则是在打开虚拟终端的时候才会起作用,比如在GNOME,KDE中执行rxvt

lua 处理字符串分割

local function split(szFullString, szSeparator)
    local nFindStartIndex = 1
    local nSplitIndex = 1
    local nSplitArray = {}
    while true do
       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
       if not nFindLastIndex then
        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
        break
       end
       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
       nFindStartIndex = nFindLastIndex + string.len(szSeparator)
       nSplitIndex = nSplitIndex + 1
    end
    return nSplitArray
end