Solaris 安全整理
来源:小饭的沉默空间
[学Solaris时,整理的]
用户控制
登录帐户 GID 用法
root 0 几乎没有任何限制。可覆盖所有其他登录、保护和权限。root 帐户具有访问整个系统的权限。应该非常谨慎地保护root 登录口令。root 帐户(即超级用户)有权使用大多数Solaris 命令。
daemon 1 控制后台处理。
bin 2 有权使用部分Solaris 命令。
sys 3 有权访问许多系统文件。
adm 4 有权访问某些管理文件。
Lp 71 有权访问打印机的对象数据文件和假脱机数据文件。
uucp 5 有权访问UUCP(UNIX 对UNIX 复制程序)的对象数据文件和假脱机数据文件。
nuucp 9 供远程系统用于登录到系统并启动文件传输。
远
显示用户的登录状态
# logins -x -l username
-x 显示一组扩展的登录状态信息。
-l username 显示指定用户的登录状态。变量username 是用户的登录名称。必须以逗号分隔的列表形式指定多个登录名称。
# logins -x -l root
root 0 root 0 Super-User
/
/sbin/sh
PS 082587 -1 -1 -1
Root用户的登录名称
0 用户ID (user ID, UID)。
0 标识用户的主组。
10 标识组ID (group ID, GID)。
/ 标识用户的起始目录。
/sbin/sh 标识登录shell。
PS 082587 -1 -1 -1指定口令生命期信息:
■ 上次更改口令的日期
■ 更改之间要求的天数
■ 在该天数后必须更改
■ 警告期
如何显示没有口令的用户
# logins –p
-p 选项用于显示没有口令的用户列表。除非启用了名称服务,否则logins 命令将使用本地系统的口令数据库。
如何临时禁止用户登录
1在文本编辑器中创建/etc/nologin 文件。
# vi /etc/nologin
2添加有关系统可用性的消息。
3关闭并保存该文件。
如何监视所有失败的登录尝试
1.使用所需的SYSLOG 和SYSLOG_FAILED_LOGINS 值设置/etc/default/login 文件。
编辑/etc/default/login 文件以更改相应项。请确保取消对SYSLOG=YES 的注释。
# grep SYSLOG /etc/default/login
# SYSLOG determines whether the syslog(3) LOG_AUTH facility
# should be used
SYSLOG=YES
…
SYSLOG_FAILED_LOGINS=0
#
2.使用正确的权限创建文件以保存日志信息。
a. 在/var/adm 目录中创建authlog 文件。
# touch /var/adm/authlog
b. 在authlog 文件中,为root 用户设置读写权限。
# chmod 600 /var/adm/authlog
c. 在authlog 文件中,将组成员关系更改为sys。
# chgrp sys /var/adm/authlog
3.编辑syslog.conf 文件以记录失败的口令尝试。
这些失败应发送到authlog 文件。
a. 在syslog.conf 文件中键入以下项。
使用制表符分隔syslog.conf 的同一行中的字段。
auth.notice <按Tab 键> /var/adm/authlog
4. 刷新syslog 守护进程的配置信息。
# svcadm refresh system/system-log
5. 检验日志是否正常工作。
# more /var/adm/authlog
Apr 16 12:00:50 suoetc sshd[1063]: [ID 800047 auth.notice] Failed keyboard-interac
tive for root from 192.168.2.11 port 1806 ssh2
日志显示:IP192.169.2.11 ,root,用户失败,时间. Apr 16 12:00:50
如何监视正在使用su 命令的用户
1.定期监视/var/adm/sulog 文件的内容。
# more /var/adm/sulog
SU 04/16 11:34 + pts/5 root-root
SU 04/16 11:35 + pts/6 ux-root
SU 04/16 11:38 + pts/5 root-ux
SU 04/16 11:39 – pts/5 root-ux
SU 04/16 11:43 + pts/6 ux-ux
SU 04/16 11:46 + pts/6 ux-root
SU 04/16 11:47 – pts/1 ux-root
SU 04/16 11:47 – pts/1 ux-root
SU 04/16 12:42 + pts/1 ux-root
SU 04/16 12:46 + ??? root-root
■ 输入命令的日期和时间。
■ 尝试是否成功。加号(+) 表明尝试成功。减号(-) 表明尝试失败。
■ 发出命令的端口。
■ 用户名称和切换身份的名称。
审计报告工具
BART 是一种完全在文件系统层运行的文件跟踪工具。使用BART,可以迅速、轻松、可靠地收集有关安装在已部署的系统上的软件栈组件的信息。使用BART,可以通过简化耗时的管理任务来显著降低管理系统网络的成本。使用BART,可以根据已知的基准确定系统上所进行的文件层更改。可以使用BART 根据完全安装并配置的系统创建基准或控制清单。然后可将此基准与系统快照进行比较,将生成一个列出从系统安装以来所进行的文件层更改的报告。
bart 命令是标准UNIX 命令。您可以将bart 命令的输出重定向到文件以便进行后续处理。
BART 功能
BART 在设计上侧重于既有效又灵活的简单语法。使用此工具,可以生成给定系统在一段时间内的清单。然后,需要验证此系统的文件时,可以通过比较新旧清单来生成报告。使用BART 的另一种方法是生成若干个相似系统的清单,然后进行系统间的比较。BART 与现有审计工具的主要区别在于BART 在跟踪信息和报告信息方面都非常灵活。
BART 的其他优点和用法包括:
■ 提供了一种为运行Solaris 软件的系统在文件层编制目录的有效而简便的方法。
■ 使用BART,可以定义要监视的文件,还可以在必要时修改配置文件。借助这种灵活性,可以监视本地的自定义项,并可轻松、有效地重新配置软件。
■ 确保系统运行可靠的软件。
■ 允许监视一段时间内系统在文件层的变化,从而帮助找到损坏或异常的文件。
■ 帮助对系统性能问题进行疑难解答。
# bart
用法:
bart create [-n] [-R 根目录] [-r 规则|-]
bart create [-n] [-R 根目录] [-I | -I 文件列表]
bart compare [-r 规则|-] [-i 关键字] [-p]控制清单文件 测试清单文件
-R 指定清单的根目录。所有由规则指定的路径都会被解释为此目录的相对路径。所有由清单报告的路径均为此目录的相对路径。
-I 无论是从命令行执行此选项,还是从标准输入中读取此选项,它都会接受要列出的单个文件的列表。
-r 此清单的rules 文件的名称。请注意,– 在与-r 选项一起使用时,会从标准输入读取rules 文件。
-n 禁用文件列表中所有常规文件的内容签名。此选项可用于改善性能。或者,可以在需要更改文件列表的内容时使用此选项,这与系统日志文件的情况类似
# bart create -R /etc //创建仅包含有关/etc 子树中文件的信息的清单
# bart create -I /etc/passwd /etc/shadow //创建仅列出有关系统上/etc/passwd 和/etc/shadow 文件的信息的清单
比较同一系统在一段时间内的清单
# bart create -R /etc > systeml.control.121212 //创建控制清单。
#cat >/etc/ssh/xu.txt //创建文件放于/etc/ssh目录下
# bart create -R /etc > system1.test.1212123 //更改时创建测试清
# bart compare systeml.control.121212 system1.test.1212123 //将控制清单与测试清单进行比较
# bart compare systeml.control.121212 system1.test.1212123
/xu.txt:
add
显示增加了一个文件./xu.txt
控制对文件的访问
保证文件和目录安全的命令
ls 列出目录中的文件及其有关信息。
chown 更改文件的拥有权。
chgrp 更改文件的组拥有权。
chmod 更改文件的权限。可以使用符号模式(使用字母和符号)或绝对模式(使用八进制数字)更改文件的权限。
文件可以是七种类型之一。每种类型由一个符号显示:
-(减号) 文本或程序
b 块特殊文件
c 字符特殊文件
d 目录
l 符号链接
s 套接字
D 门
P 命名管道(FIFO)
UNIX 文件权限
r 读文件指定的用户可以打开和读取文件内容。
目录指定的用户可以列出目录中的文件。
w 写文件指定的用户可以修改文件的内容或删除该文件。
目录指定的用户可以在目录中添加文件或链接。这些用户也可以删除目录中的文件或链接。
x 执行文件指定的用户可以执行文件(如果该文件为程序或shell 脚本)。这些用户也可以使用一个exec(2) 系统调用来运行程序。
目录指定的用户可以打开或执行目录中的文件。这些用户也可以使该目录以及该目录下的目录成为当前目录。
– 拒绝文件和目
录
指定的用户无法读写或执行文件。
文件权限模式
0 — 无权限
1 –x 仅执行权限
2 -w- 只写权限
3 -wx 写和执行权限
4 r– 只读权限
5 r-x 读和执行权限
6 rw- 读写权限
7 rwx 读写和执行权限
u who 用户(属主)
g who 组
o who 其他用户
a who 所有
= operator 赋值
+ operator 添加
– operator 删除
r permissions 读
w permissions 写
x permissions 执行
l permissions 强制锁定,setgid 位打开,组执行位关闭
s permissions setuid 或setgid 位打开
t permissions Sticky 位打开,对于其他用户,执行位打开
使用访问控制列表保护文件
文件的ACL 项
u[ser]::perms 文件属主权限。
g[roup]::perms 文件组权限。
o[ther]:perms 文件属主或文件组成员之外的用户的权限。
m[ask]:perms ACL 掩码。掩码项表示允许用户(属主除外)和组拥有的最大权限。掩码是一种可快速更改所有用户和组的权限的方法。
例如,mask:r– 掩码项表示,用户和组只能拥有读取权限,即使他们可能拥有写和执行权限。
u[ser]:uid:perms 特定用户的权限。对于uid,可以指定用户名或数字UID。
g[roup]:gid:perms 特定组的权限。对于gid,可以指定组名或数字GID。
显示文件信息
# ls -la
-l 显示包括用户拥有权、组拥有权和文件权限的长格式。
-a 显示所有文件,包括以点(.) 开头的隐藏文件。
在符号模式下更改权限
#chmod who operator permissions filename
who 指定要更改其权限的用户。
operator 指定要执行的操作。
permissions 指定要更改的权限。有关有效的符号列表,请参见表6–5。
filename 指定文件或目录。
# chmod o-r example-file1 //为用户、组和其他用户添加读和执行权限
# chmod a+rx example-file2 //为组指定读写和执行权限
检查文件是否具有ACL
# ls -l filename
其中,filename 指定文件或目录。
在输出中,模式字段右侧的加号(+) 表示该文件具有ACL。
如何将ACL 项添加到文件
# setfacl -s user::perms,group::perms,other:perms,mask:perms,acl-entry-list filename …
-s 设置文件的ACL。如果文件已具有ACL,则会替换该ACL。此选项要求至少有user::、group:: 和other:: 项。
user::perms 指定文件属主权限。
group::perms 指定组属主权限。
other:perms 为文件属主或组成员之外的用户指定权限。
mask:perms 指定ACL 掩码的权限。掩码表示允许用户(属主除外)和组拥有的最大权限。
acl-entry-list 指定文件或目录中要为特定用户和组设置的一个或多个ACL 项的列表。也可以设置目录的缺省ACL 项。表6–7 和表6–8 显示了有效的ACL
项。
filename … 指定要对其设置ACL 的一个或多个文件或目录。多个filename 由空格分隔。
# cat >xu.txt
asdfa
asdfasdf
asdfas
# ls -l xu.txt
-rw-r–r– 1 root root 22 4月 16日 14:18 xu.txt
# setfacl -s user::rw-,group::r–,other:—,mask:rw-,user:root:rw- xu.txt
# ls -l xu.txt
-rw-r—–+ 1 root root 22 4月 16日 14:18 xu.txt
#
# getfacl xu.txt
# file: xu.txt
# owner: root
# group: root
user::rw-
user:root:rw- #effective:rw-
group::r– #effective:r–
mask:rw-
other:—
# setfacl -s u::7,g::4,o:0,m:4,u:anusha:7 ch2.sgm
# getfacl ch2.sgm
复制ACL
通过重定向getfacl 输出,将文件的ACL 复制到另一个文件。
#getfacl filename1 | setfacl -f – filename2
filename1 指定将从其中复制ACL 的文件。
filename2 指定要对其设置所复制的ACL 的文件。
修改文件的ACL 项
% setfacl -m user:anusha:6 ch3.sgm //将用户anusha 的权限修改为读写。
% getfacl ch3.sgm
删除文件的ACL 项
# setfacl -d acl-entry-list filename …
-d 删除指定的ACL 项。
acl-entry-list 指定文件或目录中要删除的ACL 项(未指定权限)的列表。只能删除特定用户和组的ACL 项和缺省ACL 项。表6–7 和表6–8 显示了有效的
ACL 项。
filename … 指定一个或多个文件或目录,由空格分隔。
或者,可以使用setfacl -s 命令删除文件的所有ACL 项,并使用所指定的新ACL 项替换它们。
显示文件的ACL 项
# getfacl [-a | -d] filename …
-a 显示指定文件或目录的文件名、文件属主、文件组和ACL 项。
-d 显示指定目录的文件名、文件属主、文件组和缺省ACL 项(如果存在)。
filename … 指定一个或多个文件或目录,由空格分隔。
如果在命令行中指定多个文件名,则会在每两个ACL 项之间显示一个空白行
特殊文件权限查找文件
使用find 命令查找拥有setuid 权限的文件
# find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename
find directory 检查以指定的directory(可以是root (/)、sys、bin 或mail)开头的所有挂载路径。
-user root 仅显示由root 拥有的文件。
-perm -4000 仅显示权限被设置为4000 的文件。
-exec ls -ldb 以ls -ldb 格式显示find 命令的输出。
>/tmp/filename 包含find 命令的结果的文件。
# find / -user root -perm -4000 -exec ls -ldb {} \; > /var/tmp/ckprm
# cat /var/tmp/ckprm
禁止程序使用可执行栈
编辑/etc/system 文件并添加以下行:
set noexec_user_stack=1
重新引导系统。
# init 6
禁止记录可执行栈消息
在此示例中,将禁止记录可执行栈消息,然后重新引导系统。
# cat /etc/system
set noexec_user_stack=1
set noexec_user_stack_log=0
# init 6
如何生成对称密钥
1. 列出可用算法
# encrypt -l
算法 密钥大小: 最小 最大 (位)
——————————————
aes 128 128
arcfour 8 128
des 64 64
3des 192 192