• Tag Archives: centos

CentOS 7 使用 yum 安装 RabbitMQ 3.6.6

1、安装erlang

到https://www.rabbitmq.com/releases/erlang/下载安装erlang的最大rpm版本,如果自行安装erlang会十分麻烦,我已经被坑过了

1.1、下载erlang

wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm

1.2、安装erlang

rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm

1.3、测试erlang

输入erl,出现如下画面即为安装正确:

Erlang/OTP 19 [erts-8.0.3] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
 
Eshell V8.0.3  (abort with ^G)
1>

2、安装RabbitMQ

注意不要再官网上安装最新的,安装最新的则需要安装更新版本的erlang,但是erlang能用rpm安装的最大版本只有19,所以我们在这里下载匹配的v3.6.6的RabbitMQ。

2.1、下载RabbitMQ

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

2.2、安装RabbitMQ

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

如果提示:#错误:依赖检测失败:socat 被 rabbitmq-server-3.6.6-1.el7.noarch 需要

则使用以下命令先安装socat:

yum install socat -y

2.3、启动RabbitMQ

systemctl start rabbitmq-server    #启动
systemctl status rabbitmq-server   #状态
systemctl stop rabbitmq-server     #关闭

2.4、配置网页插件

rabbitmq-plugins enable rabbitmq_management #启用插件

2.5、配置访问账号密码和权限

rabbitmqctl add_user mq mq123   #添加用户mq,密码mq123
rabbitmqctl set_permissions -p / mq ".*" ".*" ".*"  #添加权限
rabbitmqctl set_user_tags mq administrator  #修改用户角色
 
 
#其它操作
rabbitmqctl delete_user Username  #删除一个用户
rabbitmqctl change_password Username Newpassword  #修改用户密码
rabbitmqctl list_users  #查看当前用户列表

2.6、登录网页端

http://ip:15672

输入刚刚设置的账号和密码即可。

CentOS下安装并配置vsftp

1、安装vsftp并启动服务

使用以下命令进行安装:

yum install vsftpd

安装完毕后,使用以下命令启动服务:

systemctl start vsftpd
systemctl status vsftpd

并查看服务的启动状态:vsftp安装并启动成功

 

 

如需要设置开机启动,则使用以下命令:

systemctl enable vsftpd

2、开启匿名用户,测试vsftp

使用 vi /etc/vsftpd/vsftpd.conf 编辑配置,确保以下三项为YES:

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

 

开启vsftp的匿名访问

 

保存后使用以下命令重启vsftp从而让配置生效:

systemctl restart vsftpd

2.1 测试内网是否正常

使用以下命令安装ftp工具

yum install ftp

安装后使用anonymous匿名用户登录(无需登录密码)

ftp localhost

如图所示:

ftp登录内网测试

 

220表示服务正常,可以登陆;230表示登陆成功。

在ftp工具内使用ls命令可以查看文件夹信息:

ftp工具查看文件夹信息

 

2.2 测试外网是否正常

直接在浏览器中输入”ftp://ip/”后,使用匿名用户登录看是否正常:

ftp外网浏览器测试

建议使用cuteFtp工具进行连接,这样在连接使用时内看到错误信息

2.3 创建正式用的远程登录账号

2.3.1 配置vsftp

使用 vi /etc/vsftpd/vsftpd.conf 修改vsftp的配置:

anonymous_enable=YES 改为 NO(意思是禁止匿名用户登录)

#是否允许匿名用户登录(默认为YES)
anonymous_enable=NO

将下图两行代码前的#号去掉,代表对chroot_list文件内的用户进行限制

#是否对chroot_list文件内的用户进行限制(默认为NO)
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

在文件最后面新增 allow_writeable_chroot=YES,表示允许已登录用户进行上传

#是否已登录用户进行上传(默认无此配置)
allow_writeable_chroot=YES

2.3.2 创建对应的FTP用户

使用以下命令创建不允许进行shell登录的ftp用户:

useradd -d /home/ftptest -s /sbin/nologin ftptest

然后使用以下命令将刚刚创建的用户放在ftp用户组中:

usermod -aG ftp ftptest

分配目录操作权限给刚刚创建的ftp用户:

chown ftptest /home/ftptest

使用以下命令修改刚刚创建的ftp用户密码:

passwd ftptest

使用“vi /etc/vsftpd/chroot_list”命令修改用户登录名单:

vsftp登录用户

然后使用ftp工具进行连接测试。

如果遇到密码明明正确但是始终提示503密码错误的情况,可修改“vi /etc/pam.d/vsftpd”文件,注释掉:

#auth    required pam_shells.so

然后重启vsftp:

systemctl restart vsftpd

2.3.3 访问速度过慢的配置调整

编辑 /etc/vsftpd/vsftpd.conf 配置文件,在最下面添加以下信息:

#以下配置是为了解决连接超时的问题
#开启被动模式(默认无此配置)
pasv_enable=YES
pasv_min_port=4000	#随机最小端口
pasv_max_port=5000	#随机最大端口
#关闭DNS反向解析(默认无此配置)
reverse_lookup_enable=NO

以上代码实现两个功能:

  • 开启PASV被动访问模式
  • 关闭DNS反向解析

然后重启vsftp:

systemctl restart vsftpd

 

 

 

CentOS 6/7 下使用yum安装nginx

Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便。

但是今天装了CentOS6.2,直接yum install nginx不行,要先处理下源,下面是安装完整流程,也十分简单:

1、运行并安装源:

CentOS 7 下使用这个命令

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

CentOS 6 下使用这个命令

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

2,查看yum的nginx信息

[]# yum info nginx

Loaded plugins: fastestmirror

Determining fastest mirrors

 * base: mirror.esocc.com

 * extras: mirror.esocc.com

 * updates: mirror.esocc.com

base                                                     | 3.7 kB     00:00     

base/primary_db                                          | 4.4 MB     00:28     

extras                                                   | 3.5 kB     00:00     

extras/primary_db                                        |  19 kB     00:00     

nginx                                                    | 2.9 kB     00:00     

nginx/primary_db                                         |  22 kB     00:00     

updates                                                  | 3.5 kB     00:00     

updates/primary_db                                       | 2.1 MB     00:10     

Installed Packages

Name        : nginx

Arch        : x86_64

Version     : 1.4.0

Release     : 1.el6.ngx

Size        : 874 k

Repo        : installed

From repo   : nginx

Summary     : nginx is a high performance web server

URL         : http://nginx.org/

License     : 2-clause BSD-like license

Description : nginx [engine x] is an HTTP and reverse proxy server, as well as

            : a mail proxy server

3,安装nignx
[root@server ~]# yum install nginx

4,启动nginx

CentOS 7 下使用这个命令:

systemctl start nginx

CentOS 6 下使用这个命令

service nginx start

4,然后进入浏览器,输入http://xxxxxxx/测试,如果看到

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

恭喜你,你成功了!

5、设置为开机启动

CentOS 7 下使用这个命令

systemctl enable nginx.service

CentOS 6下使用这个命令

chkconfig nginx on

 

CentOS修改22默认端口 SSH默认端口

1.添加端口

vim /etc/ssh/sshd_config

将#Port 22的注释去掉并且换行加入Port 443

如果是不是增加,而是修改端口的话,建议先保留22端口,等新端口可以登录再去掉。

443其实是https使用的端口,3128是squid使用的端口。建议使用大端口,比如10000~65535以上。

重启SSH服务 /etc/init.d/sshd restart

2.防火墙开启443端口

vi /etc/sysconfig/iptables

加入-A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT

重启防火墙 /etc/init.d/iptables restart

3.屏蔽默认端口

确认新端口可以使用后最好能屏蔽掉默认的22号端口

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

前加#号注释掉

重启防火墙 /etc/init.d/iptables restart

成功!

利用iptables来配置linux禁止所有端口登陆和开放指定端口

1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。
下面是命令实现:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

再用命令 iptables -L -n 查看 是否设置好, 好看到全部 DROP 了
这样的设置好了,我们只是临时的, 重启服务器还是会恢复原来没有设置的状态
还要使用 service iptables save 进行保存
看到信息 firewall rules 防火墙的规则 其实就是保存在 /etc/sysconfig/iptables
可以打开文件查看 vi /etc/sysconfig/iptables
2、
下面我只打开22端口,看我是如何操作的,就是下面2个语句

    iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

再查看下 iptables -L -n 是否添加上去, 看到添加了

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp spt:22

现在Linux服务器只打开了22端口,用putty.exe测试一下是否可以链接上去。
可以链接上去了,说明没有问题。

最后别忘记了保存 对防火墙的设置
通过命令:service iptables save 进行保存

iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
针对这2条命令进行一些讲解吧
-A 参数就看成是添加一条 INPUT 的规则
-p 指定是什么协议 我们常用的tcp 协议,当然也有udp 例如53端口的DNS
到时我们要配置DNS用到53端口 大家就会发现使用udp协议的

–dport 就是目标端口 当数据从外部进入服务器为目标端口
反之 数据从服务器出去 则为数据源端口 使用 –sport

-j 就是指定是 ACCEPT 接收 或者 DROP 不接收
3、禁止某个IP访问
1台Linux服务器,2台windows xp 操作系统进行访问
Linux服务器ip 192.168.1.99
xp1 ip: 192.168.1.2
xp2 ip: 192.168.1.8

下面看看我2台xp 都可以访问的

192.168.1.2  这是 xp1 可以访问的,
192.168.1.8 xp2 也是可以正常访问的。

那么现在我要禁止 192.168.1.2 xp1 访问, xp2 正常访问,
下面看看演示

通过命令 iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
这里意思就是 -A 就是添加新的规则, 怎样的规则呢? 由于我们访问网站使用tcp的,
我们就用 -p tcp , 如果是 udp 就写udp,这里就用tcp了, -s就是 来源的意思,
ip来源于 192.168.1.2 ,-j 怎么做 我们拒绝它 这里应该是 DROP

好,看看效果。好添加成功。下面进行验证 一下是否生效

一直出现等待状态 最后 该页无法显示 ,这是 192.168.1.2 xp1 的访问被拒绝了。

再看看另外一台 xp 是否可以访问, 是可以正常访问的 192.168.1.8 是可以正常访问的
4、如何删除规则
首先我们要知道 这条规则的编号,每条规则都有一个编号

通过 iptables -L -n –line-number 可以显示规则和相对应的编号
num  target     prot opt source               destination
1    DROP       tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306
2    DROP       tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
3    DROP       tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
多了 num 这一列, 这样我们就可以 看到刚才的规则对应的是 编号2

那么我们就可以进行删除了
iptables -D INPUT 2
删除INPUT链编号为2的规则。

再 iptables -L -n 查看一下 已经被清除了。
5、过滤无效的数据包
假设有人进入了服务器,或者有病毒木马程序,它可以通过22,80端口像服务器外传送数据。
它的这种方式就和我们正常访问22,80端口区别。它发向外发的数据不是我们通过访问网页请求
而回应的数据包。

下面我们要禁止这些没有通过请求回应的数据包,统统把它们堵住掉。

iptables 提供了一个参数 是检查状态的,下面我们来配置下 22 和 80 端口,防止无效的数据包。

iptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

可以看到和我们以前使用的:
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

多了一个状态判断。

同样80端口也一样, 现在删掉原来的2条规则,
iptables -L -n –line-number    这个是查看规则而且带上编号。我们看到编号就可以
删除对应的规则了。

iptables -D OUTPUT 1     这里的1表示第一条规则。

当你删除了前面的规则, 编号也会随之改变。看到了吧。

好,我们删除了前面2个规则,22端口还可以正常使用,说明没问题了

下面进行保存,别忘记了,不然的话重启就会还原到原来的样子。

service iptables save    进行保存。

Saving firewall rules to /etc/sysconfig/iptables:          [  OK  ]
其实就是把刚才设置的规则写入到 /etc/sysconfig/iptables 文件中。
6、DNS端口53设置
下面我们来看看如何设置iptables来打开DNS端口,DNS端口对应的是53

大家看到我现在的情况了吧,只开放22和80端口, 我现在看看能不能解析域名。

host www.google.com 输入这个命令后,一直等待,说明DNS不通

出现下面提示 :
;; connection timed out; no servers could be reached

ping 一下域名也是不通
[root@localhost ~ping www.google.com
ping: unknown host www.google.com

我这里的原因就是 iptables 限制了53端口。

有些服务器,特别是Web服务器减慢,DNS其实也有关系的,无法发送包到DNS服务器导致的。

下面演示下如何使用 iptables 来设置DNS 53这个端口,如果你不知道 域名服务端口号,你

可以用命令 : grep domain /etc/services

[root@localhost ~grep domain /etc/services
domain          53/tcp                          # name-domain server
domain          53/udp
domaintime      9909/tcp                        # domaintime
domaintime      9909/udp                        # domaintime

看到了吧, 我们一般使用 udp 协议。

好了, 开始设置。。。

iptables -A OUTPUT -p udp –dport 53 -j ACCEPT
这是我们 ping 一个域名,数据就是从本机出去,所以我们先设置 OUTPUT,
我们按照ping这个流程来设置。

然后 DNS 服务器收到我们发出去的包,就回应一个回来
iptables -A INPUT -p udp –sport 53 -j ACCEPT

同时还要设置
    iptables -A INPUT -p udp –dport 53 -j ACCEPT
iptables -A OUTPUT -p udp –sport 53 -j ACCEPT

好了, 下面开始测试下, 可以用 iptables -L -n 查看设置情况,确定没有问题就可以测试了

[root@localhost ~iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     udp  –  0.0.0.0/0            0.0.0.0/0           udp spt:53
ACCEPT     udp  –  0.0.0.0/0            0.0.0.0/0           udp dpt:53

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp spt:22 state ESTABLISHED
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0           tcp spt:80 state ESTABLISHED
ACCEPT     udp  –  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     udp  –  0.0.0.0/0            0.0.0.0/0           udp spt:53

可以测试一下 是否 DNS 可以通过iptables 了。

[root@localhost ~host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com is an alias for www-china.l.google.com.
www-china.l.google.com has address 64.233.189.104
www-china.l.google.com has address 64.233.189.147
www-china.l.google.com has address 64.233.189.99

正常可以解析 google 域名。

ping 方面可能还要设置些东西。

用 nslookup 看看吧

[root@localhost ~nslookup
> www.google.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
www.google.com canonical name = www.l.google.com.
www.l.google.com canonical name = www-china.l.google.com.
Name:   www-china.l.google.com
Address: 64.233.189.147
Name:   www-china.l.google.com
Address: 64.233.189.99
Name:   www-china.l.google.com
Address: 64.233.189.104

说明本机DNS正常, iptables 允许53这个端口的访问。
7、iptables对ftp的设置
现在我开始对ftp端口的设置,按照我们以前的视频,添加需要开放的端口
ftp连接端口有2个 21 和 20 端口,我现在添加对应的规则。

[root@localhost rootiptables -A INPUT -p tcp –dport 21 -j ACCEPT
[root@localhost rootiptables -A INPUT -p tcp –dport 20 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp –sport 21 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp –sport 20 -j ACCEPT

好,这样就添加完了,我们用浏览器访问一下ftp,出现超时。

所以我刚才说 ftp 是比较特殊的端口,它还有一些端口是 数据传输端口,
例如目录列表, 上传 ,下载 文件都要用到这些端口。

而这些端口是 任意 端口。。。 这个 任意 真的比较特殊。

如果不指定什么一个端口范围, iptables 很难对任意端口开放的,
如果iptables允许任意端口访问, 那和不设置防火墙没什么区别,所以不现实的。

那么我们的解决办法就是 指定这个数据传输端口的一个范围。

下面我们修改一下ftp配置文件。

我这里使用vsftpd来修改演示,其他ftp我不知道哪里修改,大家可以找找资料。

[root@localhost rootvi /etc/vsftpd.conf

在配置文件的最下面 加入

pasv_min_port=30001
pasv_max_port=31000

然后保存退出。

这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送。

这样我们使用 iptables 就好办多了,我们就打开 30001到31000 这些端口。

[root@localhost rootiptables -A INPUT -p tcp –dport 30001:31000 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp –sport 30001:31000 -j ACCEPT

[root@localhost rootservice iptables save

最后进行保存, 然后我们再用浏览器范围下 ftp。可以正常访问

用个账号登陆上去,也没有问题,上传一些文件上去看看。

看到了吧,上传和下载都正常。。 再查看下 iptables 的设置

[root@localhost rootiptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp dpt:22
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp dpt:21
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp dpt:20
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp dpts:30001:31000

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp spt:22
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp spt:21
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp spt:20
ACCEPT     tcp  –  0.0.0.0/0            0.0.0.0/0          tcp spts:30001:31000

这是我为了演示ftp特殊端口做的简单规则,大家可以添加一些对数据包的验证
例如 -m state –state ESTABLISHED,RELATED  等等要求更加高的验证

关于阿里云纯净centos6.5下无法正常启动iptables的问题解决方法

001

 

不知道为何阿里云服务器无法启动,查了一下,得知阿里云由于有自己的云盾,所以iptables默认不启动,因此阿里云也将其iptables设置为未初始化的状态,因此需要初始化后才能像其他地方买的服务器那样使用 service iptables start 来启动了。

初始化方法:

iptables -F
service iptables save
service iptables start

问题解决。

 

 

 

chmod +chown 深入理解用户组

Linux命令——chmod

命令描述

变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。

权限范围的表示法如下:

u:User,即文件或目录的拥有者。

g:Group,即文件或目录的所属群组。

o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。

a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

有关权限代号的部分,列表于下:

r:读取权限,数字代号为”4″。

w:写入权限,数字代号为”2″。

x:执行或切换权限,数字代号为”1″。

-:不具任何权限,数字代号为”0″。

s:特殊?b>功能说明:变更文件或目录的权限。

语法

chmod [-cfRv][–help][–version][<权限范围>+/-/=<权限设置…>][文件或目录…]

chmod [-cfRv][–help][–version][数字代号][文件或目录…]

chmod [-cfRv][–help][–reference=<参考文件或目录>][–version][文件或目录…]

选项说明

-c或–changes 效果类似”-v”参数,但仅回报更改的部分。

-f或–quiet或–silent 不显示错误信息

-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。   -

v或–verbose 显示指令执行过程。

–help 在线帮助。

–reference=<参考文件或目录> 把指定文件或目录的权限全部设成和参考文件或目录的权限相同

–version 显示版本信息。   <权限范围>+<权限设置> 开启权限范围的文件或目录的该项权限设置。   <权限范围>-<权限设置> 关闭权限范围的文件或目录的该项权限设置。   <权限范围>=<权限设置> 指定权限范围的文件或目录的该项权限设置。

范例

范例一 :将档案 file1.txt 设为所有人皆可读取 : chmod ugo+r file1.txt

将档案 file1.txt 设为所有人皆可读取 :   chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :   chmod ug+w,o-w file1.txt file2.txt

将 ex1.设定为只有该档案拥有者可以执行 :   chmod u+x ex1

将目前目录下的所有档案与子目录皆设为任何人可读取 :   chmod -R a+r *

当其他用户执行oracle的sqlplus这个程序时,他的身份因这个程序暂时变成oracle  chmod u+s sqlplus

此外,chmod也可以用数字来表示权限如 chmod 777 file (代表u,g,o都有可读可写可执行权限)

语法为:chmod abc file   其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。   r=4,w=2,x=1   若要rwx属性则4+2+1=7;   若要rw-属性则4+2=6;   若要r-x属性则4+1=5。   

范例二:chmod a=rwx file 和 chmod 777 file 效果相同

chmod ug=rwx,o=x file 和 chmod 771 file 效果相同

若用chmod 4755 filename可使此程式具有root的权限   

范例三:   如果在cd /media/amasun/java/develop/array之后执行  chmod 777 ./  是将本目录(即/media/amasun/java/develop/array)设为任何人可读,写,执行

如果是管理员也就是常说的ROOT用户的话,基本上有可以查看所有文件的权力.

Linux 命令 chown

: Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以将自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

范例:

将档案 file1.txt 的拥有者设为 users群体的使用者 jessie :

chown users:jessie file1.txt

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :

chown -R lamport:users *

功能:更改某个文件或目录的属主和属组。

这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。

语法:chown [选项] 用户或组 文件

说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户I D。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符

该命令的各选项含义如下:

-R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。

-v 显示chown命令所做的工作。

chgrp和chown 的都是转移文件属主

但是chown只能在同一个用户组里面转换而chgrp可以转移到不同的用户组

比如搭建git服务器时,用到的命令:

a@server:~$ sudo chown git:git /home/repo  //将repo文件属组和属主 设为git:git
a@server:~$ sudo chmod 700 /home/repo   //将文件repo 设为只能由其属主 可读可写可执行。

CENTOS如何禁用ROOT本地或远程SSH登录

有些特殊的情况我们需要禁止root在本地或远程使用ssh登录,以增加安全性。

下面详细描述如何禁止root登录。

  • 禁止root本地登录
  • 禁止root远程ssh登录

禁止root本地登录

修改/etc/pam.d/login文件增加下面一行

auth required pam_succeed_if.so user != root quiet

 

禁止root远程ssh登录

修改/etc/ssh/sshd_config文件,将

#PermitRootLogin yes

修改为

PermitRootLogin no

修改时注意前面的#号。

禁止以后,可以使用普通用户登录,登录后若需要root权限,可以使用“su”切换到root用户。或者配置sudo使普通用户使用某些root权限。

这样可以在一定程度上增加系统的安全性。

Centos 建立一个新用户 详细讲解

建立一个新用户

修改用户的个人设置

文件目录的权限设置

两个重要文件:passwd与group

建立一个新用户

建立一个新的用户包括两个步骤,第一步是使用useradd命令完成一个新用户的初始化设置工作;第二步是用passwd为这个新用户设置密码。例如,我们要给系统添加一个用户叫floatboat,密码为fan2001z,那相关的操作是:

useradd floatboat <回车>

这时候系统没有任何显示。接着:

passwd floatboat <回车>

系统显示:

Changing password for user floatboat

New UNIX password:

你输入:

fan2001z<回车>

注意,由于linux并不采用类似windows的密码回显(显示为*号)——为避免你输入密码时被人注意到有多少位——所以,输入的这些字符你是看不见的。

系统显示:

Retype new UNIX password:

你再重新输入一次密码,然后回车确认,这时系统会显示:

passwd:all authentication tokens updated successfully

表示你修改密码成功了。

到这里,新用户的创建工作就算完成了。下面,我们再补充一些有关增加新用户的常识:

1、useradd所做的初始化操作已经包括在/home目录下为floatboat帐号建立一个名为floatboat的主目录。如果你不想使用这个缺省的目录,而希望把他的主目录放在/home/goal里(还放在/home下,只是一种良好的习惯,没有其他什么特别的要求),可以使用useradd的参数-d,命令如下:

useradd -d /home/goal floatboat

2、useradd的初始化操作还包括为用户单独建立一个与用户名同名的组(floatboat组)。这叫用户私有组的机制,与默认组机制相对应。对用户分组一是方便管理,二是可以明确权限。复杂的我们将在以后的深入内容中探讨。我们如果想让此用户加入一个已有的组的话,可以使用-g参数。例如我们想让floatboat加入webusers组,那么可以使用以下命令:

useradd -g webusers floatboat

同样的,我们还可以使用-G参数使他同时加入多个组,例如webusers和ftpusers:

useradd -G ftpusers,webusers floatboat

3、passwd命令为一个用户设置密码,但它实质上是一个修改密码的程序。只有超级用户和用户自己可以修改密码,其它的普通用户没有给他修改密码的 权利。用户密码的组成要尽量的复杂,最好包括字母、数字和特殊符号,而且最好设成6位以上。太短passwd程序不允许,只是单纯的字母或单纯的数 字,passwd也会有意见。你都会看见passwd出现的提示的,不要害怕,仔细看看到底它是怎么说的:)

4、你在增加一个新用户的时候,也可以设置用户登录的shell。缺省的,系统提供了/bin/bash。你如果非要指定的话,可以使用-s参数就可以了。例如

useradd -d /www -s /usr/bin/passwd floatboat

注意,这些参数是可以一块使用的,如上例所示,它表示增加新用户,并把其主目录路径设置在/www,登录的shell为/usr/bin/passwd。关于shell的更详细的说明,请参考下面的修改用户的个人设置相关内容。

5、删除一个用户可以使用userdel命令,直接带用户名做参数就可以了。

修改用户的设置

对现有用户的修改,比较常用的主要是修改密码(使用passwd就好了),修改用户的登录shell,修改用户所属的默认组,设置帐号有效期,修改用户的说明信息等等,偶尔也会用到修改用户主目录。

修改用户的登录shell

使用chsh命令可以修改自己的shell,只有超级用户才能用chsh username为其它用户修改shell设置。注意,指定的shell必须是列入/etc/shells文件中的shell,否则该用户将不能登陆。

一般,比较常见的shells文件包括下面这些shell:

/bin/bash2

/bin/bash

/bin/sh

/bin/ash

/bin/bsh

/bin/tcsh

/bin/csh

而网管们还喜欢在里面加上/usr/bin/passwd,这是为了不然用户通过控制台或telnet登录系统,却可以使用修改帐户密码(比如在FTP里用)。以及/bin/false,也就是不让这个用户登录的意思喽^&^,连FTP也不能用。

你也可以使用usermod命令修改shell信息,如下所示:

usermod -s /bin/bash floatboat

其中/bin/bash和floatboat应取相应的shell路径文件名及用户名。

还有一种情况,就是你为用户设置了一个空的shell(就是””),也就是说,这个用户没有shell。呵呵,绝对没有在我还未曾见过,因为这种用户登录后,系统还是会给它一个shell用的。不信你试试:

usermod -s “” floatboat

这种用户根据系统的不同,会有一个sh或bash进行操作,我也没有看出功能上和其它普通用户登录有什么不同。

修改用户所属的默认组

这个功能也可以通过usermod命令来实现,使用-g参数,例如把floatboat的默认组改为nobody,可以使用如下命令:

usermod -g nobody floatboat

nobody在类UNIX系统中一般都意味着没有任何权限。

设置帐号有效期

如果使用了影子口令,则可以使用如下命令来修改一个帐号的有效期:

usermod -e MM/DD/YY username

例如把用户floatboat的有效期定为2001年12月31日:

usermod -e 12/31/01 floatboat

如果把该用户的有效期设为已经过去的时间,就可以暂时禁止该用户登录系统。

修改用户的说明信息

修改用户的说明信息,最简单的方法莫过于直接修改/etc/passwd文件,找到对应的用户记录行,例如下列行:

floatboat:x:503:503::/home/floatboat:/bin/bash

你可以直接在第四个冒号和第五个冒号之间插入该用户的说明就可以了。其实,很多用户设置都可以在这修改,比如该行最后一部分/bin/bash就是用户登录shell的设置。关于这个/etc/passwd文件,我们后面将进一步的深入探讨。

修改用户主目录

修改用户的主目录主要使用usermod命令的-d参数,例如:

usermod -d /www floatboat

这一行将floatboat的主目录改到/www。如果想将现有主目录的主要内容转移到新的目录,应该使用-m开关,如下所示:

usermod -d -m /www floatboat

文件目录的权限

linux下,每一个文件、每一个目录都有一个属主,并针对用户自己、用户所在组、其它所有帐号(组)分别设定读、写、执行三种权限。例如,我(假定是webusers组的floatboat帐户的拥有者)使用如下命令建立一个新的文件

touch mytestfile

然后我们使用ls -l mytestfile这一命令来查看这个文件的权限状态(关于ls命令,可以查阅本站的命令查询),可以得到如下的屏幕输出显示:

-rw-rw-r– 1 floatboat webusers 0 Feb 6 21:37 mytestfile

输出由空格分为9个部分,我们比较关心第一、三、四个字段,分别表示文件权限属性、文件所有者帐户、文件所属组。

◆使用chown命令修改文件的主人

当你新建立一个文件的时候,文件的所有者当然就是你了。这一事实只有超级用户(比如说root)才可以通过chown命令改变(例如chown otheruser mytestfile,把mytestfile文件的属主改为otheruser)。普通用户不能把自己的文件“送”给别人,不然你把有特殊目的的程序给 了root怎么办?:)

chown命令的用法比较简单。这里我先假设你现在拥有超级用户权限,那么你就可以使用如下命令将一个文件“送给”floatboat了:

chown floatboat /home/floatboat/thefileisrootcreate.txt(假定该文件是由root创建的)

修改一个目录的所有者也是类似的:

chown floatboat /home/newboat

当然,如果这个目录还有子目录及文件需要同时送给floatboat,chown也是支持-R参数的:

chown -R floatboat /home/newboat

如果你同时想修改文件/目录所属的组的话,你可以使用以下命令方便的达到目的:

chown -R floatboat.ftpusers /home/newboat

这样,不但文件主人得到了修改,文件所属的组也变成了ftpusers

◆修改文件的组属性

文件所属组你倒是可以改变,前提是:

1、你的超级用户。

2、你同时属于两个或两个以上的组。

两个条件你至少具备一个,你才能够把文件所属旧组变为新组。使用如下的命令将当前目录下所有html文件所属的组改为httpd:

chgrp httpd *.html

和chown命令一样,chgrp也可以使用-R参数对一个目录内的所有文件和子目录进行递归的修改组属性。

<提示>:你可以使用不带参数的groups命令查看自己属于哪个组。

文件权限的设定是我们这一小节讨论的核心,我们主要介绍chmod命令的两种用法。

◆使用访问字符串设置文件目录权限

正如前面所说的,每一个文件、目录都针对用户自己、用户所在组、其它所有帐号(组)分别有读、写、执行三种权限及其组合。当一个普通用户新建一个文件 的时候,它默认的访问权限显示就如我们刚才所举例子的第一个字段所示。总共十位字符“-rw-rw-r–”,第一位是目录区分标志,如果是d的话,表示 这是一个目录。第二到四位分别表示文件所有者的读(r:read)、写(w:write)、执行(x:execute)属性,第五到七位是文件所属组的 读、写、执行权限,第八到第十位则是其它用户的读、写、执行权限。如果对应的位是相应的字母,就是有这相应权限,否则为“-”,表示没有获得这个许可。象 刚才例子中的文件就是自己可读写,本组可读写,其它用户可读,所有的用户(包括自己)都不能执行它。

我们的用u、g、o分别来指代用户(user)、组(group)、其它帐户(other),就可以方便的设置文件和目录的权限了。当然,我们也可以用a来表示所有的这三项。

例如,我们要对所有perl的脚本文件设定权限,对所有用户都可以读和执行,文件所有者还允许写许可,那么我们可以使用如下命令:

chmod a+rx,u+w *.pl

注意:如果要使用多个访问字符串,它们之间要用逗号隔开,各个许可字符串之间不允许有空格。正如上例所示。

如果要修改目录中所有文件和子目录的权限属性,可以使用chmod提供的-R参数来递归修改。例如,下列命令将/www/site1目录及其下面的子目录的权限属性设定为所有者和组可读、写、执行,其它用户不可访问:

chmod -R a+rwx,o-rwd /www/site1

注意,不要轻易使用-R选项,这可能会带来安全隐患。

使用字符串方便了理解,单输入那么多字母还是有点累,如果你对8进制有些概念的话,可以使用下面介绍的方法来做权限设置。

◆使用八进制数设置文件目录权限

我们知道,在ls -l的输出中,文件权限表示为“-rw-rw-r–”,前一位只和是否为目录有关,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和 “r–”,“-”代表无效“0”,其它字符代表有效“1”,那么这个文件的权限就是“110”、“110”、“100”,把这个2进制串转换成对应的8 进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。我们也可以使用类似这种三位八进制数来设定文件授权,如上边两个例子,就也可以写 为:

chmod 755 *.pl

chmod -R 770 /www/site1

是不是很简洁?关键在于你能根据你需要设定的权限正确的选择八进制数(利用八进制数的二进制表示可以非常轻易的做到这一点)。

◆读、写、执行的权限说明

1、所谓写的权限,也就是对文件修改和删除的权限。如果目录的写权限也对你开放了,则可以创建、删除或修改该目录下的任何文件或自目录——即使该文件和子目录并不属于你。

2、对目录有只读许可的用户,不能用cd命令进入该目录;还必须同时有执行许可才可以进入该目录。

3、必须同时拥有读和执行权限才可以使用ls这样的程序列出目录内容清单。

4、只对目录有执行权限的用户,想访问该目录下的文件有读权限的文件,必须知道该文件名才可以访问。

两个重要文件:passwd与group

在linux的安全机制里,/etc/passwd与/etc/group这两个文件占着非常重要的地位。它们控制着linux的用户和组一些重要设置。

◆/etc/passwd文件说明

下面是一个RHlinux里普通的passwd文件的例子:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:

daemon:x:2:2:daemon:/sbin:

……

operator:x:11:0perator:/root:

games:x:12:100:games:/usr/games:

gopher:x:13:30:gopher:/usr/lib/gopher-data:

ftp:x:14:50:FTP User:/home/ftp:

nobody:x:99:99:Nobody:/:

xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false

named:x:25:25:Named:/var/named:/bin/false

postgres:x:26:26ostgreSQL Server:/var/lib/pgsql:/bin/bash

lanf:x:500:500::/home/hujm:/bin/bash

mysql:x:101:101:MySQL server:/var/lib/mysql:/bin/bash

imnotroot:x:0:0::/home/imnotroot:/bin/bash

在这个文件里只有一个普通帐号lanf。其它都是系统或系统服务的进程需要的帐号,包括我们非常熟悉的root这个超级用户。在passwd的文件里,每一行被冒号(“:”)分成7个部分,分别是:

[用户名]:[密码]:[UID]:[GID]:[身份描述]:[主目录]:[登录shell]

其中:

⒈[用户名]是passwd文件里各记录行唯一的有”唯一性”要求的域。也就是说每一行的第一个区域的内容都不能相同,其它区域就无所谓了。

⒉[密码]区域在以前,保存着一个经过不可逆的哈希算法进行DES加密的13位字符,但不包括单引号和冒号。这13位字符中,前两位是密钥,在加密的 时候随机生成的。由于这个字符串不包括单引号,所以以前有一种不修改密码又禁止用户登录的方式就是在密码前面加一个单引号。值得注意的是,现在由于使用了 shadow口令,在密码区域只有一个x字符。

⒊[UID]虽然是系统用来标志文件归属,确定各种权限的标志,但这个区域的内容并不要求唯一的。比较常见而又与安全问题相关的一个例子是有多个 UID和GID均为0的用户帐号。注意到在该文件最后一行还有一个UID和GID为0的用户imnotroot,虽然它声称自己不是root,但是它却有 和root完全相同的权限,因为系统并非根据[用户名],而是根据UID和GID来分用户的权力的。所以,这种情况无疑为系统埋下了安全的炸弹。但是,当 imnorroot做锁定屏幕等操作的时候,如果它的密码和root的不一样,它将无法解锁,因为系统只是查到第一个UID为0的用户(自然是root) 后,就不在往下查找了——它当UID也是唯一的。

⒋[GID]用户默认的组ID,这个ID可以在文件/etc/group里查到对应的组名。

⒌[身份描述]:就是用户的身份说明,默认的是无任何说明,可人工添加。

⒍[主目录]:用户的主目录,可以使用前面介绍的命令修改。

⒎[登录shell]:用户登录时系统提供的shell,请参考前面的有关内容。

<注意>:[UID]和[GID]小于500的一般都是系统自己保留,不做普通用户和组的标识的,所以新增加的用户和组一般都是UID和GID大于500的。

◆/etc/group文件说明

下面是RH的一个group文件的例子:

root:x:0:root,hujm,hjm

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

sys:x:3:root,bin,adm

adm:x:4:root,adm,daemon

tty:x:5:

disk:x:6:root

lp:x:7:daemon,lp

mem:x:8:

kmem:x:9:

wheel:x:10:root

mail:x:12:mail

news:x:13:news

uucp:x:14:uucp

……

hujm:x:503:root,mynoshell,hjm

mysql:x:101:

mynoshell:x:505:

ftpusers:x:506:

它总共分四个部分:

[组名]:[密码域]:[GID]:[组员列表]

意思非常明显,需要说明一下的是,由于组一般都不用密码保护,所以虽然看起来密码域有个X字符,其实那只表示使用了SHADOW(对应文件为 gshadow)。组员列表用逗号分隔各个帐号。另外,一个组的组员如果默认登录组就是它的话,那么在组员列表里将不显示这个组员的帐号,例如用如下命令 增加的用户:

useradd -g ftpusers floatboat

在/etc/group文件里ftpusers的组员列表将不显示这个组员(真是失败),而只是在passwd文件中的GID被设置为506。而使用如下命令:

usermod -G ftpusers,mysql,webusers floatboat

就可以看见相关的组后边加上了floatboat帐号。当然,你可以直接用vi来直接编辑这个文件。

group文件和passwd文件是通过GID联系在一起的,这有点象关系数据库。根据passwd文件中一个帐户的GID,可以在group文件中 找到对应的组名。如果采用了用户私有组机制的话,那么一般新增一个帐号,就会有对应的一个与帐号同名的组增加到group文件中。虽然这时passwd文 件中具有唯一性的[用户名]字段和group文件中具有唯一性的[组名]字段一样,并不代表着它们是通过这两个字段形成一一对应的关系的。千万别忘记,系 统对数字(UID,GID)更加敏感^_^。

再有一点应该注意,你统计一个组的组成员的时候,千万别只记得看组成员列表哦,还应该查找默认登录组也是这个组的用户——它们可不一定在列表里。

〈提示〉新组的增加可以使用groupadd newgroupname

CentOS设置服务开机启动的方法

CentOS设置服务开机启动的两种方法

1、利用 chkconfig 来配置启动级别
在CentOS或者RedHat其他系统下,如果是后面安装的服务,如httpd、mysqld、postfix等,安装后系统默认不会自动启动的。就算手动执行 /etc/init.d/mysqld start 启动了服务,只要服务器重启后,系统仍然不会自动启动服务。 在这个时候,我们就需要在安装后做个设置,让系统自动启动这些服务,避免不必要的损失和麻烦。 其实命令很简单的,使用chkconfig即可。
[天涯PHP博客]-[http://blog.phpha.com]
比如要将mysqld设置为开机自动启动:

chkconfig mysqld on

要取消掉某个服务自动启动,只需要将最后的参数 “on” 变更为 “off” 即可。

比如要取消 postfix 的自动启动:

chkconfig postfix off

值得注意的是,如果这个服务尚未被添加到 chkconfig 列表中,则现需要使用 –-add 参数将其添加进去:

chkconfig–-add postfix

如果要查询当前所有自动启动的服务,可以输入:

chkconfig-–list

如果只想看指定的服务,只需要在 “–-list” 之后加上服务名就好了,比如查看httpd服务是否为自动启动:

chkconfig–-listhttpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

此时0~6均为off,则说明httpd服务不会在系统启动的时候自动启动。我们输入:

chkconfig httpd on

则此时为:

httpd0:off1:off2:on3:on4:on5:on6:off

这个时候2~5都是on,就表明会自动启动了。

 

2、修改 /etc/rc.d/rc.local 这个文件:
例如将 apache、mysql、samba、svn 等这些服务的开机自启动问题一起搞定:

[天涯PHP博客]-[http://blog.phpha.com]
vi/etc/rc.d/rc.local
#添加以下命令
/usr/sbin/apachectl start
/etc/rc.d/init.d/mysqld start
/etc/rc.d/init.d/smb start
/usr/local/subversion/bin/svnserve-d

 

close