2008-03-09

Solaris10的关闭/启动/桌面环境和用户组管理

在启动过程中,Service Management Facility (SMF)提供了新的选项。是Solaris10的预测性自我修复系统的相关功能。
Solaris10在x86平台上,支持64位计算。
启动方式

  • 手动启动可以进行64位计算的系统。
    在64位模式下启动x86系统,在选择启动的提示符下输入:
    b kernel /amd64/unix
    在以前的基于32位计算的Solaris版本中,如果启动兼容的64位计算能力,则不需要改变启动命令:
    b kernel /unix
  • 使用eeprom命令设置boot-file文件参数。
    在以前的Solaris版本中,boot-file文件参数设置为kernel/unix。在Solaris 10中,boot-file文件参数默认设置为空。这时系统启动能自动检测,如果有64位计算能力,就会在x86平台上启动64位模式。直接手工设置boot-file文件参数的方法是:
    # eeprom boot-file kernel/amd64/unix
    查看当前系统boot-file文件参数的方法是:
    # eeprom boot-file
  • 使用内核调试模式(kmdb)启动系统。
    启动内核调试模式的方法是在启动方式的提示符下输入启动命令。如果是启动64位模式,则输入:
    b kernel/amd64/unix –k
    在基于系统32位模式下,启动64位计算能力,则输入:
    b kernel /unix -k
运行级别和init状态

运行级别是由一些代表系统服务运行状态的数字或字符表示。系统总是处于一个运行级别之中。与运行级别相关的是init状态,因为init进程维护着运行的级别。系统管理员可以通过init命令和svcadm命令来改变系统的运行级别。


启动选项

启动选项描述着系统是如何被启动的。不同的启动选项有以下几种。

Interactive boot:当系统启动时按照提示输入相应信息。

Reconfiguration boot:当系统添加了新的硬件或虚拟设备时,选用此种启动方法。

Recovery boot:当系统出了故障时恢复启动。


------------------------------------------------------------------------------
Solaris10的关机命令有不少,在不同的场景应用不同的关机命令:
命令 命令描述 什么时候使用
shutdown 是调用init程序来关闭 推荐在服务器运行级别3时使用, 系统的可运行shell脚本程序 因为要通知用户系统将要关闭
init 改变系统运行级别命令 推荐在单机时使用,或者关闭不 影响其他用户时使用
reboot 重新启动系统 Init 6是首选的重新启动方法
Halt,poweroff 同步磁盘并停止处理器工作 不推荐使用,因为会强行终止系统进程。 只有在紧急事件中才用

关于运行级别的定义是:
级别 描述 用户状态
0 硬件维护模式 控制台访问
1 管理状态:只可获得自动 单用户
2 第一多用户状态:不可获取NFS资源 多用户
3 可获得NFS资源 多用户
4 用户定义状态 不定
5 固件?断电状态 控制台访问
6 操作系统挂起 单用户
s 管理任务和恢复中断的文件系统 控制台访问 控制台访问

你也可以看下面这段关于运行级别的信息:
系统启动时,进入/etc/inittab中initdefault所定义的运行级别(deafult 3)
各运行级别的定义
run level:0, (halt, shotdown, stop+a,sync,go )
1, (single user, boot -s, init s )
2, (multiuser, unshare net)
3, (multiuser, deafult)
5, (halt, power off )
6, (reboot to level 3 )
S (init 1, boot -s)
另外,实际上,SMF 引入了重大事件 (milestone)的概念,它代替了传统的运行级别概念。
------------------------------------------------------------------------------------------
回到原题,服务器的一般运行级别是3,这时系统是多用户操作系统,也有NFS远程服务在运行。这就要求我们关闭服务器要小心,最好先查看一下用户的使用情况。查看谁在使用服务器的命令是who。关闭服务器最好的方法是使用shutdown命令,因为它会给在线用户一个通知。
一下几句例子可以可供参考:

shutdown -g180 –y # SPARC:在180秒后切换系统到单用户状态。
shutdown -i0 -g300 –y # SPARC:在300秒后切换系统到可以关闭电源的运行级0。
shutdown -i6 -g120 -y # 在120秒后重新启动系统。
当然,之所以要如此麻烦,都是由于我们在操作的是一台提供服务的服务器。如果我们在操作的是一台单用户机器的话我们可以直接用inid命令切换运行级别。单用户状态下Solaris10的运行级别如下:

运行级别

SPARC平台提示符

x86平台提示符

S(单用户级)

#

#

2(多用户级)

#

#

0(可关闭电源级)

Ok或者 >

按任意键重新启动

3(多用户和NFS服务)

hostname console login:

hostname console login:

比如我们要切换到0级别可以用命令init 0。

======================================================
接下来是系统启动部分,同x86不同,Solaris在SPARC平台上使用Boot PROM来引导系统硬件,我们可以暂且把它当作和BIOS一样的东西。
引导过程包含了引导PROM、引导程序、内核初始化和系统初始化阶段,这几个阶段是按顺序执行的。
启动信息可参见下表:

引导阶段

描 述

引导PROM

PROM显示系统标识信息,然后运行自检测诊断程序来验证系统的硬件和内存。然后,PROM装载主引导程序bootblkbootblk又从位于UFS文件系统中的默认引导设备装载辅助引导程序

引导程序

程序bootblk找到并执行ufsboot辅助引导程序,将其装载到内存。程序ufsboot被装载后,ufsboot装载内核

内核的初始化

内核自己进行初始化,并开始装载模块,使用ufsboot 来读取这些文件。当内核装载了足够的模块以挂载根文件系统时,内核终止ufsboot程序,并使用它自己的资源继续引导过程

系统初始化

内核创建了一个用户进程并启动/sbin/init 进程,后者通过读取/etc/inittab文件启动了其他的进程


引导系统可以到以下三种模式:

1.以多用户状态引导系统

要以多用户状态引导系统,可在PROMok提示符后,输入boot并按Enter键。自动引导过程将在默认的驱动器上启动,并显示一系列启动消息。系统以多用户状态被启动。

2.以单用户状态引导系统

要以单用户状态引导系统,可在PROMok提示符后,输入boot -s并按Enter键。系统引导到单用户状态并提示你输入root密码。

3.交互式引导

如果想要临时改变系统文件或者内核,你可能需要交互式引导。使用这样的方法,你可以测试你所做的修改,并在出现任何问题时很容易地进行恢复。boot -a是进入交互式引导的命令。
--------------------------------------------------------

由于暂时不会使用有SPARC的机器,所以相关详情省略。

接下来是x86的启动:

在x86上可以按ESC键进入手动启动模式或者不动默认使用自动启动模式。

在默认自动启动的情况下,会出现下面的提示
------------------------------------
<<< Current Boot Parameters >>>

Boot path: /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0:a

Boot args:

Type b [file-name] [boot-flags] to boot with options

or i to enter boot interpreter

or to boot with defaults
------------------------------------------------
说明:

  • 按b可以使用启动参数来启动系统:如b-a交互式启动,b-s启动到单用户模式,b-r检测新设备
  • i,启动交互选项部分可用的命令有:
    help //
    查看帮助
    printenv //
    查看启动选项
    show-devs //
    显示所有device nodes
    properties //
    显示所有active node属性
--------------------------------
接下来是本部分最重要的用户账号、用户组和角色管理。

用户:
用户帐号是唯一的,包含了一组惟一的标识号和特征参数来区别不同的用户
它可用于:
  • 生成Shell
  • 交互执行应用;
  • 调度应用以按照制定的日期或时间运行;
  • 访问数据库应用和其他系统服务。

除了用户账号之外,Solaris还有一些用于各种日常维护的系统账户,如rootdaemonbinsyslpadmuucp,它们的作用如下:

  • 执行特定任务的系统资源分配;
  • 运行mail服务器;
  • 运行web服务器;
  • 执行进程管理。
用户除了账户名,密码外还有如下信息:
  • 用户IDUID):这是标记用户的一个整数编号。它从root用户开始编排(UID=0),其他UID顺序分配。但系统会保留1023以前的UID号用于系统账号。普通用户的UID1024开始分配。
  • 用户组:这是区分不同用户类型的一种灵活的分组机制。用户组不只是一组相关用户集合的概念,Solaris文件系统除了可以按照个别用户和全体用户来授予权限,还可以按照用户组指定文件访问的读、写和执行权限。每个UID都与一个基本组IDGID)相关联,但它同时还可以与一个以上的辅助用户组关联。
  • 主目录:它是用户所创建的所有文件的默认存储位置。
  • 登录Shell:这是用户交互调用命令或编写程序的地方。Solaris提供各种不同的shell,包括Bourne shell(sh)C shell(csh)Bourne again shell(bash)cornell shell(tcsh)Shell的选择在很大程度上取决于用户的个人喜好,以及对类C编程结构和终端操作系统的熟练程度。
  • 用户注释:它通常为用户的全称。但系统账户的注释可以用来描述它们的作用。如一个Apache系统账户的注释就可以采用“Webserver”
在添加和删除账户上,除了SMC外还可以使用命令行的方式,接下来就介绍账户管理的命令:

使用useradd命令可以增加用户账号,命令格式如下:

useradd [-u uid | -g group] | -d dir | -s shell | -c comment | -m [-k skel_dir] ] login

说明:

u指定用户ID号;

g制定所在组;

d指定用户目录;

s制定用户Shell

c用户的注释;

m建立用户目录;

login用户的登录名。

改变账户密码:


passwd username
passwd -l username可以锁定账户直到管理员设定密码。

修改账户属性:
usermod 参数 username
usermod的参数和useradd基本一致

删除账户:
userdel -r username

----------------------------------------------------------
同windows类似,Solaris10也提供用户组的管理。有关组的信息都存储在组数据库中(/etc/group),但本地的组数据库也可以由NIS/NIS+LDAP数据库加以补充。可以cat /etc/group查看相关内容。
以下是一些管理命令:
查看用户所属的组:
groups username

查看某组包含的用户:
getent group groupname

增加用户组:
groupadd [-g gid] groupname
-g 设置组的ID号;
gid,组的ID号(不能与现有的组ID号重复);

删除用户组:
groupdel groupname。
----------------
貌似Solaris10中的用户现在运行的组只有一个,输入id命令可以查看当前的组关系。
所以,如果需要新建一个文件有不想和现在所在的gid对应,可以使用
newgrp groupname
命令来切换所在组。

------------------------------
接下来是角色:

对于传统的安全性模型,超级用户拥有完全的超级用户特权,而其他的用户没有足够的权限解决他们自己的问题。有了基于角色的访问控制(RBAC),便可以取代传统的安全模型。

有了RBAC,可以将超级用户的能力分成不同的包,并将它们分别分配给分担管理任务的个体。当使用RBAC划分超级用户特权时,用户可以拥有不同程度的访问权限,可以控制对其他用户特权操作的授权。

RBAC包括了如下特性。

  • 角色:一种特殊类型的用户账号,可以用来执行一套管理任务。
  • 特征文件(profile):一种打包机制,用特殊的属性将授权和命令分组。例如,使用用户和组的ID
  • 授权:一种用来授予对受限功能的访问权限的权利。
角色:

实现RBAC功 能的第一步就是对准备指派给每个用户的角色进行定义。另外,不同资源的访问权限也必须与具体的角色名联系在一起。对于管理者来说,角色的变化,以及用户与 角色关系的调整都是不可避免的。因此,这种变化的角色和用户列表的实现方法应尽可能的简单。另外,单一的任务并不容易实现与单一角色的关联。

比如,一个被定义为“备份操作员”的角色会涉及到ufsdump命令的运行,而这又需要对磁带设备进行写访问操作。此时,备份操作员角色本身就决定了它对这种文件访问的必然性。因此,我们不需要单独为它定义一个新角色。

又如,一个“设备管理员”可能使用命令tapes来对磁带设备执行写访问操作。所以,这些写操作也不能定义为一个新的角色,它自然成为“设备管理员”角色的一部分。

如果一个用户承担某个角色,他的结果要么承担该角色的全部权限,要么就丧失该角色的全部权限。

在默认情况下,Solaris 支持3种不同的系统管理角色。

  • 主管理员(PAPrimary Administrator):负责为其他用户分派权限,并负责系统的安全问题。
  • 系统管理员(SASystem Administrator):负责与安全无关的日常管理工作。
  • 操作员(Operator):执行备份和设备维护操作。

PASA之间的区别主要取决于本地的安全策略。例如,尽管默认的PA角色具备添加用户和修改口令的权限,而默认的SA角色并不具备修改口令的权限,但在很多地方,禁止SA的口令访问可能是不现实的。RBAC的一个最大的好处就是它可以按照本地的需求非常方便地分配权限。


用户特征文件(PROFILE):

特征文件是用于授权的一个或一组特定的命令。这些授权连接在一起形成某个角色,并随后与某个用户或某些不同的用户建立关联关系。它们之间的关系如图7-1所示。

我们可以为每个角色创建一个新的用户账号,这些账号拥有自己的主目录和口令。当执行特征文件中的命令时,用户必须使用su命令进入角色账户,因为这种角色用户是不允许直接登录的。


7-1 授权和特征文件与给予不同用户的角色相关联

通过su命令访问角色账户与通过su命令访问普通账户的一个不同之处在于它们的审计功能,即在通过su命令访问某个角色时,它执行的所有操作,连同用户的原始UID都会被记入日志。这样,每个访问角色的用户操作都会被明确地记入日志并进行审计


授权:

所谓授权,就是赋予某个角色执行某项操作的特权,它是在/etc/security/auth_attr文件中定义的。授权的定义形式与Internet的域名非常相似,它的最左边为企业名称,随后是依次细化的软件包和功能内容。

例如,net.cassowary.*就是一个由厂商cassowary.net提供的任何功能授权。

在默认情况下,所有Solaris提供的软件包都是由前缀Solaris来加以识别的。比如,修改口令的授权就是Solaris.admin.usermgr.pswd,而不是com.sun.Solaris.admin.usermgr.pswd

许多授权的划分都是十分细致的,它可能只允许读访问,而不允许写访问,反之也是如此。比如,主管理员(PA)可能拥有Solaris.admin.usermgr.readSolaris.admin.usermgr.write的授权,因而可以对用户配置文件分别进行读访问和写访问操作。而系统管理员(SA)虽然可能拥有Solaris.admin.usermgr.read授权,但他并没有Solaris.admin.usermgr.write的授权,因此他可以读用户配置文件,但不能写。

下面是一些Solaris的基本授权:

  • Solaris.profmgr.read
  • Solaris.jobs.users, Solaris.mail.mailq
  • Solaris.admin.usermgr.read
  • Solaris.admin.logsvc.read
  • Solaris.admin.fsmgr.read
  • Solaris.admin.serialmgr.read
  • Solaris.admin.diskmgr.read
  • Solaris.admin.procmgr.user, Solaris.compsys.read
  • Solaris.admin.printer.read
  • Solaris.admin.prodreg.read
  • Solaris.admin.dcmgr.read, Solaris.snmp.read
  • Solaris.project.read, Solaris.admin.patchmg.read
  • Solaris.network.hosts.read, Solaris.compsys.read
  • Solaris.admin.volmgr.read

从这里我们看到,Solaris.admin已经定义了一些授权,它们包括文件系统管理(fsmgr)、日志系统管理(logsvc)、端口管理(serialmgr)和用户管理(usermgr)等。

我们还可以利用关键字grant将权限传递给其他用户。一旦关键字grant被附加在一个授权字符串的末尾,即表明该授权可以委托给其他用户。例如,如果Solaris.admin.usermgr. grant授权与Solaris.admin.usermgr.pswd授权配合在一起,则表示口令修改的操作可以由受委托的用户来执行。


关系:
授权和命令的定义关联起来构成了权限配置文件,该权限配置文件再分派给不同的角色用户来使用。

RBAC数据库:

Solaris
共有四个RBAC数据库用于角色的管理
  • 扩展的用户属性数据库(/etc/user_attr):将用户、角色、授权和权限配置文件相关联。
  • 授权属性数据库(/etc/security/auth_attr):定义了授权及其授权的属性,标识了相关的帮助文件。
  • 权限配置文件数据库(/etc/security/prof_attr):定义权限配置文件,列出权限配置文件分配的授权,标识了相关的帮助文件。
  • 权限执行属性数据库(/etc/security/exec_attr):定义了分配给一个权限配置文件的特权操作。

另外,policy.conf文件提供将应用于所有用户的默认属性。

这几个数据库的关系如图:


管理RBAC的一些命令:
smexec:
可以用来创建、更新,以及删除exec_attr命令数据库的行。该命令在执行时必须提供如下三个选项之一:
  • add,添加一个数据库行;
  • delete,删除一个数据库行;
  • modify,更改一个数据库行。
smexec可以有两组参数:授权参数和指定参数。
授权参数对于每个选项都是通用的,它们用于指定如下特性:
  • -domain 管理的域
  • -hostname:port 执行操作的主机名和端口(默认端口是898
  • -rolepassword 角色的认证口令
  • -password 用户口令(不是角色口令)
  • -rolename 角色名
  • -username 用户名
使用smexec add 为exec_attr数据库添加行:
  • -c 指定要添加的新命令名的完整路径
  • -g 指定执行该新命令的有效GID
  • -G 指定执行该新命令的实际GID
  • -n 指定与该命令相关联的特征文件名称
  • -t cmd 指定该操作为一个命令
  • -u 指定执行该新命令的有效UID
  • -U 指定执行该新命令的实际UID
范例:smexec add -hostname localhost -password xyz123 -username root -- -n

Print Manager -t cmd -c /usr/sbin/lpsched -u 0 -g 0

该命令为Printer Manager特征文件添加了一个启动打印服务的能力,它的有效UIDGID都是0(即root)。

smmultiuser:
smmultiuser命令用来执行批处理操作,诸如添加或删除大量的用户。当需要指定的所有用户数据已经存在于文件中时,该命令会非常有用。
smuser:
smuser命令可以用来执行对用户账户的操作,无论是从本地用户数据库还是从NIS/NIS+检索数据,它和smmultiuser类似。但是该命令通常只用来添加单个用户,而不是在批模式下添加一组用户。除了添加、删除,以及修改用户条目,也可以检索并列出现存的用户数据。
它必备的选项除了add,modify,delete外还有一个list
smprofile
smprofile命令可以用来创建、列出、更新及删除prof_attr数据库中的特征文件

smrole:
smrole命令可以执行有关角色账户的操作,它通常只是用来添加单个角色,而不是以批模式的方式来添加一组角色。



更加详细的内容可以参见:http://rhingheart.blogspot.com/2008/02/solaris10_946.html这篇日志。

没有评论: