作者: 8bto

  • DEDECMS出现 Call to undefined function parcv() in \include\dedesql.class.php的解决方法

    function ParCv() 并没有封装在类 dedesql.class.php里

     

    解决方法 打开include/dedesql.class.php

     

    找到

     

    if(isset($GLOBALS[‘arrs1’]))

    {

    $v1 = $v2 = ”;

    for($i=0;isset($arrs1[$i]);$i++)

    {

    $v1 .= ParCv($arrs1[$i]);

    }

    for($i=0;isset($arrs2[$i]);$i++)

    {

    $v2 .= ParCv($arrs2[$i]);

    }

    $GLOBALS[$v1] .= $v2;

    }

     

    替换为

     

    if(isset($GLOBALS[‘arrs1’]))

    {

    $v1 = $v2 = ”;

    for($i=0;isset($arrs1[$i]);$i++)

    {

    $v1 .= chr($arrs1[$i]);

    }

    for($i=0;isset($arrs2[$i]);$i++)

    {

    $v2 .= chr($arrs2[$i]);

    }

    $GLOBALS[$v1] .= $v2;

    }

  • linux的mount挂载命令详解

    挂接命令(mount)

    首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。

    命令格式:

    mount [-t vfstype] [-o options] device dir

    其中:

    1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:

    光盘或光盘镜像:iso9660

    DOS fat16文件系统:msdos

    Windows 9x fat32文件系统:vfat

    Windows NT ntfs文件系统:ntfs

    Mount Windows文件网络共享:smbfs

    UNIX(LINUX) 文件网络共享:nfs

    2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:

    loop:用来把一个文件当成硬盘分区挂接上系统

    ro:采用只读方式挂接设备

    rw:采用读写方式挂接设备

    iocharset:指定访问文件系统所用字符集

     3.device 要挂接(mount)的设备。

    4.dir设备在系统上的挂接点(mount point)。

     

    1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。

    #cp /dev/cdrom /home/sunky/mydisk.iso 或

    #dd if=/dev/cdrom of=/home/sunky/mydisk.iso

    注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso

    2、将文件和目录制作成光盘镜像文件,执行下面的命令。

    #mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir

    注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk

    3、光盘镜像文件的挂接(mount)

    #mkdir /mnt/vcdrom

    注:建立一个目录用来作挂接点(mount point)

    #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

    注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了

    挂接移动硬盘

    对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

    [root /]# fdisk -l

    Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes

    255 heads, 63 sectors/track, 8924 cylinders

    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 1 4 32098+ de Dell Utility

    /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS

    /dev/sda3 2555 7904 42973875 83 Linux

    /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)

    /dev/sda5 7905 8924 8193118+ 82 Linux swap

    在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 — /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况

    [root /]# fdisk -l

    Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes

    255 heads, 63 sectors/track, 8924 cylinders

    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 1 4 32098+ de Dell Utility

    /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS

    /dev/sda3 2555 7904 42973875 83 Linux

    /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)

    /dev/sda5 7905 8924 8193118+ 82 Linux swap

    Disk /dev/sdc: 40.0 GB, 40007761920 bytes

    255 heads, 63 sectors/track, 4864 cylinders

    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System

    /dev/sdc1 1 510 4096543+ 7 HPFS/NTFS

    /dev/sdc2 511 4864 34973505 f Win95 Ext’d (LBA)

    /dev/sdc5 511 4864 34973473+ b Win95 FAT32

    大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。

    #mkdir -p /mnt/usbhd1

    #mkdir -p /mnt/usbhd2

    注:建立目录用来作挂接点(mount point)

    #mount -t ntfs /dev/sdc1 /mnt/usbhd1

    #mount -t vfat /dev/sdc5 /mnt/usbhd2

    注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。

    #mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1

    #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2

    linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。

    #mount /dev/sdc1 /mnt/usbhd1

    挂接U盘

    使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

    #mkdir -p /mnt/usb

    注:建立一个目录用来作挂接点(mount point)

    #mount -t vfat /dev/sdd1 /mnt/usb

    注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。

    #mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb

    挂接Windows文件共享

    Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。

    当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:

    # mkdir –p /mnt/samba

    注:建立一个目录用来作挂接点(mount point)

    # mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba

    注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享

    挂接UNIX系统NFS文件共享

    类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。

    在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。

    1、Solaris系统NFS服务端配置方法如下:

    (1)修改 /etc/dfs/dfstab, 增加共享目录

    share -F nfs -o rw /export/home/sunky

    (2)启动nfs服务

    # /etc/init.d/nfs.server start

    (3)NFS服务启动以后,也可以使用下面的命令增加新的共享

    # share /export/home/sunky1

    # share /export/home/sunky2

    注:/export/home/sunky和/export/home/sunky1是准备共享的目录

    2、linux系统NFS服务端配置方法如下:

    (1)修改 /etc/exports,增加共享目录

    /export/home/sunky 10.140.133.23(rw)

    /export/home/sunky1 *(rw)

    /export/home/sunky2 linux-client(rw)

    注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:

    10.140.133.23 linux-client

    (2)启动与停止NFS服务

    /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)

    /etc/rc.d/init.d/nfs start 启动NFS服务

    /etc/rc.d/init.d/nfs stop 停止NFS服务

    注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。

    3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享

    # mkdir –p /mnt/nfs

    注:建立一个目录用来作挂接点(mount point)

    #mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs

    注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。

    如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。

    权限问题:

    假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack 希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是

    這樣寫的:

    /home/jack *(rw,all_squash,anonuid=1818,anongid=1818)

    這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這

    目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是

    1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等

    2. client 端的 jack (uid,gid=1818) 我可以做:

    rm -rf server_jack/*

    cp something server_jack/

    mkdir server_jack/a

  • 给pidgin安装pidgin-lwqq插件

    pidgin很好安装,源里面有,直接aptitude install pidgin即可安装完成。

    pidgin-lwqq安装则较为麻烦一点。首先git clone https://github.com/xiehuc/pidgin-lwqq.git pidgin-lwqq,如果没有git的先安装aptitude install git ,然后再安装pidgin-lwqq所需要的依赖包apt-get install build-essential cmake pkg-config libglib2.0-dev libcurl4-openssl-dev libpurple-dev。安装完这些依赖包后开始编译:

    git submodule init

    git submodule update

    mkdir build;cd build

    cmake ..

    make

    sudo make install

  • gpasswd命令

    1.功能作用
    用户组管理命令

    2.位置
    /usr/bin/gpasswd

    3.格式用法
    gpasswd [option] GROUP

    4.主要参数
    -a, –add USER 添加用户到组
    -d, –delete USER 从组删除用户
    -h, –help 显示帮助信息
    -r, –remove-password 删除密码
    -R, –restrict 限制用户登入组,只有组中的成员才可以用newgrp加入该组
    -M, –members USER,… 指定组成员和-A的用途差不多
    -A, –administrators ADMIN,…指定管理员

    5.应用实例
    1、添加用户到组
    sudo gpasswd -a tom webadmin

    2、用户从组中删除
    sudo gpasswd -d tom webadmin

    3、给用户组设置密码
    sudo gpasswd webadmin

    4、将tom提升为webadmin组管理员
    gpasswd -A tom webadmin

    5、删除组密码
    gpasswd -r webadmin

    6、禁止其他用户切换到该组
    gpasswd -R webadmi

  • add-apt-repository

    我们可以使用 “add-apt-repository” 脚本添加 ppa 到当前的库中并且自动导入公钥。 再终端下使用下面的语法:
    add-apt-repository ppa: 举个例子:安装最新的audacious(ubuntu下)
    sudo add-apt-repository ppa:nilarimogard/webupd8
    sudo apt-get update
    sudo apt-get install audacious
    注:
    add-apt-repository 是由 python-software-properties 这个工具包提供的
    所以要先安装python-software-properties 才能使用 add-apt-repository
    否则会显示“command not found”
    安装方法:apt-get install python-software-properties

    删除:add-apt-repository –remove ppa:即可

  • Gedit中文乱码解决方法

    本文针对gnome桌面
    直接ALT+F2 输入dconf-editor,展开/org/gnome/gedit/preferences/encodings
    auto-detected的Value中加入 ‘GB18030’ ,加在CURRENT前面;

  • Debian不能添加VPN?

    一直用windows 桌面,添加VPN客户端只需要上控制面板点几下就OK,今天在debian桌面上想VPN一下出去透透气,可是在网络配置里的添加VPN按钮是灰色的。如下图

    vpn-网络连接

    找了半天终于找到解决方法了:apt-get install network-manager-pptp-gnome

  • chmod命令setuid setgid sticky bit说明

    permission的符号模式表:

    模式 名字 说明
    r 设置为可读权限
    w 设置为可写权限
    x 执行权限 设置为可执行权限
    X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
    s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
    t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

     

    一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.

    如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.
    setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.
    setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
    sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限,

    则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky
    bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件.

    下面说一下如何操作这些标志:
    操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,
    1) chmod u+s temp — 为temp文件加上setuid标志. (setuid 只对文件有效)
    chmod g+s tempdir — 为tempdir目录加上setgid标志 (setgid 只对目录有效)
    chmod o+t temp — 为temp文件加上sticky标志 (sticky只对文件有效)

    2) 采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下,
    abc
    a – setuid位, 如果该位为1, 则表示设置setuid
    b – setgid位, 如果该位为1, 则表示设置setgid
    c – sticky位, 如果该位为1, 则表示设置sticky
    设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如
    rwsrw-r– 表示有setuid标志
    rwxrwsrw- 表示有setgid标志
    rwxrw-rwt 表示有sticky标志
    那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)
    这三个权限的数字位可以这么理解
    [root@server3 test]# 1 1 1
    [root@server3 test]# rw s rws rwt
    [root@server3 test]#
    [root@server3 test]# SUID SGID Sticky
    所以,可以得出
    chmod 4777是设sid
    chmod 2777是设置gid
    chmod 1777是设sticky
    常用操作
    找出所有危险的目录(设置目录所有人可读写却没有设置sticky位的目录)
    find / -perm -0007 -type d
    找出所有设置了suid的文件
    find / -perm -4000 -type f

  • samba passwd的几种方式

    passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。

     

    1.smbpasswd

     

    passdb backend = smbpasswd

     

    该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。

     

    smbpasswd -a 用户名 #添加一个samba用户

    smbpasswd -d 用户名 #禁用一个samba用户

    smbpasswd -e 用户名 #恢复一个samba用户

    smbpasswd -x 用户名 #删除一个samba用户

     

    2.tdbsam

     

    passdb backend = tdbsam

     

    该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb 用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户并由其pdbedit管 理。

     

    用户的建立可以先用mksmbpasswd建立一个smppasswd文件,然后用pdbedit将文件里的用户导入数据库。

     

    cat /etc/passwd | mksmbpasswd > /etc/samba/smbpasswd

     

    pdbedit命令的参数很多,我们列出几个主要的:

     

    pdbedit -i smbpasswd:/etc/samba/smbpasswd

    pdbedit -a username:新建Samba账户。

    pdbedit -x username:删除Samba账户。

    pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。

    pdbedit -Lv:列出Samba用户列表的详细信息。

    pdbedit -c “[D]” –u username:暂停该Samba用户的账号。

    pdbedit -c “[]” –u username:恢复该Samba用户的账号。

     

    3.ldapsam

     

    passdb backend = smbpasswd

     

    该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”。

     

    注:samba3.x的早期版本默认使用tdb库也就是smb.conf默认设定为passdb backend = tdbsam,只需要注释掉该行添加smb passwd file = /etec/samba/smbpasswd即可使用smbpasswd存储加密密钥。samba3.5.6更加规范了passdb backend参数的使用,取消了smb passwd file设定,如果简单注释掉passdb backend参数,密钥文件也不会被存储到smbpasswd。所以很多人说怎么修改smb.conf的配置,smbpasswd文件都无法生成,就算 手工创建,内容也是0字节。

     

    这里只能说samba版本升级了,规则也变化了。现在无论是使用tdb数据库存储密钥还是smbpasswd文本存储密钥都要设定相对应的 passdb backend参数。要用传统的文本方式存储只需这样设定passdb backend = smbpasswd:/etc/samba/smbpasswd(后面跟的是绝对路径)>,不要再画蛇添足的写上smb passwd file = /etec/samba/smbpasswd,该参数已经不适用于新版本的samba了。

     

    注意,这里的用户名必须是linux中存在的用户,可以使用useradd命令在系统中添加一个用户,然后再增加一个对应的samba用户,也 就是一个用户名使用的是两套密码。一个是系统用户密码,另一个密码存储在/etc/samba/smbpasswd文件中的samba密码,这样可以防止 系统用户密钥外泄带来的安全隐患。

     

    除了上面的措施外,samba还提供了一个更安全的方法,用户名映射功能,这样做的好处是防止系统内的真实用户名暴露,在smb.conf中增 加username map = /etc/samba/smbuser设定,再手工建立该文件。username map参数详解,比如有一个系统用户名为shaogroup.com,同时我们也设定其为samba的登录名,虽然是两套独立的密码,但依然告诉了用户,我系统内 也存在shaogroup.com这个用户。严格的说这也是违背系统安全规则的,不法人士可能会利用该用户名暴力猜解获得系统内帐户权限。samba提供的用户名 映射功能,只需编辑smbuser文件,格式为:真实的用户名 = 映射出的用户名(随便自定义);shaogroup.com = nas_guest nas_nobody(可以映射出多个用户名,注意中间的空格)。设定完成后,我们只需将nas_guest告诉用户即可,无须担心真实的 shaogroup.com用户名暴露。

  • FreeBSD系统优化防止ddos

    1)这个话题有点大,我相信我做的只是其中很小的一部分,同时很多人也会问我,是不是要编译内核,这边的回答是不需要编译任何内核,只需要copy文件,然后重启一下服务器就可以了。

     

    2)加载文件修改

    # vi /boot/loader.conf #加入如下文本

    kern.dfldsiz=”2147483648″ # Set the initial data size limit

    kern.maxdsiz=”2147483648″ # Set the max data size

    kern.ipc.nmbclusters=”0″ # Set the number of mbuf clusters

    kern.ipc.nsfbufs=”66560″ # Set the number of sendfile(2) bufs

    ##解释:

    a. 第一,第二行主要是为了突破1G内存设置的

    b. 第三行其实是bsd的一个bug,当系统并发达到一个数量级的时候,系统会crash,这个是非常糟糕的事情,所幸更改了这个参数后,在高并发的时候,基本可以没有类似情况,当然非常bt的情况,还得进一步想办法

    c. 第四行是读取的文件数,如果你下载的文件比较大,且比较多,加大这个参数,是非常爽的

     

    3)Sysctl修改

    #vi /etc/rc.local

    sysctl kern.ipc.maxsockets=100000 ##增加并发的socket,对于ddos很有用

    sysctl kern.ipc.somaxconn=65535 ##打开文件数

    sysctl net.inet.tcp.msl=2500 ##timeout时间

     

    4)通过上述的简单优化,会给你带来意外的惊喜,如果有兴趣的兄弟,可以尝试一下看看,绝无副作用。