用户:useradd,userdel usermod passwd
用户组:groupadd groupdel groupmod gpasswd(修改用户组的用户)
查询:groups id
只要记得关键词,其它需要用时直接man 查询就好啦
甚至只需要记得user和group,然后tab补全就行了
查询UID,GID 等用户信息
id spaceman(查询spaceman的UID,GID的信息,只有root有权限)
id(查询当前用户自己的UID,GID的信息)
简单添加用户: useradd spaceman (新增一个spaceman用户,并默认添加名称相同的用户组)
添加系统账号: useradd -r spaceman (添加一个spaceman的系统账号)
多参数添加:useradd -u 1500 -g Mars spaceman ( 新增一个用户spaceman并将其UID设置为1500,将它添加入用户组Mars中)
修改用户信息: usermod(一般添加用啥参数,修改就修改啥参数,或直接man usermod查)
删除用户: userdel -r spaceman(连用户的家目录一起删除)
给用户设置密码:passwd spaceman (root权限可以给其它用户设置密码)
给当前用户设置密码: passwd(没有加用户,就是给直自己当前的用户添加密码)
使用 standard input 建立用户的密码: echo "abc123 " | passwd --stdin spaceman (利用管道流,将“abc123 ”设置为spaeman的密码)
新增用户组:groupadd Mars(新增Mars这个用户组,默认给你GID,也可以加 -g 200 指定GID为200)
删除用户组:groupdel Mars (删除Mars这个用户组)
修改用户组的信息:groupmod -g 201 -n Moon Mars (将群组Mars改为Moon,并将GID改为201)
(提醒一下:关于用户和用户组的增加和删除都得root才有权限)
(查询用户的用户组:group spaceman)
用户视角:
用户组视角:
gpasswd -a spaceman Moon(将分组添加到spaceman的次要群组当中)
但是这个命令只有root和群组管理员有权限
那么如果给一个群组分配管理员呢?
(root权限) gpasswd -A spaceman Moon(让spaceman作为Moon的群组管理员)
当我们登录linux主机时,我们输入的是我们的账号,但其实linxu并不记住我们的账号名称,linux记住的只是ID。就是我们的UID
对于系统内的群组,虽然有群组名,但是linxu记住的也是ID,也就是GID。
关于用户账号名称与UID的对应在 /etc/passwd 文件中
关于用户组名称与GID的对应在 /etc/group文件当中
当我们用ls或ll命令去查询文件属性是,会发现文件属性后面有文件所属的用户名称和用户组名称。这是因为在要显示文件属性的需求时,系统会依据/etc/passwd 与/etc/group 的内容, 找到 UID / GID 对应的账号与组名再显示出来!(如下图的第一个dmtsai为用户名,第二个dmtsai为用户组名)
也就是说在文件系统中,记录的文件的属性都是用UID和GID来记录。
[root@study ~]# ll -d /home/dmtsai
drwx------. 17 dmtsai dmtsai 4096 Jul 17 19:51 /home/dmtsai
我们可以查看一下 /etc/passwd文件,如下所示
有我们自己创建的用户(如图一)也有一些系统提供的用户(如图二)
第一字段:为群组名
第二字段:为群组密码
第三字段:GID
第四字段:为群组支持的用户
如上图的Mars,spaceman和mr.chao都为其组员
上图的这些群组为什么没有支持组员,其实是因为这些用户组时某些账号的初始群组,而新版的linxu中,初始群组的用户群已经不会加入第四字段了。比如root这个账号的主要群组(初始数组)为root,所以root不会出现第四个字段中。
而上图的Mars不是初始群组,所以会显示。
那么什么是有效群组,什么是初始群组呢?
每个用户在etc/passwd里面第四栏有所谓的GID吧,那个GID就是所谓的初始群组。它是在我们创建用户时,默认给我们提供的,且群组名和用户名相同。
如果我的账号(mr.chao)同时支持mr.chao,wheel两个群组,因此,在读取/写入/执行文件时,针对群组部分,只要是 wheel 与 mr.chao 这两个群组拥有的功能,我mr.chao 这个使用者都能够拥有喔!但是这只是针对存在的文件而言,如果今天要新建一个新的文件或者新的目录,新文件的群组时mr.chao 还是wheel呢
这就要讲到有效群组的概念,这时候新建文件支持的群组是支持有效群组。
而有效群组可以用groups来查看,第一个就为有效群组
比如这里显示的第一个为wheel 就是有效群组
那么这时建立的文件,支持的群组就应该为wheel
很简单,就是使用newgrp
比如 newgrp mr.chao 就是将有效群组变为mr.chao,不过不能变一个用户原本没有支持的分组为有效分组
这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与 /etc/group 一模一样啊!是这样没错~== 不过,要注意的大概就是第二个字段吧~第二个字段是密码栏, 如果密码栏上面是『!』或空的时,表示该群组不具有群组管理员! ==至于第四个字段也就是支持的账号名称啰~ 这四个字段的意义为:
以系统管理员的角度来说,这个 gshadow 最大的功能就是建立群组管理员啦! 那么什么是群组管理员呢?由于系统上面的账号可能会很多,但是我们 root 可能平时太忙碌,所以当有使用者想要加入某些群组时, root 或许会没有空管理。此时如果能够建立群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中! 可以免去 root 的忙碌啦!不过,由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。
但是如果我们建立的是指定一个已经存在的群组作为使用者的初始群组,因为群组已经存
在,所以在 /etc/group 里面就不会主动的建立与账号同名的群组了!
而如果建立的是系统账号,因为系统账号主要是用来进行运作系统所需服务的权限设定, 所以系统账号默认都不会主动建立家目录的!
其实你会发现无论是我们增加用户,删除用户,或者是修改用户参数的本质其实就是去修改配置文件,也就是去修改/etc/passwd,/etc/shadow,/etc/group.
所以我们使用useradd 命令的本质就是在/etc/passwd中添加一行,不过我们刚刚也有看到,一行中有很多参数,那么我们使用useradd时 那些参数应该怎么填,是不是应该有一些默认参数,确实是有的,而这些默认参数在哪呢?就在 == /etc/default/useradd ==中
看到SKEL=/etc/skel:用户家目录参考基准目录
当我们创建一个非系统用户时,会同时创建一个家目录,而这个家目录的数据就是从/etc/skel复制过去.
(未来如果我想要让新增使用者时,该用户的环境变量 ~/.bashrc 就设定妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下,也可以建立 /etc/skel/www 这个目录,那么未来新增使用者后,在他的家目录下就会有 www 那个目录了!)
这就是我们使用usedadd时的默认参数,而我们使用passwd为用户添加密码时,本质也是在shadow增加一行,一行也有一些参数,而这些参数也是在一个文件中, 就是 == /etc/login.defs ==这个文件
我们也懂得了一些本质,就是useradd,passwd的本质都是在去**/etc/passwd** 和 /etc/shadow 中添加一行,而添加时的参数就是参考**/etc/default/useradd,/etc/login.defs** 这些文件,所以要改useradd,passwd时的默认参数时,就得去这些文件**/etc/default/useradd,/etc/login.defs** 改
chsn(change shell)
chsh -s /bin/shell 修改当前用户的shell为/bin/shell
chage
其实原理就是将密码中的失效时间啥改了,导致下一次登录必须修改!
如果不想让某个用户不可登入,就将它的shell改为/sbin/nologin
参考资料:《鸟哥的linux私房菜——基础篇》鸟哥