-
如何修复常见的Nginx Web服务器错误
Nginx是当今非常流行的web服务器。本文将向您展示运行Nginx web服务器时的一些常见错误以及可能的解决方案。这不是一个完整的列表。如果在尝试建议的解决方案后仍然无法修复错误,请检查/var/log/Nginx/目录下的Nginx服务器日志,并在谷歌上搜索以调试问题。 无法连接/拒绝连接 如果在尝试访问网站时看到以下错误: Firefox can’t establish a connection to the server at www.example.com 或 www.example.com refused to connect 或 The site can't be reached, www.example.com unexpectedly closed the connection. 可能是这样 Nginx没有运行。您可以使用sudo systemctl status Nginx检查Nginx状态。使用sudo systemctl Start Nginx启动Nginx。如果Nginx无法启动,请运行sudo Nginx-t以查看配置文件是否有任何问题。并查看日志(sudo journalctl-eu nginx),找出它无法启动的原因。 防火墙阻止端口80和443。如果在Debian/Ubuntu上使用UFW防火墙,请运行sudo UFW allow 80443/tcp以打开tcp端口80和443。如果在RHEL/CentOS/Rocky Linux/AlmaLinux上使用Firewalld,请运行sudo firewall cmd--permanent--add service={http,https},然后sudo systemctl重新加载Firewalld以打开TCP端口80和443。 失败2本。如果您的服务器使用fail2ban阻止恶意请求,则可能是fail2ban禁止了您的IP地址。运行sudo journalctl-eu fail2ban检查您的IP地址是否被禁止。您可以将您的IP地址添加到fail2ban ignoreip列表中,这样就不会再次被禁止。 Nginx没有在正确的网络接口上监听。例如,Nginx没有监听服务器的公共IP地址。 连接已超时 这可能意味着您的服务器处于脱机状态,或者Nginx无法正常工作。我曾经有过一个内存不足的问题,这导致Nginx无法生成工作进程。如果您可以在/var/log/nginx/error中看到以下错误消息。日志文件,服务器内存不足。 fork() failed while spawning "worker process" (12: Cannot allocate memory) 404找不到 404找不到意味着Nginx找不到您的web浏览器要求的资源。原因可能是: 服务器上不存在web根目录。在Nginx中,web roor目录是使用root指令配置的,如下所示:root/usr/share/Nginx/linuxbabe。com/;。确保您的网站文件(HTML、CSS、JavaScript、PHP)存储在正确的目录中。 PHP-FPM没有运行。您可以使用sudo systemctl status php7检查PHP-FPM状态。4-fpm(Debian/Ubuntu)或sudo systemctl status php fpm。 您忘记包含try_文件$uri/索引。php$is_args$args;Nginx服务器配置文件中的指令。处理PHP代码需要此指令。 您的服务器没有可用磁盘空间。试着释放一些磁盘空间。您可以使用ncdu实用程序(sudo-apt-install-ncdu或sudo-dnf-install-ncdu)找出哪些目录占用了大量磁盘空间。 403禁止 此错误意味着不允许您访问请求资源。可能的情况包括: 网站管理员通过IP白名单或其他方法阻止公众访问请求的资源。 该网站可能使用ModSecurity等web应用程序防火墙,该防火墙检测到入侵攻击,因此阻止了请求。 发生403时,某些web应用程序可能会显示不同的错误消息。它可能会告诉您“安全连接失败”,而原因是相同的。 500内部服务器错误 这意味着web应用程序中存在一些错误。可能是这样 数据库服务器已关闭。使用sudo systemctl status MySQL检查MySQL/MariaDB状态。用sudo systemctl Start mysql启动它。运行sudo journalctl-eu mysql,找出它无法启动的原因。MySQL/MariaDB进程可能因内存不足而被终止。 您没有将Nginx配置为使用PHP-FPM,因此Nginx不知道如何执行PHP代码。 如果web应用程序具有内置缓存,则可以尝试刷新应用缓存以修复此错误。 您的web应用程序可能会生成自己的错误日志。检查此日志文件以调试此错误。 您的web应用程序可能具有调试模式。打开它,您将在网页上看到更详细的错误消息。例如,通过在/srv/Modoboa/instance/instance/settings中设置DEBUG=True,可以在Modoboa邮件服务器托管平台中打开调试模式。py文件。 PHP-FPM可能会过载。检查PHP-FPM日志(例如/var/log/php7.4-FPM.log)。如果您发现[pool www]似乎很忙(您可能需要增加pm.start_服务器或pm.min/max_spare_服务器)警告消息,则需要为PHP-FPM分配更多资源。 有时重新加载PHP-FPM(sudo systemctl reload php7.4-FPM)可以修复错误。 Nginx显示默认页面 如果您试图设置Nginx虚拟主机,并且在web浏览器中键入域名时,会显示默认的Nginx页面,它可能是 您在Nginx虚拟主机中的server_name指令没有使用真实的域名。 你忘了重新加载Nginx。 页面没有正确重定向 Firefox显示此错误,因为页面没有正确重定向。Google Chrome将此错误显示为www.example。com重定向了你太多次。 这意味着您配置Nginx重定向的次数过多。例如,您可能在https服务器块中添加了一个不必要的return 301指令,以将HTTP重定向到https连接。 如果已经设置了页面缓存,比如Nginx FastCGI缓存,则需要清除服务器页面缓存。 504网关超时 这意味着像PHP-FPM/MySQL/MariaDB这样的上游服务器无法足够快地处理请求。您可以尝试重新启动PHP-FPM以暂时修复错误,但最好开始调优PHP-FPM/MySQL/MariaDB以获得更快的性能。 以下是my/etc/mysql/mariadb中的InnoDB配置。conf.d/50-server。cnf文件。这是一个非常简单的性能调整。 innodb_buffer_pool_size = 1024M innodb_buffer_pool_dump_at_shutdown = ON innodb_buffer_pool_load_at_startup = ON innodb_log_file_size = 512M innodb_log_buffer_size = 8M #Improving disk I/O performance innodb_file_per_table = 1 innodb_open_files = 400 innodb_io_capacity = 400 innodb_flush_method = O_DIRECT innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_buffer_pool_instances = 3 哪里: InnoDB缓冲池大小至少需要为RAM的一半。(对于具有少量RAM的VP,我建议将缓冲池大小设置为较小的值,如400M,否则VP将耗尽RAM。) InnoDB日志文件大小需要为缓冲池大小的25%。 将读IO线程和写IO线程设置为最大值(64),然后 让MariaDB使用3个InnoDB缓冲池实例。实例数必须与系统上的CPU核数相同。 保存更改后,重新启动MariaDB。 sudo systemctl restart mariadb 您还可以在Nginx中设置更长的超时值,以减少网关超时的机会。编辑Nginx虚拟主机文件,并在服务器{…}中添加以下行块 proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; 如果将Nginx与PHP-FPM结合使用,那么将fastcgi_read_timeout设置为更大的值,比如300秒。默认值为60秒。 location ~ /.php$ { try_files $uri /index.php$is_args$args; include snippets/fastcgi-php.conf; fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 300; } 然后重新加载Nginx。 sudo systemctl reload nginx PHP-FPM也有每个脚本的最大执行时间。编辑php。ini文件。 sudo nano /etc/php/7.4/fpm/php.ini 可以将该值增加到300秒。 max_execution_time = 300 然后重启PHP-FPM sudo systemctl restart php7.4-fpm 内存耗尽 如果您在Nginx错误日志中看到以下行,则表示PHP达到了128MB内存限制。 PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 57134520 bytes) 你可以编辑php。ini文件(/etc/php/7.4/fpm/php.ini),并增加php内存限制。 memory_limit = 512M 然后重启PHP7。4-FPM。 sudo systemctl restart php7.4-fpm 如果错误仍然存在,那么很可能是web应用程序中的坏PHP代码消耗了大量RAM。 PR_END_文件错误 您已将Nginx配置为将HTTP请求重定向到HTTPS,但Nginx中没有服务HTTPS请求的服务器块。 也许Nginx没有运行? 有时,主Nginx二进制文件正在运行,但辅助进程可能会由于各种原因而失败并退出。检查要调试的Nginx错误日志(/var/log/Nginx/error.log)。 PHP-FPM上游超时 有些人可以在Nginx错误日志文件(在/var/log/Nginx/下)中找到以下错误。 [error] 7553#7553: *2234677 upstream timed out (110: Connection timed out) while reading response header from upstream 可能的解决方案: 重新启动PHP-FPM。 升级内存。 资源暂时不可用 有些人可以在Nginx错误日志文件(在/var/log/Nginx/下)中找到以下错误。 connect() to unix:/run/php/php7.4-fpm.sock failed (11: Resource temporarily unavailable) 这通常意味着你的网站有很多访问者,PHP-FPM无法处理大量的请求。您可以调整PHP-FPM子进程的数量,以便它可以处理更多请求。 编辑PHP-FPM www.conf文件。(文件路径因Linux发行版而异。) sudo /etc/php/7.4/fpm/pool.d/www.conf 默认的子进程配置如下所示: pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 上述配置意味着 PHP-FPM动态创建子进程。没有固定数量的子进程。 它最多创建5个子进程。 PHP-FPM启动时启动2个子进程。 至少有一个空闲进程。 最多有3个空闲进程。 默认设置基于没有太多资源的服务器,比如只有1GB RAM的服务器。如果你有一个高流量的网站,你可能想增加子进程的数量,这样它就可以满足更多的请求。 pm = dynamic pm.max_children = 20 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 12 确保有足够的RAM来运行更多的子进程。保存并关闭文件。然后重启PHP-FPM。(您可能需要更改版本号。) sudo systemctl restart php7.4-fpm 要监视PHP-FPM的运行状况,可以启用状态页面。在PHP-FPM www.conf文件中找到以下行。请注意: ;pm.status_path = /status 删除分号以启用PHP-FPM状态页。然后重启PHP-FPM。 sudo systemctl restart php7.4-fpm 然后编辑Nginx虚拟主机文件。添加以下行。allow和deny指令用于限制访问。只有白名单上的IP地址才能访问状态页面。 location ~ ^/(status|ping)$ { allow 127.0.0.1; allow your_other_IP_Address; deny all; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } 保存并关闭文件。然后测试Nginx配置。 sudo nginx -t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl reload nginx PHP-FPM状态页面示例。 PHP-FPM www.conf文件很好地解释了每个参数的含义。 如果PHP-FPM非常忙,无法立即为请求提供服务,它将对该请求进行排队。默认情况下,最多可以有511个未决请求,由侦听器决定。backlog参数。 listen.backlog = 511 如果您在PHP-FPM状态页面上看到以下值,则表示从未有请求放入队列,即您的PHP-FPM可以快速处理请求。 listen queue: 0 max listen queue: 0 如果队列中有511个挂起的请求,这意味着您的PHP-FPM非常繁忙,因此您应该增加子进程的数量。 您可能还需要更改Linux内核网络。果心somaxconn设置,它定义了Linux上套接字文件(如PHP-FPM Unix套接字文件)允许的最大连接数。默认情况下,其值在内核5.4之前为128,从内核5.4开始为4096。 [email protected]:~$ sysctl net.core.somaxconn net.core.somaxconn = 128 如果你经营一个高流量的网站,你可以使用一个大的价值。编辑/etc/sysctl。conf文件。 sudo nano /etc/sysctl.cnf 添加以下两行。 net.core.somaxconn = 20000 net.core.netdev_max_backlog = 65535 保存并关闭文件。然后应用设置。 sudo sysctl -p 注意:如果您的服务器有足够的RAM,您可以为PHP-FPM分配固定数量的子进程,如下所示。根据我的经验,这修复了Joomla+Virtuemart网站的500个内部错误。 pm = static pm.max_children = 50 同一网站的两个虚拟主机文件 如果运行sudo nginx-t并看到以下警告。 nginx: [warn] conflicting server name "example.com" on [::]:443, ignored nginx: [warn] conflicting server name "example.com" on 0.0.0.0:443, ignored 这意味着有两个虚拟主机文件包含相同的服务器名称配置。不要为一个网站创建两个虚拟主机文件。 对等端重置PHP-FPM连接 Nginx错误日志文件显示以下消息。 recv() failed (104: Connection reset by peer) while reading response header from upstream 这可能是由于重新启动PHP-FPM造成的。如果您自己手动重新启动,则可以忽略此错误。 Nginx插座泄漏 如果在/var/log/nginx/error中发现以下错误消息。日志文件,您的Nginx存在套接字泄漏问题。 2021/09/28 13:27:41 [alert] 321#321: *120606 open socket #16 left in connection 163 2021/09/28 13:27:41 [alert] 321#321: *120629 open socket #34 left in connection 188 2021/09/28 13:27:41 [alert] 321#321: *120622 open socket #9 left in connection 213 2021/09/28 13:27:41 [alert] 321#321: *120628 open socket #25 left in connection 217 2021/09/28 13:27:41 [alert] 321#321: *120605 open socket #15 left in connection 244 2021/09/28 13:27:41 [alert] 321#321: *120614 open socket #41 left in connection 245 2021/09/28 13:27:41 [alert] 321#321: *120631 open socket #24 left in connection 255 2021/09/28 13:27:41 [alert] 321#321: *120616 open socket #23 left in connection 258 2021/09/28 13:27:41 [alert] 321#321: *120615 open socket #42 left in connection 269 2021/09/28 13:27:41 [alert] 321#321: aborting 你可以重启操作系统来解决这个问题。如果不起作用,您需要编译一个调试版本的Nginx,它会在日志中显示调试信息。 Cloudflare错误 如果您的网站运行在Cloudflare CDN(内容交付网络)之后,以下是一些常见错误和解决方案。 521网络服务器关闭 Nginx没有运行。 您没有在防火墙中打开TCP端口80和443。 您更改了服务器IP地址,但忘记在Cloudflare中更新DNS记录。 页面没有正确重定向 如果您在SSL/TLS应用程序上的SSL设置设置为“灵活”,但您的源服务器配置为将HTTP请求重定向到HTTPS,则您的Nginx服务器会以加密连接将响应发送回Cloudflare。由于Cloudflare需要HTTP流量,因此它会不断重新发送相同的请求,从而导致重定向循环。在这种情况下,您需要在Cloudflare设置中使用完整(严格)SSL/TLS选项。 收尾 我希望本文能帮助您修复常见的Nginx web服务器错误。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门?
-
在Linux(Debian/Ubuntu/Fedora/ArchLinux)上安装Git Verion控件
Git是一个免费、快速且功能强大的分布式版本控制系统(DVCS)。本指南将向您展示如何在Linux上安装Git,包括Debian、Ubuntu、Fedora、Archlinux和其他衍生产品。并解释了初始设置和创建第一个Git项目。 安装Git Debian/Ubuntu sudo apt-get install git 软呢帽: sudo dnf install git CentOS/Redhat: sudo yum install git Arch Linux sudo pacman -S git 通过键入以下内容检查Git版本: git --version 初始设置 用户特定配置 安装Git后,我们需要添加用户名和电子邮件地址。每当我们将更改提交到Git存储库时,Git就会自动嵌入这些信息。这可以通过以下命令完成。 git config --global user.name "Your Name" git config --global user.email "[email protected]" 然后你可以像下面这样检查你的设置。 git config -l 上述命令中的–global选项指定您的配置将存储在中。gitconfig文件位于主目录中,仅对您自己有效。您可以使用文本编辑器编辑此文件并更改配置。 全系统配置 如果希望系统上的每个用户都具有相同的配置,则必须传递–system选项,而不是–global选项。 sudo git config --system user.name "Your Name" sudo git config --system user.email "[email protected]" 由于系统范围的配置文件位于/etc/gitconfig中,因此需要sudo权限才能执行此操作。 特定于用户的配置会覆盖系统范围的配置。因此,如果您使用–system选项设置这些值,而另一个用户使用–global选项设置自己的配置,那么该用户将拥有自己的用户名和电子邮件地址。 特定于项目的配置 如果要在项目中使用不同的用户名和电子邮件地址,请将cd刻录到项目目录并发出以下命令: git config --local user.name "Your name" git config --local user.email "[email protected]" 在这种情况下,项目的配置存储在中。项目目录下的git/config文件。 创建你的第一个Git项目 导航到要跟踪的目录。然后键入以下命令: git init init命令将创建一个。并在当前目录中初始化存储库。Repository指的是Git项目。它们是一样的。 如果目录不为空,则可能需要添加子目录和文件以提交到存储库。这可以通过以下命令完成 git add . git commit -m "Initial Commit" 第一个命令中的句点表示当前目录。第一个命令完成后,当前目录中的所有内容都将被转移到下一次提交中。seconded命令将把文件或更改保存到存储库中。 寻求帮助 如果需要帮助,只需输入git help。很简单。如果需要有关特定git命令(如add)的帮助,请键入git help add。
-
413请求实体太大错误-一个简单的解决方案
今天我在我的WordPress网站上尝试了不同的主题。我以前在电脑上下载过很多主题。在我选择主题文件并点击立即安装按钮将其上传到服务器后,Nginx说:413请求实体太大。大多数情况下,只需编辑Nginx配置文件即可上传大文件。 增加所有服务器块的上载文件大小 如果在一台Nginx服务器上有多个网站(服务器块),并且希望增加所有网站的上传文件大小。然后你需要编辑nginx。配置文件 sudo vi /etc/nginx/nginx.conf 将以下文本放入http部分 client_max_body_size 2M; 上述Nginx指令意味着上传的最大文件大小为2兆字节。默认值为1M。因此,如果您不指定它并上传一个大于1MB的文件,那么您将得到一个413请求实体太大的错误。您可以根据自己的喜好更改此值。 保存并关闭文件。然后重新加载Nginx配置。您不需要重新启动Nginx。 sudo systemctl reload nginx 或 sudo /etc/init.d/nginx reload 增加单个服务器块的上载文件大小 如果要增加单个服务器块的上载文件大小,则需要编辑服务器块文件。在Debian/Ubuntu服务器上: sudo vi /etc/nginx/sites-available/yourdoman.com 在CentOS/Redhat服务器上: sudo vi /etc/nginx/conf.d/yourdomain.com.conf 并将以下行添加到服务器部分。同样,你可以根据自己的需要改变价值。 client_max_body_size 2M; 现在重新加载Nginx配置。 上传大于2兆字节的文件 请注意,PHP还设置了上载文件大小的限制。上传的默认最大文件大小为2M。所以当你上传一个大于2M的文件时,你会遇到这个错误 The uploaded file exceeds the upload_max_filesize directive in php.ini. 然后需要在PHP中更改值。编辑php。ini文件。在Debian/Ubuntu上: sudo vi /etc/php5/fpm/php.ini 在CentOS/Redhat上: sudo vi /etc/php.ini 找到以下行: upload_max_filesize = 2M 将该值更改为与Nginx上载文件大小相同的值。还可以找到下面这一行,增加你喜欢的值。 post_max_size = 8M 保存并关闭文件。然后重新加载php fpm。 sudo service php-fpm reload or sudo systemctl reload php-fpm 您的系统可能有php5 fpm或php7。0-fpm而不是php-fpm。 检查是否已经设置好 在Nginx中设置client_max_body_size值之前,最好检查该值是否已设置,但您不知道。将工作目录更改为/etc/nginx/并执行以下命令: sudo grep -R 'client_max_body_size' 上述命令将在Nginx config目录下的所有文件中找到该指令。还可以直接打开服务器块文件sudo vi/etc/nginx/conf.d/filename。conf查看服务器块是否已经设置了该值。 最重要的 如果在nginx中指定client_max_body_size的值。然后,服务器块文件中的值将覆盖nginx中设置的值。conf文件。
-
如何启用/etc/rc。本地与Systemd
如果您正在运行一个使用Systemd的Linux发行版,那么您可能会在/etc/rc中找到您的命令。本地文件不会在系统启动时运行。本指南介绍了如何启用/etc/rc。要在系统启动时运行的本地脚本。 启用/etc/rc。系统本地 如果在终端中键入以下命令: sudo systemctl status rc-local 您可能会得到以下输出: ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2015-11-26 23:54:58 CST; 59s ago Process: 1001 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE) Nov 26 23:54:57 vivid rc.local[1001]: File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 920, in require Nov 26 23:54:57 vivid rc.local[1001]: needed = self.resolve(parse_requirements(requirements)) Nov 26 23:54:57 vivid rc.local[1001]: File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 807, in resolve Nov 26 23:54:57 vivid rc.local[1001]: raise DistributionNotFound(req) Nov 26 23:54:57 vivid rc.local[1001]: pkg_resources.DistributionNotFound: shadowsocks==2.8.2 Nov 26 23:54:58 vivid sudo[1008]: pam_unix(sudo:session): session closed for user root Nov 26 23:54:58 vivid systemd[1]: rc-local.service: control process exited, code=exited status=1 Nov 26 23:54:58 vivid systemd[1]: Failed to start /etc/rc.local Compatibility. Nov 26 23:54:58 vivid systemd[1]: Unit rc-local.service entered failed state. Nov 26 23:54:58 vivid systemd[1]: rc-local.service failed. 如果您尝试启用/etc/rc。使用以下命令在系统启动时运行本地: sudo systemctl enable rc-local 你可能会得到: The unit files have no [Install] section. They are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. 2) A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. 3) A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). 解决方案 从上面可以看到,单元文件没有[Install]部分。因此,Systemd无法启用它。首先,我们需要创建一个文件: sudo nano /etc/systemd/system/rc-local.service 然后添加以下内容。 [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target 保存并关闭文件。要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出文件,请按Ctrl+X。下一步,运行以下命令以确保/etc/rc。本地文件是可执行的。 sudo chmod +x /etc/rc.local 注意:从16.10开始,Ubuntu不附带/etc/rc。本地文件了。可以通过执行此命令来创建文件。 printf '%s/n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local 然后将执行权限添加到/etc/rc。本地文件。 sudo chmod +x /etc/rc.local 之后,在系统启动时启用服务: sudo systemctl enable rc-local 输出: Created symlink from /etc/systemd/system/multi-user.target.wants/rc-local.service to /etc/systemd/system/rc-local.service. 现在启动服务并检查其状态: sudo systemctl start rc-local.service sudo systemctl status rc-local.service 输出: ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2015-11-27 00:32:56 CST; 14min ago Process: 879 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS) Main PID: 880 (watch) CGroup: /system.slice/rc-local.service Cron@reboot 如果上述方法不适用于您,或者您只是希望在系统引导时执行一些简单的命令,那么您还可以使用cron中的@reboot功能在系统引导时自动执行命令。例如,我希望我的shadowsocks客户端自动启动,因此我打开根用户的cron文件: sudo crontab -e 然后把下面的一行放在它的末尾。 @reboot /usr/bin/sslocal -c /etc/shadowsocks.json -d start 保存并关闭文件。 在一些Linux发行版(如archlinux)中,默认情况下不启用cron守护进程。所以你必须手动启用它。要在archlinux上启用它,请在终端中输入以下命令。 sudo systemctl enable cronie Shadowsocks是一个socks5代理,可用于绕过Internet防火墙。如果您感兴趣,请单击下面的链接,了解如何设置自己的Shadowsocks服务器。 在Debian、Ubuntu和Centos上安装自己的shadowsocks服务器 如何使用Systemd 想了解更多有关systemd的信息以有效管理您的系统吗?请阅读以下教程。 如何在Linux上使用Systemd管理服务、运行级别和日志
-
在Fedora22/23(Nginx、MariaDB、PHP-FPM)上安装LEMP堆栈
本教程将向您展示如何在Fedora22/23上安装LEMP堆栈。具体来说,我们将安装Nginx Web服务器、MariaDB数据库服务器和PHP-FPM。在上一个教程中,我向您展示了如何在CentOS/Redhat服务器上安装LEMP堆栈,Fedora上的过程有点不同。所以,不用再麻烦了,让我们开始吧。 安装Nginx Web服务器 首先登录Fedora服务器,然后发出以下命令来安装Nginx。 sudo dnf install nginx 启动Nginx web服务器: sudo systemctl start nginx 检查它是否正在运行: sudo systemctl status nginx 我的产出: ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2015-11-21 15:55:29 CST; 15s ago Process: 2635 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 2616 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 2607 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 2641 (nginx) CGroup: /system.slice/nginx.service ├─2641 nginx: master process /usr/sbin/nginx ├─2642 nginx: worker process ├─2643 nginx: worker process ├─2645 nginx: worker process └─2646 nginx: worker process 在系统引导时自动启动Nginx: sudo systemctl enable nginx 检查Nginx版本: [[email protected] ~] $ nginx -v nginx version: nginx/1.8.0 在web浏览器中键入您的服务器ip地址,如果您看到以下内容,则说明Nginx已正确安装。 您可以使用以下命令查找服务器公共IP地址: ip address 或 curl http://icanhazip.com 如果看不到上述页面,则可能需要调整防火墙设置,以允许远程客户端访问您的网页。 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https 重启防火墙 sudo firewall-cmd --reload 现在访问您的web服务器,您应该会看到Nginx欢迎页面。使用Nginx,您的服务器可以承载静态html文件,但为了为WordPress网站等动态网站提供服务器,我们需要安装MariaDB和PHP。 安装MariaDB数据库服务器 MariaDB是MySQL的一个升级版本。使用以下命令安装: sudo dnf install mariadb-server mariadb 安装后,我们需要启动它。 sudo systemctl start mariadb 检查状态: sudo systemctl status mariadb 产出: ● mariadb.service - MariaDB 10.0 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2015-11-21 19:30:01 CST; 4s ago Process: 7498 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 7357 ExecStartPost=/usr/libexec/mysql-wait-ready $MAINPID (code=exited, status=0/SUCCESS) Process: 7224 ExecStartPre=/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 7180 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Main PID: 7356 (mysqld_safe) CGroup: /system.slice/mariadb.service ├─7356 /bin/sh /usr/bin/mysqld_safe --basedir=/usr └─7468 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/my... 检查版本: [[email protected] ~] $ mysql --version mysql Ver 15.1 Distrib 10.0.21-MariaDB, for Linux (x86_64) using readline 5.1 现在运行安全脚本 sudo mysql_secure_installation 当脚本要求您输入当前的根密码时,只需将其留空并按enter键。然后输入Y并设置根密码。设置root密码后,只需按enter键即可回答所有其他问题。 脚本完成后,我们需要启用MariaDB以在系统引导时启动。 sudo systemctl enable mariadb 现在让我们转到PHP部分。 安装PHP 使用以下命令安装PHP和相关软件包: sudo dnf install php-fpm php-mysql php-common 编辑php fpm主配置文件: sudo vi /etc/php.ini 找到以下行: ;cgi.fix_pathinfo=1 删除前面的分号并将其值设置为0 cgi.fix_pathinfo=0 保存并关闭文件。 现在编辑php fpm www.conf config文件: sudo vi /etc/php-fpm.d/www.conf 找到以下两行: ;listen.owner = nobody ;listen.group = nobody 删除前面的分号。 然后将用户和组值从“apache”更改为“nginx”: user = nginx group = nginx 保存并关闭文件后,启动PHP处理器: sudo systemctl start php-fpm 接下来,在系统引导时启用php fpm。 sudo systemctl enable php-fpm 配置Nginx服务器块 在/etc/nginx/conf.d目录中创建一个新的服务器块文件 sudo vi /etc/nginx/conf.d/example.com.conf 添加以下行。 server { listen 80; server_name www.example.com example.com root /usr/share/nginx/html; index index.php index.html index.htm; location / { try_files $uri $uri/ index.php$query_string; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 保存并关闭文件。然后重新启动nginx: sudo systemctl restart nginx 您可以添加额外的服务器块文件,以便在一台服务器上托管多个网站。 测试PHP 创建一个信息。web根目录中的php文件: sudo vi /usr/share/nginx/html/info.php 将以下文字输入信息。php文件 <?php phpinfo(); ?> 保存并关闭它。 然后通过在浏览器中键入以下内容来访问新创建的文件: server ip address/info.php 如果您可以看到类似的内容,那么您的PHP工作正常。 恭喜!您已在Fedora上成功安装了LEMP stack。是时候主持你的网站了。
-
如何使用LEMP在CentOS 7上安装Drupal 7
在之前的教程中,我向您展示了如何在CentOS 7服务器上安装LEMP。现在,如果你想在上面建立一个网站,你可以安装WordPress或Drupal,这两个都是内容管理系统的好选择。本教程将向您展示如何安装Drupal 7。 在CentOS上安装Drupal 7 首先,使用以下命令将所有系统软件升级到软件存储库中可用的最新版本: sudo yum update 接下来,从官方网站下载Drupal。您可以使用wget来实现这一点: wget http://ftp.drupal.org/files/projects/drupal-7.41.tar.gz 当你阅读这篇文章时,可能有一个更新版本的drupal可用,你可以在https://www.drupal.org/project/drupal 下载完成后,使用以下命令解包。这将在当前目录下创建一个drupal-7.41目录。 tar xzvf drupal-7.41.tar.gz 现在将drupal-7.41目录中的所有文件复制到web根目录。如果您遵循了前面的教程,那么您的web根目录将是/usr/share/nginx/html sudo mv drupal-7.41/* /usr/share/nginx/html/ 建立数据库 登录MariaDB shell,可以使用以下命令完成此操作: mysql -u root -p 进入MariaDB shell后,使用以下命令为Drupal创建一个新的数据库。我叫它drupal,你可以用任何你喜欢的名字。 create database drupal; 然后使用下面的SQL语句创建一个新的数据库用户。再说一遍,我把它命名为drupaluser,你可以用任何你喜欢的名字。 create user [email protected]; 为用户设置密码: set password for [email protected]= password("your-password"); 然后将新数据库的所有权限授予新用户: grant all privileges on drupal.* to [email protected] identified by 'your-password'; 刷新数据库: flush privileges; 退出MariaDB外壳: exit; 配置Drupal 将工作目录更改为web根目录: cd /usr/share/nginx/html 将默认设置复制到新文件: sudo cp sites/default/default.settings.php sites/default/settings.php 向设置添加写入权限。php文件和站点/默认目录 sudo chmod a+w sites/default/settings.php sudo chmod a+w sites/default 最后,我们需要将web根目录的所有者更改为Nginx用户。nginx用户通常是nginx或www数据。您可以在/etc/nignx/nginx中查看它。此外,我们需要将当前用户添加到www数据组中,以便我们可以编辑web根目录下的文件。 sudo chown nginx:nginx /usr/share/nginx/html/ -R sudo usermod -a -G nginx your-username newgrp nginx 在浏览器中安装Drupal 7 在进入浏览器之前,我们需要安装php gd,这样Drupal安装脚本就可以毫无问题地运行。这可以使用命令来完成 sudo yum install php-gd php-xml php-mbstring 编辑/etc/php。ini文件,将以下文本放入其中。 extension=dom.so 保存文件并重新启动php fpm sudo systemctl restart php-fpm 现在转到您的web浏览器,键入以下内容 http://server-domain or ip/install.php 您将看到Drupal安装向导。按照说明完成Drupal 7的安装。 安装Drupal后,应该删除索引。web根目录中的html文件: rm index.html
-
在CentOS7上安装LEMP堆栈(Nginx、MariaDB、PHP-FPM)的分步指南
LEMP代表Linux、Nginx(发音为engine X)、MySQL/MariaDB和PHP。它使服务器能够托管动态网站和web应用程序。在本教程中,我将向您展示如何在CentOS 7服务器上安装LEMP堆栈。我选择安装MariaDB作为数据库服务器,而不是MySQL。 从EPEL在CentOS7上安装Nginx 与Apache相比,Nginx是一款速度很快的web服务器,而且现在越来越流行。为了在CentOS 7上安装Nginx,我们需要使用以下命令添加EPEL存储库。EPEL代表企业Linux的额外软件包。 sudo yum install epel-release -y 输入密码。现在添加了存储库,是时候安装Nginx了: sudo yum install nginx -y 安装Nginx后,我们需要启动它。 sudo systemctl start nginx 使Nginx在系统启动时启动。 sudo systemctl enable nginx 检查它是否正在运行: systemctl status nginx 样本输出: ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2018-09-24 08:36:31 UTC; 1min 19s ago Main PID: 13692 (nginx) CGroup: /system.slice/nginx.service ├─13692 nginx: master process /usr/sbin/nginx └─13693 nginx: worker process 检查Nginx版本: [[email protected] ~]$ nginx -v nginx version: nginx/1.12.2 在web浏览器中键入您的服务器IP地址,如果您看到以下内容,则说明Nginx已正确安装。 您可以使用以下命令查找服务器公共IP地址: ip address 或 curl http://icanhazip.com 服务器防火墙可能已禁用对端口80的公共访问。为了允许公共访问,我们告诉iptables防火墙使用以下命令接受到端口80的流量。 sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT 现在,您的服务器可以托管静态html文件,但为了为动态网站提供服务器,我们需要安装MariaDB和PHP。 在CentOS 7上安装MariaDB MariaDB是MySQL的替代品。使用以下命令安装它: sudo yum install mariadb-server mariadb -y 安装后,我们需要启动它。 sudo systemctl start mariadb 使MariaDB在系统启动时启动。 sudo systemctl enable mariadb 检查状态: systemctl status mariadb 产出: ● mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2018-09-24 08:48:46 UTC; 23s ago Main PID: 13970 (mysqld_safe) CGroup: /system.slice/mariadb.service ├─13970 /bin/sh /usr/bin/mysqld_safe --basedir=/usr 检查版本: [[email protected] ~]$ mysql --version mysql Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1 现在我们需要运行安全脚本。 sudo mysql_secure_installation 当脚本要求您输入当前的根密码时,只需将其留空并按enter键。然后输入Y并设置根密码。 设置root密码后,只需按enter键即可回答所有其他问题。(请注意,字母Y大写,这意味着它是默认答案。) 现在让我们转到PHP部分。 在CentOS7上安装PHP-FPM 使用以下命令安装PHP和相关软件包: sudo yum install php php-mysql php-fpm php-gd php-xml php-mbstring -y 现在编辑php fpm配置文件: sudo nano /etc/php-fpm.d/www.conf 找到以下行: listen = 127.0.0.1:9000 将其更改为: listen = /var/run/php-fpm/php-fpm.sock 然后找到以下两行: ;listen.owner = nobody ;listen.group = nobody 删除前面的分号。最后,将用户和组值从“apache”更改为“nginx”: user = nginx group = nginx 保存并关闭文件后,启动PHP处理器: sudo systemctl start php-fpm 接下来,在系统引导时启用php fpm。 sudo systemctl enable php-fpm 配置Nginx虚拟主机 在/etc/nginx/conf.d目录中创建一个新的虚拟主机文件 sudo nano /etc/nginx/conf.d/example.com.conf 添加以下行。替换www.example。com和示例。com与您自己的域。别忘了为你的域名设置一个记录。 server { listen 80; server_name www.example.com example.com; root /usr/share/nginx/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$query_string; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 保存并关闭文件。然后重新加载nginx: sudo systemctl reload nginx 您可以添加其他虚拟主机文件,以便在一台服务器上托管多个网站。 测试PHP处理 创建一个信息。web根目录中的php文件: sudo nano /usr/share/nginx/html/info.php 将以下文本放入文件中 <?php phpinfo(); ?> 保存并关闭它。然后通过在浏览器中键入以下内容来访问新创建的文件: 或 your ip address/info.php 如果您在下面的屏幕截图中看到类似的内容,那么您的PHP工作正常。 此文件仅用于测试。出于安全原因,现在可以使用以下命令将其删除: sudo rm /usr/share/nginx/html/info.php 现在你已经安装了LEMP,你可能想知道下一步该怎么做。嗯,你可以在你的LEMP堆栈上安装WordPress或Drupal网站。这正是我将在下一个教程中向您展示的内容。
-
如何在Kamatera上创建Linux VPS服务器
本文将解释如何在Kamatera上创建一个Linux VPS(虚拟专用服务器),以便您可以运行自己的电子邮件服务器和网站。 ScalaHosting vs Kamatera 在上一个教程中,我解释了如何在ScalaHost上创建Linux VPS服务器,这是我推荐的运行电子邮件服务器的托管提供商,因为它拥有最好的IP声誉。然而,ScalaHost计划的起价是每月26美元(2个CPU,8GB RAM)。这对一些人来说有点贵,因为他们不需要那么多内存就可以开始。 如果您的业务依赖于电子邮件,我仍然建议您使用ScalaHost,因为它将为您提供更好的电子邮件交付能力。如果你缺钱,那么你可以选择Kamatera VPS主机,起价为每月4美元(1个CPU,1GB RAM),你将获得一个月的免费服务。 我在两个主机提供商上都有电子邮件服务器,我将与您分享我在Kamatera的经验。 为什么要运行自己的电子邮件服务器 有像Google Workspace和Microsoft Exchange Online这样的托管电子邮件解决方案,但当你有很多用户时,它们会变得非常昂贵。如果你在VPS上运行自托管电子邮件服务器,你可以添加无限的用户、无限的域,并以非常低的价格发送无限的电子邮件。 您可以轻松地使用iRedMail设置邮件服务器。 如何使用iRedMail在Ubuntu20.04上轻松设置自己的邮件服务器 如何使用iRedMail在Debian 10上轻松设置自己的邮件服务器 如何使用iRedMail在CentOS 8上轻松设置自己的邮件服务器 你可以在你的电子邮件服务器上安装一个像Mautic这样的自托管电子邮件营销平台,这样你就可以取消Mailchimp/Aeber订阅,每月节省数百美元。 为电子邮件查找VPS 要找到一个适合电子邮件托管的VPS提供商并非易事。许多托管公司,如DigitalOcean blocks port 25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。另一个问题是,像DigitalOcean这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。 Kamatera是运行邮件服务器的一个非常好的选择,因为 他们不封锁25号端口。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或spamrats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。请注意,您不允许发送垃圾邮件,也称为未经请求的批量电子邮件。如果收件人没有明确允许你发送电子邮件,而你向他们发送电子邮件,那就是未经请求的电子邮件。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 从下面的截图可以看出,我的邮件服务器(smtp01.linuxbabe.com)的IP地址(63.250.61.81)不在任何黑名单上。 如何在Kamatera上创建Linux VPS服务器 转到Kamatera网站,点击“免费入门”按钮创建帐户。 您需要验证您的电子邮件地址。 接下来,您需要添加一个账单配置文件。 输入您的地址和电话号码。 然后添加你的手机号码进行两步验证。 确认您的电话号码后,进入下一步,输入您的信用卡信息。系统会自动添加促销代码(1个月300),为您提供一个月的免费使用(最高100美元)。 现在您的账单配置文件已添加,请转到我的云->;创建新服务器以添加新服务器。选择您的服务器位置、操作系统映像(Ubuntu、Debian、Linux等)和服务器类型。 对于电子邮件服务器,我推荐以下规格,每月9美元。如果要运行功能齐全的电子邮件服务器,需要3 GB的RAM。如果你需要一个简单的电子邮件服务器,那么2GB内存就可以了。 服务器类型:可用性 CPU:1核 内存:3GB SSD:20GB 接下来,为VPS设置一个根密码,并给它一个主机名。 最后,单击创建服务器按钮。请注意,您不会立即收到账单。你可以免费使用服务器一个月。创建服务器可能需要几分钟的时间。您可以在任务队列中检查进度。 创建服务器后,您将收到一封电子邮件通知。您可以通过SSH登录到服务器。如果你在桌面电脑上使用Linux,你可以打开一个终端窗口,运行以下命令登录到你的服务器。将12.34.56.78替换为服务器的IP地址。然后输入根密码。 ssh [email protected]12.34.56.78 恭喜!现在你可以开始你的Linux服务器项目了。如果您使用的是Windows,请阅读下面关于如何使用SSH客户端的文章。 在Windows上使用SSH登录Linux服务器的3种方法 创建sudo用户 我强烈建议创建一个sudo用户来管理服务器,而不是使用默认的root用户。它不仅提高了服务器的安全性,还允许您在无法以root用户身份登录时以新用户身份登录。 Debian/Ubuntu 如果您在服务器上安装了Debian或Ubuntu,请运行以下命令创建用户。 adduser username 然后将用户添加到sudo组。 adduser username sudo 现在可以从root用户退出。 exit 并以新用户身份登录。 ssh username@12.34.56.78 CentOS/Linux 如果在服务器上安装了CentOS/Linux,请运行以下命令创建用户。将用户名替换为首选用户名。 adduser username 设置此用户的密码。 passwd username 将此用户添加到控制盘组以使用sudo。 gpasswd -a username wheel 确保已安装sudo实用程序。 dnf install sudo 现在可以从root用户退出。 exit 并以新用户身份登录。 ssh username@12.34.56.78 远离垃圾邮件文件夹的提示 我强烈建议遵循电子邮件发送的最佳实践,这样你的电子邮件就可以进入收件箱,远离垃圾邮件文件夹。 7个有效的建议来阻止你的邮件被标记为垃圾邮件 为Kamatera VPS创建PTR记录 Kamatera不允许您在控制面板中编辑PTR记录。相反,你需要打开一张支持票,告诉他们为你添加PTR记录。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 基于Web的VNC控制台 Kamatera在帐户控制面板中提供了一个基于web的VNC控制台。此VNC连接不受SSH影响。如果您不小心将自己锁定在SSH服务之外,您可以始终使用VNC控制台来修复SSH服务中的错误。请注意,在Kamatera上创建新的VPS后,可能需要等待几个小时才能使用VNC控制台。 去我的云端->;服务器->;行动->;控制台来启动VNC控制台。 如何升级服务器规格 如果您需要VPS上的更多资源,请访问我的云->;服务器->;行动->;配置以向VPS添加更多CPU、RAM或磁盘空间。单击更新配置按钮以应用更改。您可以通过SSH运行htop命令来检查升级是否成功。如果您仍然看到原始的服务器规范,请转到Kamatera网站,单击重新启动按钮重新启动服务器。(从命令行重新启动可能无法应用更改。) 如何向VPS添加多个IP地址 对于批量电子邮件发件人来说,使用多个IP地址发送电子邮件是一种很好的做法,这样可以保持良好的IP声誉,提高电子邮件的可交付性。要为Kamatera VPS添加额外的IP地址,需要使用以下命令关闭VPS。 sudo shutdown -h now 然后进入Kamatera web界面,选择我的云->;服务器,单击VPS,然后选择网络选项卡->;您的WAN网络接口->;添加IP地址。 接下来,选择自动IP选择。 然后单击“重新启动并自动添加”按钮,等待任务完成。 Kamatera将在向VPS添加IP地址时自动创建快照。当您在Kamatera帐户中看到以下消息时,需要转到“快照”选项卡并提交快照。 Server has active snapshots. Reconfiguring server's networks can't be done while server has active snapshots. Please commit all Snapshots to proceed. 完成后,打开VPS。并通过SSH登录。您可以使用以下命令检查VPS上的网络接口和IP地址。 sudo ip -c a 如您所见,主网络接口现在有两个公共IP地址。 拥有多个IP地址后,请按照下面链接的教程设置Postfix SMTP服务器的多个实例,以便它可以使用多个IP地址。 Postfix SMTP在单个VPS上具有多个IP轮换实例 如何删除IP地址 这个过程非常类似于添加一个新的IP地址。首先,您需要关闭VPS,然后转到“网络”选项卡并选择“删除IP地址”选项。接下来,提交Kamatera自动生成的快照。最后,打开VPS。 收尾 我希望本文能帮助您在Kamatera上创建Linux VPS。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
Linux安全:在CentOS/Redhat上禁用Root SSH登录
为什么要禁用根ssh登录?因为每个Linux服务器都有一个root用户。如果您允许root用户使用ssh登录,黑客可能会试图强行使用您的root密码。但如果您创建另一个用户并禁用根ssh登录,黑客就不知道您的用户名,所以暴力攻击是无用的。新包装的用户可以使用sudo或su进行系统管理。 本教程将向您展示如何创建可以使用su或sudo的用户帐户,以及如何在CentOS/Redhat上禁用root ssh登录。 创建一个新的用户帐户 1.使用以下命令创建用户帐户。在本例中,我将使用用户名newuser。adduser命令将创建用户、初始组及其主目录。 adduser newuser 2.为用户设置密码。你必须输入两次密码。 passwd newuser 3.现在验证您可以使用新用户帐户通过ssh登录。默认情况下,新创建的用户可以使用su命令切换到root。 [[email protected] ~]$ su - Password: [[email protected] ~]$ whoami root 如果由于某种原因无法使用su命令,请将用户添加到控制盘组。 usermod -G wheel newuser 4.但它不能使用sudo命令。如果希望用户帐户使用sudo命令,请以root用户身份执行以下命令: yum install sudo echo 'newuser ALL=(ALL) ALL' >> /etc/sudoers 5.现在验证用户帐户是否可以使用sudo命令。 禁用根用户的SSH登录 现在您有了一个单独的用户帐户,可以使用su或sudo来获得root权限,是时候禁用root ssh登录了。首先用你最喜欢的文本编辑器编辑/etc/ssh/sshd_配置文件。我喜欢使用vi编辑器。 vi /etc/ssh/sshd_config 找到以下行: #PermitRootLogin yes 将其更改为: PermitRootLogin no 保存文件。现在,检查您的新用户帐户是否可以通过ssh登录非常重要,因为我们将重新启动ssh服务,之后您将无法再通过ssh以root用户身份登录。 systemctl restart ssh 现在只有新用户帐户可以通过ssh登录。如果您尝试以root用户身份ssh登录,即使您键入的密码正确,您仍然会收到一个“权限拒绝”错误。
-
如何在Dovecot&中配置用户配额;后固定管理员
本教程将向您展示如何在Dovecot和PostfixAdmin中配置用户配额。 先决条件 为了学习本教程,假设邮件服务器上安装了Postfix SMTP服务器和Dovecot IMAP服务器。如果没有,请使用以下教程。 Ubuntu 在Ubuntu上设置基本的Postfix SMTP服务器 在Ubuntu上安装Dovecot IMAP服务器&;启用TLS加密 CentOS 8/RHEL 8 在CentOS 8/RHEL 8上设置基本的Postfix SMTP服务器 在CentOS 8/RHEL 8&;上安装Dovecot IMAP服务器;启用TLS加密 还假设您已经在邮件服务器上安装了基于web的邮件管理工具PostfixAdmin。 Ubuntu 18.04 PostfixAdmin–在Ubuntu 18.04邮件服务器上创建虚拟邮箱 Ubuntu 20.04 PostfixAdmin–在Ubuntu 20.04邮件服务器上创建虚拟邮箱 CentOS 8/RHEL 8 PostfixAdmin–在CentOS 8/RHEL 8邮件服务器上创建虚拟邮箱 请注意,如果您以前使用iRedMail设置过电子邮件服务器,那么服务器上已经配置了用户配额,因此您不需要遵循本教程。 步骤1:从命令行在Dovecot中配置用户配额 首先,我们需要启用配额插件。编辑Dovecot 10邮件。conf文件,带有命令行文本编辑器,如Nano。 sudo nano /etc/dovecot/conf.d/10-mail.conf 找到mail_plugins参数,取消注释并将其值设置为: mail_plugins = quota 这是全局邮件插件设置。保存并关闭文件。接下来,我们需要为LMTP和IMAP服务启用配额插件。编辑Dovecot 20 lmtp。conf文件。 sudo nano /etc/dovecot/conf.d/20-lmtp.conf 将配额添加到mail_插件列表中。 protocol lmtp { mail_plugins = $mail_plugins sieve quota } 保存并关闭文件。然后编辑20个imap。conf文件。 sudo nano /etc/dovecot/conf.d/20-imap.conf 为imap协议启用imap_配额插件。 protocol imap { mail_plugins = $mail_plugins imap_quota } 保存并关闭文件。然后编辑配额配置文件。 sudo nano /etc/dovecot/conf.d/90-quota.conf 在配额限制部分,按如下方式配置插件。这将为每个邮件用户设置1G配额。达到1G后,每个用户的垃圾文件夹将有自己的100M配额。你可以根据需要更改数字。 plugin { quota_rule = *:storage=1G quota_rule2 = Trash:storage=+100M # LDA/LMTP allows saving the last mail to bring user from under quota to # over quota, if the quota doesn't grow too high. Default is to allow as # long as quota will stay under 10% above the limit. Also allowed e.g. 10M. quota_grace = 10%% # Quota plugin can also limit the maximum accepted mail size. quota_max_mail_size = 100M } 在Quota warnings(配额警告)部分,按如下方式配置插件,这样,如果用户达到配额的80%和95%,Dovecot将发送警告消息。 plugin { quota_warning = storage=100%% quota-warning +100 %u quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u quota_warning4 = -storage=100%% quota-warning -100 %u # user is no longer over quota } 并取消对以下行的注释。这定义了将发送警告消息的shell脚本的位置。 service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = dovecot unix_listener quota-warning { user = vmail } } 在配额后端部分,按如下方式配置插件,以便Dovecot使用dict后端(MySQL/MariaDB数据库)。 plugin { #quota = dirsize:User quota #quota = maildir:User quota quota = dict:User quota::proxy::quota #quota = fs:User quota } 保存并关闭文件。然后创建配额警告。sh文件。 sudo nano /usr/local/bin/quota-warning.sh 如果使用Ubuntu,请在文件中添加以下行。 #!/bin/bash PERCENT=$1 USER=$2 cat << EOF | /usr/sbin/sendmail $USER -O "plugin/quota=maildir:User quota:noenforcing" From: [email protected] Subject: quota warning Your mailbox is now $PERCENT% full. EOF 保存并关闭文件。然后使其可执行。 sudo chmod +x /usr/local/bin/quota-warning.sh 编辑/etc/dovecot/conf.d/10-master。conf文件。 sudo nano /etc/dovecot/conf.d/10-master.conf 向下滚动到此文件的末尾。按如下方式配置dict服务。 service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } 保存并关闭文件。 第2步:连接Dovecot和PostfixAdmin 现在我们已经在Dovecot中启用了配额,我们需要将其与PostfixAdmin连接。编辑dovecot sql。conf.ext文件。 sudo nano /etc/dovecot/dovecot-sql.conf.ext 找到下面这行。 user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1' 我们需要将其改为: user_query = SELECT CONCAT('/var/vmail/', maildir) AS home, 2000 AS uid, 2000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1' 因此,Dovecot可以从MySQL/MariaDB数据库中获取每个用户的配额信息。保存并关闭文件。然后编辑Dovecot主配置文件。 sudo nano /etc/dovecot/dovecot.conf 找到dict{}部分并取消配额字典的注释。 dict { quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext } 保存并关闭文件。然后编辑/etc/dovecot/dovecot dict sql。conf.ext文件。(请注意,在CentOS 8/RHEL 8上,此文件不存在。您只需手动添加下面描述的行。) sudo nano /etc/dovecot/dovecot-dict-sql.conf.ext 在开头添加以下行,这样Dovecot就可以访问MySQL/MariaDB中的postfixadmin数据库。如果您不记得postfixadmin数据库密码,可以在/etc/dovecot/dovecot sql中找到它。conf.ext文件。 connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password 在该文件中,可以看到两个地图定义。您需要将配额更改为quota2。 map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages } 然后注释掉第三个映射定义,因为PostfixAdmin不使用expire表。 #map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # fields { # username = $user # mailbox = $mailbox # } #} 保存并关闭文件。重新启动Dovecot以使更改生效。 sudo systemctl restart dovecot 检查状态。确保它在运行。 sudo systemctl status dovecot 要在PostfixAdmin中显示配额信息,请编辑PostfixAdmin配置文件。 Ubuntu sudo nano /usr/share/postfixadmin/config.local.php CentOS 8/RHEL 8 Apache sudo nano /var/www/postfixadmin/config.local.php CentOS 8/RHEL 8 Nginx sudo nano /usr/share/nginx/postfixadmin/config.local.php 在该文件末尾添加以下两行,以便在PostfixAdmin中启用配额。 $CONF['quota'] = 'YES'; $CONF['used_quotas'] = 'YES'; //allow maxmium 100 mailboxes for each domain $CONF['mailboxes'] = '100'; //default 10240MB quota for each user $CONF['maxquota'] = '10240'; //default 102400MB quota for each domain $CONF['domain_quota_default'] = '102400'; 保存并关闭文件。 第3步:从命令行进行测试 现在,您可以列出所有用户配额和使用情况: sudo doveadm quota get -A 还可以使用以下命令重新计算当前配额使用情况。 sudo doveadm quota recalc -A 如果您看到这样的错误消息 Fatal: Unknown command 'quota', but plugin quota exists. Try to set mail_plugins=quota 这意味着您没有在/etc/dovecot/conf.d/10-mail中将mail_插件的值设置为quota。conf文件。 如果在列出用户配额时看到以下错误, Error: stat(/var/vmail/yourdomain.com/user/.dovecot.sieve/tmp) failed: Not a directory 您需要在/etc/dovecot/conf.d/10-mail中添加以下行。配置文件并重新启动Dovecot。 maildir_stat_dirs = yes 第4步:在PostfixAdmin Web界面中设置配额 现在,您可以转到PostfixAdmin web界面来设置域和用户配额。 PostfixAdmin中的默认配额太小。如果在启用配额之前已在PostfixAdmin中添加了域,则需要在PostfixAdmin中编辑域设置以增加配额。新域将具有配置中指定的配额设置。地方的php文件。 收尾 我希望本教程能帮助您在Dovecot&;中配置用户配额;PostfixAdmin。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?