标签 权限 下的文章

在上篇文章中我们向您展示了如何在 Linux 上创建一个共享目录。这次,我们会为您介绍如何将 Linux 上指定目录的读写权限赋予用户。

有两种方法可以实现这个目标:第一种是 使用 ACL (访问控制列表) ,第二种是创建用户组来管理文件权限,下面会一一介绍。

为了完成这个教程,我们将使用以下设置。

  • 操作系统:CentOS 7
  • 测试目录:/shares/project1/reports
  • 测试用户:tecmint
  • 文件系统类型:ext4

请确认所有的命令都是使用 root 用户执行的,或者使用 sudo 命令 来享受与之同样的权限。

让我们开始吧!下面,先使用 mkdir 命令来创建一个名为 reports 的目录。

# mkdir -p /shares/project1/reports                 

使用 ACL 来为用户赋予目录的读写权限

重要提示:打算使用此方法的话,您需要确认您的 Linux 文件系统类型(如 ext3 和 ext4, NTFS, BTRFS)支持 ACL。

1、 首先, 依照以下命令在您的系统中检查当前文件系统类型,并且查看内核是否支持 ACL:

# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
# grep -i acl /boot/config*

从下方的截屏可以看到,文件系统类型是 ext4,并且从 CONFIG_EXT4_FS_POSIX_ACL=y 选项可以发现内核是支持 POSIX ACL 的。

Check Filesystem Type and Kernel ACL Support

查看文件系统类型和内核的 ACL 支持。

2、 接下来,查看文件系统(分区)挂载时是否使用了 ACL 选项。

# tune2fs -l /dev/sda1 | grep acl

Check Partition ACL Support

查看分区是否支持 ACL

通过上边的输出可以发现,默认的挂载项目中已经对 ACL 进行了支持。如果发现结果不如所愿,你可以通过以下命令对指定分区(此例中使用 /dev/sda3)开启 ACL 的支持。

# mount -o remount,acl /
# tune2fs -o acl /dev/sda3

3、 现在是时候指定目录 reports 的读写权限分配给名为 tecmint 的用户了,依照以下命令执行即可。

# getfacl /shares/project1/reports                # Check the default ACL settings for the directory 
# setfacl -m user:tecmint:rw /shares/project1/reports     # Give rw access to user tecmint 
# getfacl /shares/project1/reports                # Check new ACL settings for the directory

Give Read/Write Access to Directory Using ACL

通过 ACL 对指定目录赋予读写权限

在上方的截屏中,通过输出结果的第二行 getfacl 命令可以发现,用户 tecmint 已经成功的被赋予了 /shares/project1/reports 目录的读写权限。

如果想要获取 ACL 列表的更多信息。可以在下方查看我们的其他指南。

  1. 如何使用访问控制列表(ACL)为用户/组设置磁盘配额
  2. 如何使用访问控制列表(ACL)挂载网络共享

现在我们来看看如何使用第二种方法来为目录赋予读写权限。

使用用户组来为用户赋予指定目录的读写权限

1、 如果用户已经拥有了默认的用户组(通常组名与用户名相同),就可以简单的通过变更文件夹的所属用户组来完成。

# chgrp tecmint /shares/project1/reports

另外,我们也可以通过以下方法为多个用户(需要赋予指定目录读写权限的)新建一个用户组。如此一来,也就创建了一个共享目录

# groupadd projects

2、 接下来将用户 tecmint 添加到 projects 组中:

# usermod -aG projects tecmint      # add user to projects
# groups tecmint                # check users groups

3、 将目录的所属用户组变更为 projects:

# chgrp projects /shares/project1/reports

4、 现在,给组成员设置读写权限。

# chmod -R 0760 /shares/projects/reports
# ls  -l /shares/projects/      #check new permissions

好了!这篇教程中,我们向您展示了如何在 Linux 中将指定目录的读写权限赋予用户。若有疑问,请在留言区中提问。

(题图:Pixabay,CC0)


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,未来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/give-read-write-access-to-directory-in-linux/

作者:Aaron Kili 译者:Mr-Ping 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

作为系统管理员,你可能有一个特定目录,你希望为 Linux 服务器上的每个用户授予读/写访问权限。在本指南中,我们将回顾如何在 Linux 中对特定目录(共享目录)上的所有用户启用写访问。

这要求设置适当的访问权限,而最有效、可靠的方法是为所有要共享或对特定目录的写访问权的用户分配一个公共组。

如果你系统中还没有这个目录和公众组,用下面的命令创建:

$ sudo mkdir -p /var/www/reports/
$ sudo groupadd project 

接着将对目录 /var/www/reports/ 有写权限的用户添加到 project 组中。

$ sudo usermod -a -G project tecmint 

Create Common Directory Group

创建公共目录组

上面命令使用到的标志和参数是:

  1. -a – 将用户添加到增补组中。
  2. -G – 指定组名。
  3. project – 组名。
  4. tecmint – 已有的用户名。

在这之后,给目录配置适当的权限,-R 会让操作递归进入子目录中:

$ sudo chgrp -R project /var/www/reports/
$ sudo chmod -R 2775 /var/www/reports/

解释下上面 chmod 命令中的 2775

  1. 2 - 打开 setGID 位,意味着新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的 setGID 位。
  2. 7 - 为所有者提供 rwx 权限。
  3. 7 - 给组 rwx 权限。
  4. 5 - 为其他人提供 rx 权限。

你可以使用下面的命令创建更多的系统用户并将它们添加到目录组中:

$ sudo useradd -m -c "Aaron Kili" -s/bin/bash -G project aaronkilik
$ sudo useradd -m -c "John Doo" -s/bin/bash -G project john
$ sudo useradd -m -c "Ravi Saive" -s/bin/bash -G project ravi

接着创建每个用户存储他们项目报告的子目录:

$ sudo mkdir -p /var/www/reports/aaronkilik_reports
$ sudo mkdir -p /var/www/reports/johndoo_reports
$ sudo mkdir -p /var/www/reports/ravi_reports

现在你可以创建文件/文件,并分享给该组的其他用户了。

就是这样了!在本篇中,我们回顾了如何启用所有用户对特定目录的写权限。要了解更多关于 Linux 中的用户/组,阅读如何管理用户/组和属性

记得在评论栏中留下你对这篇文章的想法。


译者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin 和 web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/create-a-shared-directory-in-linux/

作者:Aaron Kili 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

为了解决标准的“用户-组-其他/读-写-执行”权限以及访问控制列表的限制以及加强安全机制,美国国家安全局(NSA)设计出一个灵活的 强制访问控制 Mandatory Access Control (MAC)方法 SELinux(Security Enhanced Linux 的缩写),来限制标准的权限之外的种种权限,在仍然允许对这个控制模型后续修改的情况下,让进程尽可能以最小权限访问或在系统对象(如文件,文件夹,网络端口等)上执行其他操作。

SELinux 和 AppArmor 加固 Linux 安全

另一个流行并且被广泛使用的 MAC 是 AppArmor,相比于 SELinux 它提供更多的特性,包括一个学习模式,可以让系统“学习”一个特定应用的行为,以及通过配置文件设置限制实现安全的应用使用。

在 CentOS 7 中,SELinux 合并进了内核并且默认启用 强制 Enforcing 模式(下一节会介绍这方面更多的内容),与之不同的是,openSUSE 和 Ubuntu 使用的是 AppArmor 。

在这篇文章中我们会解释 SELinux 和 AppArmor 的本质,以及如何在你选择的发行版上使用这两个工具之一并从中获益。

SELinux 介绍以及如何在 CentOS 7 中使用

Security Enhanced Linux 可以以两种不同模式运行:

  • 强制 Enforcing :这种情况下,SELinux 基于 SELinux 策略规则拒绝访问,策略规则是一套控制安全引擎的规则。
  • 宽容 Permissive :这种情况下,SELinux 不拒绝访问,但如果在强制模式下会被拒绝的操作会被记录下来。

SELinux 也能被禁用。尽管这不是它的一个操作模式,不过也是一种选择。但学习如何使用这个工具强过只是忽略它。时刻牢记这一点!

使用 getenforce 命令来显示 SELinux 的当前模式。如果你想要更改模式,使用 setenforce 0(设置为宽容模式)或 setenforce 1(强制模式)。

因为这些设置重启后就失效了,你需要编辑 /etc/selinux/config 配置文件并设置 SELINUX 变量为 enforcingpermissivedisabled ,保存设置让其重启后也有效:

如何启用和禁用 SELinux 模式

还有一点要注意,如果 getenforce 返回 Disabled,你得编辑 /etc/selinux/config 配置文件为你想要的操作模式并重启。否则你无法利用 setenforce 设置(或切换)操作模式。

setenforce 的典型用法之一包括在 SELinux 模式之间切换(从强制到宽容或相反)来定位一个应用是否行为不端或没有像预期一样工作。如果它在你将 SELinux 设置为宽容模式正常工作,你就可以确定你遇到的是 SELinux 权限问题。

有两种我们使用 SELinux 可能需要解决的典型案例:

  • 改变一个守护进程监听的默认端口。
  • 给一个虚拟主机设置 /var/www/html 以外的文档根路径值。

让我们用以下例子来看看这两种情况。

例 1:更改 sshd 守护进程的默认端口

大部分系统管理员为了加强服务器安全首先要做的事情之一就是更改 SSH 守护进程监听的端口,主要是为了阻止端口扫描和外部攻击。要达到这个目的,我们要更改 /etc/ssh/sshd_config 中的 Port 值为以下值(我们在这里使用端口 9999 为例):

Port 9999

在尝试重启服务并检查它的状态之后,我们会看到它启动失败:

# systemctl restart sshd
# systemctl status sshd

检查 SSH 服务状态

如果我们看看 /var/log/audit/audit.log,就会看到 sshd 被 SELinux 阻止在端口 9999 上启动,因为它是 JBoss 管理服务的保留端口(SELinux 日志信息包含了词语“AVC”,所以应该很容易把它同其他信息区分开来):

# cat /var/log/audit/audit.log | grep AVC | tail -1

检查 Linux 审计日志

在这种情况下大部分人可能会禁用 SELinux,但我们不这么做。我们会看到有个让 SELinux 和监听其他端口的 sshd 和谐共处的方法。首先确保你有 policycoreutils-python 这个包,执行:

# yum install policycoreutils-python

查看 SELinux 允许 sshd 监听的端口列表。在接下来的图片中我们还能看到端口 9999 是为其他服务保留的,所以我们暂时无法用它来运行其他服务:

# semanage port -l | grep ssh

当然我们可以给 SSH 选择其他端口,但如果我们确定我们不会使用这台机器跑任何 JBoss 相关的服务,我们就可以修改 SELinux 已存在的规则,转而给 SSH 分配那个端口:

# semanage port -m -t ssh_port_t -p tcp 9999

这之后,我们就可以用前一个 semanage 命令检查端口是否正确分配了,即使用 -lC 参数(list custom 的简称):

# semanage port -lC
# semanage port -l | grep ssh

给 SSH 分配端口

我们现在可以重启 SSH 服务并通过端口 9999 连接了。注意这个更改重启之后依然有效。

例 2:给一个虚拟主机设置 /var/www/html 以外的 文档根路径 DocumentRoot

如果你需要用除 /var/www/html 以外目录作为 文档根目录 DocumentRoot 设置一个 Apache 虚拟主机(也就是说,比如 /websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache 会拒绝提供内容,因为 index.html 已经被标记为了 default_t SELinux 类型,Apache 无法访问它:

# wget http://localhost/index.html
# ls -lZ /websrv/sites/gabriel/public_html/index.html

被标记为 default\_t SELinux 类型

和之前的例子一样,你可以用以下命令验证这是不是 SELinux 相关的问题:

# cat /var/log/audit/audit.log | grep AVC | tail -1

检查日志确定是不是 SELinux 的问题

要将 /websrv/sites/gabriel/public_html 整个目录内容标记为 httpd_sys_content_t,执行:

# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"

上面这个命令会赋予 Apache 对那个目录以及其内容的读取权限。

最后,要应用这条策略(并让更改的标记立即生效),执行:

# restorecon -R -v /websrv/sites/gabriel/public_html

现在你应该可以访问这个目录了:

# wget http://localhost/index.html

访问 Apache 目录

要获取关于 SELinux 的更多信息,参阅 Fedora 22 中的 SELinux 用户及管理员指南

AppArmor 介绍以及如何在 OpenSUSE 和 Ubuntu 上使用它

AppArmor 的操作是基于写在纯文本文件中的规则定义,该文件中含有允许权限和访问控制规则。安全配置文件用来限制应用程序如何与系统中的进程和文件进行交互。

系统初始就提供了一系列的配置文件,但其它的也可以由应用程序在安装的时候设置或由系统管理员手动设置。

像 SELinux 一样,AppArmor 以两种模式运行。在 强制 enforce 模式下,应用被赋予它们运行所需要的最小权限,但在 抱怨 complain 模式下 AppArmor 允许一个应用执行受限的操作并将操作造成的“抱怨”记录到日志里(/var/log/kern.log/var/log/audit/audit.log,和其它放在 /var/log/apparmor 中的日志)。

日志中会显示配置文件在强制模式下运行时会产生错误的记录,它们中带有 audit 这个词。因此,你可以在 AppArmor 的 强制 enforce 模式下运行之前,先在 抱怨 complain 模式下尝试运行一个应用并调整它的行为。

可以用这个命令显示 AppArmor 的当前状态:

$ sudo apparmor_status

查看 AppArmor 的状态

上面的图片指明配置 /sbin/dhclient/usr/sbin/,和 /usr/sbin/tcpdump 等处在 强制 enforce 模式下(在 Ubuntu 下默认就是这样的)。

因为不是所有的应用都包含相关的 AppArmor 配置,apparmor-profiles 包给其它没有提供限制的包提供了配置。默认它们配置在 抱怨 complain 模式下运行,以便系统管理员能够测试并选择一个所需要的配置。

我们将会利用 apparmor-profiles,因为写一份我们自己的配置已经超出了 LFCS 认证的范围了。但是,由于配置都是纯文本文件,你可以查看并学习它们,为以后创建自己的配置做准备。

AppArmor 配置保存在 /etc/apparmor.d 中。让我们来看看这个文件夹在安装 apparmor-profiles 之前和之后有什么不同:

$ ls /etc/apparmor.d

查看 AppArmor 文件夹内容

如果你再次执行 sudo apparmor_status,你会在 抱怨 complain 模式看到更长的配置文件列表。你现在可以执行下列操作。

将当前在 强制 enforce 模式下的配置文件切换到 抱怨 complain 模式:

$ sudo aa-complain /path/to/file

以及相反的操作(抱怨 –> 强制):

$ sudo aa-enforce /path/to/file

上面这些例子是允许使用通配符的。举个例子:

$ sudo aa-complain /etc/apparmor.d/*

会将 /etc/apparmor.d 中的所有配置文件设置为 抱怨 complain 模式,反之

$ sudo aa-enforce /etc/apparmor.d/*

会将所有配置文件设置为 强制 enforce 模式。

要完全禁用一个配置,在 /etc/apparmor.d/disabled 目录中创建一个符号链接:

$ sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/

要获取关于 AppArmor 的更多信息,参阅官方的 AppArmor wiki 以及 Ubuntu 提供的文档。

总结

在这篇文章中我们学习了一些 SELinux 和 AppArmor 这两个著名的强制访问控制系统的基本知识。什么时候使用两者中的一个或是另一个?为了避免提高难度,你可能需要考虑专注于你选择的发行版自带的那一个。不管怎样,它们会帮助你限制进程和系统资源的访问,以提高你服务器的安全性。

关于本文你有任何的问题,评论,或建议,欢迎在下方发表。不要犹豫,让我们知道你是否有疑问或评论。


via: http://www.tecmint.com/mandatory-access-control-with-selinux-or-apparmor-linux/

作者:Gabriel Cánepa 译者:alim0x 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 Linux 中最基本的任务之一就是设置文件权限。理解它们是如何实现的是你进入 Linux 世界的第一步。如您所料,这一基本操作在类 UNIX 操作系统中大同小异。实际上,Linux 文件权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具)。

但不要以为理解文件权限需要长时间的学习。事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们。

基础概念

你要明白的第一件事是文件权限可以用来干什么。当你设置一个分组的权限时发生了什么?让我们将其展开来说,这个概念就真的简单多了。那到底什么是权限?什么是分组呢?

你可以设置的3种权限:

  • 读 — 允许该分组读文件(用r表示)
  • 写 — 允许该分组写文件(用w表示)
  • 执行 — 允许该分组执行(运行)文件(用x表示)

为了更好地解释这如何应用于一个分组,例如,你允许一个分组可以读写一个文件,但不能执行。或者,你可以允许一个分组读和执行一个文件,但不能写。甚至你可以允许一个分组有读、写、执行全部的权限,也可以删除全部权限来去除该组的权限。

现在,什么是分组呢,有以下4个:

  • user — 文件实际的拥有者
  • group — 用户所在的用户组
  • others — 用户组外的其他用户
  • all — 所有用户

大多数情况,你只会对前3组进行操作,all 这一组只是作为快捷方式(稍后我会解释)。

到目前为止很简单,对吧?接下来我们将深入一层。

如果你打开一个终端并运行命令 ls -l,你将会看到逐行列出当前工作目录下所有的文件和文件夹的列表(如图)

你会留意到最左边那列是像是 -rw-rw-r-- 这样的。

实际上这列表应该这样看:

rw- rw- r--

正如你所见,列表将其分为如下3部分:

  • rw-
  • rw-
  • r--

权限和组的顺序都很重要,顺序总是:

  • 所属者 所属组 其他人 — 分组
  • 读 写 执行 — 权限

在我们上面示例的权限列表中,所属者拥有读/写权限,所属组拥有读/写权限,其他人用户仅拥有读权限。这些分组中赋予执行权限的话,就用一个 x 表示。

等效数值

接下来我们让它更复杂一些,每个权限都可以用一个数字表示。这些数字是:

  • 读 — 4
  • 写 — 2
  • 执行— 1

数值代替不是一个一个的替换,你不能像这样:

-42-42-4--

你该把每个分组的数值相加,给用户读和写权限,你该用 4 + 2 得到 6。给用户组相同的权限,也是使用相同的数值。假如你只想给其他用户读的权限,那就设置它为4。现在用数值表示为:

664

如果你想给一个文件664权限,你可以使用 chmod 命令,如:

chmod 664 FILENAME

FILENAME 处为文件名。

更改权限

既然你已经理解了文件权限,那是时候学习如何更改这些权限了。就是使用 chmod 命令来实现。第一步你要知道你能否更改文件权限,你必须是文件的所有者或者有权限编辑文件(或者通过 susudo 得到权限)。正因为这样,你不能随意切换目录和更改文件权限。

继续用我们的例子 (-rw-rw-r--)。假设这个文件(命名为 script.sh)实际是个shell脚本,需要被执行,但是你只想让自己有权限执行这个脚本。这个时候,你可能会想:“我需要是文件的权限如 -rwx-rw-r--”。为了设置 x 权限位,你可以这样使用 chmod 命令:

chmod u+x script.sh

这时候,列表中显示的应该是 -rwx-rw-r-- 。

如果你想同时让用户及其所属组同时拥有执行权限,命令应该这样:

chmod ug+x script.sh

明白这是怎么工作的了吗?下面我们让它更有趣些。不管什么原因,你不小心给了所有分组对文件的执行权限(列表中是这样的 -rwx-rwx-r-x)。

如果你想去除其他用户的执行权限,只需运行命令:

chmod o-x script.sh

如果你想完全删除文件的可执行权限,你可以用两种方法:

chmod ugo-x script.sh

或者

chmod a-x script.sh

以上就是所有内容,能使操作更有效率。我希望能避免哪些可能会导致一些问题的操作(例如你不小心对 script.sh 使用 a-rwx 这样的 chmod 命令)。

目录权限

你也可以对一个目录执行 chmod 命令。当你作为用户创建一个新的目录,通常新建目录具有这样的权限:

drwxrwxr-x

注:开头的 d 表示这是一个目录。

正如你所见,用户及其所在组都对文件夹具有操作权限,但这并不意味着在这文件夹中出创建的文件也具有与其相同的权限(创建的文件使用默认系统的权限 -rw-rw-r--)。但如果你想在新文件夹中创建文件,并且移除用户组的写权限,你不用切换到该目录下并对所有文件使用 chmod 命令。你可以用加上参数 R(意味着递归)的 chmod 命令,同时更改该文件夹及其目录下所有的文件的权限。

现在,假设有一文件夹 TEST,里面有一些脚本,所有这些(包括 TEST 文件夹)拥有权限 -rwxrwxr-x。如果你想移除用户组的写权限,你可以运行命令:

chmod -R g-w TEST

运行命令 ls -l,你讲看到列出的 TEST 文件夹的权限信息是 drwxr-xr-x。用户组被去除了写权限(其目录下的所有文件也如此)。

总结

现在,你应该对基本的 Linux 文件权限有了深入的理解。对于更高级的东西学起来会很轻松,像 setgid、setuid 和 ACL 这些。没有良好的基础,你很快就会混淆不清概念的。

Linux 文件权限从早期到现在没有太大变化,而且很可能以后也不会变化。


via: http://www.linux.com/learn/tutorials/885268-getting-to-know-linux-file-permissions

作者:Jack Wallen 译者:ynmlml 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制。如何通过命令行的方式来创建并且设置一个MySQL用户呢?

要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可进行。每个MySQL用户帐号都有许多与之相关连的属性,例如用户名、密码以及权限和资源限制。"权限"定义了特定用户能够在MySQL服务器中做什么,而"资源限制"为用户设置了一系列服务器资源的使用许可。创建或更新一个用户涉及到了对用户帐号所有属性的管理。

下面展示了如何在Linux中创建和设置一个MySQL用户。

首先以root身份登录到MySQL服务器中。

$ mysql -u root -p

当验证提示出现的时候,输入MySQL的root帐号的密码。

创建一个MySQL用户

使用如下命令创建一个用户名和密码分别为"myuser"和"mypassword"的用户。

mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

一旦用户被创建后,包括加密的密码、权限和资源限制在内的所有帐号细节都会被存储在一个名为user的表中,这个表则存在于mysql这个特殊的数据库里。

运行下列命令,验证帐号是否创建成功

mysql> SELECT host, user, password FROM mysql.user WHERE user='myuser';

赋予MySQL用户权限

一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何操作。你得赋予用户必要的权限。以下是一些可用的权限:

  • ALL: 所有可用的权限
  • CREATE: 创建库、表和索引
  • LOCK\_TABLES: 锁定表
  • ALTER: 修改表
  • DELETE: 删除表
  • INSERT: 插入表或列
  • SELECT: 检索表或列的数据
  • CREATE\_VIEW: 创建视图
  • SHOW\_DATABASES: 列出数据库
  • DROP: 删除库、表和视图

运行以下命令赋予"myuser"用户特定权限。

mysql> GRANT <privileges> ON <database>.<table> TO 'myuser'@'localhost';

以上命令中, 代表着用逗号分隔的权限列表。如果你想要将权限赋予任意数据库(或表),那么使用星号(*)来代替数据库(或表)的名字。

例如,为所有数据库/表赋予 CREATE 和 INSERT 权限:

mysql> GRANT CREATE, INSERT ON *.* TO 'myuser'@'localhost';

验证给用户赋予的全权限:

mysql> SHOW GRANTS FOR 'myuser'@'localhost';

将全部的权限赋予所有数据库/表:

mysql> GRANT ALL ON *.* TO 'myuser'@'localhost';

你也可以将用户现有的权限删除。使用以下命令废除"myuser"帐号的现有权限:

mysql> REVOKE <privileges> ON <database>.<table> FROM 'myuser'@'localhost';

为用户添加资源限制

在MySQL中,你可以为单独的用户设置MySQL的资源使用限制。可用的资源限制如下:

使用以下命令为"myuser"帐号增加一个资源限制:

mysql> GRANT USAGE ON <database>.<table> TO 'myuser'@'localhost' WITH <resource-limits>;

中你可以指定多个使用空格分隔开的资源限制。

例如,增加 MAXQUERIESPERHOUR 和 MAXCONNECTIONSPERHOUR 资源限制:

mysql> GRANT USAGE ON *.* TO 'myuser'@'localhost' WITH MAX_QUERIES_PER_HOUR 30 MAX_CONNECTIONS_PER_HOUR 6;

验证用户的资源限制:

mysql> SHOW GRANTS FOR 'myuser'@'localhost;

创建和设置一个MySQL用户最后的一个重要步骤:

mysql> FLUSH PRIVILEGES;

如此一来更改便生效了。现在MySQL用户帐号就可以使用了。


via: http://ask.xmodulo.com/create-configure-mysql-user-command-line.html

译者:Ping 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。

Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。

在文件系统使ACL生效

首先,我们需要安装工具来管理ACL。

Ubuntu/Debian 中:

$ sudo apt-get install acl

CentOS/Fedora/RHEL 中:

# yum -y install acl

Archlinux 中:

# pacman -S acl

出于演示目的,我将使用ubuntu server版本,其他版本类似。

安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。

首先,我们检查ACL功能是否已经开启。

$ mount

你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。

现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。

$ sudo mount / -o remount

干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。

ACL 范例

基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。让我们来做一些测试。

我创建一个目录/shared给一个假设的用户,名叫freeuser

$ ls -lh /

我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。

首先,为用户test设置ACL:

$ sudo setfacl -m u:test:rwx /shared

现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。

现在我们增加只读权限给用户test2:

$ sudo setfacl -m u:test2:rx /shared

注意test2读取目录需要执行(x)权限

让我来解释下setfacl命令格式:

  • -m 表示修改ACL。你可以增加新的,或修改存在的ACL
  • u: 表示用户。你可以使用 g 来设置组权限
  • test 用户名
  • :rwx 需要设置的权限。

现在让我向你展示如何读取ACL:

$ ls -lh /shared

你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行:

$ sudo getfacl /shared

最后,如果你需要移除ACL:

$ sudo setfacl -x u:test /shared

如果你想要立即擦除所有ACL条目:

$ sudo setfacl -b /shared

最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。

总结

使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。


via: http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html

作者:Christopher Valerio 译者:VicYu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出