前言
目录
1.用户和组文件
普通用户:只能访问自己的文件和其他有权限执行的文件。
超级用户(根用户):一般系统管理员使用的是超级用户的root权限,有了这个权限,管理员可以突破系统的一切限制,方便管理使用及维护系统。
普通用户--su命令-->超级用户
系统用户:系统内置的、执行特定任务的用户,不具有登录系统的能力。
1.1)用户账号文件
/etc/passwd文件用来保存系统所有用户的账号数据等信息,又被称为密码文件。
/etc/passwd文件可由系统管理员编辑修改,普通用户只有查看的权限。
执行cat命令可查看完整的系统账号文件,如下所示:
#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
...
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
在/etc/passwd文件中,一行代表的是一个用户的信息。每一行有7个字段,表示7种信息。每个字段用“:”号分割,其格式如下:
username:passwd:User ID:Group ID:comment:home directory:shell
各字段含义如下:
username:用户名。
password:账号密码。
User ID(UID):用户识别码。
Group ID(GID):用户组识别码。
comment:备注字段,给用户账号做注解。
home directory:主目录。
login command:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的命令,即Shell。Shell是用户和Linux系统之间的接口。系统管理员能根据系统情况和用户习惯为用户指定Shell。
1.2)用户影子文件
用户名(登录名):在/etc/shadow中,用户名和/etc/passwd是相同的,这样就把passwd和shadow中的用户记录联系在一起。这个字段是非空的。
密码(已被加密):如果这个段是*,表示这个用户不能登录到系统;这个字段是非空的,带有1个“!”表示账号被锁定,带有2个“!”表示密码被锁定。
上次修改密码的时间:这个时间从1970年1月1日起算到最近一次修改密码的时间间隔(天数),可以通过管理员账号用passwd命令来修改用户的密码,然后查看/etc/shadow中此字段的变化。
两次修改密码间隔最少的天数:如果配置为0,则禁用此功能,也就是说用户必须经过多少天才能修改密码。默认值是通过/etc/login.defs文件中的PASS_MIN_DAYS进行定义。
两次修改密码间隔最多的天数:这个字段可以增强管理员管理用户密码的时效性,也增强了系统的安全性。默认值同上。
提前多少天警告用户密码将过期:如果满足条件,当用户登录系统后,系统登录程序提醒用户密码将要作废。默认值是在添加用户时由/etc/login.defs文件中的PASS_WARN_AGE进行定义。
在密码过期之后多少天禁用此用户:此字段表示用户密码作废多少天后,系统会禁用此用户,也就是说系统不会再让此用户登录,也不会提示用户过期,是完全禁用。
用户过期日期:此字段指定了用户作废的天数(从1970年的1月1日开始的天数)。如果这个字段的值为空,账号长久可用。
保留字段:目前为空,以备将来Linux发展之用。
1.3)组账号文件
具有某种共同特征的用户合集起来就是用户组(group)。用户组的设置主要是为了方便检查、设置文件或目录的访问权限。每个用户组都有唯一的用户组号GID。
/etc/group文件是用户组的配置文件,内容包括用户组名、用户组密码、GID及该用户组所包含的用户4个字段,每行代表一个用户组记录。格式如下:
group_name:passwd:GID:user_list
第1字段:用户组名称。第2字段:用户组密码。第3字段:GID。第4字段:用户列表,每个用户之间用逗号(,)分隔,本字段可以为空,如果字段为空,表示用户组为GID的全部用户。
/etc/group文件可以由系统管理员编辑修改,普通用户只有查看的权限。执行cat命令可查看完整的文件内容,如下所示:
#cat /etc/group|more
root:x:0:root
bin: x:1:
deamon:*:2:
sys: x:3:
...
zhang: x:1000:
root:x:0:root的含义为:root代表用户组名,x代表已加密的密码,0代表root组GID,最后的root代表用户组(包括root用户)。
GID和UID类似,是一个从0开始的正整数。root用户组的GID为0.系统会预留一些较靠前的GID给系统虚拟用户组用。
对照/etc/passwd和/etc/group两个文件,会发现在/etc/passwd中的每条用户记录中含有用户默认的GID,在/etc/group中的每个用户组中可以有多个用户。在创建目录和文件时会使用默认的用户组。
1.4)用户组影子文件
与/etc/shadow文件一样,考虑到组信息文件中密码的安全性,引入相应组密码影子文件/etc/gshadow。
/etc/gshadow是/etc/group的加密文件,比如用户组管理密码就存在这个文件中。/etc/gshadow和/etc/group是互补的两个文件。
/etc/gshadow格式如下,每个用户组独占一行:
groupname:passwd:admin1,admin2,...:member1,meber2,...
第1字段:用户组。第2字段:用户组密码,这个字段可以是空的或“!”。如果是空的或有“!”,表示没有密码。第3字段:用户组管理者。这个字段也可以为空,如果有多个用户组管理者,用“,”号分隔。第4字段:组成员。如果哟剖多个成员,用“,”号分隔。
/etc/gshadow文件只有系统管理员有读取的权限。执行cat命令可查看完整的文件内容,如下所示:
#cat /etc/gshadow |more
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
...
zhang:!::
daemon:::root,bin,daemon的含义为:用户组名为daemon,没有设置密码。该用户没有用户组管理者,组成员有root、bin和daemon。
1.5)与用户和组管理有关的文件和目录
/etc/skel目录一般存放在用于初始化用户启动文件的目录中,这个目录是由root权限控制。/etc/skel目录下的文件,来为用户提供一个统一、标准的、默认的用户环境。典型的/etc/skel内容如下:
#ls -a /etc/skel
. .. .bash_logout .bash_profile .bashrc .mozilia
典型的/etc/login.defs文件主要设置项含义如下:
#cat /etc/login.defs
MAIL_DIR /var/spool/mail //创建用户时,用户E-mail邮箱所在的目录
PASS_MAX_DAYS 99999 //账号的密码最长有效天数
PASS_MIN_DAYS 0 //账号的密码最短有效天数,允许更改密码的最短天数
PASS_MIN_LEN 5 //密码最小长度
PASS_WARN_AGE 7 //密码过期前提提前警告的天数
UID_MIN 1000 //创建用户时自动产生的最小的UID值
UID_MAX 60000 //创建用户时最大的UID值
SYS_UID_MIN 201 //保留给用户自行设置的系统账号最小UID值
SYS_UID_MAX 999 //保留给用户自行设置的系统账号最大UID值
GID_MIN 1000 //创建用户时自动产生的最小GID值
GID_MAX 60000 //创建用户时自动产生的最大GID值
SYS_GID_MIN 201 //保留给用户自行设置的系统账号最小GID值
SYS_GID_MAX 999 //保留给用户自行设置的系统账号最大GID值
CREATE_HOME yes //创建用户时是否创建用户家目录
UMASK 077 //默认创建文件和目录的权限
USERGROUPS_ENAB yes //创建用户时是否创建用户主群组
ENCRYPT_METHOD SHA512 //用户的口令使用SHA512加密算法加密
/etc/default/useradd文件是通过useradd命令创建用户时的规则文件。其内容如下:
#more /etc/default/useradd
GROUP=100 //默认用户组ID,依赖于/etc/login.defs的USE RGRUUPS_
ENA为no或者useradd使用了-N选项时,此参数有效
HOME=/home //把用户的家目录创建在/home中
INACTIVE=-1 //确定是否启用账号过期停权,-1表示不启用
EXPIRE= //账号终止日期,不设置表示不启用
SHELL=bin/bash //默认登录Shell的类型
SKEL=/etc/skel //存放用于初始化用户环境文件的目录
CREATE_MAIL_SPOOL=yes //确定是否自动创建用户邮件信箱
2.用户账号的管理
用户账号的管理主要涉及用户账号的添加、删除和修改等。
2.1)用户账号管理的概念
添加用户账号就是在系统中创建一个新账号,可以同时为新账号分配用户号、用户组、主目录和登录Shell等资源。如果没有给刚添加的账号设置密码,则该账号是被锁定的,无法使用。
添加新的用户账号使用useradd命令,其语法格式如下:
useradd[选项]用户名
常用选项说明如下:
-c comment:指定一段注释性描述。
-d home_dir:指定用户主目录。目录不存在,则同时使用-m选项。能创建主目录。
-m:若主目录不存在,则创建它。
-M:不创建主目录。
-N:不创建跟用户名同名的组。
-g group:指定用户所属的用户组名或组ID。该组名或组ID在指定时必须已存在。
-G 用户组列表:指定用户所属的附加组,各组之间用逗号隔开。
-s Shell:指定用户的登录Shell,默认为/bin/bash。
-u UID:指定新用户的用户号,该值必须唯一且大于999.如果同时有-o选项,则能重复使用其他用户的标识号。
如果一个用户账号不再使用,要能从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还要删除用户的主目录。删除一个已有的用户 账号使用userdel命令,格式如下:
userdel[选项]用户名
常用的选项是-r,其作用是删除用户账号同时把该用户的主目录一起删除。
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。修改已有用户的信息使用usermod命令,格式如下:
#usermod[选项]用户名
常用的选项有-c、-d、-m、-g、-G、-s、-u、-o等,这些选项的含义和useradd命令中的相同,能为用户指定新的属性。
改变用户账号名
格式:
usermod -l 新用户名 原用户名
锁定账号
格式:
usermod -L 用户名
(Linux锁定账号,也可直接在密码文件shadow的密码字段前加“!”来实现)
解锁账号
格式:
usermod -U 用户名
将用户加入其它组
格式:
usermod -G 组名或GID用户名
查看用户账号属性
格式:
id[选项][用户]
此命令是显示指定用户的UID和GID,默认为当前用户的id信息。
常用的选项有:
-g或--group表示只显示用户所属群组的ID。
-G或--groups表示显示用户所属附加群组的ID。
-n或--name表示显示用户所属群组或附加群组的名称,与-u/g/G联用。
-r或--real表示显示实际ID,与-u/g/G联用。
-u或--user表示只显示用户ID。
--help表示显示帮助。
--version表示显示版本信息。
此外,利用“group[用户]”命令可以显示用户所在的组,默认为当前用户的所属组信息。
2.2)用户密码管理
用户管理的另一项重要内容是用户密码的管理。用户账号刚创建时没有密码,是被系统锁定的,无法使用,必须为其指定密码后才能使用,即使是空密码。
设置和修改用户密码的命令是passwd。超级用户能为自己和其他用户指定密码,普通用户只能修改自己的密码。命令的格式如下:
passwd[选项] 用户名
常用选项说明如下:
-l:锁定密码,即禁用账号。
-u:密码解锁。
-d:删除账号密码,本选项只有系统管理员才能使用。
-k:设置只有在密码过期失效后才能更新。
如果passwd命令后不带用户名,则修改当前用户的密码。例如,假设当前用户是wuli,则下面的命令是修改该用户自己的密码:
$passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,能有下列形式指定任意用户的密码:
#passwd wuli
New password:*******
Re-enter new password:*******
删除用户密码
若要为用户指定空密码,则执行下列形式的命令:
passwd -d 用户名
此命令将用户密码删除,只有超级用户才有权执行。用户密码被删除后,将不能登录系统,除非重新设置新密码。
查询密码状态
要查询指定用户的密码状态,可由root用户执行下列形式的命令:
passwd -s 用户名
若用户密码被锁定,将显示含有Password locked的信息。若用户未加密码,则显示含有“Password set,SHA512 crypt.”的信息。
锁定用户密码
在Linux中,除了用户账号可以被锁定外,用户密码也可以被锁定,任何一方被锁定后,都将导致该用户无法登录系统。只有root用户才有权执行该命令。锁定用户密码可执行下列形式的命令:
passwd -l 用户名
解锁用户密码
用户密码被锁定后,若要解锁,可执行下列形式的命令:
passwd -u 用户名
3.用户组的管理
创建用户组
使用groupadd命令可增加一个新的用户组,其命令格式如下:
groupadd[选项] 用户组名
常用的选项说明如下:
-g GID;指定新用户组的组标识号(GID)。
-o:和-g选项同时使用,表示新建组的GID可与原有组的GID相同。
-r:创建一个系统组。
删除用户组
使用groupdel命令可删除一个已有的用户组。若该用户组中仍包括某些用户,则必须先删除这些用户后,才能删除此组。其命令格式如下:
groupdel 用户名
修改用户组属性
用户组创建后,可用groupmod命令根据需要对用户组的相关属性进行修改,主要是修改用户组的名称和用户组的GID值。
改变用户组名称
对用户组进行重命名,而不改变其GID的值。其命令格式如下:
groupmod -n 新用户组名 旧用户组名
重设用户组的GID
用户组的GID值可以重新进行设置修改,但不能与已有用户组的GID值重复。对GID进行修改,不会改变用户的名称。其命令格式如下:
groupmod -g 组名
添加用户到指定的组或从指定的组删除用户
可用groupmems命令将用户添加到指定的组,使其成为该组的成员;也可以把用户从指定的组删除,与usermod命令有类似的功能。其命令格式如下:
groupmems[选项]用户名 -g 用户组名
常用选项说明如下:
-a:把用户添加到指定的组。
-d:从指定的组删除用户。
-p:清除组内的所有用户。
-l:列出群组的成员。
-g:更改为指定的组名(不是GID)。
设置用户组管理员、密码和组成员
可以使用gpasswd命令将某用户指派为某个用户组的管理员。在实际工作中需要用户组管理员添加用户组或从组中删除某用户,而不是使用root用户执行该操作。当然这个命令还有很多功能。其命令格式如下:
gpasswd[选项][用户名] 组名
常用选项说明如下:
-a:把用户添加到组。
-d:从组删除用户。
-A:指定某用户为组管理员。
-M:指定某用户为组成员,和-A选项的用途相似。
-r:删除密码。
-R:限制用户登入组,只有组中的成员才可以用newgrp命令加入该组。
改变当前用户的有效组
用newgrp命令可以切换当前登录用户所属的组。如果一个用户同时隶属于多个用户组,有时需要切换到另外的用户组来执行一些操作,这就用到了此命令。其命令格式如下:
newgrp[用户组]
在用这个命令切换用户组时,当前用户必须是指定组的用户,否则无法登录。另外,只是在这次登录的范围内有效,一旦退出登录,再重新登录时,用户所属的组还是原来默认的用户组。如果想要更改用户默认的用户组,那么需要使用usermod命令。newgrp命令后若不指定组名称,则此指令会登录当用户的预设用户组。
4.赋予普通用户特别权限
sudo的简单配置
sudo的配置文件是/etc/sudoers,它有专门的编辑工具visudo,root用户执行这个命令就可以按照sudo的语法格式编辑。其语法格式如下:
授权用户 主机=[(转换到哪些用户或用户组)][是否需要密码验证]命令1,[(转换到哪些用户或用户组)][是否需要密码验证][命令2],[(转换到哪些用户或用户组)][是否需要密码验证][命令3]...
执行visudo以后,将打开/etc/sudoers文件,在文件中可以按照上述语法添加相应的内容,例如:
wuli localhost=/sbin/poweroff
表示用户wuli可以在本机上以root的权限执行sudo/sbin/useradd命令,而不需要root密码(需要wuli的用户密码)。如果加上NOPASSWD,则表示不需要输入任何用户的密码:
wuli localhost=NOPASSWD: /sbin/useradd
别名设置
因特殊需要,可以利用别名来定义一些选项。别名类似组的概念,有用户别名、主机别名和目录别名等。使用前先要在/etc/sudoers中定义User_Alias、Host_Alias、Cmnd_Alias等项,再在其后面加入相应的名称,多个参数之间用逗号分隔开,举例如下:
Host_Alias SERVER=huawei //定义主机huawei的别名为SERVER
User_Alias ADMINS=liming, gem //定义用户别名
Cmnd_Alias SHUTDOWN=/usr/sbin/halt,/usr/sbin/shutdown,/usr/sbin/reboot
//定义命令别名
sudo命令选项
常见选项说明如下:
-k:将会在下一次执行sudo时强制询问密码(不论有没有超过N分钟)。
-l:显示出自己(执行sudo的使用者)的权限。
-v:由于sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码,这个参数会重新做一次确认。如果超过N分钟,也会询问密码。
-b:将要执行的命令放在后台执行。
-p prompt:更改提示输入密码时的提示语,其中%u会替换为使用者的账号名称,%h会显示主机名称。
-u username| #uid:不加此选项,代表要以root的身份执行命令;而加了此选项,能以username的身份执行命令(#uid为该username的UID)。
-s:执行shell环境变量所指定的Shell,或是/etc/passwd里所指定的Shell。
-H:将环境变量中的HOME(主目录)指定为要变更身份的使用者的主目录。