运维人必收藏的最全Linux服务器程序规范
来源:Tom 时间:2022-06-04 18:47:25阅读:0
除了网络通信,服务器程序还必须考虑许多其他细节,但基本上是模板。
Linux服务器程序通常以后台的形式运行。后台程序也被称为保护过程。它不控制终端,因此不会意外接受用户输入。保护过程的父亲过程通常是init进程(pid=1)。
Linux服务器程序通常有一个日志系统,它至少可以输出日志到文件,一些高级服务器可以输出日志到特殊的UDP服务器。大多数后台过程是/var/log有自己的日志目录。
Linux服务器程序通常是特定的非root身份运行。mysqld,httpd,syslogd等后台进程,并分别有自己的运行账户mysql,apache,syslog。‘
Linux服务器通常可以配置。服务器程序通常处理许多命令选项。如果一次运行的选项太多,克拉使用配置文件进行管理。绝大多数服务器程序都有配置文件并存储在/中etc下。
Linux启动时通常会生成一个服务器程序PID文件并存并存入/文件并存并存入/var/run记录后台过程的目录PID。
Linux服务器程序通常需要考虑系统资源和限制来预测它们能承受多少负荷,比如用文件描述符合总数和内存总数。
01日志
1.Linux系统日志:
Linux为处理系统日志提供保护过程–syslogd,升级版–rsyslogd。
rsyslogd可接收用户流程输出日志和内核日志。
通过调用用户进程syslog函数生成系统日志。
该函数将日志输出到一个unix本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd监控文件以获取用户流程的输出。
在以前的系统上,内核日志通过了另一个保护过程rklogd来管理的,rsyslogd使用额外的模块来实现相同的功能。核心日志由printk等换树打印到核心环状缓存中。环状缓存的内容直接映射到/proc/kmsg。
rsyslogd默认调试信息保存在/var/log/debug,保存普通信息/var/log/messages,内核信息://var/log/kern.log。配置文件://etc/rsyslog.conf,是否接受主要设置核日志输入路径UDP日志及其监控端口(默认514/etc/services)是否接受TCP日志及其监控端口,日志文件权限,包括哪些配置文件。
2.syslog()
使用应用程序syslog()保护过程rsyslogd通信。
该函数采用可变参数(第二个参数)message以及第三个参数。。)结构化输出。
priority:日志级别的设施值(根据位异或)。默认设施值:LOG_USER,以下是对默认设施值的讨论。
2.1下面的函数可以改变syslog默认输出模式,日志内容进一步结构化
(1)ident:将指定字符串添加到日志信息的日期和时间后,通常设置为程序名称。
(2)logopt:对后续syslog配置调用行为,可取下列值的按位异或
(3)facility:用来修改ysyslog默认设施值
此外,日志过滤也非常重要,程序开发阶段可能需要输出大量的调试信息,发布后,我们想关闭调试信息,解决这个问题的方法不是删除调试代码(未来可能使用),而是设置日志代码,使日志级别大于日志代码被系统忽略。
2.2设置下面的函数syslog的日志掩码。
maskpri:指定日志掩码值,该函数始终返回成功,返回调用过程前的日志掩码值。
2.3关闭日志功能:
02用户信息
1.UID,EUID,GID,EGID
用户信息对服务器安全非常重要,大多数人说服务器root启动,非root运行
基础知识:
一个过程有两个用户ID,UID,EUID,EUID其目的是促进资源的访问,使运行程序的用户具有有效的用户权限,例如,su用于更改帐户信息,但在修改帐户时su程序的所有者是root,在普通用户中运行su其有效用户是程序的所有者root,有效用户为root该过程称为特权过程,EGID与EUID类似,下面演示uid,euid区别:
设置所有者生成的可执行文件root,并设置文件set-user-id然后操作标志。
从测试输出结果来看,过程uid是启动程序的用户id,而euid是root。
2.切换用户
03进程间关系
1.进程组:
Linux除此之外,每个过程都属于一个过程组pid还有进程组ID(PGID)。我们用以下函数获取指定的进程组PGID.
成功返回pid,失败-1,设置errno。
如果pid与pgid相同,则由pid如果pid为0,表示当前流程PGID为pgid;如果pgid为0,则使用pid作为目标pgid。setpid当函数成功时,返回0,失败-1,设置errno。
一个过程只能设置自己或其子过程PGID。而且,调用当子过程exec在系列函数之后,我们不能在父亲的过程中设置他PGID。
2.会话
(1)一些相关的过程将形成会话,用以下函数创建会话:
函数不能由过程组的领导过程调用,否则会出错。对于非领导过程,调用函数不仅会创建新的对话,还会产生以下额外效果。
在这个过程中,调用过程成为新会话的唯一成员。
建立一个新的进程组PGID调用过程PID,调用过程成为该组的首领。
调用过程将离开终端(如果有)
当函数成功时,返回新的进程组PGID,失败-1,errno。
Linux过程中没有提供所谓的会话ID的概念,但Linux系统认为它等于会话领导所在的进程组PGID,
(2)并提供以下函数读取SID
3.用ps命令查看进程关系
执行ps命令可以查看过程、过程组和会话之间的关系。
在bash_shell下执行ps和less命令,所以ps和less在命令父亲的过程中bash命令,这个可以从PPID(父进程PID)一列看出。
这三个命令创建了会话(SID是2962)和两个进程组(PGID:2962,3102)bash命令的PID,PGID和SID都相同,显然它时会话的首领,也就是组2962的首领。ps时3102的首领,
04限制系统资源
Linux上述操作程序受物理设备等资源限制的影响(cpu系统策略限制数量、内存数量等)(cup时间等),以及具体实现的限制(文件名最大长度)Linux以下一对函数可以读取和设置系统资源限制:
getrlimit,setrlimit
rlimit结构定义如下:
成功返回0,失败-1,置errno
rlim_t它是一种描述资源水平的整数类型
rlim_cur成员指定资源的软限制,建议性的,最好不要超越的限制,如果超越,系统可能向进程发送信号,并终止运行,如果当前进程CPU如果时间超过软限制,系统将发送到过程SIGXCPU当文件尺寸超过软限制时,系统将发送到过程SIZEXFSZ信号。
rlim_max成员指定资源的硬限制。硬限制一般是软限制的上限,普通程序可以减少应限制,只有以root我们可以使用身份操作程序来增加硬限制ulimit修改当前命令shell对环境中的资源限制(软/硬)进行修改shell所有启动的后续程序都是有效的,我们也可以通过修改配置文件来改变系统的软限制和限制,这是永久的。
05改变工作目录和根目录
一些服务器程序很好,需要更改工作目录和根目录(web/var/www)
获取当前工作目录和变更工作目录的函数:
buf用于存储当前工作目录的绝对路径,size指定其大小
若当前目录的绝对路径超过( 1(‘))size,则getcwd返回NULL,errno:ERANG。
chdir中path指向要切换的目录。成功0,失败-1置errno。
根目录改变过程:chroot
chroot不改变当前工作目录的过程,调用chroot之后,需要调用chdir(/)将工作转移到新的工作目录,然后原始文件描述符仍然生效。因此,可以使用早期打开的文件描述符进行访问和调用chroot不能直接访问的文件(目录).
06后台化服务器程序
最后,如何在代码中使一个过程以防止运行,并遵循一定的步骤来编写保护过程。
实际上,linux提供完成相同功能的库函数:
nochdir:将工作目录设置为/,否则将继续使用当前工作目录。
noclose:传输0标准输入输出,标准错误输出向,dev/null,否则,继续使用原设备,成功0,失败-1置error。
10年微云网络IDC运营经验,全球海外服务器租赁托管、机柜租赁、带宽租赁、虚拟主机、云主机、CDN同时提供高防服务器安全服务,欢迎广大客户来电咨询!
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqjs/10392.html
TAG标签:linux