用户 和 组
特权用户:root uid 为0
系统用户:用来作为程序的所属用户1~999uid
普通用户:UID1000+
在登录的过程中,用户输入用户名,系统会在passwd和shadow文件中找到uid和密码,通过后登陆成功。
UID才是识别用户的唯一标识,位32位无符号整数,比如root用户,在系统中对于超级管理账号的定义就是UID为0 。虽然并没有明令禁止创建uid为0 的其他账号,但是会造成混乱的后果影响系统的安全性,最好不要这么做。
另外有一个特殊的用户“nobody”这是一个不能登陆的账户,在系统中存在,因为Apache等服务要用到这个账号进行操作,他本身并不是特权账户,权限低,安全性高。uid为99.
相关信息:
/etc/passwd:nobody:x:99:99:Nobody:/:/sbin/nologin
/etc/passwd:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
/etc/group:nobody:x:99:
/etc/group:nfsnobody:x:65534:
用户的组类似角色,都是用来管理用户权限的方法。组内的用户会继承组的权限,另外在创建文件的过程中,文件默认的属主是创建这个文件的用户,文件的属组是创建这个文件的用户的主要组。
比如:用户user1 的主要组是user2.
他创建出的文件信息: -rw-r–r-- user1 user2 … filename.txt
7个文件与用户相关:
/etc/passwd 用户文件
/etc/shadow 用户密码文件
/etc/group 用户组文件
/etc/gshadow 用户组密码文件
/etc//default/useradd 添加用户默认选项
/etc/skel/ 用户骨架目录
/etc/login.defs 密码套件配置
文件内容的详细说明:
passwd 文件中的一条 :
root : x : 0 : 0 : root : /root : /bin/bash
root:用户名
x:密码占位符,真正的密码存放在shadow文件中
0:用户ID
0:组ID
root:注释性描述如存放全名等等
/root:用户主目录(home目录)
/bin/bash:用户所使用的shell
- /bin/bash 可以正常使用的用户,可以使用资源
- /sbin/nologin 禁止登录的用户
This account is currently not available. 默认会提示这个
虽然不能登录,但是可以被调用而访问系统资源
/etc/nologin.txt
也可以新建文件写入自定义的不能登陆的提示的信息 - /bin/false 最严格的禁止登录选项,不能登录,也不会有任何提示
shadow文件中的一条 :
root:$6$YHs7VaeF4d/F58F.$.zo00Ms6cUBqCpjbnEkgSRxmCU/j5Kb9j5k79PW81JeoJaMWpMndc7I2jdYaIf399pVcRAVT/nsEaEY4MvyYM/::0:99999:7:::
root:组名
那一长串:被加密的口令,加密算法用的是MD5
第一个空:上一次修改密码的时间
0:两次修改密码之间最少的天数
99999:两次修改密码之间最多的天数
7:提前多少天提醒用户密码即将到期
第二个空:密码到期后多少天禁用密码,达到最大作废期限,到账号作废之前要等待的时间。
第三个空:账号过期的日期,为空则永不作废
第四个空:保留字段,目前为空。
group文件中的一条:
dba:x:1000:user1,user2
dba:组名
x:密码占位符。同样的,密码真正存放在gshadow文件。
1000:组的ID gid.
user1,user2:这是两个用户,user1和user2表示这个组里有2个用户。
**注:group文件显示的是附属组信息,用户的主要组为这个组的用户不在其中显示。栗子: 创建user1 用户 时会创建user1组,user1用户的主要组是user1,所以在group文件中user1 组后边没有user1 用户,而如果添加附加组的话,会显示在group文件的后边。 **
gshadow文件中的一条,但是这个文件基本不会用到。
dba:!::oracle
dba:组的名字
!:组的密码,这个是没设置密码,设置密码后显示的是加密后的。不过一般都不会设置组的密码。
空:组的管理者
oracle:这个组的成员
/etc/default/useradd
# useradd defaults file
GROUP=100 //如果创建用户时不指定组,就会默认在这个组中
HOME=/home //家目录
INACTIVE=-1 //密码失效时间
EXPIRE= //到期时间
SHELL=/bin/bash //默认shell
SKEL=/etc/skel //骨架目录
CREATE_MAIL_SPOOL=yes
/etc/skel/目录。这个目录下有3个隐藏文件,称为骨架,有这几个就有用户的环境,看名字就知道是环境设置的那个文件,logout里面是空的,只有在退出时才会执行。如果用户的家目录误删除,不能登陆和使用shell,可以把这几个东西拷贝到家目录下,就可以使用了。
[root@www 1106shell]# cd /etc/skel/
[root@www skel]# ls
[root@www skel]# ls -a
. .. .bash_logout .bash_profile .bashrc
创建用户时会在passwd,shadow,group,这3各文件中各创建一条记录。(如果不指定组之类的东西的话)**不光只创建用户还会创建一个和用户名字相同的组。**并且创建用户的名字也有规定,见下文相应指令后。
所以删除用户是最好使用指令删除,而不是直接修改passwd文件,那样不会删除另外文件中的记录,另外文件的记录就会变成垃圾记录。
另外在创建用户时会在本地发送一个邮件。存在mail目录中。
孤儿文件:所有用户都有用户、用户组,但是将用户和用户组删除后,文件依旧存在,这就是孤儿文件,比如home的用户文件,比如mail的文件。
那么为什么创建用户不指定这些时为什么会这么做呢?
这些都在/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
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
这些默认的内容自然也是可以修改的。
关于用户的几个命令
**groupadd name 选项 **
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
groupmod 选项 name
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
groupdel name
-h, --help display this help message and exit
-R, --root CHROOT_DIR directory to chroot into
useradd name 选项
注:设定用户名时有一些规定,长度不超过32字符,字符集为a-z_-0-9
首字符a-z_。
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-s:指定用户登入后所使用的shell;
-u:指定用户id。
usermod 选项 name
-c<备注>:修改用户帐号的备注文字
-d<登入目录>:修改用户登入时的目录
-e<有效期限>:修改帐号的有效期限
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号
-g<群组>:修改用户所属的群组
-G<群组>;修改用户所属的附加群组
-l<帐号名称>:修改用户帐号名称
-L:锁定用户密码,使密码无效, 这个锁定的原理实际上是在用户的shadow文件的密码前加一个!,这样密码就不匹配了,所以登录不进去。
-s:修改用户登入后所使用的shell
-u:修改用户ID
-U:解除密码锁定
userdel name
-h, --help 看帮助
-r, --remove 删除home文件mail spool文件
-R, --root CHROOT_DIR CHROOT_DIR chroot 到的目录
-Z, --selinux-user 删除关联的用户
passwd既是文件也是指令,作为指令时设置密码用
passwd 选项 name
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。
gpasswd 附加组
-a, --add USER 将用户添加到组
-d, --delete USER 删除组中用户
-h, --help 查看帮助
-Q, --root CHROOT_DIR 要chroot到的目录
-r, --delete-password 删除组的密码
-R, --restrict 将对组的访问限制为其成员
-M, --members USER,... 设置组成员列表
-A, --administrators ADMIN,...设置组的管理员列表
chage
-d, --lastday LAST_DAY 将上次密码更改日期设置为最后一天
-E, --expiredate EXPIRE_DATE 将帐户过期日期设置为过期日期
-h, --help 查看帮助
-I, --inactive INACTIVE 过期后将密码设置为不活动
-l, --list 显示帐户帐龄信息
-m, --mindays MIN_DAYS 设置密码前的最小天数
-M, --maxdays MAX_DAYS 设置密码前的最大日数
-R, --root CHROOT_DIR 要chroot到的目录
-W, --warndays WARN_DAYS 将过期警告天数设置为警告天数