nginx访问selinux权限问题

今天在服务器上面安装phpcms,安装过程中提示不可写,于是设置了权限,但是依然是不可写的状态,想了下可能是selinux的问题
设置了下

sudo chcon -R -t httpd_sys_content_t phpcmstest

ok

centos6.6安装后系统配置

1.新建用户

useradd xxx
#设置密码
passwd xxx

2.设置sudo

visudo
root    ALL=(ALL)       ALL#找到这行添加如下行
xxx     ALL=(ALL)       ALL

安装两个软件,bash-completion(命令补全),dos2unix(dos格式文件转换成unix格式)
3.修改ssh

  vi /etc/ssh/sshd_config   
  #禁用root远程登录 
  PermitRootLogin no
  PermitEmptyPasswords no #禁止空密码登录 
  #不要支持闲置会话,并配置 Idle Log Out Timeout 间隔:
  ClientAliveInterval 600 # (Set to 600 seconds = 10 minutes)
  ClientAliveCountMax 0 
  #禁用用户的 .rhosts 文件:
  IgnoreRhosts yes
  Port 22#这个先留着免得配置错误导致的错误
  Port 22155

4.设置防火墙,放开刚刚设置的ssh端口,和需要开放的端口
防火墙设置可以看http://blog.csdn.net/scchary/article/details/46482777
5.消除登陆信息,在登陆的时候会提示是什么系统之类的信息,隐藏起来

sudo cp /etc/issue /etc/issue.bak#备份下
sudo cp /etc/issue.net /etc/issue.net.bak
sudo cp /etc/redhat-release /etc/redhat-release.bak 
sudo echo "Welcome" > /etc/issue#权限不足,用root直接改应该可以,直接vi编辑算了
sudo vi /etc/issue
sudo vi /etc/issue.net
sudo vi /etc/redhat-release

6.关闭不需要的服务,就剩下这几个了,就关了几个

auditd          0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #与selinux有关
crond           0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #定时任务
iptables        0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #防火墙
iscsi           0:关闭    1:关闭    2:关闭    3:启用    4:启用    5:启用    6:关闭 #一种新存储技术
iscsid          0:关闭    1:关闭    2:关闭    3:启用    4:启用    5:启用    6:关闭 #一种新存储技术
mysqld          0:关闭    1:关闭    2:启用    3:启用    4:关闭    5:启用    6:关闭 
network         0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #网络基础服务
nginx           0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
php-fpm         0:关闭    1:关闭    2:启用    3:启用    4:关闭    5:启用    6:关闭
restorecond     0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #与selinux相关
rsyslog         0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 #系统日志关键服务
sshd            0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 
udev-post       0:关闭    1:启用    2:启用    3:启用    4:启用    5:启用    6:关闭 #设备管理

7.同步系统时间

sudo yum install ntpdate#安装更新时间软件
sudo ntpdate cn.pool.ntp.org;sudo hwclock --systohc#更新时间并写入bios
sudo crontab -e
11 11 * * * /usr/sbin/ntpdate cn.pool.ntp.org;/usr/sbin/hwclock --systohc#设置每天的11:11更新时间

8.注释不需要的用户和组

#注销用户
sudo vi /etc/passwd
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
#uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#注销用户
sudo vi /etc/group
#adm:x:4:adm,daemon
#lp:x:7:daemon
#uucp:x:14:
#games:x:20:
#dip:x:40:
#ftp:x:50:

9.调整文件描述大小

      echo "ulimit -SHn 65535" >> /etc/rc.local
      cp  /etc/profile  /etc/profilebak2
      ulimit -c unlimited
      ulimit -s unlimited
      ulimit -SHn 65535   
      source  /etc/profile    #使配置立即生效
      ulimit -a    #显示当前的各种用户进程限制
#配置完成之后普通用户登录会报错    -bash: ulimit: open files: cannot modify limit: 不允许的操作
      可以/etc/security/limits.conf在加上
        *        soft    noproc 65535
        *        hard    noproc 65535
        *        soft    nofile 65535
        *        hard    nofile 65535

10.调整记录历史命令的条数

vi /etc/profile      #在文件末尾添加以下内容
找到 HISTSIZE=1000 改为 HISTSIZE=50

11.禁止使用Ctrl+Alt+Del快捷键重启服务器

sudo vi /etc/init/control-alt-delete.conf
#注释下面两行
#start on control-alt-delete
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

12.禁止用户su到root,只允许wheel组用户su到root

sudo vi /etc/pam.d/su
#找到下面这句,去掉注释
auth            required        pam_wheel.so use_uid

13.系统参数优化

vi /etc/sysctl.conf    #末尾添加如下参数  (备注:内核不够熟,加上注解大家谨慎选择使用)
net.ipv4.tcp_syncookies = 1           #1是开启SYN Cookies,当出现SYN 等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,默认是0关闭  net.ipv4.tcp_tw_reuse = 1             #1是开启重用,允许将TIME_AIT sockets重新用于新的TCP连接,默认是0关闭                                                       

net.ipv4.tcp_tw_recycle = 5            #TCP失败重传次数,默认是15,减 少次数可释放内核资源                                                                               

net.ipv4.tcp_max_syn_backlog = 10240    #进入SYN包的最大请求队列,默认 是1024                                                                                             

net.core.netdev_max_backlog =  10240  #允许送到队列的数据包最大设备队 列,默认300                                                                                        

net.core.somaxconn = 2048              #listen挂起请求的最大数量,默认 128                                                                                               

net.core.wmem_default = 8388608        #发送缓存区大小的缺省值                                                                                                           

net.core.rmem_default = 8388608        #接受套接字缓冲区大小的缺省值 (以字节为单位)                                                                                    

net.core.rmem_max = 16777216           #最大接收缓冲区大小的最大值                                                                                                       

net.core.wmem_max = 16777216           #发送缓冲区大小的最大值                                                                                                           

net.ipv4.tcp_synack_retries = 2        #SYN-ACK握手状态重试次数,默认5                                                                                                   

net.ipv4.tcp_syn_retries = 2           #向外SYN握手重试次数,默认4                                                                                                       

net.ipv4.tcp_max_orphans = 3276800     #系统中最多有多少个TCP套接字不 被关联到任何一个用户文件句柄上,如果超出这个数字,孤儿连接将立即复位并打印警告信息                 

net.ipv4.tcp_mem = 94500000 915000000 927000000   

#net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力;                                                                                                                          

#net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段;                                                                                                                         

#net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。内存单位是页,可根据 物理内存大小进行调整,如果内存足够大的话,可适当往上调。上述内存单位是页,而不是字节。             

net.ipv4.ip_local_port_range = 20480  65535  #(表示用于向外连接的端口范围。缺省情况下很小:32768到61000  注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口! 

14.自动注销

vi /etc/profile
#在"HISTSIZE="后面加入下面这行:
TMOUT=300 #300秒
source /etc/profile#立即生效

15.锁定系统重要的文件
主要作用:防止未经许可的删除或添加用户和分组

chattr +i /etc/passwd
chattr +i /etc/inittab
chattr +i /etc/group
chattr +i /etc/shadow
chattr +i /etc/gshadow

16.给系统服务端口列表文件加锁
主要作用:防止未经许可的删除或添加服务

chattr +i /etc/services

17.修改init目录文件执行权限

chmod -R 700 /etc/init.d/*

18.修改部分系统文件的SUID和SGID的权限:

chmod a-s /usr/bin/chage
chmod a-s /usr/bin/gpasswd
chmod g-s /usr/bin/wall
chmod a-s /usr/bin/chfn
chmod a-s /usr/bin/chsh
chmod a-s /usr/bin/newgrp
chmod g-s /usr/bin/write
chmod a-s /usr/sbin/usernetctl
chmod a-s /usr/sbin/traceroute#这个在6.6里面没有
chmod a-s /bin/mount
chmod a-s /bin/umount
chmod g-s /sbin/netreport

wall,write,netreport三个是SGID,这几个命令只用过mount和umount.....

参考:http://www.jb51.net/article/29873.htm
http://blog.csdn.net/zqtsx/article/details/9344709
http://blog.csdn.net/yunweigege/article/details/42002651
http://blog.csdn.net/knight_zhen/article/details/46444451

centos6.6配置用户家目录为网站根目录

1.配置虚拟机

[webserver@webserver6602 ~]$ sudo vi /etc/nginx/conf.d/webserver.conf 
server {
    listen       80;
    server_name  webserver.com;

    #charset koi8-r;
    access_log  /var/log/nginx/webserver.access.log  main;
    error_log /var/log/nginx/webserver.error.log warn;
    root   /home/webserver/html;
    location / {
        #root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        #root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        #root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

2.打开selinux
参考:http://blog.csdn.net/qidizi/article/details/41291397

setsebool -P httpd_read_user_content 1  #只设置这个就好了
setsebool -P httpd_enable_homedirs 1 

3.设置文件权限

chmod o+x /home/webserver
chmod o+x /home/webserver/html

4.重启nginx就ok了

centos 6.6默认iptable规则

今天在自己电脑上新装了centos6.6虚拟机,然后装了nginx,没有进行任何其他设置,然后就发现只能在centos上面可以访问nginx,看了下iptable的规则

[root@centos6 ~]# iptables-save
# Generated by iptables-save v1.4.7 on Sun Jul 26 15:53:13 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5819:366868]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Sun Jul 26 15:53:13 2015

看上去好像没有问题啊,默认策略也是接受,看到最后的两句,不明白是什么意思,搜了下原来是

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。

记录下,参考http://zhidao.baidu.com/link?url=1bwvdaSb6sKL_FzefyzVFd5GYoZOE4LMNiSG6Oe4WTGQb4ygdzWXVAlitJqLqQcjG1Zwg_xC1_6-Iflwq69il_

centos6.6设置samba和nginx访问用户家目录

之前都是把服务器搭好,在用php输出一个phpinfo就算是搭建成功了,要搭的环境是要实际运行的,所以出现了一些问题,主要是selinux,虽说直接关掉selinux就可以,但是感觉还是开着好一点,于是。。。。
要共享的是test用户家目录家的www文件夹(/home/test/www)
1.环境都搭好之后,开始共享文件,因为是共享家目录,所以不需要改samba配置文件,增加一个samba用户

smbpasswd -a test
#下面需要设置下用户密码

设置selinux

setsebool -P samba_enable_home_dirs on

ok,可以共享了,进入共享目录,操作文件,没有问题,
2.然后设置nginx共享,可以参见另一篇文章http://blog.csdn.net/scchary/article/details/47017475
然后ok了
3.因为我是用的thinkphp,所以php会自己创建文件,这时候就不行了,权限是ok的,是selinux的问题

chcon -t httpd_sys_content_t -R /home/test/www

参考自:http://www.linuxidc.com/Linux/2012-04/58440.htm
ok
4.再就发现samba不能共享了,又是selinux

setsebool -P samba_export_all_ro on

好了
参考网址http://os.51cto.com/art/201204/332440.htm
5.再就发现thinkphp创建的文件所属组和用户都是 apache (我的php-fpm运行身份是apache:apache),我登陆samba的用户是test,不能操作那些生成的文件,于是想起了SGID

chmod g+x -R /home/test/www

ok