|
|
Linux
| Linux 私房菜: |
基础篇 » 四.Linux使用者管理 » 18.程序管理与SELinux 初探 |
重点回顾
- 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;
- 程序 (process):程序被触发后,运行者的权限与属性、程序的程序码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。
- 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux 系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。
- 在 Linux 的程序呼叫通常称为 fork-and-exec 的流程!程序都会藉由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来运行实际要进行的程序,最终就成为一个子程序的存在。
- 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。
- 在工作管理 (job control) 中,可以出现提示字节让你操作的环境就称为前景 (foreground),至於其他工作就可以让你放入背景 (background) 去暂停或运行。
- 与 job control 有关的按键与关键字有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
- 程序管理的观察命令有: ps, top, pstree 等等;
- 程序之间是可以互相控制的,传递的信息 (signal) 主要透过 kill 这个命令在处理;
- 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI
- nice 的给予可以有: nice, renice, top 等命令;
- vmstat 为相当好用的系统资源使用情况观察命令;
- SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取配置;
- SELinux 的运行中,重点在於主体程序 (Subject) 能否存取目标文件资源 (Object) ,这中间牵涉到政策 (Policy) 内的守则, 以及实际的安全性本文类别 (type);
- 安全性本文的一般配置为:『Identify:role:type』其中又以 type 最重要;
- SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted
- SELinux 启动与关闭的配置档在: /etc/selinux/config
- SELinux 的启动与观察: getenforce, sestatus 等命令
- 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
- 在 SELinux 有启动时,必备的服务至少要启动 setroubleshoot 这个!
- 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!
本章习题
( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
情境模拟题一
透过一个网络程序 vsftpd 的服务,来了解到程序与 SELinux 的相关限制行为:
- 目标:了解软件、程序、程序、优先运行绪、网络程序与 SELinux 的相关性
- 需求:已经知道如何安装软件,否则就得要连上 Internet 才能进行 vsftpd 服务的安装;
底下的流程先看看即可,很多数据如果当初忘记安装的话,可能会无法进行。没关系!后续的文章看完后,第二次读到这里后, 你就会知道如何处理了。
1、先察看有无安装 vsftpd 这个软件,如果有的话那就 OK ~没有的话,可能需要线上安装才行:
[mw_shl_code=applescript,false][root@www ~]# rpm -q vsftpd
vsftpd-2.0.5-12.el5 <==出现这个才是对的!若没有出现,就是没安装
# 如果没有安装的话,你又已经有 IP 可以上网了,那么就这样安装:
[root@www ~]# yum install vsftpd [/mw_shl_code]
2、启动 vsftpd 这个服务:
[mw_shl_code=applescript,false][root@www ~]# /etc/init.d/vsftpd start[/mw_shl_code]
3、假设 vsftpd 这个服务并不是那么重要,因此我想要在这次启动期间,让 vsftpd 的优先运行绪较不优先 10 分, 可以这么做:
[mw_shl_code=applescript,false]
[root@www ~]# pstree -p | grep vsftpd
|-vsftpd(2377) <==找到了 PID 为 2377 喔!
[root@www ~]# renice 10 2377
[root@www ~]# top -p grep 2377 <==重点是在观察![/mw_shl_code]
4、vsftpd 是个网络服务,他到底是启动哪个端口?可以这样观察:
[mw_shl_code=applescript,false][root@www ~]# netstat -tlunp | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2377/vsftpd
# 这样的答案够明显了吗?[/mw_shl_code]
5、vsftpd 提供网络的 FTP 功能,有个使用者名为 vbird ,他却无法登陆自己的帐号!这是什么原因呢? 由於 CentOS 的默认 vsftpd 是能够允许一般用户登陆自己家目录的,因此无法登陆的可能原因是权限还是 SELinux 呢? 我们可以这样测试看看:
[mw_shl_code=applescript,false]# 1. 先用 vbird 的身份登陆 vsftpd 看看:
[root@www ~]# ftp localhost
Connected to www.vbird.tsai.
Name (localhost:root): vbird
331 Please specify the password.
Password: <==这里输入 vbird 的口令喔!
500 OOPS: cannot change directory:/home/vbird
Login failed. <==见鬼了!竟然无法登陆自己的家目录 /home/vbird 哩!
ftp> bye
[root@www ~]# ls -ld /home/vbird
drwx------ 4 vbird vbird 4096 8月 18 18:22 /home/vbird
# 权限明明是对的嘛!怎么会无法切换?
# 2. 看看登录档有没有什么重要信息的说明:
[root@www ~]# tail /var/log/messages
Sep 11 16:57:31 www setroubleshoot: SELinux is preventing the ftp daemon from
reading users home directories (/). For complete SELinux messages. run
sealert -l b8bdaf2d-b083-4e28-9465-91fae8df63b1
# 3. 照著作一下:
[root@www ~]# sealert -l b8bdaf2d-b083-4e28-9465-91fae8df63b1
Summary:
SELinux is preventing the ftp daemon from reading users home directories (/).
....(中间省略)....
The following command will allow this access:
setsebool -P ftp_home_dir=1
....(底下省略)....[/mw_shl_code]
6、好了,现在让我们处理一下上面的 vsftpd 相关的守则吧!因为是守则挡住了用户的登陆了!
[mw_shl_code=applescript,false][root@www ~]# setsebool -P ftp_home_dir=1
[root@www ~]# ftp localhost
Connected to www.vbird.tsai.
Name (localhost:root): vbird
331 Please specify the password.
Password:
230 Login successful. <==看吧!顺利登陆罗!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye[/mw_shl_code]
简答题部分
- 简单说明什么是程序 (program) 而什么是程序 (process)?[jzsjiale_fold=答案]程序 (program) 是系统上面可以被运行的文件,由於 Linux 的完整档名 (由 / 写起) 仅能有一个, 所以 program 的档名具有单一性。当程序被运行后,就会启动成程序 (process), 一个 program 可以被不同的使用者或者相同的使用者重复的运行成为多个程序, 且该程序所造成的程序还因为不同的使用者,而有不同的权限,且每个 process 几乎都是独立的。[/jzsjiale_fold]
- 我今天想要查询 /etc/crontab 与 crontab 这个程序的用法与写法,请问我该如何线上查询?[jzsjiale_fold=答案]查询 crontab 命令可以使用 man crontab 或 info crontab ,至於查询 /etc/crontab ,则可以使用 man 5 crontab 罗![/jzsjiale_fold]
- 我要如何查询 crond 这个 daemon 的 PID 与他的 PRI 值呢?[jzsjiale_fold=答案]ps aux | grep crond 即可查到![/jzsjiale_fold]
- 我要如何修改 crond 这个 PID 的优先运行序?[jzsjiale_fold=答案]先以 ps aux 找到 crond 的 PID 后,再以: renice -n number PID 来调整![/jzsjiale_fold]
- 我是一般身份使用者,我是否可以调整不属於我的程序的 nice 值?[jzsjiale_fold=答案]此外,如果我调整了我自己的程序的 nice 值到 10 ,是否可以将他调回 5 呢?不行!一般身份使用者仅能调整属於自己的 PID 程序,并且,只能将 nice 值一再地调高,并不能调低,所以调整为 10 之后,就不能降回 5 罗![/jzsjiale_fold]
- 我要怎么知道我的网络卡在启动的过程中有没有被捉到?[jzsjiale_fold=答案]可以使用 dmesg 来视察![/jzsjiale_fold]
参考数据与延伸阅读
- 注1:关於 fork-and-exec 的说明可以参考如下网页与书籍:
吴贤明老师维护的网站:http://nmc.nchu.edu.tw/linux/process.htm
杨振和、操作系统导论、第三章、学贯出版社
- 注2:对 Linux 核心有兴趣的话,可以先看看底下的连结:
http://www.linux.org.tw/CLDP/OLD/INFO-SHEET-2.html
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html
美国国家安全局的 SELinux 简介:http://www.nsa.gov/research/selinux/
小州老师在 SA 的简报数据:http://kenduest.sayya.org/blog/k ... 8/10/selinux_sa.pdf
小州老师上课的讲义:http://kenduest.sayya.org/blog/k ... inux-2008-05-15.pdf
陈永升、『企业级Linux 系统管理宝典』、学贯行销股份有限公司
Fedora SELinux 说明:http://fedoraproject.org/wiki/SELinux/SecurityContext
美国国家安全局对 SELinux 的白皮书:http://www.nsa.gov/research/_files/selinux/papers/module/t1.shtml
徐秉义老师的 SELinux 配置范例:http://kate.babyface.com.tw/NetAdmin/24200801SELinux/
|
|