分类 系统运维 下的文章

FTP(文件传输协议)是一种用于通过网络在服务器和客户端之间传输文件的传统并广泛使用的标准工具,特别是在不需要身份验证的情况下(允许匿名用户连接到服务器)。我们必须明白,默认情况下 FTP 是不安全的,因为它不加密传输用户凭据和数据。

在本指南中,我们将介绍在 CentOS/RHEL7 和 Fedora 发行版中安装、配置和保护 FTP 服务器( VSFTPD 代表 “Very Secure FTP Daemon”)的步骤。

请注意,本指南中的所有命令将以 root 身份运行,如果你不使用 root 帐户操作服务器,请使用 sudo命令 获取 root 权限。

步骤 1:安装 FTP 服务器

1、 安装 vsftpd 服务器很直接,只要在终端运行下面的命令。

# yum install vsftpd

2、 安装完成后,服务先是被禁用的,因此我们需要手动启动,并设置在下次启动时自动启用:

# systemctl start vsftpd
# systemctl enable vsftpd

3、 接下来,为了允许从外部系统访问 FTP 服务,我们需要打开 FTP 守护进程监听的 21 端口:

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

步骤 2: 配置 FTP 服务器

4、 现在,我们会进行一些配置来设置并加密我们的 FTP 服务器,让我们先备份一下原始配置文件 /etc/vsftpd/vsftpd.conf

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

接下来,打开上面的文件,并将下面的选项设置相关的值:

anonymous_enable=NO             ### 禁用匿名登录
local_enable=YES        ### 允许本地用户登录
write_enable=YES        ### 允许对文件系统做改动的 FTP 命令
local_umask=022             ### 本地用户创建文件所用的 umask 值
dirmessage_enable=YES           ### 当用户首次进入一个新目录时显示一个消息
xferlog_enable=YES      ### 用于记录上传、下载细节的日志文件
connect_from_port_20=YES        ### 使用端口 20 (ftp-data)用于 PORT 风格的连接
xferlog_std_format=YES          ### 使用标准的日志格式
listen=NO               ### 不要让 vsftpd 运行在独立模式
listen_ipv6=YES             ### vsftpd 将监听 IPv6 而不是 IPv4
pam_service_name=vsftpd         ###  vsftpd 使用的 PAM 服务名
userlist_enable=YES             ### vsftpd 支持载入用户列表
tcp_wrappers=YES        ### 使用 tcp wrappers

5、 现在基于用户列表文件 /etc/vsftpd.userlist 来配置 FTP 来允许/拒绝用户的访问。

默认情况下,如果设置了 userlist_enable=YES,当 userlist_deny 选项设置为 YES 的时候,userlist_file=/etc/vsftpd.userlist 中列出的用户被拒绝登录。

然而, 更改配置为 userlist_deny=NO,意味着只有在 userlist_file=/etc/vsftpd.userlist 显式指定的用户才允许登录。

userlist_enable=YES                   ### vsftpd 将从 userlist_file 给出的文件中载入用户名列表
userlist_file=/etc/vsftpd.userlist    ### 存储用户名的文件
userlist_deny=NO   

这并不是全部,当用户登录到 FTP 服务器时,它们会进入 chroot jail 中,这是仅作为 FTP 会话主目录的本地根目录。

接下来,我们将介绍如何将 FTP 用户 chroot 到 FTP 用户的家目录(本地 root)中的两种可能情况,如下所述。

6、 接下来添加下面的选项来限制 FTP 用户到它们自己的家目录。

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES 意味着用户可以设置 chroot jail,默认是登录后的家目录。

同样默认的是,出于安全原因,vsftpd 不会允许 chroot jail 目录可写,然而,我们可以添加 allow_writeable_chroot=YES 来覆盖这个设置。

保存并关闭文件。

步骤 3: 用 SELinux 加密 FTP 服务器

7、现在,让我们设置下面的 SELinux 布尔值来允许 FTP 能读取用户家目录下的文件。请注意,这原本是使用以下命令完成的:

# setsebool -P ftp_home_dir on

然而,由于这个 bug 报告:https://bugzilla.redhat.com/show_bug.cgi?id=1097775ftp_home_dir 指令默认是禁用的。

现在,我们会使用 semanage 命令来设置 SELinux 规则来允许 FTP 读取/写入用户的家目录。

# semanage boolean -m ftpd_full_access --on

这时,我们需要重启 vsftpd 来使目前的设置生效:

# systemctl restart vsftpd

步骤 4: 测试 FTP 服务器

8、 现在我们会用 useradd 命令创建一个 FTP 用户来测试 FTP 服务器。

# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
# passwd ravi

之后,我们如下使用 echo 命令添加用户 ravi 到文件 /etc/vsftpd.userlist 中:

# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist

9、 现在是时候测试我们上面的设置是否可以工作了。让我们使用匿名登录测试,我们可以从下面的截图看到匿名登录没有被允许。

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

Test Anonymous FTP Login

测试 FTP 匿名登录

10、 让我们也测试一下没有列在 /etc/vsftpd.userlist 中的用户是否有权限登录,下面截图是没有列入的情况:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

FTP User Login Failed

FTP 用户登录失败

11、 现在最后测试一下列在 /etc/vsftpd.userlist 中的用户是否在登录后真的进入了他/她的家目录:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

FTP User Login Successful

用户成功登录

警告:使用 allow_writeable_chroot=YES 有一定的安全隐患,特别是用户具有上传权限或 shell 访问权限时。

只有当你完全知道你正做什么时才激活此选项。重要的是要注意,这些安全性影响并不是 vsftpd 特定的,它们适用于所有提供了将本地用户置于 chroot jail 中的 FTP 守护进程。

因此,我们将在下一节中看到一种更安全的方法来设置不同的不可写本地根目录。

步骤 5: 配置不同的 FTP 家目录

12、 再次打开 vsftpd 配置文件,并将下面不安全的选项注释掉:

#allow_writeable_chroot=YES

接着为用户(ravi,你的可能不同)创建另外一个替代根目录,并将所有用户对该目录的可写权限移除:

# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp

13、 接下来,在用户存储他/她的文件的本地根目录下创建一个文件夹:

# mkdir /home/ravi/ftp/files
# chown ravi:ravi  /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/

接着在 vsftpd 配置文件中添加/修改这些选项:

user_sub_token=$USER         ### 在本地根目录下插入用户名
local_root=/home/$USER/ftp   ### 定义任何用户的本地根目录

保存并关闭文件。再说一次,有新的设置后,让我们重启服务:

# systemctl restart vsftpd

14、 现在最后在测试一次查看用户本地根目录就是我们在他的家目录创建的 FTP 目录。

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

FTP User Home Directory Login Successful

FTP 用户家目录登录成功

就是这样了!在本文中,我们介绍了如何在 CentOS 7 中安装、配置以及加密的 FTP 服务器,使用下面的评论栏给我们回复,或者分享关于这个主题的任何有用信息。

建议阅读: 在 RHEL/CentOS 7 上安装 ProFTPD 服务器

在下一篇文章中,我们还将向你介绍如何在 CentOS 7 中保护使用 SSL/TLS连接的 FTP 服务器,再此之前,请继续关注 TecMint。


作者简介:

Aaron Kili 是一名 Linux 和 F.O.S.S 爱好者,即将从事 Linux 系统管理员和网页开发工作,他日前是 TecMint 技术网站的原创作者,非常喜欢使用电脑工作,坚信分享知识是一种美德。


via: http://www.tecmint.com/install-ftp-server-in-centos-7/

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

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

这篇文章讲述了如何使用 Authconfig-gtk 工具将 CentOS 7 桌面系统加入到 Samba4 AD 域环境中,并使用域帐号登录到 CentOS 系统。

要求

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

2、CentOS 7.3 安装指南

第一步:在 CentOS 系统中配置 Samba4 AD DC

1、在将 CentOS 7 加入到 Samba4 域环境之前,你得先配置 CentOS 系统的网络环境,确保在 CentOS 系统中通过 DNS 可以解析到域名。

打开网络设置,关闭有线网卡。打开下方的设置按钮,手动编辑网络设置,指定 DNS 的 IP 地址为 Samba4 AD DC 服务器的 IP 地址。

设置完成之后,应用配置,并打开有线网卡。

网络设置

配置网络

2、下一步,打开网络配置文件,在文件末尾添加一行域名信息。这样能确保当你仅使用主机名来查询域中的 DNS 记录时, DNS 解析器会自动把域名添加进来。

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

添加下面一行:

SEARCH="your_domain_name"

网卡配置

3、最后,重启网卡服务以应用更改,并验证解析器的配置文件是否正确配置。我们通过使用 ping 命令加上 DC 服务器的主机名或域名以验证 DNS 解析能否正常运行。

$ sudo systemctl restart network
$ cat /etc/resolv.conf
$ ping -c1 adc1
$ ping -c1 adc2
$ ping tecmint.lan

验证网络配置是否正常

4、同时,使用下面的命令来配置你的主机名,然后重启计算机以应用更改:

$ sudo hostnamectl set-hostname your_hostname
$ sudo init 6

使用下面的命令来验证主机名是否正确配置:

$ cat /etc/hostname
$ hostname

5、最后一步配置是使用下面的命令来保证系统时间跟 Samba4 AD DC 服务器的时间同步:

$ sudo yum install ntpdate
$ sudo ntpdate -ud domain.tld

第二步:安装要加入 Samba4 AD DC 所必需的软件包

6、为了将 CentOS 7 加入到活动目录域中,你需要使用下面的命令来安装相关的软件包:

$ sudo yum install samba samba samba-winbind krb5-workstation

7、最后,安装 CentOS 软件库中提供的图形化界面软件包: Authconfig-gtk 。该软件用于将 CentOS 系统集成到域环境中。

$ sudo yum install authconfig-gtk

第三步:将 CentOS 7 桌面系统集成到 Samba4 AD DC 域环境中

8、将 CentOS 加入到域的过程非常简单。使用有 root 权限的帐号在命令行下打开 Authconfig-gtk 程序,然后按下图所示修改相关配置即可:

$ sudo authconfig-gtk

打开身份或认证配置页面:

  • 用户帐号数据库 : 选择 Winbind
  • Winbind 域 : 你的域名
  • 安全模式 : ADS
  • Winbind ADS 域 : 你的域名.TLD
  • 域控制器 : 域控服务器的全域名
  • 默认Shell : /bin/bash
  • 勾选允许离线登录

域认证配置

打开高级选项配置页面:

  • 本地认证选项 : 支持指纹识别
  • 其它认证选项 : 用户首次登录创建家目录

高级认证配置

9、修改完上面的配置之后,返回到身份或认证配置页面,点击加入域按钮,在弹出的提示框点保存即可。

身份和认证

保存认证配置

10、保存配置之后,系统将会提示你提供域管理员信息以将 CentOS 系统加入到域中。输入域管理员帐号及密码后点击 OK 按钮,加入域完成。

加入 Winbind 域环境

11、加入域后,点击应用按钮以让配置生效,选择所有的 windows 并重启机器。

应用认证配置

12、要验证 CentOS 是否已成功加入到 Samba4 AD DC 中,你可以在安装了 RSAT 工具 的 windows 机器上,打开 AD 用户和计算机工具,点击域中的计算机。

你将会在右侧看到 CentOS 主机信息。

活动目录用户和计算机

第四步:使用 Samba4 AD DC 帐号登录 CentOS 桌面系统

13、选择使用其它账户,然后输入域帐号和密码进行登录,如下图所示:

Domain\domain_account
或
[email protected]

使用其它账户

输入域用户名

14、在 CentOS 系统的命令行中,你也可以使用下面的任一方式来切换到域帐号进行登录:

$ su - domain\domain_user
$ su - [email protected]

使用域帐号登录

使用域帐号邮箱登录

15、要为域用户或组添加 root 权限,在命令行下使用 root 权限帐号打开 sudoers 配置文件,添加下面一行内容:

YOUR_DOMAIN\\domain_username             ALL=(ALL:ALL) ALL      #For domain users
%YOUR_DOMAIN\\your_domain\  group            ALL=(ALL:ALL) ALL  #For domain groups

指定用户和用户组权限

16、使用下面的命令来查看域控制器信息:

$ sudo net ads info

查看域控制器信息

17、你可以在安装了 Winbind 客户端的机器上使用下面的命令来验证 CentOS 加入到 Samba4 AD DC 后的信任关系是否正常:

$ sudo yum install samba-winbind-clients

然后,执行下面的一些命令来查看 Samba4 AD DC 的相关信息:

$ wbinfo -p ### Ping 域名
$ wbinfo -t ### 检查信任关系
$ wbinfo -u ### 列出域用户帐号
$ wbinfo -g ### 列出域用户组
$ wbinfo -n domain_account ### 查看域帐号的 SID 信息

查看 Samba4 AD DC 信息

18、如果你想让 CentOS 系统退出域环境,使用具有管理员权限的帐号执行下面的命令,后面加上域名及域管理员帐号,如下图所示:

$ sudo net ads leave your_domain -U domain_admin_username

退出 Samba4 AD 域

这篇文章就写到这里吧!尽管上面的这些操作步骤是将 CentOS 7 系统加入到 Samba4 AD DC 域中,其实这些步骤也同样适用于将 CentOS 7 桌面系统加入到 Microsoft Windows Server 2008 或 2012 的域中。


作者简介:

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


via: http://www.tecmint.com/join-centos-7-to-samba4-active-directory/

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

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

在一开始的设计中,FTP(文件传输协议)就是不安全的,意味着它不会加密两台机器之间传输的数据以及用户的凭据。这使得数据和服务器安全面临很大威胁。

在这篇文章中,我们会介绍在 CentOS/RHEL 7 以及 Fedora 中如何在 FTP 服务器中手动启用数据加密服务;我们会介绍使用 SSL/TLS 证书保护 VSFTPD(Very Secure FTP Daemon)服务的各个步骤。

前提条件:

在我们开始之前,要注意本文中所有命令都以 root 用户运行,否则,如果现在你不是使用 root 用户控制服务器,你可以使用 sudo 命令 去获取 root 权限。

第一步:生成 SSL/TLS 证书和密钥

1、 我们首先要在 /etc/ssl 目录下创建用于保存 SSL/TLS 证书和密钥文件的子目录:

# mkdir /etc/ssl/private

2、 然后运行下面的命令为 vsftpd 创建证书和密钥并保存到一个文件中,下面会解析使用的每个选项。

  1. req - 是 X.509 Certificate Signing Request (CSR,证书签名请求)管理的一个命令。
  2. x509 - X.509 证书数据管理。
  3. days - 定义证书的有效日期。
  4. newkey - 指定证书密钥处理器。
  5. rsa:2048 - RSA 密钥处理器,会生成一个 2048 位的密钥。
  6. keyout - 设置密钥存储文件。
  7. out - 设置证书存储文件,注意证书和密钥都保存在一个相同的文件:/etc/ssl/private/vsftpd.pem。
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048

上面的命令会让你回答以下的问题,记住使用你自己情况的值。

Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email protected]

第二步:配置 VSFTPD 使用 SSL/TLS

3、 在我们进行任何 VSFTPD 配置之前,首先开放 990 和 40000-50000 端口,以便在 VSFTPD 配置文件中分别定义 TLS 连接的端口和被动端口的端口范围:

# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload

4、 现在,打开 VSFTPD 配置文件并在文件中指定 SSL 的详细信息:

# vi /etc/vsftpd/vsftpd.conf

找到 ssl_enable 选项把它的值设置为 YES 激活使用 SSL,另外,由于 TSL 比 SSL 更安全,我们会使用 ssl_tlsv1_2 选项让 VSFTPD 使用更严格的 TLS:

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

5、 然后,添加下面的行来定义 SSL 证书和密钥文件的位置:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

6、 下面,我们要阻止匿名用户使用 SSL,然后强制所有非匿名用户登录使用安全的 SSL 连接进行数据传输和登录过程中的密码发送:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7、 另外,我们还可以添加下面的选项增强 FTP 服务器的安全性。当选项 require_ssl_reuse 被设置为 YES 时,要求所有 SSL 数据连接都会重用 SSL 会话;这样它们会知道控制通道的主密码。

因此,我们需要把它关闭。

require_ssl_reuse=NO

另外,我们还要用 ssl_ciphers 选项选择 VSFTPD 允许用于加密 SSL 连接的 SSL 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者:

ssl_ciphers=HIGH

8、 现在,设置被动端口的端口范围(最小和最大端口)。

pasv_min_port=40000
pasv_max_port=50000

9、 选择性启用 debug_ssl 选项以允许 SSL 调试,这意味着 OpenSSL 连接诊断会被记录到 VSFTPD 日志文件:

debug_ssl=YES

保存所有更改并关闭文件。然后让我们重启 VSFTPD 服务:

# systemctl restart vsftpd

第三步:用 SSL/TLS 连接测试 FTP 服务器

10、 完成上面的所有配置之后,像下面这样通过在命令行中尝试使用 FTP 测试 VSFTPD 是否使用 SSL/TLS 连接:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

验证 FTP SSL 安全连接

验证 FTP SSL 安全连接

从上面的截图中,我们可以看到这里有个错误提示我们 VSFTPD 只允许用户从支持加密服务的客户端登录。

命令行并不会提供加密服务因此产生了这个错误。因此,为了安全地连接到服务器,我们需要一个支持 SSL/TLS 连接的 FTP 客户端,例如 FileZilla。

第四步:安装 FileZilla 以便安全地连接到 FTP 服务器

11、 FileZilla 是一个现代化、流行且重要的跨平台的 FTP 客户端,它默认支持 SSL/TLS 连接。

要在 Linux 上安装 FileZilla,可以运行下面的命令:

--------- On CentOS/RHEL/Fedora --------- 
# yum install epel-release filezilla
--------- On Debian/Ubuntu ---------
$ sudo apt-get install  filezilla   

12、 当安装完成后(或者你已经安装了该软件),打开它,选择 File => Sites Manager 或者按 Ctrl + S 打开 Site Manager 界面。

点击 New Site 按钮添加一个新的站点/主机连接详细信息。

在 FileZilla 中添加新 FTP 站点

在 FileZilla 中添加新 FTP 站点

  1. 下一步,像下面这样设置主机/站点名称、添加 IP 地址、定义使用的协议、加密和登录类型(使用你自己情况的值):
Host:  192.168.56.10
Protocol:  FTP – File Transfer Protocol
Encryption:  Require explicit FTP over   #recommended 
Logon Type: Ask for password            #recommended 
User: username

在 Filezilla 中添加 FTP 服务器详细信息

在 Filezilla 中添加 FTP 服务器详细信息

14、 然后点击 Connect,再次输入密码,然后验证用于 SSL/TLS 连接的证书,再一次点击 OK 连接到 FTP 服务器:

验证 FTP SSL 证书

验证 FTP SSL 证书

到了这里,我们应该使用 TLS 连接成功地登录到了 FTP 服务器,在下面的界面中检查连接状态部分获取更多信息。

通过 TLS/SSL 连接到 FTP 服务器

通过 TLS/SSL 连接到 FTP 服务器

15、 最后,在文件目录尝试 从本地传输文件到 FTP 服务器,看 FileZilla 界面后面的部分查看文件传输相关的报告。

使用 FTP 安全地传输文件

使用 FTP 安全地传输文件

就是这些。记住 FTP 默认是不安全的,除非我们像上面介绍的那样配置它使用 SSL/TLS 连接。在下面的评论框中和我们分享你关于这篇文章/主题的想法吧。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 的爱好者,Linux 系统管理员,网络开发员,目前也是 TecMint 的内容创作者,他喜欢和电脑一起工作,并且坚信共享知识。


via: http://www.tecmint.com/secure-vsftpd-using-ssl-tls-on-centos/

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

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

rdiff-backup 是一个用于本地/远程增量备份的强大而易用的 Python 脚本,它适用于任何 POSIX 操作系统,如Linux、Mac OS X 或 Cygwin。它集合了镜像和增量备份的显著特性。

值得注意的是,它保留了子目录、dev 文件、硬链接,以及关键的文件属性,如权限、uid/gid 所有权、修改时间、扩展属性、acl 以及 resource fork。它可以通过管道以高效带宽的模式工作,这与流行的 rsync 备份工具类似。

rdiff-backup 通过使用 SSH 将单个目录备份到另一个目录,这意味着数据传输被加密并且是安全的。目标目录(在远程系统上)最终会得到源目录的完整副本,但是此外的反向差异会存储在目标目录的特殊子目录中,从而可以恢复前一段时间丢失的文件。

依赖

要在 Linux 中使用 rdiff-backup,你需要在系统上安装以下软件包:

  • Python v2.2 或更高版本
  • librsync v0.9.7 或更高版本
  • pylibacl 和 pyxattr Python 模块是可选的,但它们分别是 POSIX 访问控制列表(ACL)和扩展属性支持必需的。
  • rdiff-backup-statistics 需要 Python v2.4 或更高版本。

如何在 Linux 中安装 rdiff-backup

重要:如果你通过网络运行它,则必须在两个系统中都安装 rdiff-backup,两者最好是相同版本。

该脚本已经存在于主流 Linux 发行版的官方仓库中,只需运行以下命令来安装 rdiff-backup 及其依赖关系:

在 Debian/Ubuntu 中

$ sudo apt-get update
$ sudo apt-get install librsync-dev rdiff-backup

在 CentOS/RHEL 7 中

# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
# rpm -ivh epel-release-7-9.noarch.rpm
# yum install librsync rdiff-backup

在 CentOS/RHEL 6 中

# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install librsync rdiff-backup

在 Fedora 中

# yum install librsync rdiff-backup
# dnf install librsync rdiff-backup [Fedora 22+]

如何在 Linux 中使用 rdiff-backup

如前所述,rdiff-backup 使用 SSH 连接到网络上的远程计算机,SSH 的默认身份验证方式是用户名/密码,这通常需要人工交互。

但是,要自动执行诸如脚本等自动备份之类的任务,那么你需要配置使用 SSH 密钥无密码登录 SSH,因为 SSH 密钥增加了两台 Linux服务器之间的信任来简化文件同步或传输

在你设置了 SSH 无密码登录后,你可以使用下面的例子开始使用该脚本。

备份文件到不同分区

下面的例子会备份 /etc 文件夹到另外一个分区的 Backup 文件夹内:

$ sudo rdiff-backup /etc /media/aaronkilik/Data/Backup/mint_etc.backup

Backup Files to Different Partition

备份文件到不同分区

要排除一个特定文件夹和它的子目录,你可以如下使用 --exclude 选项:

$ sudo rdiff-backup --exclude /etc/cockpit --exclude /etc/bluetooth /media/aaronkilik/Data/Backup/mint_etc.backup

我们可以如下使用 --include-special-files 包含所有的设备文件、fifo 文件、socket 文件和链接文件:

$ sudo rdiff-backup --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

还有另外两个重要标志来用于选择文件,--max-file-size 用来排除大于给定字节大小的文件,--min-file-size 用于排除小于给定字节大小的文件:

$ sudo rdiff-backup --max-file-size 5M --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

在本地 Linux 服务器上备份远程文件

要这么做,我们使用:

Remote Server (tecmint)         : 192.168.56.102 
Local Backup Server (backup)    : 192.168.56.10

如前所述,你必须在两台机器上安装相同版本的 rdiff-backup,如下所示,请尝试在两台机器上检查版本:

$ rdiff-backup -V

Check rdiff Version on Servers

检查服务器中 rdiff 版本

在备份服务器中,像这样创建一个存储备份文件的目录:

# mkdir -p /backups

现在在备份服务器中,运行下面的命令来将远程 Linux 服务器 192.168.56.102 中的 /var/log//root 备份到 /backups 中:

# rdiff-backup [email protected]::/var/log/ /backups/192.168.56.102_logs.backup
# rdiff-backup [email protected]::/root/ /backups/192.168.56.102_rootfiles.backup

下面的截图展示了远程服务器 192.168.56.102 中的 root 文件夹以及 192.168.56.10 备份服务器中的已备份文件:

Backup Remote Directory on Local Server

在本地服务器备份远程目录

注意截图中 “backup” 目录中创建的 rdiff-backup-data 文件夹,它包含了备份过程和增量文件的重要数据。

rdiff-backup - Backup Process Files

rdiff-backup – 备份过程文件

现在,在 192.168.56.102 服务器中,如下所示 root 目录已经添加了额外的文件:

Verify Backup Directory

验证备份目录

让我们再次运行备份命令以获取更改的数据,我们可以使用 -v[0-9](其中数字指定详细程度级别,默认值为 3,这是静默模式)选项设置详细功能:

# rdiff-backup -v4 [email protected]::/root/ /backups/192.168.56.102_rootfiles.backup 

Incremental Backup with Summary

带有摘要的增量备份

要列出 /backups/192.168.56.102_rootfiles.backup 目录中包含的部分增量备份的数量和日期,我们可以运行:

# rdiff-backup -l /backups/192.168.56.102_rootfiles.backup/

使用 cron 自动进行 rdiff-back 备份

使用 --print-statistics 成功备份后,我们可以打印摘要统计信息。但是,如果我们不设置此选项,我们可以仍从会话统计中获得。在手册页的 “STATISTICS” 部分中阅读有关此选项的更多信息。

-remote-schema 选项使我们能够指定使用替代方法连接到远程计算机。

现在,我们开始在备份服务器 192.168.56.10 上创建一个 backup.sh 脚本,如下所示:

# cd ~/bin
# vi backup.sh

添加下面的行到脚本中。

#!/bin/bash
#This is a rdiff-backup utility backup script
#Backup command
rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only  /"'  [email protected]::/var/logs  /backups/192.168.56.102_logs.back
#Checking rdiff-backup command success/error
status=$?
if [ $status != 0 ]; then
#append error message in ~/backup.log file
echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
exit 1;
fi
#Remove incremental backup files older than one month
rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back

保存文件并退出,接着运行下面的命令在服务器 192.168.56.10 上的 crontab 中添加此脚本:

# crontab -e

添加此行在每天午夜运行你的备份脚本:

0   0  *  *  * /root/bin/backup.sh > /dev/null 2>&1

保存 crontab 并退出,现在我们已经成功自动化了备份过程。确保一切如希望那样工作。

阅读 rdiff-backup 的手册页获取更多信息、详尽的使用选项以及示例:

# man rdiff-backup

rdiff-backup 主页: http://www.nongnu.org/rdiff-backup/

就是这样了!在本教程中,我们向你展示了如何安装并基础地使用 rdiff-backup 这个易于使用的 Python 脚本,用于 Linux 中的本地/远程增量备份。 请通过下面的反馈栏与我们分享你的想法。

(题图:Pixabay,CC0)


作者简介:

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


via: http://www.tecmint.com/rdiff-backup-remote-incremental-backup-for-linux/

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

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

Jenkins 是从 Hudson 项目衍生出来的自动化服务器。Jenkins 是一个基于服务器的应用程序,运行在 Java servlet 容器中,它支持包括 Git、SVN 以及 Mercurial 在内的多种 SCM( 源码控制工具 Source Control Management )。Jenkins 提供了上百种插件帮助你的项目实现自动化。Jenkins 由 Kohsuke Kawaguchi 开发,在 2011 年使用 MIT 协议发布了第一个发行版,它是个自由软件。

在这篇指南中,我会向你介绍如何在 Ubuntu 16.04 中安装最新版本的 Jenkins。我们会用自己的域名运行 Jenkins,在 apache web 服务器中安装和配置 Jenkins,而且支持反向代理。

前提

  • Ubuntu 16.04 服务器 - 64 位
  • Root 权限

第一步 - 安装 Java OpenJDK 7

Jenkins 基于 Java,因此我们需要在服务器上安装 Java OpenJDK 7。在这里,我们会从一个 PPA 仓库安装 Java 7,首先我们需要添加这个仓库。

默认情况下,Ubuntu 16.04 没有安装用于管理 PPA 仓库的 python-software-properties 软件包,因此我们首先需要安装这个软件。使用 apt 命令安装 python-software-properties。

apt-get install python-software-properties

下一步,添加 Java PPA 仓库到服务器中。

add-apt-repository ppa:openjdk-r/ppa

用 apt 命令更新 Ubuntu 仓库并安装 Java OpenJDK。

apt-get update
apt-get install openjdk-7-jdk

输入下面的命令验证安装:

java -version

你会看到安装到服务器上的 Java 版本。

在 Ubuntu 16.04 上安装 Java OpenJDK 7

第二步 - 安装 Jenkins

Jenkins 给软件安装包提供了一个 Ubuntu 仓库,我们会从这个仓库中安装 Jenkins。

用下面的命令添加 Jenkins 密钥和仓库到系统中。

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo 'deb https://pkg.jenkins.io/debian-stable binary/' | tee -a /etc/apt/sources.list

更新仓库并安装 Jenkins。

apt-get update
apt-get install jenkins

安装完成后,用下面的命令启动 Jenkins。

systemctl start jenkins

通过检查 Jenkins 默认使用的端口(端口 8080)验证 Jenkins 正在运行。我会像下面这样用 netstat 命令检测:

netstat -plntu

Jenkins 已经安装好了并运行在 8080 端口。

已经将 Jenkins 安装到 8080 端口

第三步 - 为 Jenkins 安装和配置 Apache 作为反向代理

在这篇指南中,我们会在一个 Apache web 服务器中运行 Jenkins,我们会为 Jenkins 配置 apache 作为反向代理。首先我会安装 apache 并启用一些需要的模块,然后我会为 Jenkins 用域名 my.jenkins.id 创建虚拟主机文件。请在这里使用你自己的域名并在所有配置文件中出现的地方替换。

从 Ubuntu 仓库安装 apache2 web 服务器。

apt-get install apache2

安装完成后,启用 proxy 和 proxy\_http 模块以便将 apache 配置为 Jenkins 的前端服务器/反向代理。

a2enmod proxy
a2enmod proxy_http

下一步,在 sites-available 目录创建新的虚拟主机文件。

cd /etc/apache2/sites-available/
vim jenkins.conf

粘贴下面的虚拟主机配置。

<Virtualhost *:80>
    ServerName        my.jenkins.id
    ProxyRequests     Off
    ProxyPreserveHost On
    AllowEncodedSlashes NoDecode

    <Proxy http://localhost:8080/*>
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass         /  http://localhost:8080/ nocanon
    ProxyPassReverse  /  http://localhost:8080/
    ProxyPassReverse  /  http://my.jenkins.id/
</Virtualhost>

保存文件。然后用 a2ensite 命令激活 Jenkins 虚拟主机。

a2ensite jenkins

重启 Apache 和 Jenkins。

systemctl restart apache2
systemctl restart jenkins

检查 Jenkins 和 Apache 正在使用 80 和 8080 端口。

netstat -plntu

检查 Apache 和 Jenkins 是否在运行

第四步 - 配置 Jenkins

Jenkins 用域名 'my.jenkins.id' 运行。打开你的 web 浏览器然后输入 URL。你会看到要求你输入初始管理员密码的页面。Jenkins 已经生成了一个密码,因此我们只需要显示并把结果复制到密码框。

cat 命令显示 Jenkins 初始管理员密码。

cat /var/lib/jenkins/secrets/initialAdminPassword
a1789d1561bf413c938122c599cf65c9

获取 Jenkins 管理员密码

将结果粘贴到密码框然后点击 Continue。

安装和配置 Jenkins

现在为了后面能比较好的使用,我们需要在 Jenkins 中安装一些插件。选择 Install Suggested Plugin,点击它。

安装 Jenkins 插件

Jenkins 插件安装过程:

Jenkins 安装完插件

安装完插件后,我们需要创建一个新的管理员密码。输入你的管理员用户名、密码、电子邮件等,然后点击 ‘Save and Finish’。

创建 Jenkins 管理员账户

点击 start 开始使用 Jenkins。你会被重定向到 Jenkins 管理员面板。

重定向到管理员面板

成功完成 Jenkins 安装和配置。

Jenkins 管理员面板

第五步 - Jenkins 安全

在 Jenkins 管理员面板,我们需要为 Jenkins 配置标准的安全,点击 ‘Manage Jenkins’ 和 ‘Configure Global Security’。

Jenkins 全局安全设置

Jenkins 在 ‘Access Control’ 部分提供了多种认证方法。为了能够控制所有的用户权限,我选择了 ‘Matrix-based Security’。在复选框 ‘User/Group’ 中启用 admin 用户。通过勾选所有选项给 admin 所有权限,给 anonymous 只读权限。现在点击 ‘Save’。

配置 Jenkins 权限

你会被重定向到面板,如果出现了登录选项,只需输入你的管理员账户和密码。

第六步 - 测试一个简单的自动化任务

在这一部分,我想为 Jenkins 服务测试一个简单的任务。为了测试 Jenkins 我会创建一个简单的任务,并用 top 命令查看服务器的负载。

在 Jenkins 管理员面板上,点击 ‘Create New Job’。

在 Jenkins 中创建新的任务

输入任务的名称,在这里我输入 ‘Checking System’,选择 Freestyle Project 然后点击 OK。

配置 Jenkins 任务

进入 Build 标签页。在 Add build step,选择选项 Execute shell。

在输入框输入下面的命令。

top -b -n 1 | head -n 5

点击 Save。

启动 Jenkins 任务

现在你是在任务 ‘Project checking system’ 的任务页。点击 Build Now 执行任务 ‘checking system’。

任务执行完成后,你会看到 Build History,点击第一个任务查看结果。

下面是 Jenkins 任务执行的结果。

构建和运行 Jenkins 任务

到这里就介绍完了在 Ubuntu 16.04 中用 Apache web 服务器安装 Jenkins 的内容。


via: https://www.howtoforge.com/tutorial/how-to-install-jenkins-with-apache-on-ubuntu-16-04/

作者:Muhammad Arul 译者:ictlyh 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出

这篇文章讲述了如何将 Ubuntu 主机加入到 Samba4 AD 域,并实现使用域帐号登录 Ubuntu 系统。

要求:

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

第一步: Ubuntu 系统加入到 Samba4 AD 之前的基本配置

1、在将 Ubuntu 主机加入到 AD DC 之前,你得先确保 Ubuntu 系统中的一些服务配置正常。

主机名是你的机器的一个重要标识。因此,在加入域前,使用 hostnamectl 命令或者通过手动编辑 /etc/hostname 文件来为 Ubuntu 主机设置一个合适的主机名。

# hostnamectl set-hostname your_machine_short_name
# cat /etc/hostname
# hostnamectl

Set System Hostname

设置系统主机名

2、在这一步中,打开并编辑网卡配置文件,为你的主机设置一个合适的 IP 地址。注意把 DNS 地址设置为你的域控制器的地址。

编辑 /etc/network/interfaces 文件,添加 dns-nameservers 参数,并设置为 AD 服务器的 IP 地址;添加 dns-search 参数,其值为域控制器的主机名,如下图所示。

并且,把上面设置的 DNS IP 地址和域名添加到 /etc/resolv.conf 配置文件中,如下图所示:

Configure Network Settings for AD

为 AD 配置网络设置

在上面的截图中, 192.168.1.254192.168.1.253 是 Samba4 AD DC 服务器的 IP 地址, Tecmint.lan 是 AD 域名,已加入到这个域中的所有机器都可以查询到该域名。

3、重启网卡服务或者重启计算机以使网卡配置生效。使用 ping 命令加上域名来检测 DNS 解析是否正常。

AD DC 应该返回的是 FQDN 。如果你的网络中配置了 DHCP 服务器来为局域网中的计算机自动分配 IP 地址,请确保你已经把 AD DC 服务器的 IP 地址添加到 DHCP 服务器的 DNS 配置中。

# systemctl restart networking.service
# ping -c2 your_domain_name

4、最后一步是配置服务器时间同步。安装 ntpdate 包,使用下面的命令来查询并同步 AD DC 服务器的时间。

$ sudo apt-get install ntpdate
$ sudo ntpdate -q your_domain_name
$ sudo ntpdate your_domain_name

Time Synchronization with AD

AD 服务器时间同步

5、下一步,在 Ubuntu 机器上执行下面的命令来安装加入域环境所必需软件。

$ sudo apt-get install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind

Install Samba4 in Ubuntu Client

在 Ubuntu 机器上安装 Samba4 软件

在 Kerberos 软件包安装的过程中,你会被询问输入默认的域名。输入大写的域名,并按 Enter 键继续安装。

Add AD Domain Name

添加 AD 域名

6、当所有的软件包安装完成之后,使用域管理员帐号来测试 Kerberos 认证,然后执行下面的命令来列出票据信息。

# kinit ad_admin_user
# klist

Check Kerberos Authentication with AD

使用 AD 来检查 Kerberos 认证是否正常

第二步:将 Ubuntu 主机添加到 Samba4 AD DC

7、将 Ubuntu 主机添加到 Samba4 活动目录域环境中的第一步是编辑 Samba 配置文件。

备份 Samba 的默认配置文件,这个配置文件是安装 Samba 软件的过程中自动生成的,使用下面的命令来重新初始化配置文件。

# mv /etc/samba/smb.conf /etc/samba/smb.conf.initial
# nano /etc/samba/smb.conf&nbsp;

在新的 Samba 配置文件中添加以下内容:

[global]
workgroup = TECMINT
realm = TECMINT.LAN
netbios name = ubuntu
security = ADS
dns forwarder = 192.168.1.1
idmap config * : backend = tdb
idmap config *:range = 50000-1000000
template homedir = /home/%D/%U
template shell = /bin/bash
winbind use default domain = true
winbind offline logon = false
winbind nss info = rfc2307
winbind enum users = yes
winbind enum groups = yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes

Configure Samba for AD

Samba 服务的 AD 环境配置

根据你本地的实际情况来替换 workgrouprealmnetbios namedns forwarder 的参数值。

由于 winbind use default domain 这个参数会让 winbind 服务把任何登录系统的帐号都当作 AD 帐号。因此,如果存在本地帐号名跟域帐号同名的情况下,请不要设置该参数。

8、现在,你应该重启 Samba 后台服务,停止并卸载一些不必要的服务,然后启用 samba 服务的 system-wide 功能,使用下面的命令来完成。

$ sudo systemctl restart smbd nmbd winbind
$ sudo systemctl stop samba-ad-dc
$ sudo systemctl enable smbd nmbd winbind

9、通过下面的命令,使用域管理员帐号来把 Ubuntu 主机加入到 Samba4 AD DC 中。

$ sudo net ads join -U ad_admin_user

Join Ubuntu to Samba4 AD DC

把 Ubuntu 主机加入到 Samba4 AD DC

10、在 安装了 RSAT 工具的 Windows 机器上 打开 AD UC ,展开到包含的计算机。你可以看到已加入域的 Ubuntu 计算机。

Confirm Ubuntu Client in Windows AD DC

确认 Ubuntu 计算机已加入到 Windows AD DC

第三步:配置 AD 帐号认证

11、为了在本地完成 AD 帐号认证,你需要修改本地机器上的一些服务和配置文件。

首先,打开并编辑名字服务切换 (NSS) 配置文件。

$ sudo nano /etc/nsswitch.conf

然后在 passwdgroup 行添加 winbind 值,如下图所示:

passwd:         compat winbind
group:          compat winbind

Configure AD Accounts Authentication

配置 AD 帐号认证

12、为了测试 Ubuntu 机器是否已加入到域中,你可以使用 wbinfo 命令来列出域帐号和组。

$ wbinfo -u
$ wbinfo -g

List AD Domain Accounts and Groups

列出域帐号和组

13、同时,使用 getent 命令加上管道符及 grep 参数来过滤指定域用户或组,以测试 Winbind nsswitch 模块是否运行正常。

$ sudo getent passwd| grep your_domain_user
$ sudo getent group|grep 'domain admins'

Check AD Domain Users and Groups

检查 AD 域用户和组

14、为了让域帐号在 Ubuntu 机器上完成认证登录,你需要使用 root 帐号运行 pam-auth-update 命令,然后勾选 winbind 服务所需的选项,以让每个域帐号首次登录时自动创建 home 目录。

查看所有的选项,按 ‘[空格]’键选中,单击 OK 以应用更改。

$ sudo pam-auth-update

Authenticate Ubuntu with Domain Accounts

使用域帐号登录 Ubuntu 主机

15、在 Debian 系统中,如果想让系统自动为登录的域帐号创建家目录,你需要手动编辑 /etc/pam.d/common-account 配置文件,并添加下面的内容。

session    required    pam_mkhomedir.so    skel=/etc/skel/    umask=0022

Authenticate Debian with Domain Accounts

使用域帐号登录 Debian 系统

16、为了让 AD 用户能够在 Linux 的命令行下修改密码,你需要打开 /etc/pam.d/common-password 配置文件,在 password 那一行删除 use_authtok 参数,如下图所示:

password       [success=1 default=ignore]      pam_winbind.so try_first_pass

Users Allowed to Change Password

允许域帐号在 Linux 命令行下修改密码

17、要使用 Samba4 AD 帐号来登录 Ubuntu 主机,在 su - 后面加上域用户名即可。你还可以通过运行 id 命令来查看 AD 帐号的其它信息。

$ su - your_ad_user

Find AD User Information

查看 AD 用户信息

使用 pwd 命令来查看域帐号的当前目录,如果你想修改域帐号的密码,你可以使用 passwd 命令来完成。

18、如果想让域帐号在 ubuntu 机器上拥有 root 权限,你可以使用下面的命令来把 AD 帐号添加到 sudo 系统组中:

$ sudo usermod -aG sudo your_domain_user

登录域帐号登录到 Ubuntu 主机,然后运行 apt-get-update 命令来更新系统,以验证域账号是否拥有 root 权限。

Add Sudo User Root Group

给域帐号添加 root 权限

19、要为整个域用户组添加 root 权限,使用 vi 命令打开并编辑 /etc/sudoers 配置文件,如下图所示,添加如下内容:

%YOUR_DOMAIN\\your_domain\  group                ALL=(ALL:ALL) ALL

Add Root Privileges to Domain Group

为域帐号组添加 root 权限

使用反斜杠来转义域用户组的名称中包含的空格,或者用来转义第一个反斜杠。在上面的例子中, TECMINT 域的域用户组的名字是 “domain admins" 。

前边的 % 表明我们指定是的用户组而不是用户名。

20、如果你使用的是图形界面的 Ubuntu 系统,并且你想使用域帐号来登录系统,你需要修改 LightDM 显示管理器,编辑 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 配置文件,添加下面的内容,然后重启系统才能生效。

greeter-show-manual-login=true
greeter-hide-users=true

现在你就可以域帐号来登录 Ubuntu 桌面系统了。使用域用户名或者域用户名@域名.tld 或者域名\域用户名的方式来登录系统。


作者简介:

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


via: http://www.tecmint.com/join-ubuntu-to-active-directory-domain-member-samba-winbind/

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

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