centos7⽤户,组及⽂件权限管理
centos7安装过程中如果没有创建⽤户的话,默认只有ROOT⽤户,这个⽤户是具有最⾼权限的帐户,可以做任何事情,但实际⽣产环境中我们⼀般不会使⽤这个⽤户,因为权限太⼤了,很危险。
所以在⽣产环境中就要创建⼀个或多个⽤户帐户,分配合适的权限来使⽤,⽤过windows的都知道,windows也是多⽤户,多任务的操作系统,每个⽤户也都有配置⽂件,⽤来定义和保存⽤户的环境变量,包括⽤户的家⽬录,桌⾯等的配置。那么linux同样也是多⽤户,多任务操作系统,同样可以创建多个⽤户,定义每个⽤户的所属组,家⽬录,登录的shell,邮件等等环境变量。
在centos7中和⽤户相关的配置⽂件主要包括以下这么⼏个
/etc/passwd
此⽂件保存着:⽤户名:密码:UID:GID:⽤户描述:主⽬录:登录shell
/etc/shadow
此⽂件记录的⾏与passwd中的⾏⼀⼀对应,保存着:⽤户名:密码:最后⼀次修改时间:最⼩时间间隔:最⼤时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group
此⽂件保存着:⽤户组名称:⽤户组密码:GID:⽤户列表(多个⽤户之间⽤,分隔)
/etc/gshadow
此⽂件与/etc/group⽂件中的⾏对应,保存着:⽤户组名:加密码后的密码:组管理员(多个⽤,分隔):组成员(多个⽤,分隔)
/etc/default/useradd
这个⽂件主要保存着创建账户时的默认值,使⽤useradd –D查看到的内容就是这个⽂件中的内容。
/etc/skel
这是个⼀个⽬录,相当于windows中公⽤的账号环境设置,⽐如,可以在这个⽬录⾥放⼀个⽂本⽂件,当创建⽤户时,在每个⽤户的家⽬录⾥都可以看到这个⽂件,当然也可以放置公共的配置⽂件,创建⽤户时就可以延⽤这个配置。
/etc/login.defs
这个是⽤来设置⽤户帐号限制的配置⽂件,⽐如密码的最⼤过期天数,长度等,但优先级⼩于/etc/shadow
/etc/profile
这个⽂件主要⽤来保存环境变量的,是全局的,由系统管理员管理
~/.bashrc .bash_history .bash_profile .bash_logout 等
这些⽂件主要⽤来定义⽤户的环境变量的。
⼀.⽤户管理
1.创建⽤户
命令⽤法:useradd 或 adduser [option] ⽤户名
useradd 或 adduser –D ⽤来查看创建账户时的默认值
useradd 或 adduser –D [option] ⽤来指定或修改创建账户时的默认值
⼀般可以修改默认值的参数有:-b –e –f –g –s)
我们⽤ useradd –help来看⼀下都有哪些参数
[root@ha1 ~]# useradd --help
Usage: useradd [options] LOGIN
useradd –D
useradd -D [options]
Options:
-b, --base-dir BASE_DIR 指定创建⽤户HOME⽬录的位置,⼀般结合 –D 使⽤
-c, --comment COMMENT 给新⽤户添加备注
-d, --home-dir HOME_DIR 指定⽤户家⽬录的⽂件名
-D, --defaults ⽤来查看创建账户时的默认值,也就是/etc/default/useradd⽂件中的内容
-e, --expiredate EXPIRE_DATE ⽤YYYY-MM-DD格式指定⼀个账户过期的⽇期
-
f, --inactive INACTIVE 指定这个账户密码过期后多少天这个账户被禁⽤;0表⽰密码⼀过期就被禁⽤,-1表⽰禁⽤这
个功能
-g, --gid GROUP 指定⽤户所属组的GID或组名
-G, --groups GROUPS 指定⽤户除所属组外的⼀个或多个附加组
-h, --help display this help message and exit
-k, --skel SKEL_DIR 必须和-m⼀起使⽤,将/etc/skel⽬录的内容复制到⽤户的HOME⽬录
-K, --key KEY=VALUE 主要⽤来改写/etc/login.defs⽂件中的默认值,如:-K UID_MIN=100 –K UID_MAX=499
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home 创建⽤户的HOME⽬录
-M, --no-create-home 不创建⽤户的HOME⽬录
-N, --no-user-group 不创建与⽤户同名的⽤户组
-o, --non-unique 仅与-u选项结合使⽤,允许创建⼀个⽤户ID不唯⼀的⽤户
-p, --password PASSWORD 为⽤户指定默认密码
-r, --system 创建系统账户
-R, --root CHROOT_DIR 允许⽤户根据配置⽂件来切换家⽬录
-s, --shell SHELL 指定⽤户登录的shell
-u, --uid UID 指定⽤户的UID
-U, --user-group 创建与⽤户同名的组
-Z, --selinux-user SEUSER 此选项不常⽤
举例说明:
创建名为jerry的⽤户,指定HOME⽬录:/home/h_jerry,指定UID 1022,不创建同名⽤户组,指定密码:jerry,指定shell:/bin/sh,指定账户过期时间:2017-08-09,允许密码过期后使⽤,添加⽤户描述:first user
[root@ha1 ~]# useradd -m -d /home/h_jerry -u 1022 -N -p jerry -s /bin/sh -e 2017-08-09 -f -1 -c "first user" jerry
⽤户创建完成没报错说明命令成功执⾏,那就⼀步⼀步来验证⼀下:
验证⽤户的UID
[root@ha1 ~]# id jerry
uid=1022(jerry) gid=100(users) groups=100(users)
看到⽤户ID 1022没错是我们指定的数字,由于没有创建指定的同名组,所以就⽤/etc/default/useradd中的默认值的组ID100,默认加⼊到users组中,都有哪些默认值呢,我们来看⼀下/etc/default/useradd这个⽂件
[root@ha1 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
看下/etc/passwd⽂件对应的jerry⾏的信息
[root@ha1 ~]# cat /etc/passwd |grep jerry
jerry:x:1022:100:first user:/home/h_jerry:/bin/sh
此⽂件由7段冒号隔开的字段
第⼀字段 jerry表是⽤户名
第⼆字段 X表⽰加密码后的密码
第三字段 1022表⽰UID
第四字段 100表⽰组ID
第五字段 first user表⽰描述信息
第六字段 /home/h_jerry表⽰家⽬录
第七字段 /bin/sh表⽰登录的sehll
再来看⼀下/etc/shadow⽂件中的内容
[root@ha1 ~]# cat /etc/shadow |grep jerry
jerry:jerry:17386:0:99999:7::17387:
/
etc/shadow⽂件由9个字段组成,⽤:分隔
第⼀字段 jerry:表⽰⽤户名
第⼆字段 jerry:表⽰密码,这⾥看到是明⽂的,并没有被加密码,但是passwd jerry来修改密码后就会是加密的。
第三字段 17386:表⽰上次修改密码的时间,这个时间是从1970年1⽉1号到最近⼀次修改密码的时间间隔天数
第四字段 0:表⽰2次修改密码间隔的天数,0表⽰禁⽤此功能
第五字段 99999:表⽰2次修改密码间隔最多的天数,也有默认值,是通过/etc/login.defs中PASS_MAX_DAYS定义
第六字段 7:表⽰提前7天警告⽤户密码过期,也有默认值,是通过/etc/login.defs中PASS_WARN_AGE定义
第七字段在密码过期之后多少天禁⽤此⽤户,也就是过期多少天后系统禁⽤此⽤户,不能登录,不会提⽰过期,完全禁⽤,
空:表⽰密码过期后账号仍然可⽤(-f –1)
第⼋字段 17387:⽤户过期⽇期(从19700101开始的天数)和创建⽤户指定过期⽇期正好相符(-e 2017-08-09)
第九字段保留字段留空
看⼀下⽤户的HOME⽬录
[root@ha1 ~]# ll /home
total 0
drwx------. 2 jerry users 62 Aug 8 21:37 h_jerry
[root@ha1 ~]# ll -a /home/h_jerry/
total 16
drwx------. 2 jerry users 83 Aug 9 18:45 .
drwxr-xr-x. 4 root root 33 Aug 9 18:39 ..
-rw-------. 1 jerry users 11 Aug 9 18:45 .bash_history
-rw-r--r--. 1 jerry users 18 Aug 3 2016 .bash_logout
-rw-r--r--. 1 jerry users 193 Aug 3 2016 .bash_profile
-rw-r--r--. 1 jerry users 231 Aug 3 2016 .bashrc
OK,到这⾥⽤户创建已经成功,简单梳理⼀下创建⽤户时系统做了哪些事:
如果创建⽤户不带参数,系统会根据默认值(/etc/default/useradd,/etc/login.defs)创建⽤户及同名⽤户组,并在HOME⽬录⾥创建同名家⽬录,默认的登录shell为/bin/bash。
如果创建⽤户时带了参数,那么系统会根据参数来创建指定⽤户信息。
⽤户创建完成后,/etc/passwd,/etc/shadow这2个⽂件都会有相应的⽤户信息。
在⽤户家⽬录⾥都会产⽣.bash_history .bash_logou .bash_profile .bashrc4个隐藏⽂件。
开篇提到了/etc/skel这个⽬录,到底是⼲什么⽤的呢,试⼀下就知道了,在这个⽬录⾥创建⼀个a.txt的⽂件,接着再创建⼀个tcl的新⽤户,再看看⽤户的家⽬录。
[root@ha1 ~]# vi /etc/
[root@ha1 ~]# useradd tcl
[root@ha1 ~]# ll /home/tcl/
total 4
-rw-r--r--. 1 tcl tcl 28 Aug 9 18:
看到了吧,在/etc/skel⽬录⾥的⽂件被复制到了新创建的⽤户的家⽬录⾥,注意,已经创建好的⽤户家⽬录⾥是没有的,只对新创建的⽤户有效。
2.为⽤户设置密码
使⽤passwd ⽤户名即可修改相应⽤户的密码
[root@ha1 ~]# passwd jerry
Changing password for user jerry.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@ha1 ~]# echo "jerry" | passwd --stdin jerry
Changing password for user jerry.
linux创建新用户和密码passwd: all authentication tokens updated successfully.
3.删除⽤户
userdel 选项⽤户名
userdel –r ⽤户名删除⽤户及家⽬录
[root@ha1 ~]# userdel -r tcl
[root@ha1 ~]# ll /home
total 0
drwx------. 2 jerry users 83 Aug 9 18:45 h_jerry
drwx------. 2 test test 83 Aug 9 18:45 test
4.修改⽤户
usermod 选项⽤户名
选项参数和useradd命令参数⼤致相同
-d --home HOME_DIR 指定新的家⽬录
-a --append 将⽤户追加到附加组中⽽不移出其它组
-l --login NEW_LOGIN 指定新的⽤户名
-L --lock 锁定⽤户
-m --move-home 和-d选项结合使⽤,移动家⽬录中的内容到新的位置
举例说明:
将jerry⽤户改名为natasha,移动家⽬录的内容到/home/natasha,指定新的UID为1010,登录shell改为/bin/bash,并锁定⽤户[root@ha1 ~]# usermod -l natasha -d /home/natasha -m -u 1010 -s /bin/bash jerry
[root@ha1 ~]# ll /home
total 0
drwx------. 2 natasha users 83 Aug 9 18:45 natasha
drwx------. 2 test test 83 Aug 9 18:45 test
[root@ha1 ~]# id natasha
uid=1010(natasha) gid=100(users) groups=100(users)
[root@ha1 ~]# cat /etc/passwd |grep natasha
natasha:x:1010:100:first user:/home/natasha:/bin/bash
⼆.⽤户组管理
1.创建组
groupadd 选项组名
选项
-f --force 强制创建组即使组已存在,如果GID已存在将取消-g选项
-g --gid GID 指定组GID号
举例说明:
创建⼀个名为natasha的组,并将⽤户natasha和test分别加⼊natasha和test组中
[root@ha1 ~]# groupadd -g 1010 natasha
[root@ha1 ~]# usermod -a -G test test
[root@ha1 ~]# cat /etc/group |grep -E "natasha|test"
test:x:1023:test
natasha:x:1010:test,natasha
[root@ha1 ~]# usermod -a -G test natasha
[root@ha1 ~]# cat /etc/group |grep -E "natasha|test"
test:x:1023:test,natasha
natasha:x:1010:test,natasha
2.删除组
groupdel 组名
3.修改组
groupmod 选项组名
选项
-
g --gid GID 改变组的ID号
-n --new-name 改变组名
⽤法和usermod类似
总结⼀下,创建组后会在/etc/group,/etc/gshadow⽂件中产⽣相应的组信息
/etc/group⽂件格式说明:分为4个字段,⽤冒号隔开
natasha:x:1010:test,natasha
第⼀字段:表⽰组名
第⼆字段:表⽰组密码,存放在/etc/gshadow⽂件中
第三字段:表⽰组ID号
第四字段:表⽰组成员,多个组成员⽤逗号隔开
/etc/gshadow⽂件格式说明:分为4个字段,⽤冒号隔开
natasha:!::test,natasha
第⼀字段:组名
第⼆字段:加密码后的密码
第三字段:组管理员(多个⽤,分隔)
第四字段:组成员(多个⽤,分隔)
三.⽂件,⽬录权限管理
在linux中设置⽂件权限⾮常重要,也是最基本的。linux⽂件的权限分为读(r-4)写(w-2)执⾏(x-1),和windows⼀样设置权限需要针对⽤户,⽤户所属的组,还有其它⽤户。只有设置了正确的权限,相应的⽤户才能根据权限执⾏相应的操作,很多时候我们配置WEB服务,FTP服务等都需要对相应的⽂件或⽂件夹赋与相应的权限才能正常跑起来,有时遇到问题通过查看错误⽇志会发现很多情况下是由于权限不当引起的。
⽂件权限分⼀般权限和特殊权限
⼀般权限主要指的是:⽂件所有者的权限,所属组的权限,其它⽤户权限
特殊权限主要指的是:权限中带s或S(SUID,SGID),t或T标志位
和⽂件权限有关的⼯具命令
ls –l 查看⽂件或⽬录的权限
umask 查看或设置权限遮罩(即实际权限=最⼤权限-遮罩值)
chmod 改变⽂件或⽬录的权限
chown 更改⽂件或⽬录的所有者
chgrp 更改⽂件或⽬录的所属组
getfacl 获取⽂件或⽬录权限访问控制列表
setfacl 设置⽂件或⽬录权限访问控制列表
先来看⼀下⽂件权限的查看⽅式,使⽤ll命令就可以查看长格式的⽂件权限等信息
[root@ha1 test]# ll
-
rw-r--r--. 1 root root 67 Mar 29 20:07 README.md
drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
[root@ha1 test]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
权限有3段组成,rwxrwxrwx代表最⾼权限,修改权限时也可以⽤777表⽰,-表⽰没有此项权限,本该出现x的位置出现s表⽰拥有SUID权限。
SUID对应4,SGID对应2,SBIT对应1
SUID只对⼆进制程序有效,执⾏者对于程序需要有X权限,在程序运⾏过程中,执⾏者(普通⽤户)将临时拥有程序所有者的权限
SGID对于⽂件来说只对⼆进制程序有效,普通⽤户将会临时拥有所属组的权限,对于⽬录来说,⽤户对此⽬录有RX权限可以进⼊⽬录,⽤户进⼊⽬录后,有效⽤户组会变成该⽬录的⽤户组,若⽤户在此⽬录有w权限,则⽤户创建的⽂件⽤户组与该⽬录⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论