赞
踩
目录
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。但是我们都知道linux系统是一个多用户的操作系统,那么在系统当中的资源文件,就会被所有人看到。那么资源文件就变得不安全了,为了解决这个问题。我们可以设置资源文件归哪一个用户可以使用,也就有了用户的概念,另外还可以设置资源文件归哪个组里的成员使用。这样也就有了用户组的概念。当然除此之外,除了用户本身,以及用户组里的成员。其他成员统称为其他人。这样我们就可以针对资源文件在不同的角色中设置不同的权限。
用户 | 一个户口本中的每一个成员 |
用户组 | 户口本中的所有成员组成的组 |
其他人 | 除用户本人(户主)和用户组(户口本中的成员)外的成员都是其他人 |
每一个用户都可以拥有多个用户组,只能有一个组为主组,其他的组都是附加组。
每一个用户组都可以容纳多个用户。
在Linux系统中,每一个用户默认都对应了一个UID,而这个UID可以理解是用户的身份证号。
CentOS7.X系统中:
UID 0 | root |
UID 1-1000 | 系统预留,作为系统用户来使用 |
UID 1000 - 65535 | 自定义账户 (CentOS6.5系统是从500开始计算UID,例如Ubuntu系统是从1000开始。) |
用户信息 | /etc/passwd |
密码信息 | /etc/shadow |
用户组信息 | /etc/group |
passwd、shadows、group这三个文件不要随意的进行修改,如果想要进行文件内容的查看,建议大家copy出一份,对copy的文件进行修改。
或把文件copy出来之后,进行保存,再去修改原文件。这样做即便是写错了文件也可以通过单用户的方式将文件恢复。
语法:useradd [选项] {UserName}
选项:
-c comment | 指定一段注释性描述 |
-d 目录 | 指定用户主目录 |
-g 用户组 | 指定用户所属的主用户组。 |
-G 用户组,用户组 | 指定用户所属的附加组。 |
-s Shell程序 | 指定用户的登录Shell。有一个特殊的shell程序叫nologin,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户。 |
-u 用户号 | 指定用户的用户号 |
案例:
创建一个普通用户,使用默认值即可。
# bash
useradd tom
说明:该账户被创建完之后,会有哪些信息
UID,由于是当前系统的第一个账户,那么它的UID是500。
家目录(主目录),因为是默认创建,所以它的家目录所在位置是/home/tom
用户组,创建用户的同时,会为其创建一个同名的用户组,tom组
shell程序,默认会是bash
创建一个普通用户,其家目录是在/tedu/jerry,主组root,附加组tom,adm。
# bash
useradd -d /tedu/jerry -m -g root -G tom,adm jerry
执行用户的shell程序为/bin/sh,UID为80000
# bash
useradd -s /bin/sh -u 80000 test1
说明:虽然CentOS系统中默认的UID是65536个(0-65535),但是可以手动指定它的UID超出此范围。
测试再创建账户是UID会不会延续上案例的UID。
# bash
useradd test2
正常来应该按照上次创建用户的UID往后+1。但是80000已超过系统默认的范围,所以不会根据超出范围后UID进行+1延续。
创建伪用户:
# bash
useradd -s /sbin/nologin test3
语法:usermod [选项] {UserName}
选项:
-c comment | 指定一段注释性描述 |
-d | 目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录。 |
-g 用户组 | 指定用户所属的用户组。 |
-G 用户组,用户组 | 指定用户所属的附加组。如果想要在原有的基础上追加附加组,使用-aG的方式。 |
-s Shell文件 | 指定用户的登录Shell。有一个特殊的shell程序叫nologin,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户。 |
-u 用户号 | 指定用户的用户号 |
案例:
修改test账户的UID。
# bash
usermod -u 9000 test1
修改账户的附加组为test、test1:
# bash
usermod -G test,test1 jerry
为账户追加附加组件root、adm
# bash
usermod -aG root,adm jerry
将test5的伪用户状态修改为正常普通用户
# bash
usermod -s /bin/bash test5
说明:test5之前的shell程序是/sbin/nologin
语法:userdel [选项] {UserName}
选项:
-r | 删除账户的同时删除该账户的家目录 |
案例:
# bash
userdel zhangsan
说明:该命令执行完成之后,在home目录下依然保留了zhangsan的家目录。
userdel -r lisi
说明:该命令之后之后,home目录中的lisi目录会被一并删除,且不保留它的工作文件。
一般来说,公司中删除账户的操作比较少,就算删除账户时,一般也不用-r的选项,因为人虽然离职,但是有可能此人还会回来继续任职~
如果员工离职,完全没有必要删除账户,可以使账户无法登录即可,比如nologin,锁定账户,删除密码等手段都是可以防止资料泄漏。
注:
Windows和Linux系统(其他系统没测试),没有密码的账户都是不允许通过远程的方式进行访问的。
语法:passwd [选项] {UserName}
选项:
-l | 锁定账户 |
-u | 解锁账户 |
-d | 删除密码 |
passwd 可以不跟选项、用户名,默认是修改自己的帐号密码。
如果想要修改密码需要当前用户是根账户。
普通账户,只能修改自己的密码。
管理员修改他人的密码,不需要满足密码策略。
普通账户修改密码时,必须满足密码安全策略。as12AS!@
管理员修改他人密码:
passwd {UserName}
修改自己的密码
passwd
案例:
锁定zhangsan账户
# bash
passwd -l zhangsan
解锁zhangsan账户
# bash
passwd -u zhangsan
删除zhangsan账户密码
# bash
passwd -d zhangsan
案例中,锁定账户和删除账户密码都是可以达到不允许账户远程登录的效果。
su {UserName} | 表示切换用户之后,依然停留在当前目录 |
su - {UserName} | 表示切换用户之后,去到该用户的家目录 |
普通用户切换root时,书写格式不需要写成su - root,直接su即可。
案例:
当前位置,在/root下
# bash
su zhangsan
该命令执行过后,切换到zhangsan账户,但是路径依然停留在/root目录下
# bash
su - zhangsan
该命令执行过后,切换到zhangsan账户,同时会去到zhangsan账户的家目录下。
小总结,su与账户名之间加不加"-"区别在于路径。
语法:groupadd [选项] {groupName}
选项:
-g GID | 指定新用户组的GID |
-o | 通常与-g同时使用,使新用户组可以与系统已有的组ID相同。 |
系统底层会将两个GID相同用户组识别为同一个用户组,这样做的目的是让两个用户组的权限相同。识别规则,后者遵循前者。
案例:
新建一个用户组
#groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号,在当前已有的最大组标识号的基础上加1
# groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
创建一个普通的用户组,并将该组添加为tom账户的附加组
# bash
usermod -aG group1 tom
创建一个与上面案例GID相同的用户组
# bash
groupadd -g 1000 -o group2
语法:groupmod [选项] {groupName}
选项:
-g GID | 指定新用户组的GID |
-o | 通常与-g同时使用,使新用户组可以与系统已有的组ID系统。 |
-n | 用来修改组ID group -n newGroupName oldGroupName |
案例:
将组group2的组标识号修改为102。
# groupmod -g 102 group2
新建一个group3,并将其组名修改成big1904
# bash
groupadd group3
groupmod -n big1902 group3
语法:groupdel {groupName}
案例:
# bash
groupdel big1902
注:
如果删除的用户组,已经被用户追加为附加组,对应的所有用户的该附加组会被撤销掉。
如果被删除的用户组,已经被用户指定为主组,则该用户组无法被删除。(可以理解为像Windows中文件被占用时不能被删除。)
某用户属于多个用户组时,想要访问其他用户组中的内容时,必须切换用户组才行。
newgrp {GroupName}
前提是该账户确实是拥有多个用户组。
root:x:0:0:root:/root:/bin/bash
passwd这个文件的每行内容由冒号隔开,分为7段
第一段 | 账户名 | 不要使用:. - + / |
第二段 | 密码 | passwd这个文件是所有人都可查看,所以密码虽然是加密的,但是依然不安全。 |
第三段 | UID | 系统用来标识内部的账户,通常UID和账户是对应的关系。如果出现了两个不同账户名但是却使用的相同的UID,那么系统就将它们两个识别为同一个账户,只不过它们拥有不同的账户名、shell程序、家目录。后者遵循前者。 |
第四段 | GID | 此处记录的是该账户的主组信息。 |
第五段 | 注释描述 | 对账户的描述信息,通常自定义账户都不写这个。 |
第六段 | 家目录 | 用户登录系统之后的默认工作空间,该空间除root和本人意外,默认是不允许其他人访问。 |
第七段 | Shell程序 | Linux、类Unix系统中的特有程序。 |
mengxb:$1$P3i2zUCl$QxgXUAArJQhNWFxl0EFaD1:17365:0:99999:7:::
第一段 | 用户名 |
第二段 | 加密后的口令(注:不允许手动修改密码内容,如果含有不属于集合 { $./0-9A-Za-z }中的字符,则对应的用户不能登录) |
第三段 | 1970年1月1日开始计算到密码创建的天数 |
第四段 | 表示上次和下次修改密码之间的间隔,如果是0表示无间隔限制 |
第五段 | 自密码创建时刻起,最大的有效期(天) |
第六段 | 密码到期前的N天,提醒用户修改密码。 |
第七段 | 缺省值为空,该字段允许密码到期之后N天之内还依然可以登录。 |
第八段 | 缺省值为空,该字段表示一个绝对的天数,意为到期之后不允许登录,也可以理解为密码的有效存活期。 |
root:x:0:jerry
第一段 | 用户组名 |
第二段 | 组的密码,通常用x或者*来表示。部分系统中没有组密码的设定 |
第三段 | GID |
第四段 | 组内的成员列表。文件中显示的账户名都是将该组作为附加组。如果是主组,在此不给与显示。 |
root账户和root用户组是两码事,某个账户就算是加入了root组,那么也不代表它具备root权限。
因为在Linux系统,默认情况下,用户的权限高于用户组。
在Linux系统对于权限的设定非常的敏感,如果某个用户执行一个操作时,提示权限不足,那么根据Linux系统的权限设定的思想(没有权限绝对不会睁一只眼闭一只眼),就能够判断出该用户不具备此文件的执行权限。
在Linux系统中,有以下的权限表示。业内人士称之为:
在Linux系统中不管是文件还是目录。(在Linux系统中,将所有的东西都视为文件)都有固定权限表示。
例:drwxr-xr-x. 2 root root 4096 5月 13 15:27 home
-rw-r--r--. 1 root root 45537 5月 13 11:15 install.log
两个文件分别是:第一个是目录,第二个是普通文件
根据信息的第一个字母(文件类型)来查看,d表示该文件是一个目录文件,-表示该文件是一个普通文件。
后面每三个权限成为一组,每组中分别有三个权限:
字符 | 权限 | 数字 |
r | 读 | 4 |
w | 写 | 2 |
x | 执行 | 1 |
除了第一个字母不参与权限的表示,其他的都为权限标识符。
每三个为一组,共有三组:
第一组 | 用户 | user |
第二组 | 用户组 | group |
第三组 | 其他人 | other |
说明:Linux系统中,不管是什么系统,权限的标识符号的位置是不会发生任何的改变,也就是说,
第1个永远是文件类型,
第2-4(第一组)永远是读、写、执行,用户的权限,
第5-7(第二组)永远是读、写、执行,用户组的权限,
第8-10(第三组)永远是读、写、执行,其他人的权限。
如果某个文件权限标识为----------,那么则说明此文件不允许任何的读取、写入、执行
修改文件的所有者和属组
chown 所有者(属主) 文件路径 修改某个文件的所有者
chown :属组 文件路径 修改某个文件的属组
chown 所有者:属组 文件路径 修改某个文件的所有者和属组
修改文件的权限:
chmod命令可以用来修改某个文件或文件夹的权限。
选项
-R | 递归处理 |
修改文件/夹的权限时,可以使用字符权限,也可以使用数字权限。
案例:
# bash
touch test_1 # 当前文件的权限是-rw-r--r--
将此文件的权限修改为----------
# bash
chmod 000 test_1
为此文件,每组都增加一个读的权限
# bash
chmod 444 test_1
or
chmod +r test_1
# a=all,u=user,g=group,o=other
为此文件的用户增加一个rw-,组增加一个r-x,其他人---。
chmod u+rw,g+rx test_1
or
chmod 650 test_1
0表示没有权限
chmod在修改文件权限的时候,哪个便捷用哪个方法。
比如:
如果要是给三组增加执行权限的时候,+x就数字计算要快。字符权限就比数字要便捷(不需要计算)
如果是为每组增加不同权限的时候,用数字比较便捷(书写便捷)。
修饰某个文件/夹不允许被修改。注意:不能给/ /tmp /dev /var 加保护
即便是root权限也不一定所有的文件都可以删
chattr [选项] file/dir
选项:
i | 表示不能以任何方式进行文件/夹的修改,追加,删除 |
a | 表示文件/夹只能追加,不能修改,删除 |
+ <属性> | 表示开启某文件/夹的权限 |
| 表示关闭某文件/夹的权限 |
R | 表示递归处理。 |
案例:
# bash
touch big1902
chattr +i big1902 # 表示该文件不允许修改,删除,增加。
touch big 1902_1
chattr +a big1902_1 # 表示该文件只允许追加内容,不允许删除和修改。
a、i的使用场景:
通常情况,log文件用a的属性。如果是cfg(配置文件)文件用i的属性。
lsattr 查看文件的物理权限(属性)
lsattr [选项] 文件/夹
选项:
R | 表示递归处理 |
a | 表示查看所有文件的属性,包括隐藏 |
d | 显示目录的属性,而不是目录下的文件的属性 |
普通用户的超级权限:
sudo(SuperUser Do),它可以让普通用户执行root的权限。sudo可以限制用户执行部分root的权限。
sudo会记录用户执行过的每一条命令,便于查阅服务器出事之前的状态。
好处:
使用自己配置好的用户环境
不需要知道root密码,保证root的密码安全
可以限制用户执行有限的root权限
sudo执行的每条命令都会被记录,便于日后的日志审计,例如用户执行过高危操作命令。
如果想要监控普通用户通过管理员权限执行过什么命令可以配置监控文件的产生的地址
#bash
vim /etc/sudoers
添加
Defaults logfile=/home/log
sudoers文件解释
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或
## ## 用户组所使用
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
## Networking
#网络操作相关命令别名
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
/usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig,
/sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
## user MACHINE=COMMANDS
## 用户 登录的主机=(可以变换的身份) 可以执行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项
##
## Allow root to run any commands anywhere
## 允许root用户执行任意路径下的任意命令
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## 允许wheel用户组中的用户执行所有命令
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令
实际案例演示
实例1:让普通用户fieldyang具有/etc/init.d/nagios脚本重启的权限,可以在/etc/sudoers添加如下设置:
[root@test ~]# visudo
fieldyang ALL=NOPASSWD:/etc/init.d/nagios restart
实例2:让普通用户fieldyang具有所有超级用户的权限而又不用输入密码
[root@test ~]# visudo
fieldyang ALL=(ALL)NOPASSWD:ALL
[fieldyang@test ~]#sudo su -
[fieldyang@test ~]#pwd
/root
实例3:针对MySQL数据库的设置,让test组中的test用户具备/etc/init.d/mysqld的权限
######################## mysql ################
1.
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
# test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
test ALL=(ALL) /etc/init.d/mysqld
3. start/stop mysql
3.1) start mysql
login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld start
3.2) stop mysql
login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld stop
实例4:针对tomcat的设置,让test组中的test用户具备tomcat操作的权限
######################## tomcat ################
1.
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
# test ALL=(ALL) /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
3.
[root@test ~]# vim /usr/local/tomcat/bin/catalina.sh
### JDK
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
4. start/stop tomcat
4.1) start tomcat
login test
[root@test ~]# su test
[test@test ~]$ sudo /usr/local/tomcat/bin/startup.sh
[test@test ~]$ ss -ntlup | grep java
[test@test ~]$ curl -I http://localhost:8080
4.2) stop tomcat
login test
[root@test ~]# su test
[test@test ~]$ sudo /usr/local/tomcat/bin/shutdown.sh
练习
练习1
需求:现在大数据部门有一个加密狗,大数据部门的人都可以去连接它给大家上课,但是别的部门不行
1,在/home目录下touch 加密狗文件。
2,创建大数据组
3,修改加密狗文件的所有者为root和大数据组
4,修改加密狗文件的权限为:root用户可读可写可执行,大数据组的成员可读可写可执行,其他人没有权限
4,编辑加密狗文件实现其功能(写一句话就行)
5,创建大数据组的成员,并将其加入到大数据组
通过不同权限的人,来观察加密狗的使用情况
练习2
需求:现在大数据班有两个组,一个是A组,另外一个是B组。
其中A组成员有zhangsan,lisi。B组成员有wangwu,zhaoliu。
A组成员的家目录在/BIGclass/A/目录下,且只有A组的人可以进
B组成员的家目录在/BIGclass/B/目录下,且只有B组的人可以进
现在要实现,组内之间资料共享,其他人无权查看。
资料如下:A组有两本书:
book1:所有者和属组为root用户和A组。权限为root用户可读可写可执行,A组的人可读可写可执行,其他人没有权限。
book2:所有者和属组为root用户和A组,权限为root用户可读可写可执行,A组的可读可执行不可写,其他人没有权限。
#创建用户家目录
mkdir -p /BIGclass/A
mkdir /BIGclass/B
#创建用户并指定家目录
useradd -d /BIGclass/A/zhangsan -m zhangsan
useradd -d /BIGclass/A/lisi -m lisi
useradd -d /BIGclass/B/wangwu -m wangwu
useradd -d /BIGclass/B/zhaoliu-m zhaoliu
#创建用户组:
groupadd -g 1000 A
groupadd -g 1001 B
#将用户分别加入对应的组内
usermod -g A zhangsan
usermod -g A lisi
usermod -g B wangwu
usermod -g B zhaoliu
既然是组内的成员进行共享,那么就应该可以使用权限的方式来实现,先修改组的目录权限为其他人无权限
#cd /big1910
chmod 750 A
chmod 750 B
通过ll命令我们能看到A组和C组所有者为root用户和root组。
所以修改A目录的所有者为A,B组的所有者为B
chown root:A A
chown root:B B
在A组目录中touch book1,并修改权限为770,所有者为root:A,同时创建book2,修改权限为750,所有者为root:A
(侵权删)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。