linux 用户和组的管理、密码管理

1. /etc/passwd    用户配置文件

由 : 分隔成7个字段
(1) 用户名 规则:大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法 
(2) x 放密码,安全起见放到 /etc/shadow
(3) uid (0-4294967294=2^32-2)  root uid=0 1-499系统保留 普通账户是从500开始
(4) gid  对应 /etc/group
(5) 注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等  用 chfn 更改
(6) 用户家目录
(7) shell  /bin/bash, /bin/false, /sbin/nologin

[root@localhost /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
user1:x:500:501::/home/user1:/bin/bash
user2:x:501:502::/home/user2:/bin/bash


chfn 用户名    更改passwd第5个字段的信息;名字、office、办公电话、家庭电话;

[root@localhost ~]# chfn user3
Changing finger information for user3.
Name []: yong
Office []: jiuzhou
Office Phone []: 8012
Home Phone []: 4475
Finger information changed.
[root@localhost ~]# tail -1 /etc/passwd
user3:x:600:600:yong,jiuzhou,8012,4475:/home/user3:/sbin/nologin


2. /etc/shadow 存放密码配置文件

shadow配置文件在/etc/shadow  同目录下还有/etc/shadow- 此文件为shadow的备份文件,防止误删除后还原用

使用 : 分隔9个字段
(1) 用户名
(2) 密码,用SHA-512加密过,不可逆;

!! 表示密码为空,$6开始的为sha-512加密的;$5开头的为 sha-256加密的; $1开头的为md5加密生成的;* 表示账号被锁定;
(3)上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是 ‘365 x (2012-1970) + 10 + 1= 15341’. 
(4)要过多少天才可以更改密码, 0 不限制
(5)密码多少天后到期,默认是99999,可以理解为永远不需要改 
(6)密码到期前的警告期限 
(7)账号失效期限,到期后过多少天锁定帐号 
(8)账号的生命周期
(9)作为保留用的,没有什么意义

[root@localhost /]# cat /etc/shadow
root:$6$AvL69gk58FaCVKgE$WB080dPATKZjTMJNrqqxVl1BZbbgqc5D4V51WxwEhSe0hfw1Ew7wpAMa42y49.a5iksrW2qzHAuTRrENKxclt/:16387:0:99999:7:::
bin:*:15980:0:99999:7:::
user1:!!:16456:0:99999:7:::
user2:$6$9HhigmKZ$60TN8Ovwg5fFxjbzWv0VucmXP3NlgLCL2A1EFllWmIJWdhQrzBih4qBKYqPWuMX5YkbDfAlmO0duVuojG65B70:16513:0:99999:7:::


3. 新增/删除用户和组

添加用户组    groupadd groupname

用户组管理配置文件有2个地方 /etc/group    /etc/gshadow ;  

/etc/group-    /etc/gshadow- 为配置文件的备份,防止误删除

用户组GID 0-499为系统保留 500以上为普通用户


 指定组id GID 加参数 -g

[root@localhost ~]# groupadd user1
[root@localhost ~]# tail -1 /etc/group
user1:x:501:
[root@localhost ~]# groupadd -g 600 user2
[root@localhost ~]# tail -1 /etc/group
user2:x:600:

主组        创建一个用户时默认会创建一个相同用户名的组

附属组    把用户添加到其他组,则为附属组

使用命令:id username   查询该用户所属主、所属组的信息;


删除用户组    groupdel groupname

如果组内有用户,不能删除;

[root@localhost ~]# useradd user1
[root@localhost ~]# tail -1 /etc/group
user1:x:500:
[root@localhost ~]# groupdel user1
groupdel: cannot remove the primary group of user ‘user1‘


创建用户     useradd

创建好的用户在home目录下显示,可以passwd给用户更改密码,创建好的用户信息保存在/etc/passwd 

useradd -u    指定用户的uid

useradd -g    指定新增用户的gid,可以跟gid或组名,必须已经存在的组

useradd -d    指定用户的家目录

useradd -G    添加一个附属组,组id或组名,必须已经存在的组

useradd -M    创建一个用户但是不建立用户家目录

useradd -s    自定义shell

useradd -s /sbin/nologin username     禁止某个用户登录


指定uid,指定家目录的;

[root@localhost ~]# useradd -u 510 -d /home/usernew user1
[root@localhost ~]# ls /home/
 usernew
[root@localhost ~]# grep user1 /etc/passwd
user1:x:510:510::/home/usernew:/bin/bash


如果没有创建家目录,需要创建目录,并需要拷贝/etc/skel/文件到用户的家目录;

[root@localhost ~]# ls -a /etc/skel/
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2

举例:

[root@localhost ~]# useradd -M user2
[root@localhost ~]# ls -l /home/
user1
[root@localhost ~]# su - user2
su: 警告:无法切换到目录/home/user2: 没有那个文件或目录
-bash-4.1$ logout
[root@localhost ~]# mkdir /home/user2
[root@localhost ~]# cp -v /etc/skel/.b* /home/user2
"/etc/skel/.bash_logout" -> "/home/user2/.bash_logout"
"/etc/skel/.bash_profile" -> "/home/user2/.bash_profile"
"/etc/skel/.bashrc" -> "/home/user2/.bashrc"
[root@localhost ~]# su - user2
[user2@localhost ~]$ pwd
/home/user2


指定gid,添加附属组,id 查看用户id信息:

[root@localhost ~]# tail -2 /etc/group
user1:x:500:
user2:x:501:
[root@localhost ~]# groupadd -g 600 test
[root@localhost ~]# tail -1 /etc/group
test:x:600:
[root@localhost ~]# useradd -g 600 -G 500,501 user3
[root@localhost ~]# tail -1 /etc/passwd
user3:x:502:600::/home/user3:/bin/bash
[root@localhost ~]# id user3
uid=502(user3) gid=600(test) 组=600(test),500(user1),501(user2)


更改用户信息    usermod

-d    更改用户家目录

-u    更改uid

-s    更改shell

-G    更改所属组

-L    锁死    

-U    解锁

[root@localhost ~]# usermod -u 600 -s /sbin/nologin yong
更改用户的uid为600,更改用户不能登录
[root@localhost ~]# su yong
This account is currently not available.
[root@localhost ~]# usermod -s /bin/bash yong
[root@localhost ~]# su yong
[huangyong@localhost root]$ whoami
yong


删除用户    userdel

userdel username          只删除/etc/passwd里面的信息,  /home目录下的用户目录并未删除

userdel -r username     全部删除用户的信息,包括/home目录的用户目录


4. 创建、修改用户密码

更改用户密码    passwd

passwd username 更改用户的密码,passwd 不加用户名则为更改当前登录的用户密码;

创建密码的规则:长度大于10;含大小写字母数字以及特殊字符 ;不规则性;不要带有自己名字、公司名字、自己电话、自己生日等。

mkpasswd  生成密码的工具需要安装 expect包

安装命令:  yun install -y expect

-l     定义密码长度,默认长度为9;

-s     定义特殊符号    设定不出现特殊符号 -s 0 ;设定出现特殊符号次数 -s 3;

[root@localhost /]# which mkpasswd/usr/bin/mkpasswd
[root@localhost /]# mkpasswd
qXFt!pk66
[root@localhost ~]# mkpasswd -l 8
2cS}v8xB
[root@localhost ~]# mkpasswd -l 8 -s 0
zXg78wIy


passwd --stdin username

只需要输入一次密码,不用重复输入2次。root的密码不能这么更改。

echo “lishiming” | passwd --stdin username

直接更改密码;

echo -e "yonglinux\nyonglinux\n"

回车键在linux用\n代替;需要加 -e 把\n 看成为回车;

[root@localhost ~]# echo "yonglinux\nyonglinux\n"
yonglinux\nyonglinux\n
[root@localhost ~]# echo -e "yonglinux\nyonglinux\n"
yonglinux
yonglinux


echo -e "yong1234\nyong1234\n" | passwd username

直接更改2次密码;

[root@localhost ~]# echo -e "yong1234\nyong1234\n" | passwd user1
更改用户 user1 的密码 。
新的 密码:无效的密码: 过于简单化/系统化
重新输入新的 密码:passwd: 所有的身份验证令牌已经成功更新。


5. 用户身份切换

切换用户    su

su username    切换普通用户,部分切换;环境变量还是root的,

普通用户切换到root用户需要输入root密码;

su   -  完全切换,用来初始化环境变量 $PATH $HOME等;


[root@localhost ~]# su user1
[user1@localhost root]$ pwd
/root
[user1@localhost root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/tmp:/root/bin
[root@localhost ~]# su - user1
[user1@localhost ~]$ pwd
/home/user1
[user1@localhost ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tmp:/home/user1/bin


su -c "touch /tmp/user4.txt" - user4

在root用户下,不用切换用户,直接创建文件。创建的用户所属主所属组为user4的。用户名必须在最后可以省略;

[root@localhost ~]# su -c "touch /tmp/user1.txt" user1
[root@localhost ~]# su - user1
[user1@localhost ~]$ ls -l /tmp/
-rw-rw-r--. 1 user1 user1      0 3月  22 16:32 user1.txt


切换用户    sudo

使用su 切换到root需要输入密码,知道root密码不***全。

sudo 给普通用户临时拥有root权限,不需要输入root密码;

安装sudo的命令: yum install -y sudo


visudo 编辑/etc/sudoers 配置文件
底行模式输入/ALL=    可以快速定位到这一行

root    ALL=(ALL)       ALL

user1   ALL=(root)      NOPASSWD: /bin/ls,/bin/su

保存退出;
使用user1用户可以执行su 切换到root,而且不需要输入密码;

[root@localhost user1]# su - user1
[user1@localhost ~]$ sudo /bin/su -

切换到user1用户,可以sudo执行su命令,直接切换到root用户不用输入密码,user1临时具有root的权限;

 sudo /bin/su -    可以简写为    sudo su -     


限制root用户登录

vi /etc/ssh/sshd_config

修改这一项, #PermitRootLogin yes  为 PermitRootLogin no 去掉#号,保存退出后;

/etc/init.d/sshd restart    重启远程登录ssh服务

tail /var/log/secure    可以查看登录日志;


远程登录连接太慢

vim /etc/ssh/sshd_config

#UseDNS yes 更改为UseDNS no,去掉前面的#号,保存退出;


/etc/init.d/sshd restart    或    service sshd restart    重启ssh服务生效;


sshd    为服务器端配置文件

ssh   为客户端配置文件

本文出自 “模范生的学习博客” 博客,请务必保留此出处http://8802265.blog.51cto.com/8792265/1623147

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。