3. 收回root 账号, 新建管理员账号

笔者认为,安装完linux 系统之后, 应该第一时间创建管理员用户,尽量避免使用root用户进行操作,这主要是因为root 用户权限过大, 如果不小心执行了一个 rm -rf / 的操作, 那么整个系统就崩溃了. 尤其是在工作中, 大家技术参差不齐, 更应该把root账户收回,为每个人建立起独立的账户.

1. 新建管理员用户

1.1 创建管理员用户admin, 并添加到root 组

[root@localhost ~]# useradd admin

1.2 设置密码

[root@localhost ~]# passwd admin
Changing password for user admin.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

1.3 将admin 添加到 root 组中

[root@localhost ~]# usermod -aG root admin

1.4 查看管理员账号

[root@localhost ~]# id admin
uid=500(admin) gid=500(admin) groups=500(admin),0(root)

2. 修改分区权限

[root@localhost ~]# chmod 775 /opt/ /usr/etc /usr/local/ /var/data /var/logs /var/run
[root@localhost ~]# ll -d /opt/ /usr/etc /usr/local/ /var/data /var/logs /var/run
drwxrwxr-x. 7 root root 4096 May 21 06:43 /opt/
drwxrwxr-x. 2 root root 4096 Sep 23 2011 /usr/etc
drwxrwxr-x. 13 root root 4096 May 21 04:50 /usr/local/
drwxrwxr-x. 5 root root 4096 May 21 07:20 /var/data
drwxrwxr-x. 4 root root 4096 May 21 07:24 /var/logs
drwxrwxr-x. 21 root root 4096 May 22 22:13 /var/run

3. 修改sudo 文件

[root@localhost ~]# visudo
## Sudoers allows particular users to run various commands as  
## the root user, without needing the root password.  
## 
## 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.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# 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...

## 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/bin/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

#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw

#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults always_set_home

Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults env_keep += "HOME"

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
admin ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
%root ALL=/bin/mount, /bin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

4. 测试

4.1 使用admin 用户登录服务器,查看防火墙状态

默认情况下, admin 是不能执行 service命令的, 纵使dmin 添加到了root 组中.


[admin@localhost ~]$ service iptables status
iptables: Only usable by root.

4.2 使用 sudo 命令查看

第一次使用sudo 时,需要输入 admin 密码, 此时就可以使用service 命令了

[admin@localhost ~]$ sudo service iptables status
[sudo] password for admin:
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

[admin@localhost ~]$

转载于:https://my.oschina.net/zongf/blog/906908

<think>我们参考用户的提问:"我想解决已删除数据库但账号仍有该数据库权限的问题",即当数据库被删除后,之前为该数据库分配的权限仍然存在于账号上,需要清理这些残留权限。 根据引用资料,我们可以知道: 1. MySQL(以及兼容MySQL的TiDB)中权限信息存储在系统数据库中(如`mysql`数据库),具体权限记录在如`mysql.db`表中(对于数据库级别的权限)。 2. 当数据库被删除(DROP DATABASE)时,系统不会自动清理`mysql.db`表中对应的权限记录。这些残留权限可能会导致后续创建同名数据库时,旧的权限自动生效,造成安全隐患。 解决方案: 步骤1:登录数据库服务器,使用具有足够权限的账号(如root)连接到数据库。 步骤2:查看当前账号的权限,特别是残留权限。可以通过查询`mysql.db`表来查看数据库级别的权限分配。 步骤3:使用`REVOKE`命令移除特定账号对已删除数据库的权限。由于数据库已经不存在,我们无法直接通过数据库名来移除权限,但我们可以通过直接删除`mysql.db`表中的记录或使用`REVOKE`命令指定数据库名(即使数据库不存在)来移除。 具体操作: 方法一:使用REVOKE命令(推荐) 即使数据库已经被删除,我们仍然可以执行REVOKE命令来移除权限。命令格式如下: ``` REVOKE ALL PRIVILEGES ON `已删除的数据库名`.* FROM &#39;用户名&#39;@&#39;主机&#39;; FLUSH PRIVILEGES; ``` 注意:将`已删除的数据库名`替换为实际删除的数据库名,`用户名`和`主机`替换为对应的账号。 方法二:直接删除mysql.db表中的记录(适用于高级用户) 如果REVOKE命令执行不成功,或者需要批量清理,可以直接操作系统表。 ``` DELETE FROM mysql.db WHERE Db=&#39;已删除的数据库名&#39; AND User=&#39;用户名&#39; AND Host=&#39;主机&#39;; FLUSH PRIVILEGES; ``` 注意: - 在操作`mysql`系统表之前,建议先备份。 - 执行`FLUSH PRIVILEGES;`是必要的,它使权限更改立即生效。 另外,引用[4]提到了权限设置的问题,虽然不直接相关,但提醒我们操作时确保有足够的权限(如需要SUPER权限或对mysql数据库的操作权限)。 引用[3]中提到的TiDB权限系统与MySQL兼容,因此上述方法同样适用于TiDB。 引用[5]中关于PostgreSQL的处理方式不同,但用户问题中没有提到PostgreSQL,所以主要针对MySQL。 因此,针对用户的问题,我们推荐使用REVOKE命令来移除残留权限。 同时,为了避免未来出现类似问题,建议在删除数据库前,先收回所有账号对该数据库的权限,然后再删除数据库。 生成相关问题: 1. 如何查看MySQL中某个账号的权限? 2. 删除数据库前应该注意哪些权限问题? 3. 除了REVOKE命令,还有其他方式管理MySQL账号权限吗? 4. TiDB中处理权限与MySQL有什么不同? 5. 如果不知道具体的数据库名,如何清理残留权限? </think>### 已删除数据库但账号仍有权限的解决办法 当数据库被删除后,账号仍保留该数据库的权限记录可能导致安全隐患(如新建同名数据库时自动继承权限)。以下是具体解决步骤: #### 1. **手动撤销残留权限** 使用 `REVOKE` 命令移除账号对已删除数据库的权限(数据库名需与创建时一致): ```sql -- MySQL/TiDB 语法 REVOKE ALL PRIVILEGES ON `已删除的数据库名`.* FROM &#39;用户名&#39;@&#39;主机&#39;; FLUSH PRIVILEGES; -- 刷新权限生效[^1][^2][^3] ``` ```sql -- PostgreSQL 语法 REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM 用户名; REVOKE USAGE ON SCHEMA public FROM 用户名; [^5] ``` #### 2. **清理系统权限表** 对于 MySQL/TiDB,直接删除 `mysql` 系统库中的残留记录: ```sql -- 删除 db 表权限记录 DELETE FROM mysql.db WHERE Db=&#39;已删除的数据库名&#39; AND User=&#39;用户名&#39; AND Host=&#39;主机&#39;; FLUSH PRIVILEGES; [^3] ``` #### 3. **验证权限清理** 检查账号权限是否移除: ```sql SHOW GRANTS FOR &#39;用户名&#39;@&#39;主机&#39;; -- MySQL/TiDB \dp 用户名 -- PostgreSQL ``` #### 4. **预防措施** - **删除数据库前先回收权限**: ```sql REVOKE ALL PRIVILEGES ON 待删库名.* FROM &#39;用户&#39;@&#39;主机&#39;; DROP DATABASE 待删库名; [^1][^2] ``` - **定期审计权限**: ```sql SELECT * FROM mysql.db WHERE Db NOT IN (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA); -- 找出无效权限 ``` > **关键点**:数据库删除操作不会自动回收关联权限,需手动清理。MySQL/TiDB 权限存储在 `mysql` 系统库,PostgreSQL 存储在系统目录表[^3][^5]。直接操作系统表需谨慎,建议优先使用 `REVOKE` 命令。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值