分类 系统运维 下的文章

通常你可能会把数据放在一个分区上,有时候可能需要对该设备或者上面的一个分区进行备份。树莓派用户为了可引导 SD 卡当然有这个需求。其它小体积计算机的用户也会发现这非常有用。有时候设备看起来要出现故障时最好快速做个备份。

进行本文中的实验你需要一个叫 dcfldd 的工具。

dcfldd 工具

该工具是 coreutils 软件包中 dd 工具的增强版。dcfldd 是 Nicholas Harbour 在美国国防部计算机取证实验室(DCFL)工作期间研发的。该工具的名字也基于他工作的地方 - dcfldd

对于仍然在使用 CoreUtils 8.23 或更低版本的系统,并没有一个可以轻松查看正在创建副本的进度的选项。有时候看起来就像什么都没有发生,以至于你就想取消掉备份。

注意:如果你使用 8.24 或更新版本的 dd 工具,你就不需要使用 dcfldd,只需要用 dd 替换 dcfldd 即可。所有其它参数仍然适用。

在 Debian 系统上你只需要在 Package Manager 中搜索 dcfldd。你也可以打开一个终端然后输入下面的命令:

sudo apt-get install dcfldd

对于 Red Hat 系统,可以用下面的命令:

cd /tmp  
wget dl.fedoraproject.org/pub/epel/6/i386/dcfldd-1.3.4.1-4.el6.i686.rpm  
sudo yum install dcfldd-1.3.4.1-4.el6.i686.rpm  
dcfldd --version

注意: 上面的命令安装的是 32 位版本。对于 64 位版本,使用下面的命令:

cd /tmp  
wget dl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpm  
sudo yum install dcfldd-1.3.4.1-4.el6.x86_64.rpm  
dcfldd --version

每组命令中的最后一个语句会列出 dcfldd 的版本并显示该命令文件已经被加载。

注意:确保你以 root 用户执行 dd 或者 dcfldd 命令。

安装完该工具后你就可以继续使用它备份和恢复分区。

备份分区

备份设备的时候可以备份整个设备也可以只是其中的一个分区。如果设备有多个分区,我们可以分别备份每个分区。

在进行备份之前,先让我们来看一下设备和分区的区别。假设我们有一个已经被格式化为一个大磁盘的 SD 卡。这个 SD 卡只有一个分区。如果空间被切分使得 SD 卡看起来是两个设备,那么它就有两个分区。

假设我们有一个树莓派中的 SD 卡。SD 卡容量为 8 GB,有两个分区。第一个分区存放 BerryBoot 启动引导器。第二个分区存放 Kali(LCTT 译注:Kali Linux 是一个 Debian 派生的 Linux 发行版)。现在已经没有可用的空间用来安装第二个操作系统。我们使用大小为 16 GB 的第二个 SD 卡,但拷贝到第二个 SD 卡之前,第一个 SD 卡必须先备份。

要备份第一个 SD 卡我们需要备份设备 /dev/sdc。进行备份的命令如下所示:

dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img

备份包括输入文件(if)以及被设置为 /tmp 目录下名为 SD-Card-Backup.img 的输出文件(of)。

dddcfldd 默认都是每次读写文件中的一个块。通过上述命令,它可以一次默认读写 512 个字节。记住,该复制是一个精准的拷贝 - 逐位逐字节。

默认的 512 个字节可以通过块大小参数 - bs= 更改。例如,要每次读写 1 兆字节,参数为 bs=1M。使用以下所用的缩写可以设置不同大小:

  • b – 512 字节
  • KB – 1000 字节
  • K – 1024 字节
  • MB – 1000x1000 字节
  • M – 1024x1024 字节
  • GB – 1000x1000x1000 字节
  • G – 1024x1024x1024 字节

你也可以单独指定读和写的块大小。要指定读块的大小使用 ibs=。要指定写块的大小使用 obs=

我使用三种不同的块大小做了一个 120 MB 分区的备份测试。第一次使用默认的 512 字节,它用了 7 秒钟。第二次块大小为 1024 K,它用时 2 秒。第三次块大小是 2048 K,它用时 3 秒。用时会随系统以及其它硬件实现的不同而变化,但通常来说更大的块大小会比默认的稍微快一点。

完成备份后,你还需要知道如何把数据恢复到设备中。

恢复分区

现在我们已经有了一个备份点,假设数据可能被损毁了或者由于某些原因需要进行恢复。

命令和备份时相同,只是源和目标相反。对于上面的例子,命令会变为:

dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img

这里,镜像文件被用作输入文件(if)而设备(sdc)被用作输出文件(of)。

注意: 要记住输出设备会被重写,它上面的所有数据都会丢失。通常来说在恢复数据之前最好用 GParted 删除 SD 卡上的所有分区。

假如你在使用多个 SD 卡,例如多个树莓派主板,你可以一次性写多块 SD 卡。为了做到这点,你需要知道系统中卡的 ID。例如,假设我们想把镜像 BerryBoot.img 拷贝到两个 SD 卡。SD 卡分别是 /dev/sdc/dev/sdd。下面的命令在显示进度时每次读写 1 MB 的块。命令如下:

dcfldd if=BerryBoot.img bs=1M status=progress | tee >(dcfldd of=/dev/sdc) | dcfldd of=/dev/sdd

在这个命令中,第一个 dcfldd 指定输入文件并把块大小设置为 1 MB。status 参数被设置为显示进度。然后输入通过管道 |传输给命令 teetee 用于将输入分发到多个地方。第一个输出是到命令 dcfldd of=/dev/sdc。命令被放到小括号内被作为一个命令执行。我们还需要最后一个管道 |,否则命令 tee 会把信息发送到 stdout (屏幕)。因此,最后的输出是被发送到命令 dcfldd of=/dev/sdd。如果你有第三个 SD 卡,甚至更多,只需要添加另外的重定向和命令,类似 >(dcfldd of=/dev/sde

注意:记住最后一个命令必须在管道 | 后面。

必须验证写的数据确保数据是正确的。

验证数据

一旦创建了一个镜像或者恢复了一个备份,你可以验证这些写入的数据。要验证数据,你会使用名为 diff 的另一个不同程序。

使用 diff ,你需要指定镜像文件的位置以及系统中拷贝自或写入的物理媒介。你可以在创建备份或者恢复了一个镜像之后使用 diff 命令。

该命令有两个参数。第一个是物理媒介,第二个是镜像文件名称。

对于例子 dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img,对应的 diff 命令是:

diff /dev/sdc /tmp/SD-Card-Backup.img

如果镜像和物理设备有任何的不同,你会被告知。如果没有显示任何信息,那么数据就验证为完全相同。

确保数据完全一致是验证备份和恢复完整性的关键。进行备份时需要注意的一个主要问题是镜像大小。

分割镜像

假设你想要备份一个 16GB 的 SD 卡。镜像文件大小会大概相同。如果你只能把它备份到 FAT32 分区会怎样呢?FAT32 最大文件大小限制是 4 GB。

必须做的是文件必须被切分为 4 GB 的分片。通过管道 | 将数据传输给 split 命令可以切分正在被写的镜像文件。

创建备份的方法相同,但命令会包括管道和切分命令。示例备份命令为 dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img ,其切分文件的新命令如下:

dcfldd if=/dev/sdc | split -b 4000MB - /tmp/SD-Card-Backup.img

注意: 大小后缀和对 dddcfldd 命令的意义相同。 split 命令中的破折号用于将通过管道从 dcfldd 命令传输过来的数据填充到输入文件。

文件会被保存为 SD-Card-Backup.imgaaSD-Card-Backup.imgab,如此类推。如果你担心文件大小太接近 4 GB 的限制,可以试着用 3500MB。

将文件恢复到设备也很简单。你使用 cat 命令将它们连接起来然后像下面这样用 dcfldd 写输出:

cat /tmp/SD-Card-Backup.img* | dcfldd of=/dev/sdc

你可以在命令中 dcfldd 部分包含任何需要的参数。

我希望你了解并能执行任何需要的数据备份和恢复,正如 SD 卡和类似设备所需的那样。

(题图:Pixabay, CC0)


via: https://www.linuxforum.com/threads/partition-backup.3638/

作者:Jarret 译者:ictlyh 校对:jasminepeng

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

这篇指南向你介绍使用 badips 滥用追踪器 abuse tracker 和 Fail2ban 保护你的服务器或计算机的步骤。我已经在 Debian 8 Jessie 和 Debian 7 Wheezy 系统上进行了测试。

什么是 badIPs?

BadIps 是通过 fail2ban 报告为不良 IP 的列表。

这个指南包括两个部分,第一部分介绍列表的使用,第二部分介绍数据提交。

使用 badIPs 列表

定义安全等级和类别

你可以通过使用 REST API 获取 IP 地址列表。

  • 当你使用 GET 请求获取 URL:https://www.badips.com/get/categories 后,你就可以看到服务中现有的所有不同类别。
  • 第二步,决定适合你的等级。 参考 badips 应该有所帮助(我个人使用 scope = 3):
  • 如果你想要编译一个统计信息模块或者将数据用于实验目的,那么你应该用等级 0 开始。
  • 如果你想用防火墙保护你的服务器或者网站,使用等级 2。可能也要和你的结果相结合,尽管它们可能没有超过 0 或 1 的情况。
  • 如果你想保护一个网络商店、或高流量、赚钱的电子商务服务器,我推荐你使用值 3 或 4。当然还是要和你的结果相结合。
  • 如果你是偏执狂,那就使用 5。

现在你已经有了两个变量,通过把它们两者连接起来获取你的链接。

http://www.badips.com/get/list/{{SERVICE}}/{{LEVEL}}

注意:像我一样,你可以获取所有服务。在这种情况下把服务的名称改为 any

最终的 URL 就是:

https://www.badips.com/get/list/any/3

创建脚本

所有都完成了之后,我们就会创建一个简单的脚本。

1、 把你的列表放到一个临时文件。

2、 在 iptables 中创建一个 chain (只需要创建一次)。(LCTT 译注:iptables 可能包括多个 tables ,表可能包括多个 chains ,链可能包括多个 规则 rules

3、 把所有链接到该链的数据(旧条目)刷掉。

4、 把每个 IP 链接到这个新的链。

5、 完成后,阻塞所有链接到该链的 INPUT / OUTPUT /FORWARD 请求。

6、 删除我们的临时文件。

为此,我们创建脚本:

cd /home/<user>/
vi myBlacklist.sh

把以下内容输入到文件。

#!/bin/sh
### based on this version http://www.timokorthals.de/?p=334
### adapted by Stéphane T.

_ipt=/sbin/iptables    ### iptables 路径(应该是这个)
_input=badips.db       ### 数据库的名称(会用这个名称下载)
_pub_if=eth0           ### 连接到互联网的设备(执行 $ifconfig 获取)
_droplist=droplist     ### iptables 中链的名称(如果你已经有这么一个名称的链,你就换另外一个)
_level=3               ### Blog(LCTT 译注:Bad log)等级:不怎么坏(0)、确认坏(3)、相当坏(5)(从 www.badips.com 获取详情)
_service=any           ### 记录日志的服务(从 www.badips.com 获取详情)

### 获取不良 IPs
wget -qO- http://www.badips.com/get/list/${_service}/$_level > $_input || { echo "$0: Unable to download ip list."; exit 1; }

### 设置我们的黑名单 ###
### 首先清除该链
$_ipt --flush $_droplist

### 创建新的链
### 首次运行时取消下面一行的注释
# $_ipt -N $_droplist

### 过滤掉注释和空行
### 保存每个 ip 到 $ip
for ip in `cat $_input`
do
    ### 添加到 $_droplist
    $_ipt -A $_droplist -i ${_pub_if} -s $ip -j LOG --log-prefix "Drop Bad IP List "
    $_ipt -A $_droplist -i ${_pub_if} -s $ip -j DROP
done

### 最后,插入或者追加到我们的黑名单列表
$_ipt -I INPUT -j $_droplist
$_ipt -I OUTPUT -j $_droplist
$_ipt -I FORWARD -j $_droplist

### 删除你的临时文件
rm $_input
exit 0

完成这些后,你应该创建一个定时任务定期更新我们的黑名单。

为此,我使用 crontab 在每天晚上 11:30(在我的延迟备份之前) 运行脚本。

crontab -e
23 30 * * * /home/<user>/myBlacklist.sh #Block BAD IPS

别忘了更改脚本的权限:

chmod + x myBlacklist.sh

现在终于完成了,你的服务器/计算机应该更安全了。

你也可以像下面这样手动运行脚本:

cd /home/<user>/
./myBlacklist.sh

它可能要花费一些时间,因此期间别中断脚本。事实上,耗时取决于该脚本的最后一行。

使用 Fail2ban 向 badIPs 报告 IP 地址

在本篇指南的第二部分,我会向你展示如何通过使用 Fail2ban 向 badips.com 网站报告不良 IP 地址。

Fail2ban >= 0.8.12

通过 Fail2ban 完成报告。取决于你 Fail2ban 的版本,你要使用本章的第一或第二节。

如果你 fail2ban 的版本是 0.8.12 或更新版本。

fail2ban-server --version

在每个你要报告的类别中,添加一个 action。

[ssh]
enabled = true
action = iptables-multiport
         badips[category=ssh]
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry= 6

正如你看到的,类别是 SSH,从 https://www.badips.com/get/categories 查找正确类别。

Fail2ban < 0.8.12

如果版本是 0.8.12 之前,你需要新建一个 action。你可以从 https://www.badips.com/asset/fail2ban/badips.conf 下载。

wget https://www.badips.com/asset/fail2ban/badips.conf -O /etc/fail2ban/action.d/badips.conf

在上面的 badips.conf 中,你可以像前面那样激活每个类别,也可以全局启用它:

cd /etc/fail2ban/
vi jail.conf
[DEFAULT]
...

banaction = iptables-multiport
            badips

现在重启 fail2ban - 从现在开始它就应该开始报告了。

service fail2ban restart

你的 IP 报告统计信息

最后一步 - 没那么有用。你可以创建一个密钥。 但如果你想看你的数据,这一步就很有帮助。

复制/粘贴下面的命令,你的控制台中就会出现一个 JSON 响应。

wget https://www.badips.com/get/key -qO -

{
  "err":"",
  "suc":"new key 5f72253b673eb49fc64dd34439531b5cca05327f has been set.",
  "key":"5f72253b673eb49fc64dd34439531b5cca05327f"
}

badips 网站,输入你的 “key” 并点击 “statistics”。

现在你就可以看到不同类别的统计信息。

(题图:Pixabay , CC0


via: https://www.howtoforge.com/tutorial/protect-your-server-computer-with-badips-and-fail2ban/

作者:Stephane T 译者:ictlyh 校对:wxy

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

服务器日志是一个由服务器创建并经常更新、用于抓取特定服务和应用的所有活动信息的日志文件。当你的应用或者服务出现问题时这个文件就会非常有用。从日志文件中你可以获取所有关于该问题的信息,例如基于警告或者错误信息它什么时候开始表现不正常。

LNAV(Log file Navigator)是 Linux 下一个基于控制台的高级日志文件查看器。它和其它文件查看器,例如 cat、more、tail 等,完成相同的任务,但有很多普通文件查看器没有的增强功能(尤其是它自带多种颜色和易于阅读的格式)。

它能在解压多个压缩日志文件(zip、gzip、bzip)的同时把它们合并到一起进行导航。基于消息的时间戳,lnav 能把多个日志文件合并到一个视图(Single Log Review),从而避免打开多个窗口。左边的颜色栏帮助显示消息所属的文件。

警告和错误的数量以(黄色和红色)高亮显示,因此我们能够很轻易地看到问题出现在哪里。它会自动加载新的日志行。

它按照消息时间戳排序显示所有文件的日志消息。顶部和底部的状态栏会告诉你位于哪个日志文件。如果你想按特定的模式查找,只需要在搜索弹窗中输入就会即时显示。

内建的日志消息解析器会自动从每一行中发现和提取详细信息。

当你用一个普通文件查看器打开一个日志文件时,它会用纯文本格式显示所有信息(如果用更直白的话说的话:纯白——黑底白字),这样很难去发现和理解哪里有警告或错误信息。为了克服这种情况,快速找到警告和错误信息来解决问题, lnav 是一个入手可用的更好的解决方案。

大部分常见的 Linux 日志文件都放在 /var/log/

lnav 自动检测以下日志格式

  • Common Web Access Log format(普通 web 访问日志格式)
  • CUPS page\_log
  • Syslog
  • Glog
  • VMware ESXi/vCenter 日志
  • dpkg.log
  • uwsgi
  • “Generic” – 以时间戳开始的任何消息
  • Strace
  • sudo
  • gzib & bizp

lnav 高级功能

  • 单一日志视图 - 基于消息时间戳,所有日志文件内容都会被合并到一个单一视图
  • 自动日志格式检测 - lnav 支持大部分日志格式
  • 过滤器 - 能进行基于正则表达式的过滤
  • 时间线视图
  • 适宜打印视图(Pretty-Print)
  • 使用 SQL 查询日志
  • 自动数据抽取
  • 实时操作
  • 语法高亮
  • Tab 补全
  • 当你查看相同文件集时可以自动保存和恢复会话信息。
  • Headless 模式

如何在 Linux 中安装 lnav

大部分发行版(Debian、Ubuntu、Mint、Fedora、suse、openSUSE、Arch Linux、Manjaro、Mageia 等等)默认都有 lnav 软件包,在软件包管理器的帮助下,我们可以很轻易地从发行版官方仓库中安装它。对于 CentOS/RHEL 我们需要启用 EPEL 仓库

[在 Debian/Ubuntu/LinuxMint 上安装 lnav]
$ sudo apt-get install lnav

[在 RHEL/CentOS 上安装 lnav]
$ sudo yum install lnav

[在 Fedora 上安装 lnav]
$ sudo dnf install lnav

[在 openSUSE 上安装 lnav]
$ sudo zypper install lnav

[在 Mageia 上安装 lnav]
$ sudo urpmi lnav

[在基于 Arch Linux 的系统上安装 lnav]
$ yaourt -S lnav

如果你的发行版没有 lnav 软件包,别担心,开发者提供了 .rpm.deb 安装包,因此我们可以轻易安装。确保你从 开发者 github 页面 下载最新版本的安装包。

[在 Debian/Ubuntu/LinuxMint 上安装 lnav]
$ sudo wget https://github.com/tstack/lnav/releases/download/v0.8.1/lnav_0.8.1_amd64.deb
$ sudo dpkg -i lnav_0.8.1_amd64.deb

[在 RHEL/CentOS 上安装 lnav]
$ sudo yum install https://github.com/tstack/lnav/releases/download/v0.8.1/lnav-0.8.1-1.x86_64.rpm

[在 Fedora 上安装 lnav]
$ sudo dnf install https://github.com/tstack/lnav/releases/download/v0.8.1/lnav-0.8.1-1.x86_64.rpm

[在 openSUSE 上安装 lnav]
$ sudo zypper install https://github.com/tstack/lnav/releases/download/v0.8.1/lnav-0.8.1-1.x86_64.rpm

[在 Mageia 上安装 lnav]
$ sudo rpm -ivh https://github.com/tstack/lnav/releases/download/v0.8.1/lnav-0.8.1-1.x86_64.rpm

不带参数运行 lnav

默认情况下你不带参数运行 lnav 时它会打开 syslog 文件。

# lnav

使用 lnav 查看特定日志文件

要用 lnav 查看特定的日志文件,在 lnav 命令后面添加日志文件路径。例如我们想看 /var/log/dpkg.log 日志文件。

# lnav /var/log/dpkg.log

用 lnav 查看多个日志文件

要用 lnav 查看多个日志文件,在 lnav 命令后面逐个添加日志文件路径,用一个空格隔开。例如我们想查看 /var/log/dpkg.log/var/log/kern.log 日志文件。

左边的颜色栏帮助显示消息所属的文件。另外顶部状态栏还会显示当前日志文件的名称。为了显示多个日志文件,大部分应用经常会打开多个窗口、或者在窗口中水平或竖直切分,但 lnav 使用不同的方式(它基于日期组合在同一个窗口显示多个日志文件)。

# lnav /var/log/dpkg.log /var/log/kern.log

使用 lnav 查看压缩的日志文件

要查看并同时解压被压缩的日志文件(zip、gzip、bzip),在 lnav 命令后面添加 -r 选项。

# lnav -r /var/log/Xorg.0.log.old.gz

直方图视图

首先运行 lnav 然后按 i 键切换到/出直方图视图。

查看日志解析器结果

首先运行 lnav 然后按 p 键打开显示日志解析器结果。

语法高亮

你可以搜索任何给定的字符串,它会在屏幕上高亮显示。首先运行 lnav 然后按 / 键并输入你想查找的字符串。为了测试,我搜索字符串 Default,看下面的截图。

Tab 补全

命令窗口支持大部分操作的 tab 补全。例如,在进行搜索时,你可以使用 tab 补全屏幕上显示的单词,而不需要复制粘贴。为了测试,我搜索字符串 /var/log/Xorg,看下面的截图。


via: http://www.2daygeek.com/install-and-use-advanced-log-file-viewer-navigator-lnav-in-linux/

作者:Magesh Maruthamuthu 译者:ictlyh 校对:wxy

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

这篇文章将指导你如何在 Samba AD DC 服务器上创建共享目录,然后通过 GPO 把共享目录挂载到域中的其它 Windows 成员机,并且从 Windows 域控的角度来管理共享权限。

这篇文章也包括在加入域的 Linux 机器上如何使用 Samba4 域帐号来访问及挂载共享文件。

需求:

1、在 Ubuntu 系统上使用 Samba4 来创建活动目录架构

2、在 Linux 命令行下管理 Samba4 AD 架构

3、使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构

4、在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略

5、将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式

6、使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录

第一步:创建 Samba 文件共享

1、在 Samba AD DC 服务器上创建共享非常简单。首先创建一个你想通过 SMB 协议来分享文件的目录,然后添加下面的文件系统权限,这是为了让 Windows AD DC 管理员给 Windows 客户端分配相应的共享权限。

假设在 AD DC 服务器上有一个新的共享目录 '/nas' ,执行下面的命令来授予必要的权限。

# mkdir /nas
# chmod -R 775 /nas
# chown -R root:"domain users" /nas
# ls -alh | grep nas

Create Samba Shared Directory

创建 Samba 共享目录

2、当你在 Samba4 AD DC 服务器上创建完成共享目录之后,你还得修改 samba 配置文件,添加下面的参数以允许通过 SMB 协议来共享文件。

# nano /etc/samba/smb.conf

在配置文件末尾添加以下内容:

[nas]
path = /nas
read only = no

Configure Samba Shared Directory

配置 Samba 共享目录

3、最后,你需要通过下面的命令重启 Samba AD DC 服务,以让修改的配置生效:

# systemctl restart samba-ad-dc.service

第二步:管理 Samba 共享权限

4、我们准备使用在 Samba AD DC 服务器上创建的域帐号(包括用户和组)来访问这个共享目录(禁止 Linux 系统用户访问共享目录)。

可以直接通过 Windows 资源管理器来完成 Samba 共享权限的管理,就跟你在 Windows 资源管理器中设置其它文件夹权限的方法一样。

首先,使用具有管理员权限的 Samba4 AD 域帐号登录到 Windows 机器。然而在 Windows 机器上的资源管理器中输入双斜杠和 Samba AD DC 服务器的 IP 地址或主机名或者是 FQDN 来访问共享文件和设置权限。

\\adc1
或
\\192.168.1.254
或
\\adc1.tecmint.lan

Access Samba Share Directory from Windows

从 Windows 机器访问 Samba 共享目录

5、右键单击共享文件,选择属性来设置权限。打开安全选项卡,依次修改域账号和组权限。使用高级选项来调整权限。

Configure Samba Share Directory Permissions

配置 Samba 共享目录权限

可参考下面的截图来为指定 Samba AD DC 认证用户设置权限。

Manage Samba Share Directory User Permissions

设置 Samba 共享目录用户权限

6、你也可以使用其它方法来设置共享权限,打开计算机管理-->连接到另外一台计算机。

找到共享目录,右键单击你想修改权限的目录,选择属性,打开安全选项卡。你可以在这里修改任何权限,就跟上图的修改共享文件夹权限的方法一样。

Connect to Samba Share Directory Machine

连接到 Samba 共享目录服务器

Manage Samba Share Directory Properties

管理 Samba 共享目录属性

Assign Samba Share Directory Permissions to Users

为域用户授予共享目录权限

第三步:通过 GPO 来映射 Samba 文件共享

7、要想通过域组策略来挂载 Samba 共享的目录,你得先到一台已安装了 RSAT 工具 的服务器上,打开 AD DC 工具,右键单击域名,选择新建-->共享文件夹。

Map Samba Share Folder

映射 Samba 共享文件夹

8、为共享文件夹添加一个名字,然后输入共享文件夹的网络路径,如下图所示。完成后单击 OK 按钮,你就可以在右侧看到文件夹了。

Set Samba Shared Folder Name Location

设置 Samba 共享文件夹名称及路径

9、下一步,打开组策略管理控制台,找到当前域的默认域策略脚本,然后打开并编辑该文件。

在 GPM 编辑器界面,打开 GPM 编辑器,找到用户配置 --> 首选项 --> Windows 设置,然而右键单击驱动器映射,选择新建 --> 映射驱动。

Map Samba Share Folder in Windows

在 Windows 机器上映射 Samba 共享文件夹

10、通过单击右边的三个小点,在新窗口中查询并添加共享目录的网络位置,勾选重新连接复选框,为该目录添加一个标签,选择驱动盘符,然后单击 OK 按钮来保存和应用配置。

Configure Network Location for Samba Share Directory

配置 Samba 共享目录的网络位置

11、最后,为了在本地机器上强制应用 GPO 更改而不重启系统,打开命令行提示符,然而执行下面的命令。

gpupdate /force

Apply GPO Changes

应用 GPO 更改

12、当你在本地机器上成功应用策略后,打开 Windows 资源管理器,你就可以看到并访问共享的网络文件夹了,能否正常访问共享目录取决于你在前一步的授权操作。

如果没有在命令行下强制应用组策略,你网络中的其它客户机需要重启或重新登录系统才可以看到共享目录。

Samba Shared Network Volume on Windows

Windows 机器上挂载的 Samba 网络磁盘

第四步:从 Linux 客户端访问 Samba 共享目录

13、已加入 Samba AD DC 中的 Linux 成员机上的系统用户也可以可以使用 Samba 帐号访问或在本地挂载共享目录。

首先,你得通过下面的命令来确保 Samba 客户端和工具已经安装完成。

$ sudo apt-get install smbclient cifs-utils

14、为了列出域环境中的共享目录,你可以通过下面的命令加入指定的域控服务器主机名来查询:

$ smbclient –L your_domain_controller –U%
或
$ smbclient –L \\adc1 –U%

List Samba Share Directory in Linux

在 Linux 机器上列出 Samba 共享目录

15、在命令行下使用域帐号以交互试方式连接到 Samba 共享目录:

$ sudo smbclient //adc/share_name -U domain_user

在命令行下,你可以列出共享目录内容,下载或上传文件到共享目录,或者执行其它操作。使用 ? 来查询所有可用的 smbclient 命令。

Connect Samba Share Directory in Linux

在 Linux 机器上连接 Samba 共享目录

16、在 Linux 机器上使用下面的命令来挂载 samba 共享目录。

$ sudo mount //adc/share_name /mnt -o username=domain_user

Mount Samba Share Directory in Linux

在 Linux 机器上挂载 samba 共享目录

根据实际情况,依次替换主机名、共享目录名、挂载点和域帐号。使用 mount 命令加上管道符和 grep 命令来过滤出 cifs 类型的文件系统。

通过上面的测试,我们可以看出,在 Samba4 AD DC 服务器上配置共享目录仅使用 Windows 访问控制列表( ACL ),而不是 POSIX ACL 。

通过文件共享把 Samba 配置为域成员以使用其它网络共享功能。同时,在另一个域控制器上配置 Windbindd 服务 ——在你开始发起网络共享文件之前。


作者简介:

我是一个电脑迷,开源 Linux 系统和软件爱好者,有 4 年多的 Linux 桌面、服务器系统使用和 Base 编程经验。

译者简介:

春城初春/春水初生/春林初盛/春風十裏不如妳 rusking


via: http://www.tecmint.com/create-shared-directory-on-samba-ad-dc-and-map-to-windows-linux/

作者:Matei Cezar 译者:rusking 校对:wxy

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

介绍

托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些。 让 Web 服务器对接 Django 的方法有很多。 Gunicorn 就是其中最简单的一个。

Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx。 Gunicorn 服务于应用程序,而 Nginx 处理静态内容。

Gunicorn

安装

使用 Pip 安装 Gunicorn 是超级简单的。 如果你已经使用 virtualenv 搭建好了你的 Django 项目,那么你就有了 Pip,并且应该熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安装 Gunicorn。

$ pip install gunicorn

配置

Gunicorn 最有吸引力的一个地方就是它的配置非常简单。处理配置最好的方法就是在 Django 项目的根目录下创建一个名叫 Gunicorn 的文件夹。然后在该文件夹内,创建一个配置文件。

在本篇教程中,配置文件名称是 gunicorn-conf.py。在该文件中,创建类似于下面的配置:

import multiprocessing

bind = 'unix:///tmp/gunicorn1.sock'
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
daemon = True

在上述配置的情况下,Gunicorn 会在 /tmp/ 目录下创建一个名为 gunicorn1.sock 的 Unix 套接字。 还会启动一些工作进程,进程数量相当于 CPU 内核数量的 2 倍。 它还会自动重新加载并作为守护进程运行。

运行

Gunicorn 的运行命令有点长,指定了一些附加的配置项。 最重要的部分是将 Gunicorn 指向你项目的 .wsgi 文件。

gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgi

上面的命令应该从项目的根目录运行。 -c 选项告诉 Gunicorn 使用你创建的配置文件。 -D 再次指定 gunicorn 为守护进程。 最后一部分指定 Gunicorn 的错误日志文件在你创建 Gunicorn 文件夹中的位置。 命令结束部分就是为 Gunicorn 指定 .wsgi 文件的位置。

Nginx

现在 Gunicorn 配置好了并且已经开始运行了,你可以设置 Nginx 连接它,为你的静态文件提供服务。 本指南假定你已经配置好了 Nginx,而且你通过它托管的站点使用了单独的 server 块。 它还将包括一些 SSL 信息。

如果你想知道如何让你的网站获得免费的 SSL 证书,请查看我们的 Let'sEncrypt 指南

# 连接到 Gunicorn
upstream yourproject-gunicorn {
    server unix:/tmp/gunicorn1.sock fail_timeout=0;
}

# 将未加密的流量重定向到加密的网站
server {
    listen       80;
    server_name  yourwebsite.com;
    return       301 https://yourwebsite.com$request_uri;
}

# 主服务块
server {
    # 设置监听的端口,指定监听的域名
    listen 443 default ssl;
    client_max_body_size 4G;
    server_name yourwebsite.com;

    # 指定日志位置
    access_log /var/log/nginx/yourwebsite.access_log main;
    error_log /var/log/nginx/yourwebsite.error_log info;

    # 告诉 nginx 你的 ssl 证书
    ssl on;
    ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;

    # 设置根目录
    root /var/www/yourvirtualenv/yourproject;

    # 为 Nginx 指定静态文件路径
    location /static/ {
        # Autoindex the files to make them browsable if you want
        autoindex on;
        # The location of your files
        alias /var/www/yourvirtualenv/yourproject/static/;
        # Set up caching for your static files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    # 为 Nginx 指定你上传文件的路径
    location /media/ {
        Autoindex if you want
        autoindex on;
        # The location of your uploaded files
        alias /var/www/yourvirtualenv/yourproject/media/;
        # Set up aching for your uploaded files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    location / {
        # Try your static files first, then redirect to Gunicorn
        try_files $uri @proxy_to_app;
    }

    # 将请求传递给 Gunicorn
    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass   http://njc-gunicorn;
    }

    # 缓存 HTML、XML 和 JSON
    location ~* \.(html?|xml|json)$ {
        expires 1h;
    }

    # 缓存所有其他的静态资源
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }
}

配置文件有点长,但是还可以更长一些。其中重点是指向 Gunicorn 的 upstream 块以及将流量传递给 Gunicorn 的 location 块。大多数其他的配置项都是可选,但是你应该按照一定的形式来配置。配置中的注释应该可以帮助你了解具体细节。

保存文件之后,你可以重启 Nginx,让修改的配置生效。

# systemctl restart nginx

一旦 Nginx 在线生效,你的站点就可以通过域名访问了。

结语

如果你想深入研究,Nginx 可以做很多事情。但是,上面提供的配置是一个很好的开始,并且你可以用于实践中。 如果你见惯了 Apache 和臃肿的 PHP 应用程序,像这样的服务器配置的速度应该是一个惊喜。


via: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux

作者:Nick Congleton 译者:Flowsnow 校对:wxy

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

早前的一篇文章中,我们深入讨论了 sudo 命令的相关内容。同时,在该文章的末尾有提到相关的命令 su 的部分内容。本文,我们将详细讨论关于 su 命令与 sudo 命令之间的区别。

在开始之前有必要说明一下,文中所涉及到的示例教程都已经在 Ubuntu 14.04 LTS 上测试通过。

Linux su 命令

su 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。换句话说,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。

su 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限),但是 - 正如前面所提到的 - su 命令也可以用于切换到任意非 root 用户。

如何使用 su 命令切换到 root 用户,如下:

不带命令行参数的 su 命令

如上,su 命令要求输入的密码是 root 用户的密码。所以,一般 su 命令需要输入目标用户的密码。在输入正确的密码之后,su 命令会在终端的当前会话中打开一个子会话。

su -

还有一种方法可以切换到 root 用户:运行 su - 命令,如下:

su - 命令

那么,su 命令与 su - 命令之间有什么区别呢?前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root 用户正常登录(从登录屏幕登录)。

su 命令手册页很清楚地说明了这一点:

可选参数 - 可提供的环境为用户在直接登录时的环境。

因此,你会觉得使用 su - 登录更有意义。但是, su 命令也是有用的,那么大家可能会想知道它在什么时候用到。以下内容摘自 ArchLinux wiki 网站 - 关于 su 命令的好处和坏处:

  • 有的时候,对于系统管理员(root)来讲,使用其他普通用户的 Shell 账户而不是自己的 root Shell 账户更会好一些。尤其是在处理用户问题时,最有效的方法就是是:登录目标用户以便重现以及调试问题。
  • 然而,在多数情况下,当从普通用户切换到 root 用户进行操作时,如果还使用普通用户的环境变量的话,那是不可取甚至是危险的操作。因为是在无意间切换使用普通用户的环境,所以当使用 root 用户进行程序安装或系统更改时,会产生与正常使用 root 用户进行操作时不相符的结果。例如,以普通用户安装程序会给普通用户意外损坏系统或获取对某些数据的未授权访问的能力。

注意:如果你想在 su - 命令的 - 后面传递更多的参数,那么你必须使用 su -l 而不是 su -。以下是 --l 命令行选项的说明:

-, -l, --login

提供相当于用户在直接登录时所期望的环境。

当使用 - 时,必须放在 su 命令的最后一个选项。其他选项(-l--login)无此限制。

su -c

还有一个值得一提的 su 命令行选项为:-c。该选项允许你提供在切换到目标用户之后要运行的命令。

su 命令手册页是这样说明:

-c, --command COMMAND

使用 -c 选项指定由 Shell 调用的命令。

被执行的命令无法控制终端。所以,此选项不能用于执行需要控制 TTY 的交互式程序。

参考示例:

su [target-user] -c [command-to-run]

示例中,command-to-run 将会被这样执行:

[shell]&nbsp;-c&nbsp;[command-to-run]

示例中的 shell 类型将会被目标用户在 /etc/passwd 文件中定义的登录 shell 类型所替代。

sudo vs. su

现在,我们已经讨论了关于 su 命令的基础知识,是时候来探讨一下 sudosu 命令之间的区别了。

关于密码

两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。

很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。

此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。

而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。

默认行为

两个命令之间的另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。关于为什么不鼓励以 root 用户身份进行工作的详细内容,请参考这里

日志记录

尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。

灵活性

sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。

sudo su

大概是因为使用 su 命令或直接以 root 用户身份登录有风险,所以,一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 sudo 命令。

然而,您还是可以成功执行 su 命令,而不用输入 root 用户的密码。运行以下命令:

sudo su

由于你使用 sudo 运行命令,你只需要输入当前用户的密码。所以,一旦完成操作,su 命令将会以 root 用户身份运行,这意味着它不会再要求输入任何密码。

PS:如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 sudo 命令或 sudo su 命令),你必须手动设置 root 用户密码,可以使用以下命令:

sudo passwd root

结论

当你需要可用的工具来提升(或一组完全不同的)权限来执行任务时,这篇文章以及之前的教程(其中侧重于 sudo 命令)应该能给你一个比较好的建议。 如果您也想分享关于 susudo 的相关内容或者经验,欢迎您在下方进行评论。


via: https://www.howtoforge.com/tutorial/sudo-vs-su/

作者:Himanshu Arora 译者:zhb127 校对:wxy

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