1用户和用户组分类
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必需要拥有一个帐号步入系统。帐号实质上就是一个用户在系统上的标示,系统按照该标示分配不同的权限和资源。一个帐号包含用户和用户组两部份。
用户组分类:
2用户和用户组相关文件第4列:用户初始组ID,即GID第5列:用户信息说明。这个数组基本上并没有哪些重要用途,只是拿来解释这个帐号的意义而已第6列:用户家目录,即用户登入后默认步入的目录。假如你想让某个用户登入后默认步入其他目录,更改这列就行了,前提该用户要有步入这个目录的权限第7列:登陆后获取的shell。通常都是"/bin/bash",注意系统用户不能登入所以这列是一个特殊shell"/sbin/nologin"
用户密码文件:/etc/shadow
第4列:两次密码更改时间间隔(与第3列相比)。该用户的密码在近来一次被修改后须要经过几天才可以再被变更,倘若是0的话表示密码随时可以更动的意思。这的限制是为了怕密码被个别人一改再改而设计的,假如设定为20天的话,这么当你设定了密码以后,20天之内都未能改变这个密码第5列:密码有效期(与第3列相比)。时常变更密码是个好习惯!为了强制要求用户变更密码,这个数组可以指定在近来一次修改密码后,在多少天数内需要再度变更密码才行第6列:密码到期前的警告天数(与第5列相比)。当用户的密码有效时限快要到的时侯,系统会根据这个数组的设定,发出警告信息给这个用户,提醒他"再过n天你的密码就要过期了,请早日重新设定你的密码",如前面的事例,则是密码到期之前的7天之内,系统会警告该用户第7列:密码到期后的宽限天数(与第5列相比)。假如设置了宽限天数,密码到期后不会立刻失效,再宽限天数内任务没有修改密码,密码才能真正的失效第8列:帐号失效日期。这个日期跟第三个数组一样,都是使用1970年以来的总日数设定。这列表示:该用户在此数组规定的日期过后,将难以再使用,就是所谓的帐号失效,此时不论你的密码是否有过期,这个帐号都不能再被使用!这个数组会被使用一般应当是在收费服务的系统中,你可以规定一个日期让该帐号不能再使用了第9列:保留。这列是保留的,看之后有没有新功能加入
用户组文件:/etc/group
用户组密码文件:/etc/gshadow
用户家目录
用户邮箱
用户模板文件:/etc/skel/
里面介绍了用户和用户组相关的文件,这么用户登入系统的过程,是怎样涉及到那些文件的呢?当你输入用户名和密码后,系统大致做了如下几步处理:
先寻找/etc/passwd上面是否有你输入的用户名,假如没有则跳出,假如有的话则将该用户名对应的UID与GID(关联/etc/group中的GID)读下来,另外该用户的家目录与shell设定也一并读下来;核实密码表。这时Linux会步入/etc/shadow上面找出对应的用户,之后核实一下你刚才输入的密码与里头的密码是否相符;倘若一切都OK的话,就步入Shell控管的阶段。3用户管理3.1添加用户:useradd
命令格式:useradd[选项]用户名
3.2用户密码设定:passwd
刚添加成功的用户没有密码(此时该用户的密码是"!!"),还不能用于登陆系统,须要通过"passwd"命令设置密码后才会登陆。其实,"passwd"命令也能拿来更改已存在的用户密码,以及管理用户密码有效时间等。
命令格式:passwd[选项][用户名]
用户名:用户名省略,默认更改当前登入用户的密码。通常用户更改自己的密码直接执行"passwd"即可注意:只有管理者能够更改其他用户的密码linux系统装win7,普通用户只能更改自己的密码3.3用户信息更改:usermod
命令格式:usermod[选项]用户名
3.3用户删掉:userdel
命令格式:userdel[选项]用户名
4用户组管理4.1添加组:groupadd
命令格式:groupadd[选项]组名
4.2组信息更改:groupmod
命令格式:groupmod[选项]组名
4.3组删掉:groupdel
命令格式:groupdel组名
注意:假如用户组是某个用户的初始组,必须先删掉这个用户或则更改该用户的GID后,才会删掉该用户组
4.4切换有效组:newgrp
假如用户user1有个多个用户组(初始组:user1,附加组:group1,group2),则登陆后默认的有效组是该用户的初始组user1,此时该用户创建的文件所属组就是user1,倘若让该用户创建的文件所属组为group1,就须要使用"newgrp"命令切换有效组为group1
命令格式:newgrp组名
4.5组密码和组管理员功能:gpasswd
假如管理员太忙了,可以为某个用户组设置一个管理员来帮忙管理该组成员用户。通常组密码和组管理员功能虽然甚少使用了linux home下没有超级管理员用户,完全可以由"sudo"替代。
命令格式:gpasswd[选项]组名
注意:假如某个用户组设置了组密码,就代表容许非该组内的用户可以通过"newgrp"命令(会提示输入密码),切换有效组为该组。相当于把非该组内的用户临时添加到了该组,只是临时生效,并没有更改"/etc/group"和"/etc/gshadow"文件5扩充命令5.1查询用户UID/GID等信息:id
命令格式:id[选项][用户名]
用户名:省略代表查询当前进程用户该命令使用通常不加任何选项,基本能输出所有要查询的信息。诸如直接执行"id"或"idroot"5.2查询用户所在全部组名称:groups
命令格式:groups[用户1][用户2]...
查询下来的第一个组是当前有效组5.3显示当前登入用户名:whoami
命令格式:whoami
5.4显示当前已登陆用户信息:w、who
w和who命令作用相像都是显示系统中正在登陆的用户信息,这两个命令查询信息都来始于日志文件"/var/run/utmp"。
w命令格式:w[选项][用户名]
用户:仅显示指定用户
示例:
[root@localhost ~]# w
18:31:08 up 1 day, 16 min, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat18 49:23 0.07s 0.07s -bash
root pts/0 192.168.199.119 18:22 8:17 0.02s 0.02s -bash
root pts/1 192.168.199.119 18:22 0.00s 0.03s 0.00s w
输出内容说明:
第二行内容:
who命令格式:who[选项][查询文件]
查询文件:指定要查询的文件,默认是/var/run/utmp5.5修改使用的shell:chsh
命令格式:chsh[选项][用户名]
用户名:省略则默认是操作当前登入用户6添加用户默认值配置
useradd命令添加用户时,有些选项假如不指定的话就会有默认值,例如家目录。添加用户时默认值的参考文件主要有两个,分别是"/etc/default/useradd"和"/etc/login.defs",下边对文件内容一一进行说明
/etc/default/useradd文件,内容如下:
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
HOME=/home:用户家目录位置。即每位新建用户会在该目录下新建一个和用户名一样的目录来储存该用户的文件INACTIVE=-1:密码过期后的宽限天数。即对应"/etc/shadow"文件的第7列。这儿的值是天数,倘若是0代表密码过期立即失效;假如是-1则是代表密码永远不会失效;假如是其他数字如30,则代表密码过期后30天后才失效EXPIRE=:默认失效的日期。即对应"/etc/shadow"文件的第7列。默认值是空,代表永久有效SHELL=/bin/bash:使用的shell程序。即对应"/etc/passwd"文件的第7列SKEL=/etc/skel:新建用户家目录的模板文件。该目录下的文件会全部原封不动的复制到新用户的家目录下CREATE_MAIL_SPOOL=yes:是否给新用户构建邮箱。这儿默认创建,就是说新建用户会创建一个和用户名一样的文件置于"/var/spool/mail/"目录(该目录由"/etc/login.defs"文件指定的)下
/etc/login.defs文件,内容如下:
[root@localhost ~]# cat /etc/login.defs
...(注释内容省略)...
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 500
UID_MAX 60000
GID_MIN 500
GID_MAX 60000
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
7用户身分切换(su与sudo)
当用普通帐号登入系统,须要执行个别操作并且权限不足,这时就须要切换到更高权限的用户身分去执行啦。这儿就涉及到两个命令的使用su和sudo
7.1su
su是最简单的用户身分切换命令,可以进行任何身分的切换。不仅root用户切换到其他用户不须要输入密码外,其他情况使用"su"命令切换用户时都必须输入要切换用户的登陆密码
命令格式:su[选项][用户名]
用户名:要切换的用户。假如省略则代表切换到root用户
示例:
# 1. 从 user1 切换至 root 用户,提示输入密码
[user1@localhost ~]$ su -
密码:
# 2. 查看 /root/aaa.txt 文件权限、所有者和所属组
[root@localhost ~]# ls -l aaa.txt
-rw-r--r--. 1 root root 17 4月 18 19:15 aaa.txt
# 3. 从 root 用户切换至 user2 用户,不需要输入密码直接切换成功
[root@localhost ~]# su - user2
# 4. 查看 user2 用户所属组。不在 root 组,即不能查看/root/aaa.txt内容
[user2@localhost ~]$ id user2
uid=502(user2) gid=502(user2) 组=502(user2),501(user1)
# 5. 使用 root 身份执行一次查看指令,而不切换身份
[user2@localhost ~]$ su -c "cat /root/aaa.txt" root
密码:
aaaaaaaaaaaaaaaa
[user2@localhost ~]$
7.2sudo
尽管su很便捷了红旗linux桌面版,而且假如有好多人都须要切换root身分来执行个别指令,就必须晓得root密码,这样容易造成密码流出,很不妥。相对于su必须晓得要切换的用户密码,而使用sudo来切换身分只须要晓得用户自己的密码即可。并不是所有用户都能使用sudo切换身分,前提必须是由管理员初审后,给用户开放了sudo权限就能使用,能使用sudo虽然就早已代表是受信任的用户了,这也是使用sudo不要须要晓得切换用户密码的诱因。
命令格式:sudo[选项]原始命令
示例,
# 1. 使用 user1 用户身份创建文件 /tmp/aaa.txt
[root@localhost ~]# sudo -u user1 touch /tmp/aaa.txt
# 2. 查看 /tmp/aaa.txt,发现文件所属者和所属组都是 user1,而不是 root
[root@localhost ~]# ls -l /tmp/aaa.txt
-rw-r--r--. 1 user1 user1 0 4月 18 21:32 /tmp/aaa.txt
[root@localhost ~]#
sudo预设只有root用户才能使用,这么普通用户怎么能够使用sudo来获取其他用户身分呢?这就涉及到"/etc/sudoers"文件的配置,由于sudo的执行流程是这样的:
当用户执行sudo时,系统于/etc/sudoers文件中搜寻该使用者是否有执行sudo的权限若使用者具有可执行sudo的权限,便让使用者输入自己的密码来确认若密码输入成功,便开始进行sudo后续接的指令若欲切换的身分与执行者身分相同或则root用户执行sudo时,不须要输入密码
所以用户能够使用sudolinux home下没有超级管理员用户,只须要编辑/etc/sudoers文件就可以了。由于该文件有一定的规范性,直接使用vi去编辑不是太好,因而系统提供了一个命令visudo专门来编辑这个文件,并在编辑完成退出编辑界面时去进行校准该文件的句型。下边对该文件内容进行介绍:
[root@localhost ~]# visudo
...省略...
# 使用者 来源主机=(可切换的身份) 可执行的命令
root ALL=(ALL) ALL
示例,
# 1. 授权user1可以切换root身份重启服务器。可切换身份省略默认就是root身份
user1 ALL= /sbin/shutdown -r now
# 等同于上面一条
user1 ALL=(root) /sbin/shutdown -r now
# 2. 授权user1可以修改其他用户密码,但是不能修改root密码。! 是不可执行的意思
user1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
# 3. 授权wheel用户组所有身份权限,并且免密码输入
%wheel ALL=(ALL) NOPASSWD: ALL
# 4. 设置别名。User_Alias(设置用户别名)、Cmnd_Alias(设置命令别名)、Host_Alias(设置来源主机名别名)
# 注意别名一定要用大写字母,入下面的 ADMPW、ADMPWCOM
User_Alias ADMPW = user1, user2, user3
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
假如两次执行sudo的间隔在五分钟内,这么再度执行sudo时就不须要再度输入密码了。这是由于系统相信你在五分钟内不会离开你的作业,所以执行sudo的是同一个人