linux 用户,组
2019-12-17 16:02:31来源:博客园 阅读 ()
linux 用户,组
权限:
- 所谓的权限是,由用户启动的进程,或者由操作系统启动的进程,可以访问哪些文件,不可以访问哪些文件。
- 进程太多了,不可能为每个进程定义权限对吧,所以进程的权限来自于启动进程的用户。
- 用户有哪些权限,则由此用户启动的进程就有哪些权限。
- 操作系统启动后,会启动很多后台进程(daemon进程),这些进程有的是由管理员(root)身份启动的,有的是由一般用户身份启动的。
- 有一种需求:不想以root身份启动进程,若由root启动的进程被黑客劫持,则黑客就拥有了root权限。
- 有一种需求:不想以root身份启动进程,那么就创建一个普通用户,这个普通用户的作用只是启动进程而已,不使用她手动登录系统。这种普通用户就叫【系统用户】。手动登录系统的普通用户就叫【登录用户】
linux使用uid管理用户;使用gid管理组。uid和gid是16bits的二进制数字,取值范围从0-65535
一,用户
用户分类:
管理员(uid:0)
普通用户(uid:1-65535)
- 系统用户:1-499(CentOS6);1-999(CentOS7)
- 登录用户:500-60000(CentOS6);1000-60000(CentOS7)
用户名解析文件:/etc/passwd。使用
man 5 passwd
查看,各个项目的意义。name:password:UID:GID:GECOS:directory:shell
- name:用户名
- password:密码,或者占位符。如果是【x】,则密码在/etc/shadow中。
- UID
- GID:用户所属的主组的ID号。
- GECOS:用户的额外信息,比如全名。是可选的
- directory:用户的家目录
- shell:用户使用的shell种类
$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ys:x:1000:1000:ys:/home/ys:/bin/bash
用户相关命令:useradd
,userdel
,usermod
,passwd
添加用户:
useradd
语法1:创建用户。
useradd [options] LOGIN
例子1:不指定选项,直接创建用户。
创建了用户a1,而且创建了一个私有组a1
# useradd a1 # tail -1 /etc/passwd a1:x:1001:1001::/home/a1:/bin/bash # tail -1 /etc/group a1:x:1001:
-u:指定UID.
指定了UID,创建了用户a2,而且创建了一个私有组a2
# useradd -u 3000 a2 # tail -1 /etc/passwd a2:x:3000:3001::/home/a2:/bin/bash # tail -1 /etc/group a2:x:3001:
-g:指定用户的主组,这个组必须事先存在,不存在会报错。
指定主组zg4,创建用户a3,没有自动创建了一个私有组a3,因为已经指定了主组zg4.
# useradd -g cloud a3 useradd: group 'cloud' does not exist # tail -1 /etc/group zg4:x:300: # useradd -g zg4 a3 # tail -1 /etc/passwd a3:x:3001:300::/home/a3:/bin/bash
-G:-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 指定用户的附加组,可以多个,用逗号分隔。
创建a5前,组zg4,zg5,a2的附加组列表是空的。使用-G并指定zg4,zg5,a2,创建用户a5后,组zg4,zg5,a2的附加组列表里就多了用户a5.而且创建了一个私有组a5.
# tail /etc/group zg4:x:300: zg5:x:3000: a1:x:1001: a2:x:3001: # useradd -G zg4,zg5,a2 a5 # tail /etc/group zg4:x:300:a5 zg5:x:3000:a5 a1:x:1001: a2:x:3001:a5
-d:指定用户的家目录,如果不指定则默认在/home下创建同名目录。
如果指定的家目录不存在,则系统复制/etc/skel/下的所有文件,到家目录下。
如果出现错误:useradd: cannot set SELinux context for home directory
使用
setenforce 0
即可,但只在当前会话有效。若要永久有效,则编辑/etc/sysconfig/selinuxSELINUX=disabled?
即可。# ls -a /etc/skel/ . .. .bash_logout .bash_profile .bashrc .emacs .mozilla # useradd -d /tmp/aa aa useradd: cannot set SELinux context for home directory /tmp/aa
如果指定的家目录存在,则系统不复制/etc/skel/下的文件,到家目录下,并提示家目录已经存在。所以最好指定不存在的目录。
# ls -a /etc/skel/ . .. .bash_logout .bash_profile .bashrc .emacs .mozilla # mkdir /tmp/abcd # userdel abcd # useradd -d /tmp/abcd abcd useradd: warning: the home directory already exists. Not copying any file from skel directory into it # ls -a /tmp/abcd . ..
-c:指定用户的额外信息(GECOS)
指定了GECOS,创建了用户a4,而且创建了一个私有组a4
# useradd -c yyass a4 # tail -1 /etc/passwd a4:x:3002:3002:yyass:/home/a4:/bin/bash # tail -1 /etc/group a4:x:3002:
-s:指定用户使用哪种shell。可以选择的shell记录在/etc/shells中。不在这个列表里的shell也可以选,但是不太安全。
# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh
-r:创建系统用户。
创建了用户fff,而且创建了一个私有组fff。注意:由于创建的是系统用户,所以UID和GID都小于1000。
# useradd -r fff # tail -1 /etc/passwd fff:x:986:299::/home/fff:/bin/bash # tail -1 /etc/group fff:x:299:
-m:如果用户的家目录不存在,创建家目录。这个选项没太搞懂
# useradd -m bbb [root@localhost ~]# ls /home/bbb/ [root@localhost ~]# ls -a /home/bbb/ . .. .bash_logout .bash_profile .bashrc .emacs .mozilla
-M:不创建用户的家目录。
# useradd -M bb # ls /home/bb ls: cannot access /home/bb: No such file or directory
-f:指定下面介绍的【password inactivity period(⑤)】。如果是0,则过期后马上不能登录系统;如果是-1,即使过期后,只要修改了密码,还是可以登录系统的。
语法2:在标准输出显示创建用户时,所使用的默认值。更多的默认值,存放在/etc/login.defs里。
useradd -D
# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
GROUP:?
HOME:家目录
INACTIVE:指定下面介绍的【password inactivity period(⑤)】。如果是0,则过期后马上不能登录系统;如果是-1,即使过期后,只要修改了密码,还是可以登录系统的。
EXPIRE:指定下面介绍的【account expiration date(⑥)】。如果是empty,代表永不过期。
SHELL:shell的种类
SKEL:指定从哪个目录下复制下面这些文件,到家目录。
.bash_logout .bash_profile .bashrc .emacs .mozilla
CREATE_MAIL_SPOOL:是否创建信箱。yes是创建。创建的信箱放到目录/var/spool/mail/里。
语法3:修改创建用户时,所使用的默认值。修改后的结果保存在文件/etc/default/useradd中
useradd -D [options]
- -b:修改HOME
- -e:修改EXPIRE
- -f:修改INACTIVE
- -g:修改GROUP
- -s:修改SHELL
# useradd -D -s /bin/csh # useradd -D SHELL=/bin/csh # cat /etc/default/useradd SHELL=/bin/csh # useradd nn # tail -1 /etc/passwd nn:x:3010:3010::/home/nn:/bin/csh
修改用户:
usermod
.经常使用的给用户增加附加组。联合使用-a和-g。
语法:usermod [options] LOGIN_NAME
-u:修改用户的uid为此处的值。
# tail /etc/passwd bn:x:3011:3011::/home/bn:/bin/csh # usermod -u 4000 bn # tail -1 /etc/passwd bn:x:4000:3011::/home/bn:/bin/csh
-g:修改用户的主组为此处的值。注意点和useradd一样。
# tail -1 /etc/passwd bn:x:4000:3011::/home/bn:/bin/csh # tail /etc/group a5:x:3003: # usermod -g a5 bn # tail -1 /etc/passwd bn:x:4000:3003::/home/bn:/bin/csh
-G:修改用户附加组。会覆盖用户原来有的附加组。不想被覆盖就和-a一起使用。
# tail -20 /etc/group zg4:x:300:a5 zg5:x:3000:a5 a1:x:1001: a2:x:3001:a5 a4:x:3002: # usermod -G a1,a4 a5 # tail -20 /etc/group zg4:x:300: zg5:x:3000: a1:x:1001:a5 a2:x:3001: a4:x:3002:a5
原来用户a5的附加组是zg4,zg5,a2,执行命令后,附加组没覆盖了。
-a:和-G一起使用,给用户添加附加组。
# tail -20 /etc/group a1:x:1001:a5 a4:x:3002:a5 aa:x:3005: fff:x:299: # usermod -a -G aa,fff a5 # tail -20 /etc/group a1:x:1001:a5 a4:x:3002:a5 aa:x:3005:a5 fff:x:299:a5
没有被覆盖,是追加。
-c:修改用户的额外信息为此处的值。
# tail -1 /etc/passwd bn:x:4000:3003::/home/bn:/bin/csh # usermod -c hello bn # tail -1 /etc/passwd bn:x:4000:3003:hello:/home/bn:/bin/csh
-d:修改用户的家目录为此处的值。原来家目录里的文件,还是放在原来那里,想把家目录里的文件也剪切到新的家目录里的话,就和-m一次使用。
# usermod -m -d /home/nn2 nn # ls -a /home/nn2/ . .. .bash_logout .bash_profile .bashrc .emacs .mozilla # ls -a /home/nn/ ls: cannot access /home/nn/: No such file or directory # tail -2 /etc/passwd nn:x:3010:3010::/home/nn2:/bin/csh
/home/nn目录下的文件都被剪切到了/home/nn2目录下了,并且/home/nn目录都被自动删除了。
-m:只能和-d一起使用。把旧家目录里的所有文件,复制到新的家目录。
-l:修改用户名为此处的值。
# usermod -l newnn nn # tail -2 /etc/passwd bn:x:4000:3003:hello:/home/bn2:/bin/csh newnn:x:3010:3010::/home/nn2:/bin/csh
-s:修改用户的shell种类。
# tail -2 /etc/passwd newnn:x:3010:3010::/home/nn2:/bin/csh # usermod -s /bin/bash newnn # tail -2 /etc/passwd newnn:x:3010:3010::/home/nn2:/bin/bash
-L:锁定用户密码。即在用户密码前加一个!。
# usermod -L newnn # tail -2 /etc/shadow newnn:!1:18247:0:99999:7::: # usermod -U newnn # tail -2 /etc/shadow newnn:1:18247:0:99999:7:::
-U:解锁用户密码。去掉!。
删除用户:
userdel [options] LOGIN
- -r:删除用户的同时,也删除用户的家目录。不指定此选项则保留用户的家目录。
二,组分类:
组分类1
管理员组(gid:0)
普通用户组(gid:1-65535)
- 系统用户组:1-499(CentOS6);1-999(CentOS7)
- 登录用户组:500-60000(CentOS6);1000-60000(CentOS7)
组名解析文件:/etc/group
group_name:password:GID:user_list
- group_name:组名
- password:密码,或者占位符。如果是【x】,则密码在/etc/shadow中。
- GID:
- user_list:以此组为附加组的用户成员列表。
组分类2:站在用户角度分。一个用户可以在多个组里,哪个组是用户的主要组,这个组就叫用户的主组。
用户的主组
用户的附加组
可以使用
id
命令查看用户的主组是什么,附加组是什么$ whoami za1 $ id uid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1)
gid:用户的主组。
主组的作用:当创建文件后,此文件的所属组,是这个用户的主组。
groups:用户所属的组的集合,所以用户的主组和附加组都在这个集合里。
用户自己可以从自己所属的组里,挑出一个组,作为自己的主组,所以用户的主组是可以随时改变的。使用
newgrp
命令,切换用户的主组。切换成功后,还可以使用exit
命令退出来,主组还会变成切换前的。
组分类3:站在用户角度分
- 私有组:组名同用户名,且组里只有自己一个用户
- 公共组:组内包含了多个用户
单项加密算法:
md5:对应的命令
md5sum
# echo 11 | md5sum 166d77ac1b46a1ec38aa35ab7e628ab5 -
sha1:对应的命令
sha1sum
# echo 11 | sha1sum dd71038f3463f511ee7403dbcbc87195302d891c -
sha224:对应的命令
sha224sum
sha256:对应的命令
sha256sum
sha384:对应的命令
sha384sum
sha512:对应的命令
sha512sum
Linux 是如何把密码加密的呢?
如果2个用户的密码恰巧一样,而且这2个用户都可以查看/etc/shadow文件,如果加密后的串也相同的话,那么就能知道另一个用户的密码了。为了避免这种情况,linux在执行加密前,会加一些salt(随机数)在密码里,这样就避免了上面情况的发生,而且随机数也是放到了/etc/shadow文件里。
密码存放到哪里了?密码是单向加密的,就意味着基本无法反向解密。
用户的密码存放在:/etc/shadow。可以使用
man 5 shadow
查看下面各个项目的意义。login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
login name:用户名
encrypted password:加密后的密码
第一个$$间的数字:代表使用的是哪个加密算法
1:md5;2:sha1;3:sha224;4:sha256;5:sha384;6:sha512
第二个$$间的串:加的salt(随机数)。
第三个$$间的串:加密后,生成的串。
date of last password change(①):最近一次修改秘密的时间到1970年1月1号的天数。
- 0:用于下次登录时,必须修改密码:
- empty:密码不用修改,且没有期限。可以一直使用。
minimum password age(②):过了多少天后,才可以修改密码。
- 0或者empty:不使用minimum password age
maximum password age(③):过了多少天后,必须要修改密码。
- empty:不使用maximum password age, 不使用password warning period, 不使用password inactivity period
- 小于minimum password age:用户不可以修改密码
password warning period(④):修改密码的截至日期前多少天开始提醒用户,要修改密码了,但是在这个提醒期间内,不修改也是可以登录系统的。
- 0或者empty:不使用此字段
password inactivity period(⑤):超过了密码修改的截止期,多少天内,还可以修改密码,不修改密码就无法登录系统。
- empty:不使用此字段。
account expiration date(⑥):从1970年1月1号开始,经过多少天后,账户就无法使用。
- empty:永远不会过期。
reserved field:保留字段,目前未使用。
用下图来说明上面的日期,下图的圈里的数字对应上面的数字。
- 黑色?段:不可以修改密码
- 蓝色?段:可以修改密码
- 紫色?段:提醒修改密码,但不修改也可以登录系统
- 绿色?段:提醒修改密码,不修改不可以登录系统
- 红色?段:如果修改了密码,则可以继续登录系统;如果没有修改密码,则无法登录系统
- 橙色?段:不可以登录系统。
# cat /etc/shadow root:$6$n0lH0mnbr28Igon0$KhYX3C0MjrBCP4qf7A6J4jwdP.eviqIhKGPlE4Uy4jaqkL.SzKvN39v860ckYHojGp0d260moqFPU2ugqdO8U.::0:99999:7::: ys:$6$XjEoNab85Vhf0ajr$kEqHY3ZiJm7nWG.fDY0mzEvdm8L2Yc4d0FEYYh8aufBrYhiDfgQqdzljNbJnK0NIK3v9gy/iM/cqMUnbhS0D71::0:99999:7:::
组的密码存放在:/etc/gshadow
组相关命令:groupadd
,groupdel
,groupmod
,gpasswd
添加组:
groupadd
默认创建登录用户组。- -g:手动指定gid。不指定的话,则由当前最大的gid加1.
- -r:创建系统用户组
# groupadd zg1 # tail -1 /etc/group zg1:x:1001: # groupadd -g 1005 zg2 # tail -2 /etc/group zg1:x:1001: zg2:x:1005: # groupadd -r zg3 # tail -2 /etc/group zg2:x:1005: zg3:x:979: # groupadd -r -g 300 zg4 # tail -2 /etc/group zg3:x:979: zg4:x:300:
修改组:
groupmod
- -g:修改GID
- -n:修改组名(groupmod -n new old)。修改后,里面组员的所属组的名字也变了。
删除组:
groupdel
。删除后里面的组员就没有所属组了。groupdel group_name
三,管理用户(设置用户密码,修改用户密码的各种时间属性)
语法:
passwd [-k][-l] [-u [-f]][-d] [-e][-n mindays] [-x maxdays] [-w warndays] [-i inactivedays][-S] [--stdin][username]
修改自己的密码:不指定任何选项
passwd
管理员修改用户密码:
passwd user
让用户无法登录:
-l
# passwd -l za1 Locking password for user za1. passwd: Success
解锁用户:
-u
# passwd -u za1 Unlocking password for user za1. passwd: Warning: unlocked password would be empty. passwd: Unsafe operation (use -f to force) # passwd -fu za1 Unlocking password for user za1. passwd: Success
删除用户的密码:
-d
删除后,用户登录系统时,不需要输入密码。
强迫用户下次登录必须修改密码:
-e
把【date of last password change(①)】修改成了0,也就是下次登录系统时,必须修改密码。
-e后面不能输入数字。
# tail -1 /etc/shadow za1::18247:10:60:7::: # passwd -e za1 Expiring password for user za1. passwd: Success # tail -1 /etc/shadow za1::0:10:60:7:::
修改用户密码的【minimum password age(②)】:
-n
# tail -1 /etc/shadow za1::18247:0:99999:7::: # passwd -n 10 za1 Adjusting aging data for user za1. passwd: Success # tail -1 /etc/shadow za1::18247:10:99999:7:::
修改用户密码的【maximum password age(③)】:
-x
# tail -1 /etc/shadow za1::18247:10:99999:7::: # passwd -x 60 za1 Adjusting aging data for user za1. passwd: Success # tail -1 /etc/shadow za1::18247:10:60:7:::
修改用户密码的【password warning period(④)】:
-w
。# tail -1 /etc/shadow za1::0:10:60:7::: # passwd -w 5 za1 Adjusting aging data for user za1. passwd: Success # tail -1 /etc/shadow za1::0:10:60:5:::
修改用户密码的【password inactivity period】:
-i
# tail -1 /etc/shadow za1::0:10:60:5::: # passwd -i 8 za1 Adjusting aging data for user za1. passwd: Success # tail -1 /etc/shadow za1::0:10:60:5:8::
重定向修改密码,在shell脚本编程里使用:
--stdin
# tail -1 /etc/shadow za1::0:10:60:5:8:: # echo "1" | passwd --stdin za1 &> /dev/null # echo $? 0 # tail -1 /etc/shadow za1:$6$LiKVjDZv$7AGTfLBLiqd48.YC0VglXmCyHfJ5mcCBRtFAtexfEljcjmNWjKdoPQSxFdiFoDyj5BdDBkTdFrR3cPTuSA5F50:18247:10:60:5:8::
备胎命令
chage - change user password expiry information
,和passwd差不多。
四,管理组(设置组密码;添加用户到组;从组删除用户)
gpasswd
语法:
gpasswd [option] group
修改组的密码:不使用选项
# gpasswd zg1 Changing the password for group zg1 New Password: Re-enter new password: # tail -1 /etc/gshadow zg1:$6$P1Ks//MQ.8$48kY7GOxXxlegd14K3ssR038lt7O6XVnPP1b7emXk8S0r5y4FRHGR9OJDRTQiClH0qvFaikNBmRDYY5IBwDEO0::za1
为什么要给组设置密码?防止用户随意使用
newgrp
命令切换自己的主组。假设用户要用newgrp把自己的主组切换成zg1,如果此用户的附加组里有zg1,则不需要输入组zg1的密码;如果此用户的附加组里没有zg1,则需要输入组zg1的密码。
下面的例子,用户za2的所属组里没有zg1,所以切换到zg1时,必须输入zg1的密码。然后创建文件t2,文件t2的所属组就变成了zg1.使用exit退出后,za2的主组又变回了za2.
# tail -1 /etc/passwd za2:x:1002:1003::/home/za2:/bin/bash # su za2 $ id uid=1002(za2) gid=1003(za2) groups=1003(za2) $ touch t1 $ ll total 0 -rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1 $ newgrp zg1 Password: $ id uid=1002(za2) gid=1002(zg1) groups=1002(zg1),1003(za2) $ touch t2 $ ll total 0 -rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1 -rw-r--r--. 1 za2 zg1 0 Dec 17 14:31 t2 $ exit exit $ whoami za2 $ id uid=1002(za2) gid=1003(za2) groups=1003(za2)
下面的例子,用户za1的所属组里有zg1,所以把自己的主组切换到zg1时,不需要输入密码。
$ whoami za1 $ id uid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1) $ newgrp zg1 $ id uid=1001(za1) gid=1002(zg1) groups=1002(zg1),1001(za1)
临时切换用户的主组:
newgrp - group
。加上横线:模拟用户重新登录系统,以事先重新初始化工作环境。
向组里添加用户:
-a username
# tail -2 /etc/group zg1:x:1002:za1 # gpasswd -a za2 zg1 Adding user za2 to group zg1 # tail -2 /etc/group zg1:x:1002:za1,za2
从组里删除用户:
-d username
# tail -2 /etc/group zg1:x:1002:za1,za2 # gpasswd -d za2 zg1 Removing user za2 from group zg1 # tail -2 /etc/group zg1:x:1002:za1
五,显示用户属于哪些组id
语法:
id [OPTION]... [USER]
不输入USER就显示当前用户属于哪些组
- 只显示UID:-u
- 只显示GID:-g
- 只显示用户属于的所有组:-G
- 显示名字而非id,配合-u,-g,-G使用:-n
六,切换用户su
登录式切换:模拟用户登录,初始化目标用户的工作环境,比如直接进入目标用户的家目录。
su - username
su -l username
非登录式切换:模拟用户登录,所以导致没有初始化目标用户的工作环境,所以就不能直接进入到目标用户的家目录。
su usernme
管理员可以无密码切换到其他用户。
最好使用登录式切换。
切换用户后只是执行一个命令,然后再切换回来:
su - username -c command
# whoami root [root@localhost ~]# su - ys -c "ls -lrt" total 0 drwxr-xr-x. 2 ys ys 6 Nov 29 17:08 Downloads # whoami root
七,一些不重要的管理员命令
finger和chfn
finger username:查看user的真名,手机,办公室等信息。
chfn username:修改user的真名,手机,办公室等信息。
# finger za1 Login: za1 Name: Directory: /home/za1 Shell: /bin/bash Last login Tue Dec 17 15:23 (CST) on pts/1 No mail. No Plan. # chfn za1 Changing finger information for za1. Name []: abc Office []: off Office Phone []: 132 Home Phone []: 234 Finger information changed. # finger za1 Login: za1 Name: abc Directory: /home/za1 Shell: /bin/bash Office: off, 132 Home Phone: 234 Last login Tue Dec 17 15:23 (CST) on pts/1 No mail. No Plan.
修改用户的shell种类
chsh -s shell username
# chsh -s /bin/csh za1 Changing shell for za1. Shell changed.
检查用户密码是否健康:
pwck
检查组密码是否健康:
grpck
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
原文链接:https://www.cnblogs.com/xiaoshiwang/p/12056125.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:安装包RPM包或源码包
下一篇:当前互联网已经分配的端口和服务
- Linux系统如何设置开机自动运行脚本? 2020-06-11
- Linux指令和shell脚本 2020-06-11
- 适合开发者的最佳Linux发行版 2020-06-11
- RAID 1 软件实现(Linux 系统) 2020-06-10
- linux各级目录 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash