admin 发布的文章

个人机器需要开个文件共享,Linux机器懒得配置SMB,就直接安装了ProFtpd,以做FTP服务器

Ubuntu安装挺简单,可使用就不那么友好了,配合GAdmin-Proftpd,一样不好用。

首先就卡在用户上,默认ftp用户等等都登录不进,各种认证失败,麻烦死了

搜索一下资料,可以支持Sqlite3做后端用户认证

就修改了一下Proftpd的配置,首先在modules.conf打开sql认证的终端

LoadModule mod_sql.c

......

# Install proftpd-mod-sqlite and decomment the previous
# mod_sql.c module to use this
LoadModule mod_sql_sqlite.c

然后再配置Sqlite3的配置,直接从网络上抄下来的,内容直接存为一个文件,放在/etc/proftp.d/conf.d/目录下

#首先来说这俩,定义proftpd以什么身份来运行,跟apache里的是一个意思
#我是习惯了apache定义为www用户和www组,配置proftpd也就这样了
#以什么身份运行,我个人感觉没啥特别意义,关键是虚拟用户对实体用户的映射!
User ftp
Group nobody
#sqlite2跟3差别较大,各软件平台对其支持也是分开来的,比如PHP
#这里就是指明,使用sqlite3
SQLBackend sqlite3
#数据库文件的绝对路径,一定要绝对
SQLConnectInfo /usr/local/lib/ftpd.db
#数据库内虚拟用户的密码认证方式
#我认为Backend的意思就是数据库自己的认证方式,比如mysql的password方案
#该方案可以指定多种,使用空格隔开,按照先后,依次try
#下面这句的意思就是“先用sqlite自己的认证方式(我用的明文,其他解决方案没研究)
#如果不行,再使用crypt(3)的方案”,实际配置文件里我只要了一个Plaintext
SQLAuthTypes Plaintext Backend Crypt
#自定义存放用户信息的表和字段
#下面这句的意思就是
#users表 里的 字段:用户名 密码 系统映射uid 系统映射gid 主目录 shell路径
#切记:表和字段的名字可以随便起(跟实际数据库中的表和字段相对应),但顺序不可乱
#按照我对英文howto的理解,前4个字段名是必须要设置的,后两个如果自己用不上
#必须使用NULL来填补,这样mod_sql模块就不会去检索这俩字段了
SQLUserInfo users user_name user_passwd uid gid home_dir NULL
#如果主目录字段名设置为NULL,那么这里这个就必须要定义
#这个是用来定义那些没有“主目录定义的用户”的主目录,有点绕口:P
#SQLDefaultHomedir “/tmp”
#这个参数设置为off的意思,是不让proftpd去检查该FTP用户映射到系统里的用户的shell
#就是说,有没有shell,我都让你登陆。特别是上面的字段,将shell路径这个设置为了NULL
RequireValidShell off
#组信息,没啥意思,就这么放着吧,意思跟上面那个SQLUserInfo一样
#表名 组名 组id 成员
SQLGroupInfo groups group_name gid members
#这里是用户身份认证的程度,只验证user,连带group啥的都验证
#图简单,我这里只验证user这一层
SQLAuthenticate users
#设置ProFTPD允许登陆的最小UID,这个UID是映射到linux系统内实际用户的UID,小于这个值将不允许登陆
#这个值如果不设置,系统默认的是999,在很多国内的文章里,uid和gid都是设置5000多
#所以即使不管这个值,也不会有问题,可是如果你跟我一样,映射用户的uid和gid都小于999了,就要注意它了
#我的www用户的uid和gid都是504,在这里,卡了我有一个多小时,TNND
SQLMinUserUID 1000
#这两个的意思,是所有未在数据库中定义uid和gid的用户的默认uid及gid
SQLDefaultUID 1001
SQLDefaultGID 1002

最后建立SQLITE3的数据库

执行sqlite3 /usr/local/lib/ftpd.db

输入如下两个SQL语句,分别创建表,及插入一个用户 

CREATE TABLE "users" ("user_name" varchar(20), "user_passwd" varchar(50), "uid" int(11) NOT NULL DEFAULT 1001, "gid" int(11) NOT NULL DEFAULT 1002, "home_dir" varchar(200), "shell" varchar(200));

INSERT INTO "users" VALUES('test','test',1001,1002,'/home/www/ftp/test',NULL);

 使用test用户就可以登录了。

表的uid和gid的默认值都设置为了1001/1002,即XXX用户在系统内的uid和gid的值。新添加字段时,这两个字段我也设置了。XXX用户和组在我系统内是早就建好的,uid和gid分别都是1001/1002。

通过这两个字段的值,就完成了proftpd内的虚拟用户跟系统内实体用户的映射 

如果插入的虚拟用户的UID与GID都是1000,那创建的文件/目录就归属于当前用户了(大多是系统建立时的第一个用户)

然后配置目录权限,我希望做到是所有用户只允许上传、下载,不允许删除

简单配置一个文件放在/etc/proftp.d/conf.d目录下

<Limit DELE RMD> 
     DenyAll #全部匿名用户在download文件夹不能WRITE写入、删除、删除文件夹 
</Limit> 

 

配置文件备份:https://files.cnblogs.com/files/eaglexmw/proftpd.conf.tar.gz

 

脚本1:

if not store.has_key("ark_run"):
    store.set_value("ark_run", 1)
    keyboard.press_key('w')
else:
    keyboard.release_key('w')
    store.remove_value("ark_run")  

脚本2:

import time
if not store.has_key("ark_fight"):
    store.set_value("ark_fight", 1)
    while True:
        if not store.has_key("ark_fight"):
            break
        else:
            mouse.click_relative_self(0, 0, 1)
        time.sleep(0.25)
else:
    store.remove_value("ark_fight")  

脚本3:

# Enter script code
import time
if not store.has_key("ark_breeding"):
    store.set_value("ark_breeding", 1)
    while True:
        if not store.has_key("ark_breeding"):
            break
        else:
            keyboard.send_key("u")
        time.sleep(0.25)
else:
    store.remove_value("ark_breeding")

 相应键盘配置

 

在ubuntu下执行ulimit,希望修改允许的最大打开文件数,但返回“不允许的操作”。

使用ulimit -a查看当前配置

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127837
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127837
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited  

 一通搜索后,先使用如下解决办法,修改/etc下的文件,通过修改/etc/security/limits.conf这个配置文件来改变系统的默认限制。在文件的末尾追加一下内容:

* soft nofile 81920
* hard nofile 81920

 *代表除root以外的所有用户,也可以设置为特定用户的名称,soft表示软限制,nofile表示文件描述符,81920是新的默认值。

如果需要修改root,需要专门指定 root soft nofile xxx

重启系统后,root已经生效,而普通用户的终端依然没有生效,查找资料,系统的相关修改,修改办法如下:

系统级别的限制

上面说到修改只对与某一个用户有效,Linux还有系统级别的文件描述符的限制,用户级别的设置是不能超过系统级别的。修改系统级的限制可以通 过sysctl命令修改:

1
sysctl -w fs.file-max=1000000

 

 

file-max代表系统内核最多可以打开的文件描述符数量,如果要设置某个进程可以打开的文件描述符数量,可以通过修改nr_open:

1
 sysctl -w fs.nr_open=1000000

 

 

使用sysctl命令所做的修改也是临时的,要永久修改系统的限制可以通过修改/proc/sys/fs/下的文件:

1
2
echo '1000000' > /proc/sys/fs/file-max
echo '1000000' > /proc/sys/fs/nr_open

 

 

关于/proc/sys/fs/目录下各个文件的详细解释,可以阅读这篇文章fs.txt

 然而是不相关的啊

最终看到有这么一句提到

PS: ,有时候更改完后使用ulimit -SHn时仍然会报错,这是需要在/etc/pam.d/common-session中加入session required pam_limits.so 再次PS ,有时候经过上面的更改后使用ulimit -n会看到默认值并没有改变,我在ubuntu中遇到这种情况,解决办法是先使用su username登录当前用户,然后 就可以使用ulimit命令了。原因可能是gnome terminal默认是none-login的,所以我们在配置文件中的修改并没有影响到当前的terminal。

在ubuntu的终端su username,输入密码后,看到默认值已经修改成正确的了。

core file size          (blocks, -c) 0data seg size           (kbytes,-d) unlimited
scheduling priority (
-e) 0 file size (blocks, -f) unlimited
pending signals (
-i) 127837max locked memory (kbytes,-l) 16384max memory size (kbytes,-m) unlimited
open files (
-n) 81920pipe size (512 bytes, -p) 8POSIX message queues (bytes,-q) 819200real-time priority (-r) 0stack size (kbytes,-s) 8192cputime (seconds, -t) unlimited
max user processes (
-u) 127837virtual memory (kbytes,-v) unlimitedfile locks (-x) unlimited

 

…………………………………………完

 

在系统中同时安装了Dephi 2010LITE版与Delphi XE lite后,总是会有一个有问题

是因为两者都是读取C:\ProgramData\Embarcadero目录下的license文件,

因此在安装Delphi 2010正常运行后,需要备份相应的文件

而安装好Delphi XE后,先清空此目录下的文件,然后再用activator.exe执行一下reset、activator一下,运行好Delphi xe,再备份好相应文件

这样就有两份文件了,需要运行哪个,就先恢复一下相应的license文件