반응형

 

LDAP(Lightweight Directory Access Protocol)은 디렉토리 서비스를 제공하기 위한 애플리케이션 프로토콜입니다. 주로 네트워크 상에서 사용자, 그룹, 장치 등의 정보를 중앙에서 관리하고, 검색 및 수정할 수 있도록 설계되었습니다. 이를 통해 여러 시스템 간에 인증 및 권한 부여를 일관되게 수행할 수 있습니다. LDAP는 효율적인 디렉토리 데이터베이스로서, 기업 환경에서 사용자 계정 관리 및 조직의 구조화를 돕습니다.

 

 

LDAP(Lightweight Directory Access Protocol)의 여러 기능 중 하나는 사용자 계정을 구축하는 것입니다. 기본 개념은 LDAP 서버에 조직 및 사용자에 대한 구조화된 정보를 저장하고, LDAP 클라이언트에서 접속 요청이 오면 LDAP 서버에서 사용자 인증을 처리하는 것입니다. 이를 통해 여러 서버의 계정을 중앙에서 관리할 수 있습니다. LDAP 서버는 사용자의 인증, 권한 부여, 계정 정보 등의 중앙 집중화된 관리를 가능하게 합니다. 여러 서버와 애플리케이션이 LDAP 서버와 통신하여 사용자를 인증하고, 권한을 부여받으며, 필요한 계정 정보를 가져올 수 있습니다.

 

1. OpenLDAP 서버 설치

sudo apt-get install slapd ldap-utils

 

LDAP 서버로 사용할 서버에 접속해서 관련 라이브러리를 설치합니다.

 

2. OpenLDAP 서버 초기 구성

sudo dpkg-reconfigure slapd

 

 

이 명령어를 실행하면 몇 가지 설정 질문이 나타납니다:

  • DNS 도메인 이름: 예를 들어 example.com
  • 조직 이름: 예를 들어 Example Inc
  • 관리자 비밀번호 설정
  • 데이터베이스 파일을 삭제할지 여부: 기본값을 유지 (No)
  • Move old database: 기본값을 유지 (Yes)
  • 데이터베이스를 만들 수 있는 허용된 세션 수: 기본값을 유지 (No)

 

3. LDAP 디렉토리 구조 설정

LDAP 디렉토리 구조를 설정하려면 LDIF (LDAP Data Interchange Format) 파일을 사용합니다. 다음은 기본 디렉토리 구조를 설정하는 예입니다:

 

#base.ldif
# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Organization
dc: example

# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

# IT 부서 조직 단위
dn: ou=IT,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: IT

# HR 부서 조직 단위
dn: ou=HR,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: HR

# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH

 

각 항목의 설명

  1. dn (Distinguished Name):
    • LDAP 디렉토리에서 엔트리를 고유하게 식별하는 이름입니다. 디렉토리 트리의 경로를 나타냅니다.
    • 예: dn: dc=example,dc=com은 도메인 구성 요소가 example과 com인 루트 엔트리를 의미합니다.
  2. objectClass:
    • 엔트리의 유형을 정의합니다. 각 objectClass는 엔트리가 가질 수 있는 속성을 정의합니다.
    • top: 모든 LDAP 엔트리가 상속하는 최상위 클래스입니다.
    • dcObject: 도메인 구성 요소를 나타내는 클래스입니다.
    • organization: 조직을 나타내는 클래스입니다.
    • organizationalUnit: 조직 단위를 나타내는 클래스입니다.
  3. 조직 정보:
    • o: 조직의 이름을 나타냅니다.
    • dc: 도메인 구성 요소를 나타냅니다.
    • 예: o: Example Organization, dc: example
  4. 조직 단위:
    • ou: 조직 단위의 이름을 나타냅니다.
    • 예: ou: users, ou: groups

 

PASSWORD_HASH 값은 아래 명령어로 생성한 다음에 붙여넣으면 됩니다.

slappasswd

 

 

base.ldif는 조직 구조에 따라 계층적 설계도 가능합니다.

# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example org
dc: example

# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

# AI부문 조직 단위
dn: ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: AI

# AI 연구개발 부서 조직 단위
dn: ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: RnD

# AI 전략기획 부서 조직 단위
dn: ou=SnP,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: SnP

# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH

 

작성한 base.ldif 파일을 적용시킵니다.

sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f base.ldif

 

4. 사용자 및 그룹 추가

이제 새로운 사용자를 추가합니다.

#add_rnd_user.ldif
# 그룹 객체 생성
dn: cn=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: posixGroup
cn: johndoe
gidNumber: 5001

# 사용자 객체 생성
dn: uid=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: John Doe
sn: Doe
uid: johndoe
uidNumber: 10001
gidNumber: 5001
homeDirectory: /home/johndoe
loginShell: /bin/bash
userPassword: {SSHA}PASSWORD_HASH
mail: johndoe@example.com

 

ldif 파일을 ldap 서버에 적용시킵니다.

sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f add_rnd_user.ldif

 

 

 

잘 적용되었는지 확인해 봅시다.

ldapsearch -x -LLL -b "dc=example,dc=com" "(objectClass=*)"

 

 

새로운 사용자가 생길때마다 add_user를 진행하면 되고 HASH값을 받아서 직접 사용자 계정을 생성해도 되지만 기본 비밀번호로 생성하고 사용자에게 직접 변경하도록 합니다.

 

사용자가 자신의 비밀번호를 변경하려면 아래처럼 작성합니다.

ldappasswd -x -D "uid=username,ou=users,dc=example,dc=com" -W

 

 

조직의 구조를 나누고 여기에 따른 각각의 권한을 가지도록 할 수도 있습니다. (나중에 추가)


LDAP 서버에서의 설정은 끝났습니다. 이제 이 설정을 적용할 LDAP 클라이언트 서버에서 이어서 작업합니다.


 

5. LDAP 클라이언트 설정

이 설정은 모든 클라이언트에서 각각 진행합니다.

 

LDAP 클라이언트 서버에서 libnss-ldaplibpam-ldap 패키지를 설치합니다:

sudo apt-get install -y libnss-ldap libpam-ldap ldap-utils nscd

 

이후에 파일을 수정해도 되지만, 설치 과정에서 나오는 ldap 주소 등을 정확하게 입력하면 수고를 줄일 수 있습니다.

 

nscd를 데몬으로 실행합니다.

sudo systemctl enable nscd
sudo systemctl start nscd

 

환경 설정 -

클라이언트에서 처음 로그인 한다면 홈 폴더가 없기 때문에 생성하는 설정을 추가합니다. 

#/etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel umask=0077

계정이 있는지 ldap에서 확인하는 작업을 추가합니ㅏㄷ.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd ldap
group:          files systemd ldap
shadow:         files ldap
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

 

먼저 로컬 계정이 있는지 확인하고 없으면 ldap를 확인하는 설정입니다.

 

 

 

설정이 잘 적용되었다면 아래 명령어로 호스트에서 가져온 정보가 포함되어있는지 확인합니다.

getent passwd
getent group
반응형

'Computer Science > linux' 카테고리의 다른 글

Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
Docker와 MariaDB연결하기  (0) 2022.08.24
centos 8에 slurm 설치하기  (0) 2022.05.11
conda 채널 추가  (0) 2022.02.22
반응형

우선 당연하게도 https://github.com 에서 신규 가입을 해야한다.

모든 데이터를 저장/불러오기 할 때 Username과 Email이 필요하기때문에 본인임을 확인할 수 있는 계정으로 생성한다.

https://github.com

 

계정이 생성되면 저장소(repository)를 생성해야한다. 동시에 여러 개의 저장소를 만들 수 있기 때문에 규모가 크다면 프로젝트별로, 작다면 하나의 저장소 안에 폴더를 나누어 저장하는 것이 좋다.

 

Repository name이 앞으로 사용할 저장소 이름이다.

 

외부 인원이 접근하지 못하도록 Private로 설정하고 필요에 따라 README 파일 생성에 체크를 하도록 한다.

 

위와 같이 README가 포함된 저장소가 생성되었다.

 

저장소가 생성되었으니 리눅스 서버에서 스크립트를 저장하는 방법을 설명하겠다.

 

 

테스트를 위해 임의의 디렉토리 test를 생성하였다.

$ mkdir /test
$ cd /test
$ pwd
/test

 

생성된 폴더를 git 저장소로 사용하기위해 git init 명령어를 입력한다. 앞으로 해당 폴더 내에서 이뤄지는 변경사항을 저장할 수 있게 되었다. 그리고 테스트를 위한 새로운 파일 test.txt를 생성하였다.

$ git init
/test/.git/
$ touch test.txt
$ ll
total 0
-rw-r--r-- 1 root root 0 Jul 29 14:32 test.txt

 

git add test.txt는 test.txt 파일을 commit기위해 선별하는 과정이다. 저장소에 디렉토리내의 모든 파일을 저장하는 것이 아니고 선택된 파일들만 저장하기때문에 단계가 나뉘어져있다. 

 

불편해 보일 수 있지만 github의 장점이 버전관리임을 생각하면 매 번 모든 파일을 업데이트하는것은 오히려 불필요하다는 것을 알 수 있다. 물론 원한다면 -a 옵션을 사용하요 한 번에 모두 업데이트 할 수 있다.

 

git commit -m "test"는 add 명령어로 선택된 파일들을 하나의 패키지로 묶어준다. -m 은 묶음에 메모를 남기는 것이다.

$ git add test.txt
$ git commit -m "test"
[master (root-commit) 6c12673] test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
$ git status
# On branch master
nothing to commit, working directory clean

 

저장소에 대한 업데이트가 필요하다. 앞으로 사용되는 "test" 라는 변수는 아래의 주소를 가리키게 될 것이다.

저장소를 새롭게 만들때마다 아래와 같은 작업이 최소 1회 필요하다.

git remote add test https://github.com/[UserName]/test

 

업로드를 하기 전에 git pull을 먼저 해야한다. 기존 저장소의 파일과 동기화가 이루어져야 업로드 할 수 있기 때문이다.

이 과정을 무시하고 싶다면 push과정에서 -f로 강제로 업로드 하는 방법이 있지만 추천하지 않는다.

$ git pull test master
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

 

이제 test.txt파일을 포함하고있는 commit을 웹 저장소에 올려보자. git push test를하면 위에서 정의한 test 저장소에 commit을 업로드 한다.

git push test

 

test.txt파일이 업로드 된 것을 확인할 수 있다.

 

반응형

'Computer Science > linux' 카테고리의 다른 글

Jupyter notebook 설정  (0) 2020.11.03
Centos yum repo 변경  (0) 2020.08.03
Linux hosts 파일 변경  (0) 2020.07.14
hostname 변경  (0) 2020.07.14
Google Cloud SDK linux 설치  (0) 2020.05.26
반응형

/etc/hosts 파일 내에서 변경.

 

127.0.0.1 localhost.localdomain localhost 
::1 localhost6.localdomain6 localhost6 
8.8.8.8 testhost

 

파일 수정 후 곧 바로 적용된다.

 

ssh testhost 처럼 입력해도 ip 8.8.8.8 로 접속하게 된다.

반응형
반응형

zip으로 압축할 때 

경로내의 모든 하위 폴더도 압축하려면

zip -r newfile.zip /path/to/directory/

 

zip으로 압축 해제 할 때

 

원하는 파일들만 압축 해제

unzip a.zip b.zip c.zip

 

디렉토리 내의 모든 zip파일 해제

unzip '*.zip'

 

여러 파일을 압축 해제하는데 특정 폴더에 넣고 싶을 때

unzip '*.zip' -d /path/to/directory/

 

반응형
반응형

su (substitution user)는 리눅스 내에서 user를 바꾸는 명령어다.

 

su [user] 를 사용함으로 해당 유저로 변경 가능하다.

 

su는 user를 바꾸기만하고 대부분의 환경 변수는 이전 user의 것을 따라간다.

 

su-는 유저를 바꾼 후 다시 shell에 접속한다. 즉 환경변수가 새로운 user의 것으로 바뀐다.

 

번외로 su 이후에 user아이디를 입력하지 않으면 root로 접속하겠다는 의미이다.

반응형

'Computer Science > linux' 카테고리의 다른 글

Zip 압축하기 / 압축 해제하기  (0) 2020.02.24
crontab 사용하기  (0) 2020.02.21
Linux 새 디스크 연결하기  (0) 2019.08.30
Centos7 네트워크 설정  (0) 2019.08.27
도메인 이름을 IP 주소로 변환  (0) 2019.08.27
반응형

데이터 백업을 위해 외부 HDD를 연결하는데 새 HDD라면 파티션부터 다시 잡아줘야 할 필요가 있다.

 

먼저 연결이 제대로 되었는지 확인해야 한다.

 

fdisk -l


가장 마지막에 연결한 장치가 밑에 나오게 되며 대략 아래와 같은 형태를 가진다.

Disk /dev/sdb: 36002.0 GB, 36002026487808 bytes, 70316457984 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 262144 bytes / 1048576 bytes
Disk label type: gpt

해당 장치가 맞는지 용량을 보고 확인하자.

 

장치가 맞다면 파티션을 나누고 포맷을 해야한다.

 

parted /dev/sdb 

장치 명은 위에서 확인한대로 진행

 

(parted)mklabel gpt
(parted)mkpart primary 0 100%

Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?
I

파티션을 여러개로 나눠서 따로 저장할 수 있지만 데이터 백업용 디스크는 그렇게 할 필요가 없다.

 

(parted)p

제대로 진행되었는지 확인

 

(parted)q

제대로 파티션이 나누어 졌다면 종료.

 

 

mkfs.ext4 -f /dev/sdb1

ext4 포맷으로 sdb장치의 1번 파티션을 포맷한다. 

 

 

 mount /dev/sdb1 /data

sdb장치의 1번 파티션을 /data 폴더에 마운트 시킨다.

 

 

반응형

'Computer Science > linux' 카테고리의 다른 글

crontab 사용하기  (0) 2020.02.21
su 와 su- 의 차이  (1) 2019.09.19
Centos7 네트워크 설정  (0) 2019.08.27
도메인 이름을 IP 주소로 변환  (0) 2019.08.27
비밀번호 없이 ssh로 로그인하기  (0) 2019.08.26
반응형

root 권한이 필요함

 

새 서버에서 기존 파일들을 백업.

/etc/shadow

/etc/gshadow

/etc/passwd

/etc/group

 

옛날 서버에서 위으 파일들을 scp로 복사해옴.

 

계정 아이디와 비밀번호는 옛날 서버와 동일하지만 아직 홈 폴더가 존재하지 않음.

 

홈 폴더도 마찬가지로 복사해서 가져오거나 기존 파일들 백업하기 전에 미리 생성해놨다가 덮어씌워야함.

 

반응형
반응형

특정 파일이나 디렉토리를 남기고 모두 지우기



file.txt라는 이름의 파일을 남기고 나머지를 모두 지우기.


find . ! -name 'file.txt' -type f -exec rm -f {} +



디렉토리라면 type을 d로 바꾸고 rm 에 recursive 옵션을 추가하면 된다.


find . ! -name 'file.txt' -type d -exec rm -rf {} +

* 주의사항 

위의 디렉토리만 남기고 모두 지우기는 디렉토리 안의 파일도 모두 지움

디렉토리 수준에서만 적용하고 싶다면 아래처럼 사용한다


find . -maxdepth 1 ! -name 'file.txt' -type d -exec rm -rf {} +
depth제한을 둠으로써 하위 폴더로 내려가지 않고 현재 폴더에서만 적용.


여러 개의 파일을 남겨놓고 싶다면 아래처럼 추가 할 수 있다.


find . ! -name 'file.txt' ! -name 'file2.txt' -type f -exec rm -f {} +


Reference -

https://unix.stackexchange.com/questions/153862/remove-all-files-directories-except-for-one-file

반응형

'Computer Science > linux' 카테고리의 다른 글

linux 계정 정보 옮기기  (1) 2019.08.21
tar 디렉토리 지정해서 압축 풀기  (0) 2018.10.04
리눅스에서 프록시 설정하기  (0) 2018.07.26
neocomplcache vim plugin 설치하기  (0) 2018.07.12
samba 설정하기  (0) 2018.02.02
반응형

리눅스에서 프록시 설정하기




외부로 연결되는 서버 A가 있고 이 서버를 통해서 연결할 수 있는 내부만 연결이 되어 있는 서버 B에서 작업할 때 프록시 설정을 해 놓으면 A서버가 중개해서 B서버가 외부와 통신할 수 있게 된다.

B서버의 .bash_profile 안에 아래와 같이 입력하면 된다.

#proxy setting
export http_proxy=http://[ID]:[PASSWORD]@ip:port/
export https_proxy=http://[ID]:[PASSWORD]@ip:port/
export ftp_proxy=http://[ID]:[PASSWORD]@ip:port/

ID와 password가 A서버와 B서버가 동일하다면 생략해도 되며 ip와 port는 반드시 넣어주어야 한다.

port는 proxy의 기본 port number가 3128라서 따로 설정하지 않았다면 3128을 넣으면 된다.



반응형
반응형

cURL 로컬 설치하기




Julia에서 Pkg.add를 하려고 했는데 아래와 같은 에러메세지가 나타났다.


julia> Pkg.add("StatsBase")

INFO: Installing Plots v0.12.2

INFO: Building Plots

INFO: Cannot find deps/plotly-latest.min.js... downloading latest version.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0

curl: (35) SSL connect error

==================================================[ ERROR: Plots ]==================================================


LoadError: failed process: Process(`curl -L -f -o /home/kyoungwoo/.julia/v0.6/Plots/deps/plotly-latest.min.js https://cdn.plot.ly/plotly-latest.min.js`, ProcessExited(35)) [35]

while loading /home/kyoungwoo/.julia/v0.6/Plots/deps/build.jl, in expression starting on line 7


====================================================================================================================


==================================================[ BUILD ERRORS ]==================================================


WARNING: Plots had build errors.


 - packages with build errors remain installed in /home/kyoungwoo/.julia/v0.6

 - build the package(s) and all dependencies with `Pkg.build("Plots")`

 - build a single package by running its `deps/build.jl` script


====================================================================================================================

INFO: Package database updated

INFO: METADATA is out-of-date — you may not have the latest version of StatsBase

INFO: Use `Pkg.update()` to get the latest versions of your packages


curl이 제대로 자동하지 않는 것 같아 shell 화면에서 명령어만 따로 실행해 보았다..


Thu Aug 24 15:21:26 [kyoungwoo@biglab-master gtf_to_fasta]$ curl -L -f -o /home/kyoungwoo/.julia/v0.6/Plots/deps/plotly-latest.min.js https://cdn.plot.ly/plotly-latest.min.js

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

curl: (35) SSL connect error


SSL connect error 35가 나오는 것을 확인하였다.


구글링해서 문제 해결방법을 찾아보니 curl의 버전이 낮아서 최신버전을 설치하라고 해서



local로 cURL을 설치하는 법을 찾아보았다.



들어가서 다운로드 후 configure 파일을 생성하기 위해서는 ./buildconf 를 실행해 줘야 한다.


buildconf 후에 configure 파일이 만들어지면 


./configure --prefix=/PATH/TO/INSTALL/CURL

make && make install


export PATH = /PATH/TO/INSTALL/CURL/bin:$PATH

export PATH = /PATH/TO/INSTALL/CURL/lib:$PATH


끝!


Julia 명령도 정상적으로 잘 실행되는 것을 확인했다.


반응형

'Computer Science > linux' 카테고리의 다른 글

GMP 설치하기  (1) 2017.09.19
GCC 설치하기  (1) 2017.09.18
Repeatmasker 설치  (0) 2017.05.05
GBrowse2 설치하기  (0) 2017.04.25
Perl 설치 및 실행하기  (0) 2017.04.25

+ Recent posts