Linux用户管理和组
GNU/Linux 通过用户和用户组实现访问控制----包括对文件访问、设备使用的控
GNU/Linux 系统中的每一个文件都有属一个用户(属主)和一个用户组(属组)。另外,还有三种类型的访问权限:读(read)、写(write)、运行(execute)。我们可以针对文件的属主、属组、而设置相应的访问权限。再次,我们可以通过 ls | stat命令查询文件属主、属组和权限
用户的分类
Linux用户三种角色
超级用户: root 拥有对系统的最高的管理权限 ID=0
普通用户:系统用户 UID:1-999(centos7版本) 1-499(centos6版本)
本地用户 UID:1000+ 500+
UID:即每个用户的身份标示,类似于每个人的身份证号码.
虚拟用户:伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache
下图是用户和组的关系:
一对一:一个用户可以存在一个组中; 一对多:一个用户可以存在多个组中
多对一:多个用户可以存在一个组中; 多对多:多个用户可以存在多个组中
用户命令
命令:useradd
useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的shell” 用户
-d: -d 用户主目录路径, 可以指定用户家目录
-M: 不创建用户的主目录
-g:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中的USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes 会用和用户名相同的名字创建群组,GID 等于 UID.
-G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组)
-s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成 /sbin/nologin 就可以禁止用户登录。
添加登录用户 例:添加一个名为harry的用户,并使用bash作为登录的shell [root@panda ~]# useradd harry [root@panda ~]# tail -1 /etc/passwd harry:x:1001:1001::/home/harry:/bin/bash 说明:此命令会自动创建harry组,并成为harry用户的默认主组,同时默认的登录shell是bash 用户帐户的全部信息被保存在/etc/passwd文件。这个文件以如下格式保存了每一个系统帐户的所有信息 (字段以“:”分割) harry:x:1001:1001::/home/harry:/bin/bash harry:用户名 x:密码占位符 1001:用户的UID,它都是用数字来表示的 1001:用户所属组的GID,它都是用数字来表示的 用户描述信息:对用户的功能或其它来进行一个简要的描述 /home/harry:用户主目录(shell提示符中“~”代表的那个) /bin/bash:用户登录系统后使用的shell #查看系统中,支持哪些shell
[root@xuegod63 ~]# cat /etc/shells #查看系统中,支持哪些shell /bin/sh /bin/bash /sbin/nologin /bin/csh
指定用户UID : -u 用户ID [root@xuegod63 ~]# useradd -u 1100 oracle [root@xuegod63 ~]# id oracle uid=1100(oracle) gid=1100(oracle) 组=1100(oracle) [root@xuegod63 ~]# tail -1 /etc/passwd oracle:x:1100:1100::/home/oracle:/bin/bash [root@xuegod63 ~]# ls /home/oracle/ -a . .. .bash_logout .bash_profile .bashrc .mozilla 6.2.4 指定用户主目录 [root@xuegod63 ~]# useradd -d /opt/mk1 mk1 [root@xuegod63 ~]# tail -1 /etc/passwd mk1:x:1102:1102::/opt/mk1:/bin/bash 6.2.5 指定用户的主组 例: [root@xuegod63 ~]# useradd xuegod [root@xuegod63 ~]# id xuegod uid=1103(xuegod) gid=1103(xuegod) 组=1103(xuegod) [root@xuegod63 ~]# useradd -g xuegod xuegod2 [root@xuegod63 ~]# id xuegod2 uid=1104(xuegod2) gid=1103(xuegod) 组=1103(xuegod) 6.2.6 指定用户的附属组 我们也可以把这个附属组称为补充组,用户可以有0个或多个附加组的成员 如果一个组有多个成员,我们是可以在/etc/group文件中最后一个字段看到的 [root@xuegod63 ~]# useradd -G xuegod,harry,root xuegod3 [root@xuegod63 ~]# id xuegod3 uid=1105(xuegod3) gid=1105(xuegod3) 组=1105(xuegod3),0(root),1001(harry),1103(xuegod) [root@xuegod63 ~]# vim /etc/group #在文件的最后 6.2.7 创建用户的另外一个命令 [root@xuegod63 ~]# adduser xuegod4 [root@xuegod63 ~]# id xuegod4 uid=1106(xuegod4) gid=1106(xuegod4) 组=1106(xuegod4) [root@xuegod63 ~]# which adduser /usr/sbin/adduser [root@xuegod63 ~]# ll /usr/sbin/adduser lrwxrwxrwx. 1 root root 7 9月 19 2017 /usr/sbin/adduser -> useradd 注: adduser是useradd的软链接 6.2.8 删除用户 usage: userdel [options] LOGIN
未查找到harry这个账号代表以及删除
选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录
[root@xuegod63 ~]# head -3 /etc/shadow root:$6$C88LCVx5ZjfBU7xv$cKcdyNeTFmOYTs9NbRZDTA4hGcbMXc/5hQEWZKCtNyLqlBagrjct.pMfs39iEaF1UbEvcOzWZHMDf9Q5KojXM1::0:99999:7::: 格式如下: name 登录名称,这个必须是系统中的有效账户名 password 已加密密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希 哈希算法:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256 查看帮助说明: man 5 passwd man 5 shadow man 5 group man 3 crypt lastchange 最近一次更改密码的日期,以距离1970/1/1的天数表示 min-age 不能更改密码的最少天数,最近更改过后几天才可以更改;如果为0表示“最短期限要求” maxage 密码过期时间,必须更改密码前的最多天数 warning 密码即将到期的警告期,以天数表示,0表示“不提供警告” inactive 宽限天数,密码到期后 expire 账号过期时间,以距离1970/1/1的天数计算 (千年虫) blank 预留字段
给用户添加密码:
[root@localhost ~]# passwd oracle 交互
![]()
不交互
[root@localhost ~]# egrep -v "^$|^#" /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 1000 #用户ID开始的数字
UID_MAX 60000 # 用户ID结束的数字
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000 #组ID结束的数字
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes #是否为用户建立home目录
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512 #shadow文件的加密算法
cat /etc/default/useradd
/etc/default/useradd 文件中的内容如下:
GROUP=100 #表示可以创建普通组 。 users组ID为100 。如果没有这一条,或者你把users这个组删除了,当你再创建用户时,将提示:useradd: group '100' does not exist
HOME=/home #哪个目录作为用户主目录存放目录。如果你不想让用户家目录在/home下,可以修改这个地方。
INACTIVE=-1 #是否启用帐号过期。passwd文件中第7栏。即:密码过期后是否会失效的设定值 。INACTIVE:无效。-1表示启用
EXPIRE= #帐号终止日期 shadow中第8栏。账号失效的日期 就是 shadow 内的第八字段,你可以直接设定账号在哪个日期后就直接失效,而不理会密码的问题。 通常不会设定此项目,但如果是付费的会员制系统,或许这个字段可以设定!
SHELL=/bin/bash #默认shell使用哪个
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否创建邮箱文件
修改用户信息
usermod 【参数】用户名 常用参数: -u UID -d 宿主目录 -g 起始组 #只能有一个 -G 附加组 #可以有多个 -s 登录shell -L 锁定
修改UID
[root@localhost ~]# id test uid=1001(test) gid=1001(test) 组=1001(test) [root@localhost ~]# usermod -u 1111 test [root@localhost ~]# id test uid=1111(test) gid=1001(test) 组=1001(test)
为什么我们创建的文件的权限是644呢?
我们创建文件的默认权限是怎么来的?
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字
文件默认权限=666 ,目录默认权限=777
我们一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
永久生效,编辑用户的配置文件vim .bash_profile
vim /etc/profile
如果用户id大于199 且用户组名和用户名一样那么umask值为002 否则为022
id -g 显示用户组ID ,id -gn显示组名。
临时生效: umask 权限补码
[root@xuegod63 ~]# umask 044
权限的算法:一般情况是:目录默认权限-umask 值
666-022=644
777-022=755
#这是一个好的记忆方法,但不严谨。
命令:chattr
参数: a 只能追加内容 ; i 不能被修改
+a: 只能追加内容 如: echo aaa >> hack.sh
+i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
注:immutable [ɪˈmju:təbl] 不可改变的 ; Append [əˈpend] 追加
-i :移除i参数。 -a :移除a参数