1、用户管理shell
1. 用户帐号管理文件安全
要对Linux中的用户帐号进行管理,首先固然应该了解用户帐号在Linux系统中是怎么保存的,这涉及到两个文件——/etc/passwd与/etc/shadow,前者保存用户的UID和GID等基本信息,后者则主要保存与帐号密码相关的一些信息。加密
先来看看/etc/passwd这个文件存的是啥(这里只取前三行):spa
在此文件中,每一个用户帐号信息存为一行,每一行有7个栏位,从左到右存放的信息分别为:3d
(1)帐号名称。blog
(2)密码:早期Unix系统的密码是放在这里的,但因为/etc/passwd这个文件能被不少程序读取,不安全,后来密码资料已经放到文件/etc/shadow中,因此这里第二个栏位都是“x”。资源
(3)UID:0表明帐号为系统管理员,1-999表明系统帐号,1000-6000则是通常使用者。it
(4)GID:用户初始群组的GID。登录
(5)用户名全称或帐号意义说明。变量
(6)家目录:默认为/home/帐号名称。
(7)Shell:该帐号登入系统以后取得的shell。
再来看看/etc/shadow这个文件存的又是啥(这里只取前三行):
一样的,在这个文件中也是每一个帐号存为一行,共有9个栏位,从左到右存放的信息分别为:
(1)帐号名称。
(2)密码:加密以后的密码。若以“!”开头则表示密码失效,帐号封锁,暂时没法登陆。
(3)最近修改密码的日期:这个栏位上的数字表示的是最近修改密码的日期是在1970年1月1日的多少天以后。
(4)密码不可修改的天数:表示上一次修改密码以后,几天以后才能再次修改密码。
(5)密码须要再次修改的天数(密码过时日):表示上一次修改密码以后,几天以内须要再次修改密码。
(6)在密码过时日前几天开始发出警告。
(7)密码过时以后的帐号宽限天数(密码失效日):密码过时后几天以内帐号密码仍是可使用,可是登入系统以后,系统会强制让用户修改密码。若这几天仍是没修改密码,则过了这个时间密码就失效了,没法再使用该帐号密码登入系统。
(8)帐号失效日期:1970年1月1日的多少天以后帐号失效,不管密码是否过时,帐号都没法再使用。
(9)暂时没存信息,保留给新功能使用。
2. 用户帐号管理操做
了解了Linux帐号和密码在系统中的保存方式以后,咱们还须要知道怎么去添加帐号、修改帐号信息,以及如何修改密码等用户管理操做,如下便一一做出说明。
(1)用户帐号添加:
useradd [-u UID] [-g 初始群組] [-G 次要群組] [-m/M] [-c 帐号意义说明] [-d 家目绝对路径] [-s shell] [-r] [-e 帐号失效日期,格式为YYYY-MM-DD] [-f 密码是否会失效,0马上失效,-1永不失效] 帐号名称
这里列出useradd命令经常使用的一些选项,可根据须要添加,其中-M表示强制不创建家目录,-m表示强制创建家目录,-r表示建立系统帐号,更多选项须要本身使用man命令在系统中查看了。不过通常来讲,咱们建立用户帐号的时候只要指定帐号名称便可:useradd帐号名称,这样帐号的其余信息都会使用系统为咱们设置的默认值。在CentOS中,系统默认会帮咱们作的事情以下:
<1>在/etc/passwd创建一行与帐号相关的资料。
<2>在/etc/shadow创建一行与此帐号密码相关的数据,可是还没有有密码。
<3>在/etc/group创建一行此帐号的初始群组信息,群组名称与帐号名称一致。
<4>在/etc/gshadow创建一行此帐号初始群组的密码信息,可是没有密码。
<5>在/home中创建此帐号家目录,目录名称与帐号名称一致,权限为700。
那么useradd命令的这些默认值是在哪里存放的呢?首先可使用useradd -D查看部分默认值(这里注解了各个参数的意义说明):
(最后一个参数为:是否创建邮件信箱)
这些参数实际上就保存在文件/etc/default/useradd中!
关于初始群组,有两种机制:公共群组机制和私有群组机制。公共群组机制会使用这里的“GROUP=100”这个参数值做为新建帐号的初始群组,每一个帐号都将属于users这个群组,帐号之间能够分享家目录中的资料,SuSE使用的就是这种机制。私有群组机制则不使用这个参数,每一个帐号都有各自的群组和家目录,并且只有本身能够进入本身的家目录,使用这个机制的有RHEL,Fedora,CentOS等。
“SKEL=/etc/skel”指定了建立帐号家目录的内容参考目录,即新建帐号的家目录中的内容是从/etc/skel这个目录中直接拷贝过去的!“CREATE_MAIL_SPOOL=yes”指定了系统会自动帮新建帐号创建邮件信箱,即会建立“/var/spool/mail/帐号名称”这个文件。
然而/etc/default/useradd这个文件只是设置了一些帐号的基本信息默认值,更多参数默认值可在/etc/login.defs文件中查看,里面设置了用户UID、GID等更多参数默认值与规范。
因此,总结起来,使用useradd命令建立帐号时会参考的文件有:/etc/default/useradd、/etc/login.defs、/etc/skel/*。
(2)用户帐号修改:
修改用户帐号可以使用usermod命令,该命令的选项参数大都与useradd相似,这里再也不赘述,只是有个特别的功能须要说明一下,那就是usermod可使用-L和-U这两个选项参数分别对帐号进行冻结和解冻,冻结其实就是在/etc/shadow第二栏的密码前面添加“!”,使得帐号密码没法正常登陆,解冻则将其去除,恢复帐号登陆。
(3)用户帐号删除:
用户帐号删除使用命令:userdel 用户帐号,若加上-r选项则会连同使用者的家目录也一块儿删除。注意,userdel命令会将与指定帐号相关的东西通通删除!
(4)帐号密码修改:
使用useradd建立帐号以后,新建帐号仍是没法登入系统的,还须要使用passwd命令设置密码才行:
除了修改密码,passwd命令还有如下用途:
<1>修改密码属性:passwd [-n 密码不可修改的天数] [-x 密码须要再次修改的天数] [-w 在密码过时日前几天开始发出警告] [-i 密码过时以后的帐号失效宽限天数] 帐号名称
<2>冻结密码:passwd -l 帐号名称,修改/etc/passwd,在密码前加“!!”。(相似usermod -L)
<3>解冻密码:passwd -u 帐号名称。(相似usermod -U)
<4>查看密码信息:passwd -S 帐号名称。
除了passwd,还有一个命令可用于修改帐号密码的信息,那就是chage:
chage [-d 最近修改密码日期,格式为YYYY-MM-DD] [-m 密码不可修改的天数] [-M 密码须要再次修改的天数] [-W 在密码过时日前几天开始发出警告] [-I 密码过时以后的帐号失效宽限天数] [-E 帐号失效日期,格式为YYYY-MM-DD]
此外,chage也能够用于查看帐号密码信息,信息展现的格式比passwd -S指令更容易查看:
还能够经过“chage -d 0 帐号名称”强制要求用户在下一次登入系统时修改密码!
3. 使用者功能
以上介绍的帐号管理操做,除了使用passwd修改本身密码和部分信息查看操做,其余的都是只有系统管理员才能执行的,下面介绍一下通常用户能查看与修改信息的命令操做。
<1>id 帐号名称:查看用户UID和GID。
<2>finger:查询当前登入系统的全部用户信息。
finger 帐号名称:查询某个帐号相关属性。
<3>chfn:修改finger中展现的一些信息。
能够看到,实际上修改的信息都保存在/etc/passwd文件的第五栏中。(修改本身信息直接执行“chfn”便可)
<4>chsh -l:查看当前系统上全部可用的shell,便是/etc/shells中的内容。
chsh -s:修改本身的shell。
2、群组管理
1. 群组管理文件
与用户管理相似,想要了解群组管理,亦须要先来看看群组信息在Linux系统中是怎么保存的,群组信息涉及两个文件——/etc/group和/etc/gshadow,前者保存群组基本信息,后者保存群组密码信息。
先来看看/etc/group文件:
在此文件中,每一个群组信息存为一行,每行4个栏位,从左到右存放信息分别为:
(1)群组名称。
(2)群组密码:已转移到/etc/gshadow中存储,因此这里存“x”。
(3)GID。
(4)此群组中的全部用户帐号成员列表。
再来看看/etc/gshadow文件:
在此文件中,每一个群组信息存为一行,每行4个栏位,从左到右存放信息分别为:
(1)群组名称。
(2)群组密码:一般是给群组管理员使用的,少有设置。
(3)群组管理员的帐号。
(4)此群组中的全部用户帐号成员列表。
2. 群组管理操做
(1)群组添加:
groupadd [-g gid] 群组名称
(如果建立系统群组需加上-r选项)
(2)群组修改:
groupmod [-g gid] [-n 群组新名称] 群组名称
(注意,不要随意改动GID,很容易形成系统资源的错乱)
(3)群组删除:
groupdel 群组名称
(若群组是某个用户帐号的初始群组则会报错,没法删除)
(4)初始群组与有效群组:
用户的初始群组是用户登入系统以后就获取到并拥有其相关权限的群组,也就是/etc/passwd文件第四个栏位上的GID对应的群组。用户在系统中可加入多个群组,并且可使用所属全部群组的权限与功能,可是建立文件或者目录的时候,新建文件或目录的群组则只能是当前用户当前的有效群组。
可使用命令“groups”查看当前用户加入的全部群组,列表中第一个群组便是当前有效群组,可使用命令“newgrp 群组名称”切换有效群组,可是只能在当前用户加入的全部群组中切换。切换有效群组以后会进入一个新的shell环境,可使用“exit”命令来退出,回到原来有效群组和shell环境。
(5)用户加入群组:
用户想要加入某个群组有两种方法,第一种方法是让系统管理员root使用usermod命令进行操做(-a选项组合-G选项):
(将用户jet加入群组jet2)
第二种方法则是让对应群组的管理员使用gpasswd命令进行操做。
首先须要系统管理员root指定这个群组的管理员,也是使用gpasswd命令操做。先来看看root操做:
<1>修改群组密码:gpasswd 群组名称
<2>设置群组管理员、用户成员:gpasswd [-A 群组管理员帐号列表] [-M 用户成员帐号列表] 群组名称
<3>移除群组密码:gpasswd -r 群组名称
<4>使群组密码失效:gpasswd -R 群组名称
而后由群组管理员对群组用户成员进行管理:
3、使用者身份切换
1. su:
用户登入Linux系统以后能够经过su命令切换到不一样帐号,经过exit命令退出,恢复到原来帐号。
(1)su 帐号名称:以non-login shell方式切换身份,不少环境变量包括PATH都仍是目前用户的。
(2)su -/-l 帐号名称:以login shell方式切换身份,全部环境变量都变成新帐号的。
(3)su - -c "指令" 帐号名称:利用新身份执行一条指令,执行后身份恢复为当前用户。
(若不加上帐号名称则表示切换到root身份)
2. sudo:
使用su命令切换身份是须要输入新切换帐号的密码的(只有root不须要),也就是说,若要使用su切换身份,就必需要知道新切换帐号的密码才行。另外一个命令sudo也能够切换身份执行命令操做,并且只须要输入当前帐号密码便可,无需知道新切换帐号的密码,只是切换身份执行命令以后会自动恢复到原来帐号身份。指令格式以下:
sudo -u 帐号名称 指令
(如果没有指定帐号名称则默认是使用root身份执行指令)
然而并非全部的用户帐号都能使用sudo命令并能随意切换任何帐号的,须要在/etc/sudoers文件中配置相关信息才能够。此文件有规定语法,须要使用visudo指令来进行编辑。经过/etc/sudoers文件可设置哪些用户或群组可在哪些主机登入系统时切换到哪些帐号执行哪些指令,还能够设置执行sudo指令时无需输入密码。该文件部份内容截图以下: