소규모 사무실 서버 및 UID 번역

소규모 사무실 서버 및 UID 번역

나는 사용자가 자신의 파일을 저장할 수 있고 그룹이 파일을 공유할 수 있는 별도의 디렉터리를 가질 수 있도록 사무실에 작은 서버를 설정하고 싶습니다. 또한 인터넷을 통해 설치하려는 사용자와 클라이언트도 있습니다. 또한 개별 디렉터리 액세스 및 권한을 지정할 수 있기를 원합니다. 일부는 Windoze를 사용하고 있을 수 있습니다.

처음에는 CIFS를 사용하여 LAN 설정을 시도했습니다. 서버에는 나 자신(simon)과 게스트로 만든 다른 사용자를 위해 설정된 계정이 있습니다. sysconfig-samba를 설치했습니다. 그런 다음 자격 증명에 사용되는 사용자 및 암호를 추가할 수 있는 Samba 서버 구성 도구를 사용하여 공유를 구성했습니다. /etc/samba/smb.conf는 다음과 같습니다:

# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which 
# are not shown in this example
#
# Some options that are often worth tuning have been included as
# commented-out examples in this file.
#  - When such options are commented with ";", the proposed setting
#    differs from the default Samba behaviour
#  - When commented with "#", the proposed setting is the default
#    behaviour of Samba but the option is considered important
#    enough to be mentioned here
#
# NOTE: Whenever you modify this file you should run the command
# "testparm" to check that you have not made any basic syntactic 
# errors. 

#======================= Global Settings =======================

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
    workgroup = gannet

# server string is the equivalent of the NT Description field
    server string = %h server (Samba, Ubuntu)

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable its WINS Server
#   wins support = no

# WINS Server - Tells the NMBD components of Samba to be a WINS Client
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
;   wins server = w.x.y.z

# This will prevent nmbd to search for NetBIOS names through DNS.
    dns proxy = no

#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
;   interfaces = 127.0.0.0/8 eth0

# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
;   bind interfaces only = yes



#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
    log file = /var/log/samba/log.%m

# Cap the size of the individual log files (in KiB).
    max log size = 1000

# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
#   syslog only = no

# We want Samba to log a minimum amount of information to syslog. Everything
# should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
# through syslog you should set the following parameter to something higher.
    syslog = 0

# Do something sensible when Samba crashes: mail the admin a backtrace
    panic action = /usr/share/samba/panic-action %d


####### Authentication #######

# Server role. Defines in which mode Samba will operate. Possible
# values are "standalone server", "member server", "classic primary
# domain controller", "classic backup domain controller", "active
# directory domain controller". 
#
# Most people will want "standalone sever" or "member server".
# Running as "active directory domain controller" will require first
# running "samba-tool domain provision" to wipe databases and create a
# new domain.
    server role = standalone server

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.  
;   passdb backend = tdbsam

    obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
    unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Ian Kahan <<[email protected]> for
# sending the correct chat script for the passwd program in Debian Sarge).
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
    pam password change = yes

# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
    map to guest = bad user

########## Domains ###########

#
# The following settings only takes effect if 'server role = primary
# classic domain controller', 'server role = backup domain controller'
# or 'domain logons' is set 
#

# It specifies the location of the user's
# profile directory from the client point of view) The following
# required a [profiles] share to be setup on the samba server (see
# below)
;   logon path = \\%N\profiles\%U
# Another common choice is storing the profile in the user's home directory
# (this is Samba's default)
#   logon path = \\%N\%U\profile

# The following setting only takes effect if 'domain logons' is set
# It specifies the location of a user's home directory (from the client
# point of view)
;   logon drive = H:
#   logon home = \\%N\%U

# The following setting only takes effect if 'domain logons' is set
# It specifies the script to run during logon. The script must be stored
# in the [netlogon] share
# NOTE: Must be store in 'DOS' file format convention
;   logon script = logon.cmd

# This allows Unix users to be created on the domain controller via the SAMR
# RPC pipe.  The example command creates a user account with a disabled Unix
# password; please adapt to your needs
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u

# This allows machine accounts to be created on the domain controller via the 
# SAMR RPC pipe.  
# The following assumes a "machines" group exists on the system
; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u

# This allows Unix groups to be created on the domain controller via the SAMR
# RPC pipe.  
; add group script = /usr/sbin/addgroup --force-badname %g

############ Misc ############

# Using the following line enables you to customise your configuration
# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /home/samba/etc/smb.conf.%m

# Some defaults for winbind (make sure you're not using the ranges
# for something else.)
;   idmap uid = 10000-20000
;   idmap gid = 10000-20000
;   template shell = /bin/bash

# Setup usershare options to enable non-root users to share folders
# with the net usershare command.

# Maximum number of usershare. 0 (default) means that usershare is disabled.
;   usershare max shares = 100

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
    usershare allow guests = yes
    username map = /etc/samba/smbusers
    security = user
;   encrypt passwords = yes
;   guest ok = no
;   guest account = nobody

#======================= Share Definitions =======================

# Un-comment the following (and tweak the other settings below to suit)
# to enable the default home directory shares. This will share each
# user's home directory as \\server\username
;[homes]
;   comment = Home Directories
;   browseable = no

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only "username"
# can connect to \\server\username
# This might need tweaking when using external authentication schemes
;   valid users = %S

# Un-comment the following and create the netlogon directory for Domain Logons
# (you need to configure Samba to act as a domain controller too.)
;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
;   guest ok = yes
;   read only = yes

# Un-comment the following and create the profiles directory to store
# users profiles (see the "logon path" option above)
# (you need to configure Samba to act as a domain controller too.)
# The path below should be writable by all users so that their
# profile directory may be created the first time they log on
;[profiles]
;   comment = Users profiles
;   path = /home/samba/profiles
;   guest ok = no
;   browseable = no
;   create mask = 0600
;   directory mask = 0700

[printers]
    comment = All Printers
    browseable = no
    path = /var/spool/samba
    printable = yes
;   guest ok = no
;   read only = yes
    create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[Simon]
    comment = Simon Fanshawe Personal Files
    path = /home/simon
    writeable = yes
;   browseable = yes
    valid users = simon

[Gannet]
    comment = Gannet Limited Files
    path = /home/gannet
    writeable = yes
;   browseable = yes
    valid users = simon

[Library]
    comment = Files for general access.
    path = /home/library
    writeable = yes
;   browseable = yes
    valid users = guest, simon

[Backup&Archives]
    comment = Files for general access.
    path = /home/backup&archives
    writeable = yes
;   browseable = yes
    valid users = simon

[Shared]
    comment = General drive for sharing files.
    path = /home/shared
    writeable = yes
;   browseable = yes
    guest ok = yes

클라이언트 컴퓨터에는 모든 사용자에 대해 /etc/fstab에 모든 마운트가 설정되어 있습니다. 내 호스트에서 파일은 다음과 같습니다.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=fed8d5b9-ef42-4798-a4ea-b94dc5e4c9c6 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=599e172b-03b4-473e-b61b-2a907884f830 none            swap    sw              0       0
# Samba shares added by SGF 23-06-2016.  Important that users & groups exist on the server and that UIDs are the same on server & client.
# Shared directories need to be installed in home directory on the server a well as mount points in the client.  Directory owners and
# permissions are as set up on the server which is why UIDs & GIDs need to match.
//gannet8.local/Shared  /home/simon/Shared  cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Shared  /home/visitor/Shared    cifs    auto,user,rw,credentials=/home/guest/.sysaccess
//gannet8.local/Library /home/simon/Library cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Library /home/visitor/Library   cifs    auto,user,ro,credentials=/home/guest/.sysaccess
//gannet8.local/Gannet  /home/simon/Gannet  cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Simon   /home/simon/Home    cifs    auto,user,rw,credentials=/home/simon/.sysaccess

시스템에 더 많은 사용자를 추가하고 싶었지만 대부분의 사용자가 로컬 컴퓨터에서 1000 또는 1000에 가까운 UID를 가지고 있었기 때문에 문제가 빠르게 발생했습니다. 로컬 컴퓨터의 UID를 서버의 UID로 변경하려고 해도 여전히 작동하지 않습니다. 공유 디렉터리의 파일에는 클라이언트가 설정한 소유권과 권한이 있어 다른 사람이 액세스할 수 없기 때문입니다.

UID 및 GID가 서버에 설정되지만 자체 컴퓨터에 설치할 때 사용자에게 올바르게 표시되도록(예: 1000으로 변환 등) 서버를 설정하는 쉬운 방법이 있습니까? 내가 해야 할 일은 개별 디렉터리에 대한 액세스 및 권한을 제어할 수 있도록 서버에서 인증을 완료하는 것뿐입니다. 우분투 문서에서 OpenLDAP를 보려고 했는데, 5분 뒤에 머리가 터질 것 같았습니다.

이를 수행하는 쉬운 방법이 있어야 합니다. 현재 Mint를 사용하고 있지만 적어도 서버에서는 주류 Ubuntu 버전으로 이동할 수 있습니다. 너무 복잡하지 않은 한 명령줄과 텍스트 파일을 사용하는 것이 기쁩니다. 만약 그렇다면 OpenLDAP를 계속 사용하고 싶습니다.

답변1

네트워크를 통해 서버 폴더를 클라이언트에 마운트하면 다음이 있습니다.2당신이 물어봐야 할 질문:

  • 서버의 관점에서 파일에는 어떤 UID/GID가 있어야 합니까?
  • 클라이언트의 관점에서 파일에 어떤 UID/GID가 있어야 하는지

폴더 내에서 ls -lh파일의 소유자와 그룹을 확인하기 위해 사용합니다. Linux는 가능한 경우 UID를 사용자로 변환하고, 불가능한 경우 간단히 숫자로 표시합니다.

LDAP(OpenLDAP 또는 Windows Active Directory)와 같은 일부 공유 계정 데이터베이스를 사용하고 PAM을 사용하여 Linux를 여기에 연결하지 않는 한다른 클라이언트와 서버의 사용자 데이터베이스에는 각각 고유한 사용자-비밀번호-UID 매핑( /etc/passwd파일 및 비밀번호가 포함된 섀도우)이 있습니다. 클라이언트에는 UID 1000의 사용자 "joe"가 있을 수 있고, 서버에는 UID 2000의 사용자 "joe", UID 1000의 사용자 "mary"가 있을 수 있습니다.

Samba를 사용하여 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

Unix 확장 사용.

이는 다음을 허용하는 SMB 프로토콜 확장입니다.서버는 클라이언트에게 UID를 알려줍니다.. 따라서 user=joe다음을 제공하는 서버 에 연결할 때 :

  • 자체 데이터베이스를 사용하여 joe를 UID로 변환
  • 생성된 모든 파일을 삭제하려면 이 기능을 사용하세요.
  • 해당 UID를 클라이언트에 보고하고 이를 일부 로컬 사용자에게 매핑합니다.

완벽하게 작동하지만 필요한 것은클라이언트와 서버에서 UID를 동기화하세요, 수동으로 수행하는 것은 어려울 수 있습니다(정말 필요한 경우 pam_ldap과 함께 OpenLDAP를 사용하십시오).

나는 이것이 당신의 문제라고 믿습니다!

최악의 상황은 서버가 일부 uid를 보고하고 클라이언트에 해당 uid를 가진 사용자가 없을 때 발생합니다. 따라서 사용자 이름 대신 숫자가 표시됩니다.

클라이언트가 사용할 사용자를 선택하도록 함

서버에 공유를 마운트 uid=하고 Unix 확장 설정을 비활성화하는 경우.unix extensions = nosmb.conf

  • 서버는 인증( user=자격 증명) 에서 사용자를 사용합니다.
  • 클라이언트 사용 uid=.

클라이언트와 서버에 동일한 사용자가 있을 필요도 없지만 동일하게 만드는 것이 편리합니다. 그러나 서로 다른 UIDS가 있을 수 있습니다.

따라서 새 사용자를 추가하려면 다음을 수행해야 합니다.

서버에서

  • unix extensions = no글로벌 섹션에서smb.conf
  • useradd -m joe
  • smbpasswd -a joe(비밀번호를 입력하고 기억하세요)

클라이언트에서

  • useradd -m joe && mkdir /home/joe/Home && chown joe /home/joe/Home
  • 존재하다/etc/fstab

//gannet8.local/joe /home/joe/Home cifs auto,user,rw,uid=joe,gid=joe,user=joe,password=PASS_HERE

사용자 수는 얼마든지 생성할 수 있지만 사용자가 10~15명 이상인 경우에는 OpenLDAP 또는 Active Directory(Windows 클라이언트가 많은 경우)를 고려해야 합니다.

읽다 https://www.samba.org/samba/docs/man/manpages-3/mount.cifs.8.html

특히 "파일 및 디렉터리 소유권 및 권한" 섹션

관련 정보