4、/etc/gshadow 用户组帐号的加密文件
[root@jekay /]# cat /etc/gshadow
用户组名 用户组密码 用户组的管理者 组成员列表
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
adm:::root,adm,daemon
tty:::
……
/etc/gshadow是/etc/group的加密文件;
用户组密码,用于结构比较复杂的权限模型;
5、/etc/skel 目录 用来初始化用户的主目录
[root@jekay /]# ls -al /etc/skel
total 20
drwxr-xr-x 2 root root 4096 Mar 27 16:59 .
drwxr-xr-x 32 root root 4096 Mar 27 17:04 ..
-rw-r--r-- 1 root root 24 Feb 11 2003 .bash_logout
-rw-r--r-- 1 root root 191 Feb 11 2003 .bash_profile
-rw-r--r-- 1 root root 124 Feb 11 2003 .bashrc
目录中存放有与用户相关的配置文件。一般来说,每个用户都有自己的主目录,用户
成功登录后就处于自己的主目录下。
当为新用户创建主目录时,系统会在新用户的主目录下建立一份/etc/skel目录下所有文件的拷贝,用来初始化用户的主目录。
2、超级权限控制sudo 的配置文件 /etc/sudoers
root超级用户是系统最高权限的拥有者;几乎无所不能,多数的系统设置和权限设置对root帐号来说是无用的;所以root帐号权限管理不善就会造成系统安全的隐患;
在对系统操作时尽量避免使用root登陆,也应该尽量避免直接使用root帐号对系统进行配置和操作;但有时普通用户可能需要root权限来完成必要的系统管理工作,我们可以使用su和sudo来实现;
用户帐号类型:
超级用户:在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者。普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户。在系统中,每个文件、目录和进程,都归属于某一个用户,没有用户许可其它普通用户是无法操作的,但对root除外。root用户的特权性还表现在root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除(在系统正常的许可范围内);对可执行程序的执行、终止;对硬件设备的添加、创建和移除等;也可以对文件和目录进行属主和权限进行修改,以适合系统管理的需要(因为root是系统中权限最高的特权用户);UID为0;
普通用户和伪装用户:与超级用户相对的就是普通用户和虚拟(也被称为伪装用户),普通和伪装用户都是受限用户;但为了完成特定的任务,普通用户和伪装用户也是必须的;Linux是一个多用户、多任务的操作系统,多用户主要体现在用户的角色的多样性,不同的用户所分配的权限也不同;这也是Linux系统比Windows系统更为安全的本质所在;
但值得注意的是超级用户的操作是在系统最高许可范围内的操作;有些操作就是具有超级权限的root也无法完成;如:/proc目录、加了写保护的文件等;
[root@jekay /]# ls -ld /proc
dr-xr-xr-x
47 root root 0 Mar 27 12:03 /proc
[root@jekay tmp]# chattr +i file
[root@jekay tmp]# rm -f file
rm: cannot remove `file': Operation not permitted
获取超级权限的过程,就是切换普通用户身份到超级用户身份的过程;这个过程主要是通过su和sudo 来解决;
使用 su 命令临时切换用户身份
su命令就是切换用户的工具;
su [OPTION选项参数] [用户]
-, -l, --login 登录并改变到所切换的用户环境;
-c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;
su 在不加任何参数,默认为切换到root用户,不改变shell环境;
su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;
su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但如果登陆的用户比较多,而多个用户都需要使用root权限,这时就可能会造成安全隐患,而且由于切换的过程是打开root的shell环境,很多情况下也会造成root权限外泻;
sudo工具
由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
sudo的配置文件是/etc/sudoers ;可通过命令visudo直接进行编辑;
通过sudo -l 来查看哪些命令是可以执行或禁止的;
/etc/sudoers 文件中每行算一个规则,前面带有#号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行;
/etc/sudoers 的规则可分为两类;一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的;
默认/etc/sudoers配置文件
[root@jekay]# cat /etc/sudoers
# sudoers file.
# This file MUST be edited with the 'visudo' command as root.
# See the sudoers man page for the details on how to write a sudoers file.
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
别名规则定义格式如下:
Alias_Type NAME = item1, item2, ...
或Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
别名类型(Alias_Type):别名类型包括如下四种
Host_Alias 定义主机别名;项目可以是主机名、可以是单个ip(整段ip地址也可以),也可以是网络掩码;
Host_Alias BE01=localhost,bt05,tt04,10.0.0.4,255.255.255.0,192.168.1.0/24 注:定义主机别名HT01,通过=号列出成员
User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号)
User_Alias SYSAD=jekay,linux,lt,benet:NETAD=jekay:WEBMASTER=admin
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;
Runas_Alias OP = root, operator
Cmnd_Alias 定义命令别名;
Cmnd_Alias DISKMAG=/sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network
Cmnd_Alias KILL = /usr/bin/kill
NAME 就是别名了,NMAE的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头;
item 按中文翻译是项目,在这里我们可以译成成员,如果一个别名下有多个成员,成员与成员之间,通过半角,号分隔;成员在必须是有效并事实存在的。
item成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias 制约,定义什么类型的别名,就要有什么类型的成员相配。我们用Host_Alias定义主机别名时,成员必须是与主机相关相关联,比如是主机名(包括远程登录的主机名)、ip地址(单个或整段)、掩码等;当用户登录时,可以通过w命令来查看登录用户主机信息;用User_Alias和Runas_Alias定义时,必须要用系统用户做为成员;用Cmnd_Alias 定义执行命令的别名时,必须是系统存在的文件,文件名可以用通配符表示,配置Cmnd_Alias时命令需要绝对路径;其中 Runas_Alias 和User_Alias 有点相似,但与User_Alias 绝对不是同一个概念,Runas_Alias 定义的是某个系统用户可以sudo 切换身份到Runas_Alias 下的成员;我们在授权规则中以实例进行解说;
别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过\来续行;同一类型别名的定义,一次也可以定义几个别名,他们中间用:号分隔,