管理用户和组账户,passwd字段意义

来源:互联网 发布:美国国籍 知乎 编辑:程序博客网 时间:2024/05/18 18:21

几个重要文件 (熟记!)

  • /etc/passwd 用来存放用户帐号信息 passwd-
  • /etc/shadow 用来存放密码信息 shadow-
  • /etc/group 存放组信息的 group-
  • /etc/login.defs 存放新建用户的时候的一些默认规则(配置文件,相当于一个政策文件) default 默认、缺省
  • /etc/skel 存放新建用户的时候的一些样板文件的

diff 文件差异对比命令

diff—-》-uNr

  • -u:统一的格式显示差异

  • -N:2个目录进行对比的时候,如果有不存在的文件,diff就会使用一个空文件和对方存在的文件进行一行一行的对比,生成补丁 。

  • -r:递归对比,因为文件夹下面还有文件,一级一级的对比,将所有的文件都对比一次。

PS:

  • 一个用户可以属于多个组—》韦小宝属于朝廷、天地会、神龙教、五台山;
  • 一个组内可以有多个用户 —》武当派–》武当7侠
  • 每个账户有一个唯一的UID (user identifier)–》身份证
  • 每个组也有一个唯一的GID (group identifier) –》组织代码
  • 多个账户可以属于同一个组

问:到底是用户先存在还是组先存在?
答:先有组再有用户 !

观察系统日志:

1.在一个终端里:

# tailf   /var/log/secure 查看文件末尾的信息 (tailf=tail -f)Dec 17 19:18:39 localhost useradd[8002]: new group: name=chenjialuo, GID=508Dec 17 19:18:39 localhost useradd[8002]: new user: name=chenjialuo, UID=508,GID=508, home=/home/chenjialuo, shell=/bin/bash

ctrl+c 强制终止退出
2.再开启另外一个终端:

# useradd   chenjialuo
  • 新建用户的时候如果不指定组,会自动新建一个与用户名同名的组 ;
  • 默认情况下普通用户的家目录在/home目录下 ;
  • root用户的家目录在/root 。

useradd 命令

  • -g 指定用户属于哪个组
# useradd -g chaoting  weixiaobao   指定用户属于那个组,组要已建立。

id 命令

# id weixiaobao  查看weixiaobao的用户信息uid=509(weixiaobao) gid=509(chaoting) groups=509(chaoting)

是不是所有的组,都需要新建?
答:并不是。系统里的内置组(root bin 等) 就不需要。
/etc/group

# diff /etc/passwd /etc/passwd-55d54< fengdeyong:x:808:808::/home/fengdeyong:/bin/bash
  1. 新建用户的时候,会把这个用户之前新建的其他用户的信息保存到passwd-和shadow-文件里,但是,最新新建的用户不写到passwd-和shadow-文件里。
  2. 在系统里真正识别用户的是看用户的UID和GID。
# useradd  chenzhinan新建用户的时候没有指定属于那个初始组,系统会自动建立一个和用户名同名的组。并且将这个用户加入到同名组。# id chenzhinanuid=505(chenzhinan) gid=505(chenzhinan) 组=505(chenzhinan)

useradd 添加注释信息 -c

# useradd zhangwuji -c "mingjiao  zhangmen shuaige"  添加用户zhangwuji,并且添加注释信息

/etc/passwd文件详解(☆☆☆☆☆)

# cat /etc/passwdzhangwuji:x:520:521:mingjiao zhangmen shuaige:/home/zhangwuji:/bin/bash
  • 字段1:用户帐号的名称;
  • 字段2:用户密码字串或者密码占位符“x”;
  • 字段3:用户帐号—》UID号;
  • 字段4:用户所属基本组帐号—》GID号;
  • 字段5:用户注释说明;
  • 字段6:宿主目录(家目录);
  • 字段7:登录Shell信息。
# echo  $SHELL  查看系统里默认的shell/bin/bash# cat /etc/shells  查看系统里其他的shell/bin/sh/bin/bash/sbin/nologin   如果哪个用户的shell是此shell,那个用户是不能登录系统的/bin/dash/bin/tcsh/bin/csh# sh  --》使用sh 这个shellsh-4.1#sh-4.1# exitexit

用户类型

  • ①超级用户:root,uid是0
  • ②程序用户:实现特定的功能(开启ftp服务、http服务、关机、mysql服务等),但是一般不能登录系统。uid在1-499之间。程序用户体现价值所在:启动服务和访问服务 。
  • ③普通用户:使用useradd命令新建的用户,一般uid从500开始,每新建一个用户,uid会自动加1 。

挂载系统光盘安装软件

1.检查系统的版本

# cat /etc/issueRed Hat Enterprise Linux Server release 6.5 (Santiago)Kernel \r on an \m

2.将对应系统的镜像文件放入虚拟机的光驱里
3.挂载镜像文件到/mnt

# mount  /dev/cdrom  /mntmount: block device /dev/sr0 is write-protected, mounting read-only# ll /dev/cdromlrwxrwxrwx 1 root root 3 Dec 16 00:08 /dev/cdrom -> sr0

4.进入/mnt挂载点目录

# cd /mnt# cd Packages/# rpm -ivh ftp-0.17-54.el6.x86_64.rpm# rpm -ivh lftp-4.0.9-1.el6.x86_64.rpm# rpm -ivh tree-1.5.3-2.el6.x86_64.rpmwarning: tree-1.5.3-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEYPreparing...                ########################################### [100%]   1:tree                   ########################################### [100%]rpm 是安装软件的命令-ivh 安装选项    installftp-0.17-54.el6.x86_64.rpm  需要安装的软件包的名字

例子

shell是/sbin/nologin 的用户是不能登录系统的# cat /etc/passwd|grep yyyyyy:x:518:519::/home/yyy:/sbin/nologin

PS:
正常能登录系统的用户需要设置密码,并且shell不是/sbin/nologin /sbin/shutdown 应该推荐的shell为/bin/bash

ssh远程和su两种方式切换用户的区别

①远程ssh方式登录系统,需要输入用户的密码。

# ssh xiaoniu@127.0.0.1

使用xiaoniu这个用户登录本机127.0.0.1代表本地回环接口ip
xiaoniu@127.0.0.1’s passwo$exit 退出登录置密码的用户也是不能登录系统的
# su - xiaoniu
本地直接切换用户登录系统,不需要密码,因为你是从管理员切换到xiaoniu的

$ ls$ exitlogout

开启一个进程会打开一个端口号,一直监听这个端口号的进程,就叫守护进程

查看端口

# lsof -i :80  查看80端口被那个程序占用(apache用户启动httpd进程)

/etc/shadow 用来存放密码信息(☆☆☆☆☆)

  • 字段1:用户帐号的名称 *
  • 字段2:加密的密码字串信息 *
  • 字段3:上次修改密码的时间 以1970-1-1基准日期;
  • 字段4:密码的最短有效天数,默认值为0;
  • 字段5:密码的最长有效天数,默认值为99999;
  • 字段6:提前多少天警告用户口令将过期,默认值为7;
  • 字段7:在密码过期之后多少天禁用此用户;
  • 字段8:帐号失效时间,默认值为空;
  • 字段9:保留字段(未使用)
# tail -2 /etc/shadowzhangwuji:!!:15843:0:99999:7:::xuzhu:!!:15843:0:99999:7:::!!说明zhangwujixuzhu没有设置密码* 也是说明没有设置密码如果密码字段前加入!! 就是禁用此用户。禁用的用户是不能登录系统的。但是可以使用root用户su 方式切换过去。

怎么查看用户xiaoniu所属的组??

答:

①cat /etc/passwd |grep xiaoniu②id  xiaoniuuid=508(aochuanfei) gid=508(shaolin) 组=508(shaolin)

组:

主要组(初始组)
次要组(附属组)
一个用户可以属于多个组
用户的主要组的名称和GID相关

# groupadd  shaolin  新建组shaolin# groupadd  futoubang 新建组futoubang# useradd -g shaolin  -G futoubang aochuanfei--》新建用户aochuanfei  (-g)指定初始组为shaolin  (-G)附属组为futoubang

/etc/gshadow (存放组密码的,很少使用)


/etc/login.defs 配置文件(相当于一个政策文件)

对账户初始的属性设置
设置普通用户的UID和GID范围等

uid范围默认500-60000,除非指定99999,否则超不过默认最高60000;gid范围同uid

扩展知识:

用户量特别大的时候?多台linux服务器集中认证,用户可以在任何台机器上登录?
答:集中认证—》Ldap技术(现有的技术,开源、非常成熟的解决方案)–》采用数据库存储用户名和密码。


/etc/login.defs 文件详解

# cat /etc/login.defs |grep -v ^#|grep -v ^$MAIL_DIR    /var/spool/mail  --》用户的邮箱目录,邮箱名字与用户名同名PASS_MAX_DAYS   99999    --》/etc/shadow文件里的内容已经在这里定义了PASS_MIN_DAYS   0PASS_MIN_LEN    5PASS_WARN_AGE   7UID_MIN  500    --》/etc/passwd文件UID已经安排了范围UID_MAX 60000GID_MIN  500GID_MAX 60000CREATE_HOME yes  --》默认情况下给用户新建家目录---》/homeUMASK           077USERGROUPS_ENAB yes    --》删除组的时候,要求组里没有用户存在ENCRYPT_METHOD SHA512   --》采用SHA512这种加密算法进行密码的加密
# cd /var/spool/mail/   邮箱目录

/etc/skel/*(样板文件和目录) (解决误删除家目录)

作用:存放用户登录系统需要的最基本的一些配置文件

  • .gnome2 -》是用来存放与图像界面相关程序文件信息的;
  • .bash_logout -》每次系统注销的时候,会执行这个文件里的命令。
  • .bashrc -》用户登录系统以后,每次打开终端都会执行这个文件里的命令(run command);
  • .bash_profile -》用户每次登录时执行。

.bashrc文件内容:
alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
alias c=clear

#定义别名,系统重新启动后,照样可以使用,因为root用户登录系统的时候会执行这个脚本文件里的命令# Source global definitionsif [ -f /etc/bashrc ]; then     --》判断/etc/bashrc文件是否存在 . /etc/bashrc                    --》执行/etc/bashrc这个脚本文件fi# User specific environment and startup programs
PATH=$PATH:$HOME/bin   #定义PATH变量export PATH    #输出PATH为全局变量,所有的程序都可以使用
.emacs    是emacs文本编辑器的一个配置文件(gedit、emacs、vim、vi),打开emacs编辑器的时候会加载此文件里的配置[root@localhost skel]# vim /root/.vimrc[root@localhost skel]# cat /root/.vimrc   vim编辑器每次打开的时候,都会运行这个文件里的配置set nuset  cursorline[root@localhost skel]#

TTY(终端类型)

TTY (terminal type) 银行 公务员 (正式 临时工)
每次新建用户的时候,都会从/etc/skel目录下复制全部文件到用户的家目录下

# useradd  madehua# cd /home/madehua/# ls -a.   .bash_logout   .bashrc  .mozilla..  .bash_profile  .gnome2

误删除家目录文件后。。。

删除家目录下的所有配置文件# cd /home/madehua/# ls -a.   .bash_logout   .bashrc  .mozilla..  .bash_profile  .gnome2# rm -rf .*  删除rm: cannot remove directory: `.'rm: cannot remove directory: `..'# su - madehua  切换用户登录系统-bash-4.1$    就是没有执行.bashrc .bash_profile脚本导致的-bash-4.1$-bash-4.1$# ssh madehua@10.0.0.253 远程登录madehua@10.0.0.253's password:-bash-4.1$ pwd/home/madehua   进入家目录了,没有执行用户配置文件,没有加载相关的环境变量-bash-4.1$    临时分配的shell

history 命令

查看最近1000条使用过的命令。

  • history 命令只是查看当前用户的历史操作命令。
  • .bash_history
    用来存放历史命令的,上一次注销前在系统里使用的命令,可以通过这个文件查看别的用户登录系统时,使用过的命令。只要它一注销linux,系统就会把用户使用过的命令自动存到它的家目录下的 .bash_history。

为什么是只能存1000条?

/etc/profile  --->HISTSIZE=1000          定义了系统里很多的环境变量

history -c 清除历史命令

常用在 .bash_logout 文件中添加
打扫行踪,不让人家知道你使用过那些命令

  • history -c
  • rm -rf /root/.bash_history
  • 在/root/.bash_logout 文件里添加 history -c
[baigujing@chinaitsoft ~]$ cat .bash_logout# ~/.bash_logoutrm -rf ~/.bash_historyhistory -c

解决误删除方法

[root@teacher madehua]# cp /etc/skel/.bash* ./ 拷贝模板文件到家目录下[root@teacher madehua]# ls -a.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc[root@teacher madehua]# su - madehua[madehua@teacher ~]$   显示正常的提示符号了

useradd命令

格式:useradd [选项]. .. 用户名
常用命令选项

  • -u:指定 UID 标记号
  • -d:指定宿主目录,缺省为 /home/用户名
  • -e:指定帐号失效时间
  • -g:指定用户的基本组名(或UID号)(初始组) –》 主要组
  • -G:指定用户的附加组名(或GID号) —》次要组
  • -M:不为用户建立并初始化宿主目录(家目录)
  • -s:指定用户的登录Shell
  • -m, –create-home 创建家目录
  • -c, –comment COMMENT 用户注释信息
  • -r 新建一个系统用户 (uid 1-499) —》程序用户 —》不建家目录 新建的系统用户和-M选项建立的用户都没有家目录

备份文件:
/etc/passwd-
/etc/shadow-
/etc/group-

练习:手动新建用户

1.修改/etc/passwd

[root@teacher ~]# tail -1 /etc/passwdzhugeliang:x:888:888:liubei junshi:/xiangyang/liongzhong:/bin/bash[root@teacher ~]#

2.修改/etc/shadow

[root@teacher ~]# vim /etc/shadow[root@teacher ~]# tail -1 /etc/shadow   #密码为空zhugeliang::15849:0:99999:7:::[root@teacher ~]#

3.修改/etc/group

[root@teacher ~]# vim /etc/group[root@teacher ~]# tail -1 !$     !$代表上一次的路径参数tail -1 /etc/group   #注意和passwd文件里gid一致zhugeliang:x:888:

4.新建家目录

 [root@teacher ~]# mkdir /xiangyang/liongzhong -p

5.从/etc/skel目录下复制配置文件

[root@teacher liongzhong]# cp /etc/skel/.bash* ./[root@teacher liongzhong]# ls -a.  ..  .bash_logout  .bash_profile  .bashrc

6.验证:

[root@teacher liongzhong]# su - zhugeliang[zhugeliang@teacher ~]$ pwd/xiangyang/liongzhong[zhugeliang@teacher ~]$ id zhugelianguid=888(zhugeliang) gid=888(zhugeliang) groups=888(zhugeliang)

passwd命令

格式:passwd [选项]… 用户名
常用命令选项

  • -d:清空用户的密码,使之无需密码即可登录delete
  • -l:锁定用户帐号 lock
  • -S:查看用户帐号的状态(是否被锁定) status
  • -u:解锁用户帐号unlock
  • –stdin:接收标准输入作为密码

root用户可以修改所有用户密码,不要求密码复杂性。
普通用户只能改自己的密码,要求密码复杂性。
不接用户名,是给自己设置密码。

一个人有多重身份的时候:

  • newgrp 改变有效组(主要组)。用户必须是要改变组的成员
  • gpasswd
    • -a 给用户添加一个附属组·-
    • -d 给用户移除附属组
    • -M 批量给用户添加到附属组

selinux –》保护系统安全的机制

getenforce  查看linux的状态①setenforce 0  临时关闭selinux的策略②SELINUX=disabledvim /etc/sysconfig/selinux  (永久生效,需要重启系统才能永久生效)

userdel命令

格式:userdel [-r] 用户名

  • -r 选项,表示连用户的宿主目录和邮箱一并删除

usermod命令

格式:usermod [选项]… 用户名
常用命令选项

  • -l:更改用户帐号的登录名称
  • -L:锁定用户账户
  • -U:解锁用户账户
  • -u、-d、-e、-g、-G、-s(这些选项与useradd命令中的含义相同)

groupmod :
修改组的信息,其实可以直接去修改/etc/group和/etc/passwd文件

[root@teacher home]# groupadd -g 999 zhugeliang123[root@teacher home]# usermod  -u 999 -g 999 zhugeliang[root@teacher home]# id zhugelianguid=999(zhugeliang) gid=999(zhugeliang123) groups=999(zhugeliang123)[root@teacher home]#
[root@teacher home]# groupdel gaibang  删除组的时候,组内不能有用户groupdel: cannot remove the primary group of user 'zhouxingchi'

who命令

[root@teacher vnc]# whoroot     tty3         2013-05-24 20:59root     tty1         2013-05-24 08:29 (:0)root     pts/0        2013-05-24 08:29 (:0.0)root     pts/1        2013-05-24 08:29 (:3.0)root     pts/2        2013-05-24 09:39 (:3.0)root     pts/4        2013-05-24 20:59 (:3.0)
  • tty3 tty1是登录的终端号 (ctrl+alt+F1-F6) 就是tty1-tty6
  • pts/1 pts/2 是在图形界面打开的终端
  • (:0) 当前图形界面下
  • (:3) 在3号桌面图形界面下

w命令

查看当前系统有多少用户登录,并且正在使用的命令。

$ w 21:04:56 up 12:38,     7 users,   load average: 0.07, 0.03, 0.00当前的时间  机器开机多长时间 登录用户数   cpu的平均负载  1分钟  5分钟  15分钟USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty3     -                20:59    4:57   0.00s  0.00s -bashroot     tty1     :0               08:29    4:38m  1:41   1:41  /usr/bin/Xorg :0 -root     pts/0    :0.0             08:29   12:35m 30:47   0.00s bashroot     pts/1    :3.0             08:29    0.00s 51:01   0.00s ssh lirong@10.0.0.root     pts/2    :3.0             09:39    1:06m  0.00s  0.00s bashroot     pts/4    :3.0             20:59    5:27   0.00s  0.00s bashlirong   pts/6    10.0.0.253    21:04    0.00s  0.00s  0.00s w    登录时间                      登录的用户在使用什么命令        
  • :0 说明是本机连接0号桌面,默认情况下进入图形界面,就是0号桌面
  • :3 说明是本机连接的3号桌面
  • 10.0.0.253 从远程ip为10.0.0.253的机器连接到本机

查看系统开机多久: w、uptime、top

手工给用户设置密码:

[root@teacher lianxi]# cat aa.txt 编辑一个文件,里面的语法是username:passwordsxjy:123     #sxjy是用户名   123是密码[root@teacher lianxi]#[root@teacher lianxi]# chpasswd <aa.txt  将aa.txt里规划的密码写入到/etc/passwd文件里的密码字段[root@teacher lianxi]# pwconv  作用将/etc/passwd文件里的密码字段转换写到/etc/shadow里,形成相应用户的密码信息