扫码关注官方订阅号
R.T. 一台运行编译安装配置 CentOS 系统、用于处理 Web 请求的服务器应该怎样处理一下关系:
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
分享一下我的组织方法吧,感觉应用场景和题主的差不多。
目录结构和多个磁盘挂载点
在根目录建一个 /data,将某个单独的磁盘挂载在这里。
/data
这个目录里面包含诸多子目录。
/data |-- app/ # 网站程序 |-- log/ # 各种日志 |-- ftp/ # ftp 的根 |-- db/ # 数据库的数据文件 |-- op/ # op 专用的目录,放一些运维相关的脚本文档什么的 |-- ... # 更多的分类,根据需求添加
如果有多块磁盘也不要建立多个根,而是用软链将 /data 下某个目录链接到新的磁盘里。比如上面的 ftp/ 可以是一个软链指向其他磁盘,这样就不占用 /data 的空间了~至于其他磁盘挂在哪,这就无所谓了,你可以就放在 /mnt 里面,好找就行。
ftp/
/mnt
系统程序我会把它正常的装在 /usr/local/* 里面,配置放在系统常见的 /etc/ 里面,一些运行时的临时文件放在 /var/run/* 里面,但是程序 log 一定要管理起来,我会放在 /data/log/* 里。
/usr/local/*
/etc/
/var/run/*
/data/log/*
比如 mysql,binary 放在 /usr/local/bin/mysql*,配置在 /etc/mysql/*,数据在 /data/db/mysql/3306/*,日志放在 /data/log/mysql/3306/mysql_err.log。其中 binlog 属于数据的一部分,所以放在 /data/db 里。
/usr/local/bin/mysql*
/etc/mysql/*
/data/db/mysql/3306/*
/data/log/mysql/3306/mysql_err.log
/data/db
多用户管理
我一般为了安全会禁止系统默认账号登录,CentOS 是 root,同时禁用密码登录,全部只能用 key 登录,启用 UsePAM yes。具体你可以看看 /etc/ssh/sshd_config,里面有很详细的注释,不清楚的话可以上网查找。
CentOS
root
UsePAM yes
/etc/ssh/sshd_config
可登录的用户越少越好,我一般就只有两个,一个普通用户,一个可以 sudo 的超级用户,这两个放在不同的 group 里面。用 PAM 策略只允许这两个 group 的用户登录,/etc/sudoers 里也是对 group 授权,这样以后万一临时要添加个帐号也方便,只需要放到对应的组里面就好。
sudo
/etc/sudoers
启用应用一般就用 www-data,这是一个不允许登录的用户,shell 设置成了 /sbin/nologin。
www-data
/sbin/nologin
像 mysql 喜欢用 mysql 这个用户,安装的时候就会自动创建,于是也就随它去吧。
mysql
ftp 比较特别,一般用户名就叫 ftp,home 就设在 ftp 的根,不放在 /home。如果需要有多个 ftp 帐号,可以考虑用 proftpd 的虚拟帐号,免得创建很多个可以登录的帐号有安全问题。不过我自己并没有实际遇到过这种需求,所以并不清楚虚拟账号会有其他什么问题。
/home
目录权限
目录权限我觉得不用太纠结,毕竟不是在做一个很多人用 VPS,所以只要保证 owner/group 正确,并且尽量给正常的权限就好。
比如放 web 代码的目录的 owner 是 www-data,组就是它的组,目录权限 0755。里面的目录根据情况授权,一般就是 0644,需要可执行的给改成 0754 或 0755 都可以。一些需要对普通用户保密的内容(密码配置啊什么的)设成 0600 就好了。
0755
0644
0754
0600
/data/op 这个目录特别点,因为运维脚本一般都很敏感,我倾向于设置成 owner 为 root 并且权限为 0700。不过记得不要把 /data/op 里面的目录也设置成这样的权限,没必要而且难以管理,正常即可。
/data/op
0700
SELinux
禁用掉,很烦人,不想用。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
分享一下我的组织方法吧,感觉应用场景和题主的差不多。
在根目录建一个
/data,将某个单独的磁盘挂载在这里。这个目录里面包含诸多子目录。
如果有多块磁盘也不要建立多个根,而是用软链将
/data下某个目录链接到新的磁盘里。比如上面的ftp/可以是一个软链指向其他磁盘,这样就不占用/data的空间了~至于其他磁盘挂在哪,这就无所谓了,你可以就放在/mnt里面,好找就行。系统程序我会把它正常的装在
/usr/local/*里面,配置放在系统常见的/etc/里面,一些运行时的临时文件放在/var/run/*里面,但是程序 log 一定要管理起来,我会放在/data/log/*里。比如 mysql,binary 放在
/usr/local/bin/mysql*,配置在/etc/mysql/*,数据在/data/db/mysql/3306/*,日志放在/data/log/mysql/3306/mysql_err.log。其中 binlog 属于数据的一部分,所以放在/data/db里。我一般为了安全会禁止系统默认账号登录,
CentOS是root,同时禁用密码登录,全部只能用 key 登录,启用UsePAM yes。具体你可以看看/etc/ssh/sshd_config,里面有很详细的注释,不清楚的话可以上网查找。可登录的用户越少越好,我一般就只有两个,一个普通用户,一个可以
sudo的超级用户,这两个放在不同的 group 里面。用 PAM 策略只允许这两个 group 的用户登录,/etc/sudoers里也是对 group 授权,这样以后万一临时要添加个帐号也方便,只需要放到对应的组里面就好。启用应用一般就用
www-data,这是一个不允许登录的用户,shell 设置成了/sbin/nologin。像 mysql 喜欢用
mysql这个用户,安装的时候就会自动创建,于是也就随它去吧。ftp 比较特别,一般用户名就叫 ftp,home 就设在 ftp 的根,不放在
/home。如果需要有多个 ftp 帐号,可以考虑用 proftpd 的虚拟帐号,免得创建很多个可以登录的帐号有安全问题。不过我自己并没有实际遇到过这种需求,所以并不清楚虚拟账号会有其他什么问题。目录权限我觉得不用太纠结,毕竟不是在做一个很多人用 VPS,所以只要保证 owner/group 正确,并且尽量给正常的权限就好。
比如放 web 代码的目录的 owner 是
www-data,组就是它的组,目录权限0755。里面的目录根据情况授权,一般就是0644,需要可执行的给改成0754或0755都可以。一些需要对普通用户保密的内容(密码配置啊什么的)设成0600就好了。/data/op这个目录特别点,因为运维脚本一般都很敏感,我倾向于设置成 owner 为root并且权限为0700。不过记得不要把/data/op里面的目录也设置成这样的权限,没必要而且难以管理,正常即可。禁用掉,很烦人,不想用。