配置rndc实现对BIND的管理

rndc介绍:
rndc是BIND安装包提供的一种控制域名服务运行的工具,可以实现在不重启BIND的情况下对zone及解析记录等配置进行更新。
软件包安装:
首先要安装BIND软件包才可以使用rndc工具,rndc和BIND可以不在同一台服务器上部署。

[root@localhost ~]# yum install -y bind

rndc配置部分:
生成rndc的通信密钥及配置文件,/dev/urandom是Linux下用来生成随机数的一个文件,这里使用-r选项调用它是为了生成通信密钥。

[root@localhost ~]# rndc-confgen -r /dev/urandom > /etc/rndc.conf

编辑刚刚生成的配置文件。

[root@localhost ~]# vim /etc/rndc.conf

转到第9行,其定义了要管理的BIND服务器的地址,按照需求对其进行修改,本实验中我的BIND服务器的地址是192.169.1.101.

default-server 192.168.1.101;

BIND配置部分:
使用vim打开rndc的配置文件,转到第十四行,此行直到末尾都是要加入到/etc/named.conf文件中的,加入后可以按照自己的需求进行修改,比如说第21行的inet选项是用来定义监听本服务器的哪些接口的(当然是监听和rndc相连的接口啦),如果想监听所有接口则将其改为0.0.0.0。第22行是定义此BIND服务器允许接受哪些rndc的管理,将127.0.0.1改成运行rndc的设备的IP地址就行。最后别忘了把注释去掉,否则配置文件是不生效的。

14 # Use with the following in named.conf, adjusting the allow list as needed:
15 # key "rndc-key" {
16 # algorithm hmac-md5;
17 # secret "YAkaS9u8kADIcBMslszUaw==";
18 # };
19 #
20 # controls {
21 # inet 127.0.0.1 port 953
22 # allow { 127.0.0.1; } keys { "rndc-key"; };
23 # };
24 # End of named.conf

以下是我的/etc/named.conf文件的完整配置(第40行到末尾是新增的配置),仅供参考,切勿复制。
运行BIND的服务器的IP:192.168.1.101
运行rndc的服务器的IP:192.168.1.100

  1 //
  2 // named.conf
  3 //
  4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  5 // server as a caching only nameserver (as a localhost DNS resolver only).
  6 //
  7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
  8 //
  9
 10 options {
 11 listen-on port 53 { any; };
 12 listen-on-v6 port 53 { ::1; };
 13 directory "/var/named";
 14 dump-file "/var/named/data/cache_dump.db";
 15 statistics-file "/var/named/data/named_stats.txt";
 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
 17 allow-query { any; };
 18 recursion yes;
 19
 20 dnssec-enable yes;
 21 dnssec-validation yes;
 22 dnssec-lookaside auto;
 23
 24 /* Path to ISC DLV key */
 25 bindkeys-file "/etc/named.iscdlv.key";
 26
 27 managed-keys-directory "/var/named/dynamic";
 28 };
 29
 30 logging {
 31 channel default_debug {
 32 file "data/named.run";
 33 severity dynamic;
 34 };
 35 };
 36
 37 include "/etc/named.rfc1912.zones";
 38 include "/etc/named.root.key";
 39
 40 # Use with the following in named.conf, adjusting the allow list as needed:
 41 key "rndc-key" {
 42 algorithm hmac-md5;
 43 secret "YAkaS9u8kADIcBMslszUaw==";
 44 };
 45 #
 46 controls {
 47 inet 192.168.1.101 port 953
 48 allow { 192.168.1.100; } keys { "rndc-key"; };
 49 };
 50 # End of named.conf

保存后重启named服务器

[root@localhost ~]# server named restart

使用rndc连接BIND并进行管理
在使用rndc连接BIND前一定要确保两台Linux服务器的时间同步,否则会报错(我做实验的时候卡在这个坑里整整一天)
可以手工修改系统时间也可以与NTP服务器同步,若你的实验用机器无法链接外网,又不想手工配置时间,则可以参考下面这篇文章,将其中一台机器配置为NTP,供另一台机器同步。

CentOS 6下配置NTP网络时间服务器


启动rndc并连接BIND。

[root@localhost ~]# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
CPUs found: 1
worker threads: 1
number of zones: 19
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

可以看到,上面的输出信息中包含了一条警告,这个其实没什么影响的,如果你有强迫症可以使用下面这条命令开启动rndc,这样就不会看到那条警告了。

[root@localhost ~]# rndc -c /etc/rndc.conf status

rndc常用管理命令:

status                    #显示bind服务器的工作状态
reload                    #重新加载配置文件和区域文件
reload zone_name          #重新加载指定区域
reconfig                  #重读配置文件并加载新增的区域
querylog                  #关闭或开启查询日志
dumpdb                    #将高速缓存转储到转储文件 (named_dump.db)
freeze                    #暂停更新所有动态zone
freeze zone [class [view]]#暂停更新一个动态zone
flush [view]              #刷新服务器的所有高速缓存
flushname name            #为某一视图刷新服务器的高速缓存
stats                     #将服务器统计信息写入统计文件中
stop                      #将暂挂更新保存到主文件并停止服务器
halt                      #停止服务器,但不保存暂挂更新
trace                     #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL               #指定 debug 的级别, trace 0 表示关闭debug
notrace                   #将调试级别设置为 0
restart                   #重新启动服务器(尚未实现)
addzone zone [class [view]] { zone-options } #增加一个zone
delzone zone [class [view]]                  #删除一个zone
tsig-delete keyname [view]#删除一个TSIG key
tsig-list                 #查询当前有效的TSIG列表
validation newstate [view]#开启/关闭dnssec

CentOS 6下部署VNC服务器

VNC简介:

VNC是Linux/UNIX下优秀的远程桌面控制软件,由客户端(vncviewer)和服务端(vncserver)两部分组成。

安装软件包:

[root@localhost ~]# yum install -y tigervnc
[root@localhost ~]# yum install -y tigervnc-server

配置前的准备工作:

正式配置VNC服务前,先添加几个系统账号用于测试。

[root@localhost ~]# useradd user1
[root@localhost ~]# useradd user2
[root@localhost ~]# useradd user3

可以不用设置密码,当然,你想设置也可以。

服务配置:

编辑VNC主配置文件。

[root@localhost ~]# vim /etc/sysconfig/vncservers

在文件末尾找如下两行。

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

复制一份,或者直接去掉这两行前面的注释也可以,修改为如下形式。

VNCSERVERS="1:user1 2:user2"
VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp -localhost"
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

其中VNCSERVERS选项用以指定允许远程登录的用户名及该用户的编号,VNCSERVERARGS选项后面接用户编号,其后定义的是该用户远程登录的参数。

VNCSERVERARGS的默认参数有如下几个:

-geometry 桌面分辨率,默认1024x768;
-nohttpd 不监听HTTP端口(58xx端口);
-nolisten tcp 不监听X端口(60xx端口);
-localhost 只允许从本机访问;
-AlwaysShared 默认只同时允许一个vncviewer连接,此参数允许同时连多个vncviewer;
-SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。

启动服务:

先切换到各个账户下为他们分别配置VNC密码,此密码可以与用户系统账户密码不同。(尝试过在root用户下为他们统一配置密码,发现行不通。。。)

[root@localhost ~]# su user1
[user1@localhost root]$ vncpasswd
Password:              #要求输入密码
Verify:                #要求再次输入密码

user2用户也要按照上面的方法配置VNC密码。

最后切换回root用户,在保证防火墙已关闭的情况下统一开启VNC服务,此时VNC进程会自动生成用户的VNC服务配置文件及日志文件到用户家目录的.vnc/下。

[root@localhost ~]# service vncserver start
正在启动 VNC 服务器:
1:user1
New 'localhost.localdomain:1 (user1)' desktop is localhost.localdomain:1
Starting applications specified in /home/user1/.vnc/xstartup
Log file is /home/user1/.vnc/localhost.localdomain:1.log
2:user2
New 'localhost.localdomain:2 (user2)' desktop is localhost.localdomain:2
Starting applications specified in /home/user2/.vnc/xstartup
Log file is /home/user2/.vnc/localhost.localdomain:2.log

注意第四行,其中的desktop is localhost.localdomain:1是告诉你,user1的VNC进程号是1,访问此VNC桌面的方法就是IP:1。而user2的进程号则是2,观察倒数第四行(算上空行~)。

如果你只想为某一用户启用VNC进程,可以切换到该用户的身份上,执行vncserver命令。注:使用此方法启用VNC服务后,在root用户下就不能再使用service命令来关闭VNC服务器了,必须使用kill -9暴力杀死用户的VNC服务器进程。

[root@localhost ~]# su user1
[user1@localhost root]$ vncserver
New 'localhost.localdomain:3 (user1)' desktop is localhost.localdomain:3
Starting applications specified in /home/user1/.vnc/xstartup
Log file is /home/user1/.vnc/localhost.localdomain:3.log

为用户指定默认桌面环境:

编辑user1的VNC配置文件。

[root@localhost ~]# vim /home/user1/.vnc/xstartup

转至文件末尾,找到下面一行。

twm &                   #指定默认使用文本界面

将其修改为以下任意一种形式,根据自己的需求选择,不要把两个都加上,如果你那么干了,那我只能感慨你是个大傻瓜了。

startkde &              #指定默认使用KDE桌面环境
gnome-session &         #指定默认使用Gnome桌面环境

使用客户端连接VNC服务器:

可以使用Windows下的VNC客户端,本实验中我在另一台安装有Desktop的CentOS6.5上使用客户端连接VNC。

安装VNC客户端,并连接VNC服务器,这里我连接user2的VNC服务。

[root@localhost ~]# yum install -y vnc
[root@localhost ~]# vncviewer 192.168.1.101:2

之后会弹出一个窗口要求你输入VNC的密码。

输入后按回车键就可以连接VNC桌面啦!

我这里出现乱码不是VNC配置的问题,而是因为安装系统的时候选择了系统语言为中文,但Desktop下却没有安装中文字体。上图中,gnmoe桌面的系统工具提醒我安装zh-cn字体,那我就安装一下吧!可以看到,安装后立刻正常了~

dhclient报错:dhclient(3108) is already running – exiting.的解决方法

问题表现:
执行dhclient命令时抛出以下错误。

dhclient(3108) is already running - exiting.
This version of ISC DHCP is based on the release available
on ftp.isc.org. Features have been added and other changes
have been made to the base software release in order to make
it work better with this distribution.
Please report for this software via the CentOS Bugs Database:
 http://bugs.centos.org/
exiting.

解决方法:
查找dhclient进程。

[root@localhost ~]# ps -ef | grep dhclient
root 3108 1    0 04:36 ?     00:00:00 dhclient
root 4140 3013 0 05:16 pts/0 00:00:00 grep dhclient

可以看到进程ID是3108,杀死他。

[root@localhost ~]# kill -9 3108

之后再次执行dhclient就正常了。

CentOS 6下安装VNC服务器失败的解决方法

看到很多朋友在CentOS 6 下安装VNC服务器的时候会出现下面这条错误:

Error Downloading Packages:
tigervnc-server-module-1.1.0-5.el6_4.1.x86_64: failure: Packages/tigervnc-server-module-1.1.0-5.el6_4.1.x86_64.rpm from c6-media: [Errno 256] No more mirrors to try.

提示说,软件包下载失败。出现这个错误,八九不离十是因为你是使用的下面这条命令来安装VNC服务器的。

yum install -y vnc-server

正确的安装命令应该是:

yum install -y tigervnc-server

使用管道命令配合正则表达式提取Linux下指定网卡的IP地址

我不想直接把命令贴出来并告诉你:“这样做就对了”,下面我会一点点带你把具体的命令分析出来。
一般情况下在Linux下查看网卡IP地址一般都用什么命令?是下面这一条,对吧。

[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:70:91:62
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe70:9162/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58059 errors:0 dropped:0 overruns:0 frame:0
TX packets:13478 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4629291 (4.4 MiB) TX bytes:2488172 (2.3 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:260 errors:0 dropped:0 overruns:0 frame:0
TX packets:260 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:35416 (34.5 KiB) TX bytes:35416 (34.5 KiB)

命令返回了好长一大串信息,可以发现ifconfig命令默认是返回所有网卡的信息的,也包括本地换回口,那如何指定其只返回某一张网卡的信息呢?可以写成下面这样。
ifconfig 接网卡名
本实验中,我只获取eth0的网卡信息。

[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:70:91:62
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe70:9162/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58090 errors:0 dropped:0 overruns:0 frame:0
TX packets:13494 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4631879 (4.4 MiB) TX bytes:2490700 (2.3 MiB)

观察上面的输出信息,会发现,IP地址是在“inet addr:”这个关键字后面输出的,那我们的第一步就是使用管道命令把含有这个关键字的行给提取出来。

[root@localhost ~]# ifconfig eth0 | grep "inet addr:"
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0

接下来要怎么做呢?
观察上方的输出,可以发现其是由好几个部分通过空格符来组合在一起的,这样我们就可以使用awk命令来过滤出第二个字段。

[root@localhost ~]# ifconfig eth0 | grep "inet addr:" | awk '{print $2}'
addr:192.168.1.11

已经离成功很近了,现在只需要去除多余的“addr:”这个字符串即可,直接在字符串中删除一段字符串这个命令我没找到,那就曲线救国呗,咱将排除“addr:”这个字符串的字符串输出出来就好(有点绕口)。数一下“addr:”这个字符串一共有五个字符,那咱们就从第六个字符开始输出,一直输出到行尾就可以整理出IP地址啦!

[root@localhost ~]# ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-
192.168.1.11

CentOS 6下配置NTP网络时间服务器

NTP服务简介:
NTP(网络时间协议)服务器,是用来保证网络中各个主机的时间的保持同步的,其时间来源一般是原子时钟,也可以是Internet上的其他NTP服务器。
安装软件包:

yum install -y ntp

配置服务:
打开配置文件

vim /etc/ntp.conf

转到第18行,可以看到如下语句,这条语句是用来定义允许访问NTP服务器的主机的,如果不配置则默认任何主机都可以访问。

 #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

这里我将其修改成只允许192.168.1.0网段的用户访问。

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

转到第22行,可以看到下面四行内容。

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

这是用来定义NTP服务器的时间来源的,默认这四个服务器因为天朝特殊的网络环境所有访问起来有点吃力,我们可以将其改为天朝自己的网络时间服务器。如果是在局域网下的话NTP是访问不了外网的,我们可以指定其与自己进行时间同步,将上方四行注释掉,并在其后加入一行新的。

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0                    #我是新加的,聚光灯往这儿打!

不要问我上边的IP地址为什么是127.127.1.0,我也不知道~~~照做就是啦,否则的话NTP是没办法正常工作的。
保存并退出后在保证防火墙与selinux均关闭的情况下启动NTP服务。

service ntpd start

测试服务:
参考此篇文章。

CentOS 6设置系统时间与网络时间服务器同步


同步成功后会有类似如下提示:

[root@localhost ~]# ntpdate 192.168.2.11
2 Oct 20:00:30 ntpdate[1538]: adjust time server 192.168.1.11 offset -0.000002 sec

Linux下使用dhcpd创建超级作用域

超级作用域用来解决DHCP单个作用域中IP地址不足的情况,同时也方便了对多个作用域的同时管理。而且超级作用域可以实现DHCP服务器只有1个IP地址却可以分发多个网段的IP的功能(不使用超级作用域的话要么给DHCP服务器增加多块网卡,要么通过DHCP中继的方式来分发不同网段的IP)。
超级作用域的配置很简单,将多个标准作用域合在一起就可以啦~
查看dhcpd的配置文档。

vim /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample

转到第90行(因软件版本号差异,实际行号可能不同,可以通过搜索关键字来查找)

 90 shared-network 224-29 {
 91 subnet 10.17.224.0 netmask 255.255.255.0 {
 92 option routers rtr-224.example.org;
 93 }
 94 subnet 10.0.29.0 netmask 255.255.255.0 {
 95 option routers rtr-29.example.org;
 96 }
 97 pool {
 98 allow members of "foo";
 99 range 10.17.224.10 10.17.224.250;
100 }
101 pool {
102 deny members of "foo";
103 range 10.0.29.10 10.0.29.230;
104 }
105 }

上面就是超级作用域的配置模板,仔细观察一下可以发现其实就是将多个标准作用域使用shared-network给套了起来。
超级作用域配置格式:

shared-network 超级作用域的名称{
   参数...
   标准作用域1{
   选项...
   参数...
   }
   标准作用域2{
   选项...
   参数...
   }
   ...
}

明白了其配置方法后,我们就可以轻松组建超级作用域了。
下面是我配置的一个例子:

vim /etc/dhcp/dhcpd.conf
  1 shared-network mydhcpdomain {
  2 default-lease-time 172800;
  3 max-lease-time 259200;
  4 option domain-name-servers 114.114.114.114;
  5 option domain-name "dns.ibadboy.net";
  6 subnet 192.168.1.0 netmask 255.255.255.0 {
  7 range 192.168.1.210 192.168.1.210;
  8 option routers 192.168.1.254;
  9 }
 10 subnet 192.168.2.0 netmask 255.255.255.0 {
 11 range 192.168.2.210 192.168.2.210;
 12 option routers 192.168.2.254;
 13 }
 14 subnet 192.168.3.0 netmask 255.255.255.0 {
 15 range 192.168.3.210 192.168.3.210;
 16 option routers 192.168.3.254;
 17 }
 18 }

使用三台PC测试,若每台PC都可正常获取IP且获取到的IP的网段都不同,则本实验成功。

vsftpd虚拟用户权限控制选项

vsfptd中虚拟用户使用的是匿名用户的权限控制选项,在下面列出的选项中挑选你需要的,加在虚拟用户的个性配置文件中即可。

anon_upload_enable=YES             #可上传
anon_mkdir_write_enable=YES        #可创建和删除文件夹
anon_other_write_enable=YES        #可文件改名和删除文件
download_enable=NO                 #不可以下载

 

vsftp在启用虚拟用户登录后本地系统用户登录无法进入家目录的解决方法

出现这种情况是因为在配置虚拟用户登录时启用了用户个性配置文件,而没有为系统用户创建个性配置文件,所以他们统统会进入到匿名用户的默认目录中,也就是/var/ftp目录中(前提是你没修改匿名用户的默认FTP目录的话)。
解决方法自然是为系统用户也分别创建个性配置文件并在其中指明其家目录。
然而这样做了之后你会发现,虽然这次可以登录到家目录了但依然无法查看、上传及下载文件。我分析原因可能是因为配置了guest_enable=YES,所以本地用户被自动映射到了guest的用户上,这样就对用户自身的家目录失去了操作权限。
想解决这个问题,就赋予其家目录777的权限,或是使用ACL权限只赋予guest所对应的用户对目录有操作权限(暂时没有找到其他好的解决办法,如果你知道,那么请告诉我~)。

vsftpd配置虚拟用户后登录提示530错误的解决方法

这个错误其实是提示你账户认证失败,那么就从有关账户认证的方面来排查错误。
查看日志。

tail /var/log/secure

下面是关于vsftpd账号登录失败的日志信息

Sep 21 07:50:44 localhost vsftpd[2154]: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/user.db': No such file or directory
Sep 21 07:50:44 localhost vsftpd[2154]: pam_unix(vsftpd:auth): check pass; user unknown
Sep 21 07:50:44 localhost vsftpd[2154]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=user1 rhost=192.168.1.252
Sep 21 07:50:44 localhost vsftpd[2154]: pam_succeed_if(vsftpd:auth): error retrieving information about user user1

注意到这一行:

Sep 21 07:50:44 localhost vsftpd[2154]: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/user.db': No such file or directory

提示说,找不到用户认证数据库文件,但是事实上这个文件是存在的,最后经过漫长的百度搜索后发现,原来是在pam的vsftpd的配置文件中填的数据库地址是不可以带.db后缀的,因为pam会自动加上.db,如果手动加了一个那么最后的后缀就变为了.db.db了,当然会提示说找不到配置文件啦!

vim /etc/pam.d/vsftpd

去掉不该有的.db后缀(图中红色箭头所指的部分)。

vsftpd中允许匿名用户删除及重命名文件

在配置文件中增加如下一行即可(默认是没有的),此选项的意义是允许匿名用户具有其他权限,也就是除了上传文件、创建文件夹之外的其他权限。

anon_other_write_enable=YES

如果当前已通过客户端连接了ftp服务器,那么修改完后可能不会立即生效,重新连接下即可。

linux下的suid与guid权限介绍

以前一直好奇,在Linux权限中为什么有的时候会出现四位?比如0777,后来查阅资料才明白,原来前面的0代表suid和guid的权限。
suid和guid简介:
suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。
guid则表示执行相应脚本的用户将具有该文件所属用户组中用户的权限。
简单的举一个例子,当一个程序设置了suid的时候,如果一个本身没有权限访问/etc/passwd的用户执行了这个程序,则会获得此程序的所有者的权限,而如果此程序的所有者对/etc/passwd文件有访问权限,则执行此程序的所有用户都可以访问此文件。
是不是不大明白呀,下面再举个例子:

-rwxr-xr-x   1 root  root    12 09-02 15:21 my_test.sh

上面的my_test.sh文件权限是所属用户(root)是7,如果设置了suid,那么其他任何用户的权限都是7,如果设置了guid,那么任何用户的权限都是5。
设置suid和guid:
设置suid就是把0变为4,设置guid就把0变为2,如果都设置那就是6了
chmod 4777 my_test.sh                 #只设置suid
chmod 2777 my_test.sh                 #只设置guid
chmod 6777 my_test.sh                 #同时设置suid和guid